Overview
SAS/OR 12.1 delivers
a broad range of new capabilities and enhanced features, encompassing
optimization, constraint programming, and discrete-event simulation.
SAS/OR 12.1 enhancements significantly improve performance and expand
your tool set for building, analyzing, and solving operations research
models.
In previous years,
SAS/OR® software
was updated only with new releases of Base SAS
® software,
but this is no longer the case. This means that
SAS/OR software can
be released to customers when enhancements are ready, and the goal
is to update
SAS/OR every 12 to 18 months. To mark this newfound independence,
the release numbering scheme for
SAS/OR is changing with this release.
This new numbering scheme will be maintained when new versions of
Base SAS and
SAS/OR ship at the same time. For example, when Base
SAS 9.4 is released,
SAS/OR 13.1 will be released.
The CLP Procedure
In
SAS/OR 12.1, the
CLP procedure adds two classes of constraints that expand its capabilities
and can accelerate its solution process. The LEXICO statement imposes
a lexicographic ordering between pairs of variable lists. Lexicographic
order is essentially analogous to alphabetical order but expands the
concept to include numeric values. One vector (list) of values is
lexicographically less than another if the corresponding elements
are equal up to a certain point and immediately after that point the
next element of the first vector is numerically less than the second.
Lexicographic ordering can be useful in eliminating certain types
of symmetry that can arise among solutions to constraint satisfaction
problems (CSPs). Imposing a lexicographic ordering eliminates many
of the mutually symmetric solutions, reducing the number of permissible
solutions to the problem and in turn shortening the solution process.
Another constraint class
that is added to PROC CLP for
SAS/OR 12.1 is the bin-packing constraint,
imposed via the PACK statement. A bin-packing constraint directs that
a specified number of items must be placed into a specified number
of bins, subject to the capacities (expressed in numbers of items)
of the bins. The PACK statement provides a compact way to express
such constraints, which can often be useful components of larger CSPs
or optimization problems.
Supporting Technologies for Optimization
The underlying improvements
in optimization in
SAS/OR 12.1 are chiefly related to multithreading,
which denotes the use of multiple computational cores to enable computations
to be executed in parallel rather than serially. Multithreading can
provide dramatic performance improvements for optimization because
these underlying computations are performed many times in the course
of an optimization process.
The underlying linear
algebra operations for the linear, quadratic, and nonlinear interior
point optimization algorithms are now multithreaded. The LP, QP, and
NLP solvers can be used by PROC OPTMODEL, PROC OPTLP, and PROC OPTQP
in
SAS/OR. For nonlinear optimization with PROC OPTMODEL, the evaluation
of nonlinear functions is multithreaded for improved performance.
Finally, the process
of creating an optimization model from PROC OPTMODEL statements has
been multithreaded. PROC OPTMODEL contains powerful declarative and
programming statements and is adept at enabling data-driven definition
of optimization models, with the result that a rather small section
of PROC OPTMODEL code can create a very large optimization model when
it is executed. Multithreading can dramatically shorten the time that
is needed to create an optimization model.
In
SAS/OR 12.1 you can
use the NTHREADS= option in the PERFORMANCE statement in PROC OPTMODEL
and other
SAS/OR optimization procedures to specify the number of
cores to be used. Otherwise, SAS detects the number of cores available
and uses them.
PROC OPTMODEL: Nonlinear Optimization
The nonlinear optimization
solver that PROC OPTMODEL uses builds on the introduction of multithreading
for its two most significant improvements in
SAS/OR 12.1. First, in
addition to the nonlinear solver options ALGORITHM=ACTIVESET and ALGORITHM=INTERIORPOINT,
SAS/OR 12.1 introduces the ALGORITHM=CONCURRENT option (experimental),
with which you can invoke both the active set and interior point algorithms
for the specified problem, running in parallel on separate threads.
The solution process terminates when either of the algorithms terminates.
For repeated solves of a number of similarly structured problems or
simply for problems for which the best algorithm isn’t readily
apparent, ALGORITHM=CONCURRENT should prove useful and illuminating.
Second, multithreading
is central to the nonlinear optimization solver’s enhanced
multistart capability, which now takes advantage of multiple threads
to execute optimizations from multiple starting points in parallel.
The multistart capability is essential for problems that feature nonconvex
nonlinear functions in either or both of the objective and the constraints
because such problems might have multiple locally optimal points.
Starting optimization from several different starting points helps
to overcome this difficulty, and multithreading this process helps
to ensure that the overall optimization process runs as fast as possible.
Linear Optimization with PROC OPTMODEL and PROC OPTLP
Extensive improvements
to the primal and dual simplex linear optimization algorithms produce
better performance and better integration with the crossover algorithm,
which converts solutions that are found by the interior point algorithm
into more usable basic optimal solutions. The crossover algorithm
itself has undergone extensive enhancements that improve its speed
and stability.
Paralleling developments
in nonlinear optimization,
SAS/OR 12.1 linear optimization introduces
a concurrent algorithm, invoked with the ALGORITHM=CONCURRENT option,
in the SOLVE WITH LP statement for PROC OPTMODEL or in the PROC OPTLP
statement. The concurrent LP algorithm runs a selection of linear
optimization algorithms in parallel on different threads, with settings
to suit the problem at hand. The optimization process terminates when
the first algorithm identifies an optimal solution. As with nonlinear
optimization, the concurrent LP algorithm has the potential to produce
significant reductions in the time needed to solve challenging problems
and to provide insights that are useful when you solve a large number
of similarly structured problems.
Mixed Integer Linear Optimization with PROC OPTMODEL and PROC
OPTMILP
Mixed integer linear
optimization in
SAS/OR 12.1 builds on and extends the advances in
linear optimization. Overall, solver speed has increased by over 50%
(on a library of test problems) compared to
SAS/OR 9.3. The branch-and-bound
algorithm has approximately doubled its ability to evaluate and solve
component linear optimization problems (which are referred to as nodes
in the branch-and-bound tree). These improvements have significantly
reduced solution time for difficult problems.
The Decomposition Algorithm
The most fundamental
change to both linear and mixed integer linear optimization in
SAS/OR
12.1 is the addition of the decomposition (DECOMP) algorithm, which
is invoked with a specialized set of options in the SOLVE WITH LP
and SOLVE WITH MILP statements for PROC OPTMODEL or in the DECOMP
statement for PROC OPTLP and PROC OPTMILP. For many linear and mixed
integer linear optimization problems, most of the constraints apply
only to a small set of decision variables. Typically there are many
such sets of constraints, complemented by a small set of linking constraints
that apply to all or most of the decision variables. Optimization
problems with these characteristics are said to have a "block-angular"
structure, because it is easy to arrange the rows of the constraint
matrix so that the nonzero values, which correspond to the local sets
of constraints, appear as blocks along the main diagonal.
The DECOMP algorithm
exploits this structure, decomposing the overall optimization problem
into a set of component problems that can be solved in parallel on
separate computational threads. The algorithm repeatedly solves these
component problems and then cycles back to the overall problem to
update key information that is used the next time the component problems
are solved. This process repeats until it produces a solution to the
complete problem, with the linking constraints present. The combination
of parallelized solving of the component problems and the iterative
coordination with the solution of the overall problem can greatly
reduce solution time for problems that were formerly regarded as too
time-consuming to solve practically.
To use the DECOMP algorithm,
you must either manually or automatically identify the blocks of the
constraint matrix that correspond to component problems. The METHOD=
option controls the means by which blocks are identified. METHOD=USER
enables you to specify the blocks yourself, using the .block suffix
to declare blocks. This is by far the most common method of defining
blocks. If your problem has a significant or dominant network structure,
you can use METHOD=NETWORK to identify the blocks in the problem automatically.
Finally, if no linking constraints are present in your problem, then
METHOD=AUTO identifies the blocks automatically.
The DECOMP algorithm
uses a number of detailed options that specify how the solution processes
for the component problems and the overall problem are configured
and how they coordinate with each other. You can also specify the
number of computational threads to make available for processing component
problems and the level of detail in the information to appear in the
SAS log. Options specific to the linear and mixed integer linear solvers
that are used by the DECOMP algorithm are largely identical to those
for the respective solvers.
Setting the Cutting Plane Strategy
Cutting planes are a
major component of the mixed integer linear optimization solver, accelerating
its progress by removing fractional (not integer feasible) solutions.
SAS/OR 12.1 adds the CUTSTRATEGY= option in the PROC OPTMILP statement
and in the SOLVE WITH MILP statement for PROC OPTMODEL, enabling you
to determine the aggressiveness of your overall cutting plane strategy.
This option complements the individual cut class controls (CUTCLQUE=,
CUTGOMORY=, CUTMIR=, and so on), with which you can enable or disable
certain cut types, and the ALLCUTS= option, which enables or disables
all cutting planes. In contrast, the CUTSTRATEGY= option controls
cuts at a higher level, creating a profile for cutting plane use.
As the cut strategy becomes more aggressive, more effort is directed
toward creating cutting planes and more cutting planes are applied.
The available values of the CUTSTRATEGY= option are AUTOMATIC, BASIC,
MODERATE, and AGGRESSIVE; the default is AUTOMATIC. The precise cutting
plane strategy that corresponds to each of these settings can vary
from problem to problem, because the strategy is also tuned to suit
the problem at hand.
Conflict Search
Another means of accelerating
the solution process for mixed integer linear optimization takes information
from infeasible linear optimization problems that are encountered
during an initial exploratory phase of the branch-and-bound process.
This information is analyzed and ultimately is used to help the branch-and-bound
process avoid combinations of decision variable values that are known
to lead to infeasibility. This approach, known as conflict analysis
or conflict search, influences presolve operations on branch-and-bound
nodes, cutting planes, computation of decision variable bounds, and
branching. Although the approach is complex, its application in
SAS/OR
12.1 is straightforward. The CONFLICTSEARCH= option in the PROC OPTMILP
statement or the SOLVE WITH MILP statement in PROC OPTMODEL enables
you to specify the level of conflict search to be performed. The available
values for the CONFLICTSEARCH= option are NONE, AUTOMATIC, MODERATE,
and AGGRESSIVE. A more aggressive search strategy explores more branch-and-bound
nodes initially before the branch-and-bound algorithm is restarted
with information from infeasible nodes included. The default value
is AUTOMATIC, which enables the solver to choose the search strategy.
PROC OPTMILP: Option Tuning
The final
SAS/OR 12.1
improvement to the mixed integer linear optimization solver is option
tuning, which helps you determine the best option settings for PROC
OPTMILP. There are many options and settings available, including
controls on the presolve process, branching, heuristics, and cutting
planes. The TUNER statement enables you to investigate the effects
of the many possible combinations of option settings on solver performance
and determine which should perform best. The PROBLEMS= option enables
you to submit several problems for tuning at once. The OPTIONMODE=
option specifies the options to be tuned. OPTIONMODE=USER indicates
that you will supply a set of options and initial values via the OPTIONVALUES=
data set, OPTIONMODE=AUTO (the default) tunes a small set of predetermined
options, and OPTIONMODE=FULL tunes a much more extensive option set.
Option tuning starts
by using an initial set of option values to solve the problem. The
problem is solved repeatedly with different option values, with a
local search algorithm to guide the choices. When the tuning process
terminates, the best option values are output to a data set specified
by the SUMMARY= option. You can control the amount of time used by
this process by specifying the MAXTIME= option. You can multithread
this process by using the NTHREADS= option in the PERFORMANCE statement
for PROC OPTMILP, permitting analyses of various settings to occur
simultaneously.
PROC OPTMODEL: The SUBMIT Block
In
SAS/OR 12.1, PROC
OPTMODEL adds the ability to execute other SAS code nested inside
PROC OPTMODEL syntax. This code is executed immediately after the
preceding PROC OPTMODEL syntax and before the syntax that follows.
Thus you can use the SUBMIT block to, for example, invoke other SAS
procedures to perform analyses, to display results, or for other purposes,
as an integral part of the process of creating and solving an optimization
model with PROC OPTMODEL. This addition makes it even easier to integrate
the operation of PROC OPTMODEL with other SAS capabilities.
To create a SUBMIT block,
use a SUBMIT statement (which must appear on a line by itself) followed
by the SAS code to be executed, and terminate the SUBMIT block with
an ENDSUBMIT statement (which also must appear on a line by itself).
The SUBMIT statement enables you to pass PROC OPTMODEL parameters,
constants, and evaluated expressions to the SAS code as macro variables.
Network Optimization with PROC OPTNET
PROC OPTNET, new in
SAS/OR 12.1, provides several algorithms for investigating the characteristics
of networks and solving network-oriented optimization problems. A
network, sometimes referred to as a graph, consists of a set of nodes
that are connected by a set of arcs, edges, or links. There are many
applications of network structures in real-world problems, including
supply chain analysis, communications, transportation, and utilities
problems. PROC OPTNET addresses the following classes of network problems:
-
-
-
-
-
-
minimum-cost network flow
-
-
-
-
-
PROC OPTNET syntax provides
a dedicated statement for each problem class in the preceding list.
The formats of PROC
OPTNET input data sets are designed to fit network-structured data,
easing the process of specifying network-oriented problems. The underlying
algorithms are highly efficient and can successfully address problems
of varying levels of detail and scale. PROC OPTNET is a logical destination
for users who are migrating from some of the legacy optimization procedures
in
SAS/OR. Former users of PROC NETFLOW can turn to PROC OPTNET to
solve shortest-path and minimum-cost network flow problems, and former
users of PROC ASSIGN can instead use the LINEAR_ASSIGNMENT statement
in PROC OPTNET to solve assignment problems.
SAS Simulation Studio 12.1
SAS Simulation Studio
12.1, a component of
SAS/OR 12.1 for Windows environments, adds several
features that improve your ability to build, explore, and work with
large, complex discrete-event simulation models. Large models present
a number of challenges to a graphical user interface such as that
of SAS Simulation Studio. Connection of model components, navigation
within a model, identification of objects or areas of interest, and
management of different levels of modeling are all tasks that can
become more difficult as the model size grows significantly beyond
what can be displayed on one screen. An indirect effect of model growth
is an increased number of factors and responses that are needed to
parameterize and investigate the performance of the system being modeled.
Improvements in SAS
Simulation Studio 12.1 address each of these issues. In SAS Simulation
Studio, you connect blocks by dragging the cursor to create links
between output and input ports on regular blocks and Connector blocks.
SAS Simulation Studio 12.1 automatically scrolls the display of the
Model window as you drag the link that is being created from its origin
to its destination, thus enabling you to create a link between two
blocks that are located far apart (additionally you can connect any
two blocks by clicking on the OutEntity port of the first block and
then clicking on the InEntity port of the second block). Automatic
scrolling also enables you to navigate a large model more easily.
To move to a new area in the Model window, you can simply hold down
the left mouse button and drag the visible region of the model to
the desired area. This works for simple navigation and for moving
a block to a new, remote location in the model.
SAS Simulation Studio
12.1 also enables you to search among the blocks in a model and identify
the blocks that have a specified type, a certain character string
in their label, or both. From the listing of identified blocks, you
can open the Properties dialog box for each identified block and edit
its settings. Thus, if you can identify a set of blocks that need
similar updates, then you can make these updates without manually
searching through the model for qualifying blocks and editing them
individually. For very large models, this capability not only makes
the update process easier but also makes it more thorough because
you can identify qualifying blocks centrally.
When you design experiments
for large simulation models, you often need a large number of factors
to parameterize the model and a large number of responses to track
system performance in sufficient detail. This was a challenge prior
to SAS Simulation Studio 12.1 because the Experiment window displayed
factors and responses in the header row of a table, with design points
and their replications’ results displayed in the rows below.
A very large number of factors and responses did not fit on one screen
in this display scheme, and you had to scroll across the Experiment
window to view all of them.
SAS Simulation Studio
12.1 provides you with two alternative configurations for the Experiment
window. The Design Matrix tab presents the tabular layout described
earlier. The Design Point tab presents each design point in its own
display. Factors and responses (summarized over replications) are
displayed in separate tables, each with the factor or response names
appearing in one column and the respective values in a second column.
This layout enables a large number of factors and responses to be
displayed. Response values for each replication of the design point
can be displayed in a separate window.
SAS Simulation Studio
12.1 enhances its multilevel model management features by introducing
the submodel component (experimental). Like the compound block, the
submodel encapsulates a group of SAS Simulation Studio blocks and
their connections, but the submodel outpaces the compound block in
some important ways. The submodel, when expanded, opens in its own
window. This means a submodel in its collapsed form can be placed
close to other blocks in the Model window without requiring space
for its expanded form (as is needed for compound blocks). The most
important property of the submodel is its ability to be copied and
instantiated in several locations simultaneously, whether in the same
model, in different models in the same project, or in different projects.
Each such instance is a direct reference to the original submodel,
not a disconnected copy. Thus you can edit the submodel by editing
any of its instances; changes that are made to any instance are propagated
to all current and future instances of the submodel. This feature
enables you to maintain consistency across your models and projects.
Finally, SAS Simulation
Studio 12.1 introduces powerful new animation controls that should
prove highly useful in debugging simulation models. In the past, animation
could be switched on or off and its speed controlled, but these choices
were made for the entire model. If you needed to animate a particular
segment of the model, perhaps during a specific time span for the
simulation clock, you had to focus your attention on that area and
pay special attention when the time period of interest arrived. In
SAS Simulation Studio 12.1 you can select both the area of the model
to animate (by selecting a block or a compound block) and the time
period over which animation should occur (by specifying the start
and end times for animation). You can also control simulation speed
for each such selection. Multiple selections are supported so that
you can choose to animate several areas of the model, each during
its defined time period and at its chosen speed.