Network Optimization Action Set: Syntax

Provides actions for combinatorial and network flow optimization

vrp Action

Solves the vehicle routing problem.

CASL Syntax

optNetwork.vrp <result=results> <status=rc> /
absObjGap=double,
capacity=double,
cutoff=double,
depot="string" | double,
deterministic=TRUE | FALSE,
display={
caseSensitive=TRUE | FALSE,
exclude=TRUE | FALSE,
excludeAll=TRUE | FALSE,
keyIsPath=TRUE | FALSE,
names={"string-1" <, "string-2", ...>},
pathType="LABEL" | "NAME",
traceNames=TRUE | FALSE
},
distributed=TRUE | FALSE,
graph=integer,
indexOffset=integer,
links={
caslib="string",
computedOnDemand=TRUE | FALSE,
computedVars={{
format="string",
formattedLength=integer,
label="string",
required parameter name="variable-name",
nfd=integer,
nfl=integer
}, {...}},
dataSourceOptions={key-1=any-list-or-data-type-1 <, key-2=any-list-or-data-type-2, ...>},
groupBy={{
format="string",
formattedLength=integer,
label="string",
required parameter name="variable-name",
nfd=integer,
nfl=integer
}, {...}},
importOptions={fileType="ANY" | "AUDIO" | "AUTO" | "BASESAS" | "CSV" | "DELIMITED" | "DOCUMENT" | "DTA" | "ESP" | "EXCEL" | "FMT" | "HDAT" | "IMAGE" | "JMP" | "LASR" | "PARQUET" | "SOUND" | "SPSS" | "VIDEO" | "XLS", fileType-specific-parameters},
required parameter name="table-name",
vars={{
format="string",
formattedLength=integer,
label="string",
required parameter name="variable-name",
nfd=integer,
nfl=integer
}, {...}},
where="where-expression",
whereTable={
casLib="string"
importOptions={fileType="ANY" | "AUDIO" | "AUTO" | "BASESAS" | "CSV" | "DELIMITED" | "DOCUMENT" | "DTA" | "ESP" | "EXCEL" | "FMT" | "HDAT" | "IMAGE" | "JMP" | "LASR" | "PARQUET" | "SOUND" | "SPSS" | "VIDEO" | "XLS", fileType-specific-parameters}
required parameter name="table-name"
vars={{
format="string",
formattedLength=integer,
label="string",
required parameter name="variable-name",
nfd=integer,
nfl=integer
}, {...}}
where="where-expression"
}
},
linksVar={
auxWeight="variable-name",
from="variable-name",
lower="variable-name",
to="variable-name",
upper="variable-name",
vars={"variable-name-1" <, "variable-name-2", ...>},
varsOut={"variable-name-1" <, "variable-name-2", ...>},
weight="variable-name"
},
logFreq=integer,
logFreqTime=integer,
maxNodes=integer,
maxRoutes=integer,
maxSols=integer,
maxTime=double,
milp=TRUE | FALSE,
minRoutes=integer,
multiLinks=TRUE | FALSE,
nodes={
caslib="string",
computedOnDemand=TRUE | FALSE,
computedVars={{
format="string",
formattedLength=integer,
label="string",
required parameter name="variable-name",
nfd=integer,
nfl=integer
}, {...}},
dataSourceOptions={key-1=any-list-or-data-type-1 <, key-2=any-list-or-data-type-2, ...>},
importOptions={fileType="ANY" | "AUDIO" | "AUTO" | "BASESAS" | "CSV" | "DELIMITED" | "DOCUMENT" | "DTA" | "ESP" | "EXCEL" | "FMT" | "HDAT" | "IMAGE" | "JMP" | "LASR" | "PARQUET" | "SOUND" | "SPSS" | "VIDEO" | "XLS", fileType-specific-parameters},
required parameter name="table-name",
vars={{
format="string",
formattedLength=integer,
label="string",
required parameter name="variable-name",
nfd=integer,
nfl=integer
}, {...}},
where="where-expression",
whereTable={
casLib="string"
importOptions={fileType="ANY" | "AUDIO" | "AUTO" | "BASESAS" | "CSV" | "DELIMITED" | "DOCUMENT" | "DTA" | "ESP" | "EXCEL" | "FMT" | "HDAT" | "IMAGE" | "JMP" | "LASR" | "PARQUET" | "SOUND" | "SPSS" | "VIDEO" | "XLS", fileType-specific-parameters}
required parameter name="table-name"
vars={{
format="string",
formattedLength=integer,
label="string",
required parameter name="variable-name",
nfd=integer,
nfl=integer
}, {...}}
where="where-expression"
}
},
nodesVar={
lower="variable-name",
node="variable-name",
upper="variable-name",
vars={"variable-name-1" <, "variable-name-2", ...>},
varsOut={"variable-name-1" <, "variable-name-2", ...>},
weight="variable-name"
},
nThreads=integer,
out={
caslib="string",
compress=TRUE | FALSE,
indexVars={"variable-name-1" <, "variable-name-2", ...>},
label="string",
lifetime=64-bit-integer,
maxMemSize=64-bit-integer,
memoryFormat="DVR" | "INHERIT" | "STANDARD",
name="table-name",
onDemand=TRUE | FALSE,
promote=TRUE | FALSE,
replace=TRUE | FALSE,
replication=integer,
threadBlockSize=64-bit-integer,
timeStamp="string",
where={"string-1" <, "string-2", ...>}
},
outGraphList={
caslib="string",
compress=TRUE | FALSE,
indexVars={"variable-name-1" <, "variable-name-2", ...>},
label="string",
lifetime=64-bit-integer,
maxMemSize=64-bit-integer,
memoryFormat="DVR" | "INHERIT" | "STANDARD",
name="table-name",
onDemand=TRUE | FALSE,
promote=TRUE | FALSE,
replace=TRUE | FALSE,
replication=integer,
threadBlockSize=64-bit-integer,
timeStamp="string",
where={"string-1" <, "string-2", ...>}
},
outLinks={
caslib="string",
compress=TRUE | FALSE,
indexVars={"variable-name-1" <, "variable-name-2", ...>},
label="string",
lifetime=64-bit-integer,
maxMemSize=64-bit-integer,
memoryFormat="DVR" | "INHERIT" | "STANDARD",
name="table-name",
onDemand=TRUE | FALSE,
promote=TRUE | FALSE,
replace=TRUE | FALSE,
replication=integer,
threadBlockSize=64-bit-integer,
timeStamp="string",
where={"string-1" <, "string-2", ...>}
},
outNodes={
caslib="string",
compress=TRUE | FALSE,
indexVars={"variable-name-1" <, "variable-name-2", ...>},
label="string",
lifetime=64-bit-integer,
maxMemSize=64-bit-integer,
memoryFormat="DVR" | "INHERIT" | "STANDARD",
name="table-name",
onDemand=TRUE | FALSE,
promote=TRUE | FALSE,
replace=TRUE | FALSE,
replication=integer,
threadBlockSize=64-bit-integer,
timeStamp="string",
where={"string-1" <, "string-2", ...>}
},
outputTables={
groupByVarsRaw=TRUE | FALSE,
includeAll=TRUE | FALSE,
names={"string-1" <, "string-2", ...>} | {key-1={casouttable-1} <, key-2={casouttable-2}, ...>},
repeated=TRUE | FALSE,
replace=TRUE | FALSE
},
relObjGap=double,
selfLinks=TRUE | FALSE,
standardizedLabels=TRUE | FALSE,
standardizedLabelsOut=TRUE | FALSE,
target=double,
;

Summary: Input and Output Tables

If a row includes a subparameter, you can specify the name, caslib, and so on in the subparameter. Otherwise, you can specify the name, caslib, and so on in the parameter.

Parameters for Reading Input Tables

Parameter

Subparameter

Description

 links

—

specifies the input data table that contains the graph link information.

 nodes

—

specifies the input data table that contains the graph node information.

Parameters for Creating Output Tables

Parameter

Subparameter

Description

 out

—

specifies the output data table for the vehicle routing problem.

 outGraphList

—

specifies the output data table to contain summary information about in-memory graphs.

 outLinks

—

specifies the output data table to contain the graph link information along with any results from the algorithms that calculate metrics on links.

 outNodes

—

specifies the output data table to contain the graph node information along with any results from the algorithms that calculate metrics on nodes.

 outputTables

names

lists the names of results tables to save as CAS tables on the server.

Parameter Descriptions

absObjGap=double

specifies a stopping criterion. When the absolute difference between the best integer objective and the objective of the best remaining branch-and-bound node becomes less than this value, the solver stops.

AliasabsoluteObjectiveGap
Default1E-06
Minimum value0

capacity=double

specifies the capacity of each vehicle. The capacity is the maximum amount of goods that a vehicle can pick up from the depot to be delivered to customers. The default is the largest number that can be represented by a double.

Minimum value (exclusive)0

cutoff=double

cuts off any branch-and-bound nodes in a minimization problem that has an objective value at or above this value. The default is the largest number that can be represented by a double.

cutStrategy="AGGRESSIVE" | "AUTOMATIC" | "MODERATE" | "NONE"

specifies the level of mixed integer linear programming cutting planes to be generated. Cutting planes that are specific to the vehicle routing problem (VRP) are always generated.

DefaultAUTOMATIC
AGGRESSIVE

uses an aggressive cut strategy.

AUTOMATIC

generates cutting planes on the basis of a strategy that the action determines.

MODERATE

uses a moderate cut strategy.

NONE

disables the generation of mixed integer linear programming cutting planes (some problem-specific cutting planes are still active for validity)

depot="string" | double

specifies the depot node for the vehicle routing problem. The centralized depot is the source of goods to be delivered to customers (nodes). You must specify this parameter.

deterministic=TRUE | FALSE

when set to True, ensures that each invocation (with the same machine configuration and parameter settings) produces the same final result.

DefaultTRUE

direction="DIRECTED" | "UNDIRECTED"

specifies whether to consider the input graph as directed or undirected.

DefaultUNDIRECTED
DIRECTED

considers the input graph to be directed. In a directed graph, each link (i,j) has a direction that defines how something (such as information) can flow over that link. In link (i,j), the flow is from node i to node j. Node i is called the source (tail) node, and node j is called the sink (head) node.

UNDIRECTED

considers the input graph to be undirected. In an undirected graph, each link {i,j} has no direction, and the flow can be in either direction. That is, {i,j} = {j,i}.

display={displayTables}

specifies a list of results tables to send to the client for display.

For more information about specifying the display parameter, see the common displayTables parameter (Appendix A: Common Parameters).

distributed=TRUE | FALSE

when set to True, uses a distributed graph.

DefaultFALSE

graph=integer

specifies the in-memory graph to use.

Default-1

heuristics="AGGRESSIVE" | "AUTOMATIC" | "BASIC" | "MODERATE" | "NONE"

determines how frequently the algorithm applies primal heuristics during the branch-and-bound tree search and affects the maximum number of iterations that are allowed in iterative heuristics. Some computationally expensive heuristics might be disabled by the solver at less aggressive levels.

DefaultAUTOMATIC
AGGRESSIVE

applies all primal heuristics at high frequency.

AUTOMATIC

applies the default level of heuristics.

BASIC

applies basic primal heuristics at low frequency.

MODERATE

applies most primal heuristics at moderate frequency.

NONE

disables all primal heuristics.

indexOffset=integer

specifies the index offset for identifiers in the log and results output data tables. For example, if three entities are found, they are labeled entity 0, 1, and 2 by default. If the value of indexOffset is 4, the entities are labeled entity 4, 5, and 6.

Default0
Minimum value0

specifies the input data table that contains the graph link information.

Long formlinks={name="table-name"}
Shortcut formlinks="table-name"

The castable value can be one or more of the following:

specifies the caslib for the input table that you want to use with the action. By default, the active caslib is used. Specify a value only if you need to access a table from a different caslib.

when set to True, creates the computed variables when the table is loaded instead of when the action begins.

AliascompOnDemand
DefaultFALSE

specifies the names of the computed variables to create. Specify an expression for each variable in the computedVarsProgram parameter. If you do not specify this parameter, then all variables from computedVarsProgram are automatically included.

AliascompVars

The casinvardesc value can be one or more of the following:

specifies the format to apply to the variable.

specifies the length of format field plus the length of the format precision.

specifies the descriptive label for the variable.

specifies the name for the variable.

specifies the length of the format precision.

specifies the length of the format field.

specifies an expression for each computed variable that you include in the computedVars parameter.

AliascompPgm

specifies data source options.

Aliasesoptions
dataSource

specifies the names of the variables to use for grouping results.

The casinvardesc value can be one or more of the following:

specifies the format to apply to the variable.

specifies the length of format field plus the length of the format precision.

specifies the descriptive label for the variable.

specifies the name for the variable.

specifies the length of the format precision.

specifies the length of the format field.

specifies the settings for reading a table from a data source.

Aliasimport

For more information about specifying the importOptions parameter, see the common importOptions parameter (Appendix A: Common Parameters).

specifies the name of the input table.

specifies the variables to use in the action.

The casinvardesc value can be one or more of the following:

specifies the format to apply to the variable.

specifies the length of format field plus the length of the format precision.

specifies the descriptive label for the variable.

specifies the name for the variable.

specifies the length of the format precision.

specifies the length of the format field.

specifies an expression for subsetting the input data.

specifies an input table that contains rows to use as a WHERE filter. If the vars parameter is not specified, then all the variable names that are common to the input table and the filtering table are used to find matching rows. If the where parameter for the input table and this parameter are specified, then this filtering table is applied first.

The groupbytable value can be one or more of the following:

specifies the caslib for the filter table. By default, the active caslib is used.

specifies the settings for reading a table from a data source.

Aliasimport

For more information about specifying the importOptions parameter, see the common importOptions parameter (Appendix A: Common Parameters).

specifies the name of the filter table.

specifies the variable names to use from the filter table.

The casinvardesc value can be one or more of the following:

specifies the format to apply to the variable.

specifies the length of format field plus the length of the format precision.

specifies the descriptive label for the variable.

specifies the name for the variable.

specifies the length of the format precision.

specifies the length of the format field.

specifies an expression for subsetting the data from the filter table.

linksVar={linksVarOpt}

specifies the data variable names for the links table.

For more information about specifying the linksVar parameter, see the common linksVarOpt parameter (Appendix A: Common Parameters).

logFreq=integer

specifies the time interval, n (in seconds), for printing information in the node log. If n = 0, then the node log is disabled. If n > 0, then the root node processing information is printed and, if possible, an entry is made every n seconds. An entry is also made each time a better integer solution is found.

AliaslogFrequency
Default5
Minimum value0

logFreqTime=integer

controls the frequency n (in seconds) for displaying iteration logs for some algorithms, where n can be any integer greater than or equal to 1. This parameter is useful for computationally intensive algorithms. Setting n too low can hurt algorithm performance.

AliaslogFrequencyTime
Default5
Minimum value1

logLevel="AGGRESSIVE" | "BASIC" | "MODERATE" | "NONE"

controls the amount of information that is displayed in the SAS log.

DefaultBASIC
AGGRESSIVE

displays a more detailed summary of the input, output, and algorithmic processing.

BASIC

displays a brief summary of the algorithmic processing.

MODERATE

displays a moderately detailed summary of the input, output, and algorithmic processing.

NONE

turns off all action-related messages in the SAS log.

maxNodes=integer

specifies the maximum number of branch-and-bound nodes to be processed. The default is the largest number that can be represented by a 32-bit integer.

Minimum value0

maxRoutes=integer

specifies the maximum number of routes allowed to service demand. The specified value must be a 32-bit integer greater than or equal to 1. The default is the largest number that can be represented by a 32-bit integer.

Minimum value1

maxSols=integer

specifies a stopping criterion. If the number of solutions that are found is greater than or equal to this value, then the algorithm stops. The default is the largest number that can be represented by a 32-bit integer.

Minimum value1

maxTime=double

specifies the maximum amount of time for the algorithm to spend. The default is the largest number that can be represented by a double.

Minimum value (exclusive)0

milp=TRUE | FALSE

when set to True, uses a mixed integer linear programming (MILP) solver to solve the vehicle routing problem (VRP). The MILP solver attempts to find the overall best routes by using a branch-and-cut algorithm. This algorithm can be expensive for large-scale problems. If this value is False, the algorithm uses its initial heuristics to find a feasible, but not necessarily optimal, tour as quickly as possible.

DefaultTRUE

minRoutes=integer

specifies the minimum number of routes allowed to service demand. The specified value must be a 32-bit integer greater than or equal to 1.

Default1
Minimum value1

when set to True, includes multilinks when an input graph is read. By default, the value of this parameter is True for algorithms that support multilinks.

nodes={castable}

specifies the input data table that contains the graph node information.

Long formnodes={name="table-name"}
Shortcut formnodes="table-name"

The castable value can be one or more of the following:

caslib="string"

specifies the caslib for the input table that you want to use with the action. By default, the active caslib is used. Specify a value only if you need to access a table from a different caslib.

computedOnDemand=TRUE | FALSE

when set to True, creates the computed variables when the table is loaded instead of when the action begins.

AliascompOnDemand
DefaultFALSE
computedVars={{casinvardesc-1} <, {casinvardesc-2}, ...>}

specifies the names of the computed variables to create. Specify an expression for each variable in the computedVarsProgram parameter. If you do not specify this parameter, then all variables from computedVarsProgram are automatically included.

AliascompVars

The casinvardesc value can be one or more of the following:

format="string"

specifies the format to apply to the variable.

formattedLength=integer

specifies the length of format field plus the length of the format precision.

label="string"

specifies the descriptive label for the variable.

* name="variable-name"

specifies the name for the variable.

nfd=integer

specifies the length of the format precision.

nfl=integer

specifies the length of the format field.

computedVarsProgram="string"

specifies an expression for each computed variable that you include in the computedVars parameter.

AliascompPgm
dataSourceOptions={key-1=any-list-or-data-type-1 <, key-2=any-list-or-data-type-2, ...>}

specifies data source options.

Aliasesoptions
dataSource
importOptions={fileType="ANY" | "AUDIO" | "AUTO" | "BASESAS" | "CSV" | "DOCUMENT" | "DTA" | "ESP" | "EXCEL" | "FMT" | "HDAT" | "IMAGE" | "JMP" | "LASR" | "PARQUET" | "SPSS" | "VIDEO" | "XLS", fileType-specific-parameters}

specifies the settings for reading a table from a data source.

Aliasimport

For more information about specifying the importOptions parameter, see the common importOptions parameter (Appendix A: Common Parameters).

* name="table-name"

specifies the name of the input table.

vars={{casinvardesc-1} <, {casinvardesc-2}, ...>}

specifies the variables to use in the action.

The casinvardesc value can be one or more of the following:

format="string"

specifies the format to apply to the variable.

formattedLength=integer

specifies the length of format field plus the length of the format precision.

label="string"

specifies the descriptive label for the variable.

* name="variable-name"

specifies the name for the variable.

nfd=integer

specifies the length of the format precision.

nfl=integer

specifies the length of the format field.

where="where-expression"

specifies an expression for subsetting the input data.

whereTable={groupbytable}

specifies an input table that contains rows to use as a WHERE filter. If the vars parameter is not specified, then all the variable names that are common to the input table and the filtering table are used to find matching rows. If the where parameter for the input table and this parameter are specified, then this filtering table is applied first.

The groupbytable value can be one or more of the following:

casLib="string"

specifies the caslib for the filter table. By default, the active caslib is used.

importOptions={fileType="ANY" | "AUDIO" | "AUTO" | "BASESAS" | "CSV" | "DOCUMENT" | "DTA" | "ESP" | "EXCEL" | "FMT" | "HDAT" | "IMAGE" | "JMP" | "LASR" | "PARQUET" | "SPSS" | "VIDEO" | "XLS", fileType-specific-parameters}

specifies the settings for reading a table from a data source.

Aliasimport

For more information about specifying the importOptions parameter, see the common importOptions parameter (Appendix A: Common Parameters).

* name="table-name"

specifies the name of the filter table.

vars={{casinvardesc-1} <, {casinvardesc-2}, ...>}

specifies the variable names to use from the filter table.

The casinvardesc value can be one or more of the following:

format="string"

specifies the format to apply to the variable.

formattedLength=integer

specifies the length of format field plus the length of the format precision.

label="string"

specifies the descriptive label for the variable.

* name="variable-name"

specifies the name for the variable.

nfd=integer

specifies the length of the format precision.

nfl=integer

specifies the length of the format field.

where="where-expression"

specifies an expression for subsetting the data from the filter table.

nodesVar={nodesVarOpt}

specifies the data variable names for the nodes table.

For more information about specifying the nodesVar parameter, see the common nodesVarOpt parameter (Appendix A: Common Parameters).

nThreads=integer

specifies the maximum number of threads to use for multithreaded processing.

Range1–1024

out={casouttable}

specifies the output data table for the vehicle routing problem.

For more information about specifying the out parameter, see the common casouttable parameter (Appendix A: Common Parameters).

outGraphList={casouttable}

specifies the output data table to contain summary information about in-memory graphs.

For more information about specifying the outGraphList parameter, see the common casouttable parameter (Appendix A: Common Parameters).

specifies the output data table to contain the graph link information along with any results from the algorithms that calculate metrics on links.

For more information about specifying the outLinks parameter, see the common casouttable parameter (Appendix A: Common Parameters).

outNodes={casouttable}

specifies the output data table to contain the graph node information along with any results from the algorithms that calculate metrics on nodes.

For more information about specifying the outNodes parameter, see the common casouttable parameter (Appendix A: Common Parameters).

outputTables={outputTables}

lists the names of results tables to save as CAS tables on the server.

For more information about specifying the outputTables parameter, see the common outputTables parameter (Appendix A: Common Parameters).

AliasdisplayOut

relObjGap=double

specifies a stopping criterion that is based on the best integer objective and the objective of the best remaining node.

AliasrelativeObjectiveGap
Default0.0001
Minimum value0

when set to True, includes self-links when an input graph is read.

DefaultTRUE

standardizedLabels=TRUE | FALSE

when set to True, specifies that the input graph data are in a standardized format.

DefaultFALSE

standardizedLabelsOut=TRUE | FALSE

when set to True, requests that the output graph data include standardized format.

DefaultFALSE

target=double

specifies a stopping criterion for minimization problems. If the best integer objective is less than or equal to this value, the solver stops. The default is the largest (in magnitude) negative number that can be represented by a double.

timeType="CPU" | "REAL"

specifies whether to use CPU time or real time for the maximum time limit.

DefaultREAL
CPU

specifies units of CPU time. The time restriction is applied per processing machine (not across all machines).

REAL

specifies units of real time.

Result Descriptions

ProblemSummary

contains a basic summary of the graph input. The result is a table. You can access the value from results.ProblemSummary.

SolutionSummary

contains a basic solution summary for the algorithm. The result is a table. You can access the value from results.SolutionSummary.

absObjGap

indicates the absolute gap between the best integer objective and the objective of the best remaining node upon termination of the solver. The result is a double. You can access the value from results.absObjGap.

bestBound

indicates the best linear programming objective value of all unprocessed nodes in the branch-and-bound tree at the end of execution. The result is a double. You can access the value from results.bestBound.

boundInf

indicates the maximum (absolute) violation by the solution of the lower or upper bounds (or both). The result is a double. You can access the value from results.boundInf.

integerInf

indicates the maximum (absolute) violation of the integrality of integer variables that are returned by the solver. The result is a double. You can access the value from results.integerInf.

numIterations

indicates the number of simplex iterations taken to solve the problem. The result is an integer. You can access the value from results.numIterations.

numNodes

specifies the number of nodes enumerated by the solver by using the branch-and-bound algorithm. The result is an integer. You can access the value from results.numNodes.

numSolutions

indicates the number of feasible solutions found. The result is an integer. You can access the value from results.numSolutions.

objective

indicates the objective value that the solver obtains at termination. The result is a double. You can access the value from results.objective.

primalInf

indicates the maximum (absolute) violation of the primal constraints by the solution. The result is a double. You can access the value from results.primalInf.

relObjGap

indicates the relative gap between the best integer objective and the objective of the best remaining node upon termination of the solver. The result is a double. You can access the value from results.relObjGap.

solutionStatus

indicates the solution status of the selected problem type (algorithm class). The result is a string. You can access the value from results.solutionStatus.

vrp Action

Solves the vehicle routing problem.

Lua Syntax

results, info = s:optNetwork_vrp{
absObjGap=double,
capacity=double,
cutoff=double,
depot="string" | double,
deterministic=true | false,
display={
caseSensitive=true | false,
exclude=true | false,
excludeAll=true | false,
keyIsPath=true | false,
names={"string-1" <, "string-2", ...>},
pathType="LABEL" | "NAME",
traceNames=true | false
},
distributed=true | false,
graph=integer,
indexOffset=integer,
links={
caslib="string",
computedOnDemand=true | false,
computedVars={{
format="string",
formattedLength=integer,
label="string",
required parameter name="variable-name",
nfd=integer,
nfl=integer
}, {...}},
dataSourceOptions={key-1=any-list-or-data-type-1 <, key-2=any-list-or-data-type-2, ...>},
groupBy={{
format="string",
formattedLength=integer,
label="string",
required parameter name="variable-name",
nfd=integer,
nfl=integer
}, {...}},
importOptions={fileType="ANY" | "AUDIO" | "AUTO" | "BASESAS" | "CSV" | "DELIMITED" | "DOCUMENT" | "DTA" | "ESP" | "EXCEL" | "FMT" | "HDAT" | "IMAGE" | "JMP" | "LASR" | "PARQUET" | "SOUND" | "SPSS" | "VIDEO" | "XLS", fileType-specific-parameters},
required parameter name="table-name",
vars={{
format="string",
formattedLength=integer,
label="string",
required parameter name="variable-name",
nfd=integer,
nfl=integer
}, {...}},
where="where-expression",
whereTable={
casLib="string"
importOptions={fileType="ANY" | "AUDIO" | "AUTO" | "BASESAS" | "CSV" | "DELIMITED" | "DOCUMENT" | "DTA" | "ESP" | "EXCEL" | "FMT" | "HDAT" | "IMAGE" | "JMP" | "LASR" | "PARQUET" | "SOUND" | "SPSS" | "VIDEO" | "XLS", fileType-specific-parameters}
required parameter name="table-name"
vars={{
format="string",
formattedLength=integer,
label="string",
required parameter name="variable-name",
nfd=integer,
nfl=integer
}, {...}}
where="where-expression"
}
},
linksVar={
auxWeight="variable-name",
from="variable-name",
lower="variable-name",
to="variable-name",
upper="variable-name",
vars={"variable-name-1" <, "variable-name-2", ...>},
varsOut={"variable-name-1" <, "variable-name-2", ...>},
weight="variable-name"
},
logFreq=integer,
logFreqTime=integer,
maxNodes=integer,
maxRoutes=integer,
maxSols=integer,
maxTime=double,
milp=true | false,
minRoutes=integer,
multiLinks=true | false,
nodes={
caslib="string",
computedOnDemand=true | false,
computedVars={{
format="string",
formattedLength=integer,
label="string",
required parameter name="variable-name",
nfd=integer,
nfl=integer
}, {...}},
dataSourceOptions={key-1=any-list-or-data-type-1 <, key-2=any-list-or-data-type-2, ...>},
importOptions={fileType="ANY" | "AUDIO" | "AUTO" | "BASESAS" | "CSV" | "DELIMITED" | "DOCUMENT" | "DTA" | "ESP" | "EXCEL" | "FMT" | "HDAT" | "IMAGE" | "JMP" | "LASR" | "PARQUET" | "SOUND" | "SPSS" | "VIDEO" | "XLS", fileType-specific-parameters},
required parameter name="table-name",
vars={{
format="string",
formattedLength=integer,
label="string",
required parameter name="variable-name",
nfd=integer,
nfl=integer
}, {...}},
where="where-expression",
whereTable={
casLib="string"
importOptions={fileType="ANY" | "AUDIO" | "AUTO" | "BASESAS" | "CSV" | "DELIMITED" | "DOCUMENT" | "DTA" | "ESP" | "EXCEL" | "FMT" | "HDAT" | "IMAGE" | "JMP" | "LASR" | "PARQUET" | "SOUND" | "SPSS" | "VIDEO" | "XLS", fileType-specific-parameters}
required parameter name="table-name"
vars={{
format="string",
formattedLength=integer,
label="string",
required parameter name="variable-name",
nfd=integer,
nfl=integer
}, {...}}
where="where-expression"
}
},
nodesVar={
lower="variable-name",
node="variable-name",
upper="variable-name",
vars={"variable-name-1" <, "variable-name-2", ...>},
varsOut={"variable-name-1" <, "variable-name-2", ...>},
weight="variable-name"
},
nThreads=integer,
out={
caslib="string",
compress=true | false,
indexVars={"variable-name-1" <, "variable-name-2", ...>},
label="string",
lifetime=64-bit-integer,
maxMemSize=64-bit-integer,
memoryFormat="DVR" | "INHERIT" | "STANDARD",
name="table-name",
onDemand=true | false,
promote=true | false,
replace=true | false,
replication=integer,
threadBlockSize=64-bit-integer,
timeStamp="string",
where={"string-1" <, "string-2", ...>}
},
outGraphList={
caslib="string",
compress=true | false,
indexVars={"variable-name-1" <, "variable-name-2", ...>},
label="string",
lifetime=64-bit-integer,
maxMemSize=64-bit-integer,
memoryFormat="DVR" | "INHERIT" | "STANDARD",
name="table-name",
onDemand=true | false,
promote=true | false,
replace=true | false,
replication=integer,
threadBlockSize=64-bit-integer,
timeStamp="string",
where={"string-1" <, "string-2", ...>}
},
outLinks={
caslib="string",
compress=true | false,
indexVars={"variable-name-1" <, "variable-name-2", ...>},
label="string",
lifetime=64-bit-integer,
maxMemSize=64-bit-integer,
memoryFormat="DVR" | "INHERIT" | "STANDARD",
name="table-name",
onDemand=true | false,
promote=true | false,
replace=true | false,
replication=integer,
threadBlockSize=64-bit-integer,
timeStamp="string",
where={"string-1" <, "string-2", ...>}
},
outNodes={
caslib="string",
compress=true | false,
indexVars={"variable-name-1" <, "variable-name-2", ...>},
label="string",
lifetime=64-bit-integer,
maxMemSize=64-bit-integer,
memoryFormat="DVR" | "INHERIT" | "STANDARD",
name="table-name",
onDemand=true | false,
promote=true | false,
replace=true | false,
replication=integer,
threadBlockSize=64-bit-integer,
timeStamp="string",
where={"string-1" <, "string-2", ...>}
},
outputTables={
groupByVarsRaw=true | false,
includeAll=true | false,
names={"string-1" <, "string-2", ...>} | {key-1={casouttable-1} <, key-2={casouttable-2}, ...>},
repeated=true | false,
replace=true | false
},
relObjGap=double,
selfLinks=true | false,
standardizedLabels=true | false,
standardizedLabelsOut=true | false,
target=double,
}

Summary: Input and Output Tables

If a row includes a subparameter, you can specify the name, caslib, and so on in the subparameter. Otherwise, you can specify the name, caslib, and so on in the parameter.

Parameters for Reading Input Tables

Parameter

Subparameter

Description

 links

—

specifies the input data table that contains the graph link information.

 nodes

—

specifies the input data table that contains the graph node information.

Parameters for Creating Output Tables

Parameter

Subparameter

Description

 out

—

specifies the output data table for the vehicle routing problem.

 outGraphList

—

specifies the output data table to contain summary information about in-memory graphs.

 outLinks

—

specifies the output data table to contain the graph link information along with any results from the algorithms that calculate metrics on links.

 outNodes

—

specifies the output data table to contain the graph node information along with any results from the algorithms that calculate metrics on nodes.

 outputTables

names

lists the names of results tables to save as CAS tables on the server.

Parameter Descriptions

absObjGap=double

specifies a stopping criterion. When the absolute difference between the best integer objective and the objective of the best remaining branch-and-bound node becomes less than this value, the solver stops.

AliasabsoluteObjectiveGap
Default1E-06
Minimum value0

capacity=double

specifies the capacity of each vehicle. The capacity is the maximum amount of goods that a vehicle can pick up from the depot to be delivered to customers. The default is the largest number that can be represented by a double.

Minimum value (exclusive)0

cutoff=double

cuts off any branch-and-bound nodes in a minimization problem that has an objective value at or above this value. The default is the largest number that can be represented by a double.

cutStrategy="AGGRESSIVE" | "AUTOMATIC" | "MODERATE" | "NONE"

specifies the level of mixed integer linear programming cutting planes to be generated. Cutting planes that are specific to the vehicle routing problem (VRP) are always generated.

DefaultAUTOMATIC
AGGRESSIVE

uses an aggressive cut strategy.

AUTOMATIC

generates cutting planes on the basis of a strategy that the action determines.

MODERATE

uses a moderate cut strategy.

NONE

disables the generation of mixed integer linear programming cutting planes (some problem-specific cutting planes are still active for validity)

depot="string" | double

specifies the depot node for the vehicle routing problem. The centralized depot is the source of goods to be delivered to customers (nodes). You must specify this parameter.

deterministic=true | false

when set to True, ensures that each invocation (with the same machine configuration and parameter settings) produces the same final result.

Defaulttrue

direction="DIRECTED" | "UNDIRECTED"

specifies whether to consider the input graph as directed or undirected.

DefaultUNDIRECTED
DIRECTED

considers the input graph to be directed. In a directed graph, each link (i,j) has a direction that defines how something (such as information) can flow over that link. In link (i,j), the flow is from node i to node j. Node i is called the source (tail) node, and node j is called the sink (head) node.

UNDIRECTED

considers the input graph to be undirected. In an undirected graph, each link {i,j} has no direction, and the flow can be in either direction. That is, {i,j} = {j,i}.

display={displayTables}

specifies a list of results tables to send to the client for display.

For more information about specifying the display parameter, see the common displayTables parameter (Appendix A: Common Parameters).

distributed=true | false

when set to True, uses a distributed graph.

Defaultfalse

graph=integer

specifies the in-memory graph to use.

Default-1

heuristics="AGGRESSIVE" | "AUTOMATIC" | "BASIC" | "MODERATE" | "NONE"

determines how frequently the algorithm applies primal heuristics during the branch-and-bound tree search and affects the maximum number of iterations that are allowed in iterative heuristics. Some computationally expensive heuristics might be disabled by the solver at less aggressive levels.

DefaultAUTOMATIC
AGGRESSIVE

applies all primal heuristics at high frequency.

AUTOMATIC

applies the default level of heuristics.

BASIC

applies basic primal heuristics at low frequency.

MODERATE

applies most primal heuristics at moderate frequency.

NONE

disables all primal heuristics.

indexOffset=integer

specifies the index offset for identifiers in the log and results output data tables. For example, if three entities are found, they are labeled entity 0, 1, and 2 by default. If the value of indexOffset is 4, the entities are labeled entity 4, 5, and 6.

Default0
Minimum value0

specifies the input data table that contains the graph link information.

Long formlinks={name="table-name"}
Shortcut formlinks="table-name"

The castable value can be one or more of the following:

specifies the caslib for the input table that you want to use with the action. By default, the active caslib is used. Specify a value only if you need to access a table from a different caslib.

when set to True, creates the computed variables when the table is loaded instead of when the action begins.

AliascompOnDemand
Defaultfalse

specifies the names of the computed variables to create. Specify an expression for each variable in the computedVarsProgram parameter. If you do not specify this parameter, then all variables from computedVarsProgram are automatically included.

AliascompVars

The casinvardesc value can be one or more of the following:

specifies the format to apply to the variable.

specifies the length of format field plus the length of the format precision.

specifies the descriptive label for the variable.

specifies the name for the variable.

specifies the length of the format precision.

specifies the length of the format field.

specifies an expression for each computed variable that you include in the computedVars parameter.

AliascompPgm

specifies data source options.

Aliasesoptions
dataSource

specifies the names of the variables to use for grouping results.

The casinvardesc value can be one or more of the following:

specifies the format to apply to the variable.

specifies the length of format field plus the length of the format precision.

specifies the descriptive label for the variable.

specifies the name for the variable.

specifies the length of the format precision.

specifies the length of the format field.

specifies the settings for reading a table from a data source.

Aliasimport

For more information about specifying the importOptions parameter, see the common importOptions parameter (Appendix A: Common Parameters).

specifies the name of the input table.

specifies the variables to use in the action.

The casinvardesc value can be one or more of the following:

specifies the format to apply to the variable.

specifies the length of format field plus the length of the format precision.

specifies the descriptive label for the variable.

specifies the name for the variable.

specifies the length of the format precision.

specifies the length of the format field.

specifies an expression for subsetting the input data.

specifies an input table that contains rows to use as a WHERE filter. If the vars parameter is not specified, then all the variable names that are common to the input table and the filtering table are used to find matching rows. If the where parameter for the input table and this parameter are specified, then this filtering table is applied first.

The groupbytable value can be one or more of the following:

specifies the caslib for the filter table. By default, the active caslib is used.

specifies the settings for reading a table from a data source.

Aliasimport

For more information about specifying the importOptions parameter, see the common importOptions parameter (Appendix A: Common Parameters).

specifies the name of the filter table.

specifies the variable names to use from the filter table.

The casinvardesc value can be one or more of the following:

specifies the format to apply to the variable.

specifies the length of format field plus the length of the format precision.

specifies the descriptive label for the variable.

specifies the name for the variable.

specifies the length of the format precision.

specifies the length of the format field.

specifies an expression for subsetting the data from the filter table.

linksVar={linksVarOpt}

specifies the data variable names for the links table.

For more information about specifying the linksVar parameter, see the common linksVarOpt parameter (Appendix A: Common Parameters).

logFreq=integer

specifies the time interval, n (in seconds), for printing information in the node log. If n = 0, then the node log is disabled. If n > 0, then the root node processing information is printed and, if possible, an entry is made every n seconds. An entry is also made each time a better integer solution is found.

AliaslogFrequency
Default5
Minimum value0

logFreqTime=integer

controls the frequency n (in seconds) for displaying iteration logs for some algorithms, where n can be any integer greater than or equal to 1. This parameter is useful for computationally intensive algorithms. Setting n too low can hurt algorithm performance.

AliaslogFrequencyTime
Default5
Minimum value1

logLevel="AGGRESSIVE" | "BASIC" | "MODERATE" | "NONE"

controls the amount of information that is displayed in the SAS log.

DefaultBASIC
AGGRESSIVE

displays a more detailed summary of the input, output, and algorithmic processing.

BASIC

displays a brief summary of the algorithmic processing.

MODERATE

displays a moderately detailed summary of the input, output, and algorithmic processing.

NONE

turns off all action-related messages in the SAS log.

maxNodes=integer

specifies the maximum number of branch-and-bound nodes to be processed. The default is the largest number that can be represented by a 32-bit integer.

Minimum value0

maxRoutes=integer

specifies the maximum number of routes allowed to service demand. The specified value must be a 32-bit integer greater than or equal to 1. The default is the largest number that can be represented by a 32-bit integer.

Minimum value1

maxSols=integer

specifies a stopping criterion. If the number of solutions that are found is greater than or equal to this value, then the algorithm stops. The default is the largest number that can be represented by a 32-bit integer.

Minimum value1

maxTime=double

specifies the maximum amount of time for the algorithm to spend. The default is the largest number that can be represented by a double.

Minimum value (exclusive)0

milp=true | false

when set to True, uses a mixed integer linear programming (MILP) solver to solve the vehicle routing problem (VRP). The MILP solver attempts to find the overall best routes by using a branch-and-cut algorithm. This algorithm can be expensive for large-scale problems. If this value is False, the algorithm uses its initial heuristics to find a feasible, but not necessarily optimal, tour as quickly as possible.

Defaulttrue

minRoutes=integer

specifies the minimum number of routes allowed to service demand. The specified value must be a 32-bit integer greater than or equal to 1.

Default1
Minimum value1

when set to True, includes multilinks when an input graph is read. By default, the value of this parameter is True for algorithms that support multilinks.

nodes={castable}

specifies the input data table that contains the graph node information.

Long formnodes={name="table-name"}
Shortcut formnodes="table-name"

The castable value can be one or more of the following:

caslib="string"

specifies the caslib for the input table that you want to use with the action. By default, the active caslib is used. Specify a value only if you need to access a table from a different caslib.

computedOnDemand=true | false

when set to True, creates the computed variables when the table is loaded instead of when the action begins.

AliascompOnDemand
Defaultfalse
computedVars={{casinvardesc-1} <, {casinvardesc-2}, ...>}

specifies the names of the computed variables to create. Specify an expression for each variable in the computedVarsProgram parameter. If you do not specify this parameter, then all variables from computedVarsProgram are automatically included.

AliascompVars

The casinvardesc value can be one or more of the following:

format="string"

specifies the format to apply to the variable.

formattedLength=integer

specifies the length of format field plus the length of the format precision.

label="string"

specifies the descriptive label for the variable.

* name="variable-name"

specifies the name for the variable.

nfd=integer

specifies the length of the format precision.

nfl=integer

specifies the length of the format field.

computedVarsProgram="string"

specifies an expression for each computed variable that you include in the computedVars parameter.

AliascompPgm
dataSourceOptions={key-1=any-list-or-data-type-1 <, key-2=any-list-or-data-type-2, ...>}

specifies data source options.

Aliasesoptions
dataSource
importOptions={fileType="ANY" | "AUDIO" | "AUTO" | "BASESAS" | "CSV" | "DOCUMENT" | "DTA" | "ESP" | "EXCEL" | "FMT" | "HDAT" | "IMAGE" | "JMP" | "LASR" | "PARQUET" | "SPSS" | "VIDEO" | "XLS", fileType-specific-parameters}

specifies the settings for reading a table from a data source.

Aliasimport

For more information about specifying the importOptions parameter, see the common importOptions parameter (Appendix A: Common Parameters).

* name="table-name"

specifies the name of the input table.

vars={{casinvardesc-1} <, {casinvardesc-2}, ...>}

specifies the variables to use in the action.

The casinvardesc value can be one or more of the following:

format="string"

specifies the format to apply to the variable.

formattedLength=integer

specifies the length of format field plus the length of the format precision.

label="string"

specifies the descriptive label for the variable.

* name="variable-name"

specifies the name for the variable.

nfd=integer

specifies the length of the format precision.

nfl=integer

specifies the length of the format field.

where="where-expression"

specifies an expression for subsetting the input data.

whereTable={groupbytable}

specifies an input table that contains rows to use as a WHERE filter. If the vars parameter is not specified, then all the variable names that are common to the input table and the filtering table are used to find matching rows. If the where parameter for the input table and this parameter are specified, then this filtering table is applied first.

The groupbytable value can be one or more of the following:

casLib="string"

specifies the caslib for the filter table. By default, the active caslib is used.

importOptions={fileType="ANY" | "AUDIO" | "AUTO" | "BASESAS" | "CSV" | "DOCUMENT" | "DTA" | "ESP" | "EXCEL" | "FMT" | "HDAT" | "IMAGE" | "JMP" | "LASR" | "PARQUET" | "SPSS" | "VIDEO" | "XLS", fileType-specific-parameters}

specifies the settings for reading a table from a data source.

Aliasimport

For more information about specifying the importOptions parameter, see the common importOptions parameter (Appendix A: Common Parameters).

* name="table-name"

specifies the name of the filter table.

vars={{casinvardesc-1} <, {casinvardesc-2}, ...>}

specifies the variable names to use from the filter table.

The casinvardesc value can be one or more of the following:

format="string"

specifies the format to apply to the variable.

formattedLength=integer

specifies the length of format field plus the length of the format precision.

label="string"

specifies the descriptive label for the variable.

* name="variable-name"

specifies the name for the variable.

nfd=integer

specifies the length of the format precision.

nfl=integer

specifies the length of the format field.

where="where-expression"

specifies an expression for subsetting the data from the filter table.

nodesVar={nodesVarOpt}

specifies the data variable names for the nodes table.

For more information about specifying the nodesVar parameter, see the common nodesVarOpt parameter (Appendix A: Common Parameters).

nThreads=integer

specifies the maximum number of threads to use for multithreaded processing.

Range1–1024

out={casouttable}

specifies the output data table for the vehicle routing problem.

For more information about specifying the out parameter, see the common casouttable parameter (Appendix A: Common Parameters).

outGraphList={casouttable}

specifies the output data table to contain summary information about in-memory graphs.

For more information about specifying the outGraphList parameter, see the common casouttable parameter (Appendix A: Common Parameters).

specifies the output data table to contain the graph link information along with any results from the algorithms that calculate metrics on links.

For more information about specifying the outLinks parameter, see the common casouttable parameter (Appendix A: Common Parameters).

outNodes={casouttable}

specifies the output data table to contain the graph node information along with any results from the algorithms that calculate metrics on nodes.

For more information about specifying the outNodes parameter, see the common casouttable parameter (Appendix A: Common Parameters).

outputTables={outputTables}

lists the names of results tables to save as CAS tables on the server.

For more information about specifying the outputTables parameter, see the common outputTables parameter (Appendix A: Common Parameters).

AliasdisplayOut

relObjGap=double

specifies a stopping criterion that is based on the best integer objective and the objective of the best remaining node.

AliasrelativeObjectiveGap
Default0.0001
Minimum value0

when set to True, includes self-links when an input graph is read.

Defaulttrue

standardizedLabels=true | false

when set to True, specifies that the input graph data are in a standardized format.

Defaultfalse

standardizedLabelsOut=true | false

when set to True, requests that the output graph data include standardized format.

Defaultfalse

target=double

specifies a stopping criterion for minimization problems. If the best integer objective is less than or equal to this value, the solver stops. The default is the largest (in magnitude) negative number that can be represented by a double.

timeType="CPU" | "REAL"

specifies whether to use CPU time or real time for the maximum time limit.

DefaultREAL
CPU

specifies units of CPU time. The time restriction is applied per processing machine (not across all machines).

REAL

specifies units of real time.

Result Descriptions

ProblemSummary

contains a basic summary of the graph input. The result is a table. You can access the value from results.ProblemSummary.

SolutionSummary

contains a basic solution summary for the algorithm. The result is a table. You can access the value from results.SolutionSummary.

absObjGap

indicates the absolute gap between the best integer objective and the objective of the best remaining node upon termination of the solver. The result is a double. You can access the value from results.absObjGap.

bestBound

indicates the best linear programming objective value of all unprocessed nodes in the branch-and-bound tree at the end of execution. The result is a double. You can access the value from results.bestBound.

boundInf

indicates the maximum (absolute) violation by the solution of the lower or upper bounds (or both). The result is a double. You can access the value from results.boundInf.

integerInf

indicates the maximum (absolute) violation of the integrality of integer variables that are returned by the solver. The result is a double. You can access the value from results.integerInf.

numIterations

indicates the number of simplex iterations taken to solve the problem. The result is an integer. You can access the value from results.numIterations.

numNodes

specifies the number of nodes enumerated by the solver by using the branch-and-bound algorithm. The result is an integer. You can access the value from results.numNodes.

numSolutions

indicates the number of feasible solutions found. The result is an integer. You can access the value from results.numSolutions.

objective

indicates the objective value that the solver obtains at termination. The result is a double. You can access the value from results.objective.

primalInf

indicates the maximum (absolute) violation of the primal constraints by the solution. The result is a double. You can access the value from results.primalInf.

relObjGap

indicates the relative gap between the best integer objective and the objective of the best remaining node upon termination of the solver. The result is a double. You can access the value from results.relObjGap.

solutionStatus

indicates the solution status of the selected problem type (algorithm class). The result is a string. You can access the value from results.solutionStatus.

vrp Action

Solves the vehicle routing problem.

Python Syntax

results= s.optNetwork.vrp(
absObjGap=double,
capacity=double,
cutoff=double,
depot="string" | double,
deterministic=True | False,
display={
"caseSensitive":True | False,
"exclude":True | False,
"excludeAll":True | False,
"keyIsPath":True | False,
"names":["string-1" <, "string-2", ...>],
"pathType":"LABEL" | "NAME",
"traceNames":True | False
},
distributed=True | False,
graph=integer,
indexOffset=integer,
links={
"caslib":"string",
"computedOnDemand":True | False,
"computedVars":[{
"format":"string",
"formattedLength":integer,
"label":"string",
required parameter "name":"variable-name",
"nfd":integer,
"nfl":integer
}<, {...}>],
"dataSourceOptions":{"key-1":{any-list-or-data-type-1} <, "key-2":{any-list-or-data-type-2}, ...>},
"groupBy":[{
"format":"string",
"formattedLength":integer,
"label":"string",
required parameter "name":"variable-name",
"nfd":integer,
"nfl":integer
}<, {...}>],
"importOptions":{"fileType":"ANY" | "AUDIO" | "AUTO" | "BASESAS" | "CSV" | "DELIMITED" | "DOCUMENT" | "DTA" | "ESP" | "EXCEL" | "FMT" | "HDAT" | "IMAGE" | "JMP" | "LASR" | "PARQUET" | "SOUND" | "SPSS" | "VIDEO" | "XLS", fileType-specific-parameters},
required parameter "name":"table-name",
"vars":[{
"format":"string",
"formattedLength":integer,
"label":"string",
required parameter "name":"variable-name",
"nfd":integer,
"nfl":integer
}<, {...}>],
"where":"where-expression",
"whereTable":{
"casLib":"string"
"importOptions":{"fileType":"ANY" | "AUDIO" | "AUTO" | "BASESAS" | "CSV" | "DELIMITED" | "DOCUMENT" | "DTA" | "ESP" | "EXCEL" | "FMT" | "HDAT" | "IMAGE" | "JMP" | "LASR" | "PARQUET" | "SOUND" | "SPSS" | "VIDEO" | "XLS", fileType-specific-parameters}
required parameter "name":"table-name"
"vars":[{
"format":"string",
"formattedLength":integer,
"label":"string",
required parameter "name":"variable-name",
"nfd":integer,
"nfl":integer
}<, {...}>]
"where":"where-expression"
}
},
linksVar={
"auxWeight":"variable-name",
"from_":"variable-name",
"lower":"variable-name",
"to":"variable-name",
"upper":"variable-name",
"vars":["variable-name-1" <, "variable-name-2", ...>],
"varsOut":["variable-name-1" <, "variable-name-2", ...>],
"weight":"variable-name"
},
logFreq=integer,
logFreqTime=integer,
maxNodes=integer,
maxRoutes=integer,
maxSols=integer,
maxTime=double,
milp=True | False,
minRoutes=integer,
multiLinks=True | False,
nodes={
"caslib":"string",
"computedOnDemand":True | False,
"computedVars":[{
"format":"string",
"formattedLength":integer,
"label":"string",
required parameter "name":"variable-name",
"nfd":integer,
"nfl":integer
}<, {...}>],
"dataSourceOptions":{"key-1":{any-list-or-data-type-1} <, "key-2":{any-list-or-data-type-2}, ...>},
"importOptions":{"fileType":"ANY" | "AUDIO" | "AUTO" | "BASESAS" | "CSV" | "DELIMITED" | "DOCUMENT" | "DTA" | "ESP" | "EXCEL" | "FMT" | "HDAT" | "IMAGE" | "JMP" | "LASR" | "PARQUET" | "SOUND" | "SPSS" | "VIDEO" | "XLS", fileType-specific-parameters},
required parameter "name":"table-name",
"vars":[{
"format":"string",
"formattedLength":integer,
"label":"string",
required parameter "name":"variable-name",
"nfd":integer,
"nfl":integer
}<, {...}>],
"where":"where-expression",
"whereTable":{
"casLib":"string"
"importOptions":{"fileType":"ANY" | "AUDIO" | "AUTO" | "BASESAS" | "CSV" | "DELIMITED" | "DOCUMENT" | "DTA" | "ESP" | "EXCEL" | "FMT" | "HDAT" | "IMAGE" | "JMP" | "LASR" | "PARQUET" | "SOUND" | "SPSS" | "VIDEO" | "XLS", fileType-specific-parameters}
required parameter "name":"table-name"
"vars":[{
"format":"string",
"formattedLength":integer,
"label":"string",
required parameter "name":"variable-name",
"nfd":integer,
"nfl":integer
}<, {...}>]
"where":"where-expression"
}
},
nodesVar={
"lower":"variable-name",
"node":"variable-name",
"upper":"variable-name",
"vars":["variable-name-1" <, "variable-name-2", ...>],
"varsOut":["variable-name-1" <, "variable-name-2", ...>],
"weight":"variable-name"
},
nThreads=integer,
out={
"caslib":"string",
"compress":True | False,
"indexVars":["variable-name-1" <, "variable-name-2", ...>],
"label":"string",
"lifetime":64-bit-integer,
"maxMemSize":64-bit-integer,
"memoryFormat":"DVR" | "INHERIT" | "STANDARD",
"name":"table-name",
"onDemand":True | False,
"promote":True | False,
"replace":True | False,
"replication":integer,
"threadBlockSize":64-bit-integer,
"timeStamp":"string",
"where":["string-1" <, "string-2", ...>]
},
outGraphList={
"caslib":"string",
"compress":True | False,
"indexVars":["variable-name-1" <, "variable-name-2", ...>],
"label":"string",
"lifetime":64-bit-integer,
"maxMemSize":64-bit-integer,
"memoryFormat":"DVR" | "INHERIT" | "STANDARD",
"name":"table-name",
"onDemand":True | False,
"promote":True | False,
"replace":True | False,
"replication":integer,
"threadBlockSize":64-bit-integer,
"timeStamp":"string",
"where":["string-1" <, "string-2", ...>]
},
outLinks={
"caslib":"string",
"compress":True | False,
"indexVars":["variable-name-1" <, "variable-name-2", ...>],
"label":"string",
"lifetime":64-bit-integer,
"maxMemSize":64-bit-integer,
"memoryFormat":"DVR" | "INHERIT" | "STANDARD",
"name":"table-name",
"onDemand":True | False,
"promote":True | False,
"replace":True | False,
"replication":integer,
"threadBlockSize":64-bit-integer,
"timeStamp":"string",
"where":["string-1" <, "string-2", ...>]
},
outNodes={
"caslib":"string",
"compress":True | False,
"indexVars":["variable-name-1" <, "variable-name-2", ...>],
"label":"string",
"lifetime":64-bit-integer,
"maxMemSize":64-bit-integer,
"memoryFormat":"DVR" | "INHERIT" | "STANDARD",
"name":"table-name",
"onDemand":True | False,
"promote":True | False,
"replace":True | False,
"replication":integer,
"threadBlockSize":64-bit-integer,
"timeStamp":"string",
"where":["string-1" <, "string-2", ...>]
},
outputTables={
"groupByVarsRaw":True | False,
"includeAll":True | False,
"names":["string-1" <, "string-2", ...>] | {"key-1":{casouttable-1} <, "key-2":{casouttable-2}, ...>},
"repeated":True | False,
"replace":True | False
},
relObjGap=double,
selfLinks=True | False,
standardizedLabels=True | False,
standardizedLabelsOut=True | False,
target=double,
)

Summary: Input and Output Tables

If a row includes a subparameter, you can specify the name, caslib, and so on in the subparameter. Otherwise, you can specify the name, caslib, and so on in the parameter.

Parameters for Reading Input Tables

Parameter

Subparameter

Description

 links

—

specifies the input data table that contains the graph link information.

 nodes

—

specifies the input data table that contains the graph node information.

Parameters for Creating Output Tables

Parameter

Subparameter

Description

 out

—

specifies the output data table for the vehicle routing problem.

 outGraphList

—

specifies the output data table to contain summary information about in-memory graphs.

 outLinks

—

specifies the output data table to contain the graph link information along with any results from the algorithms that calculate metrics on links.

 outNodes

—

specifies the output data table to contain the graph node information along with any results from the algorithms that calculate metrics on nodes.

 outputTables

names

lists the names of results tables to save as CAS tables on the server.

Parameter Descriptions

absObjGap=double

specifies a stopping criterion. When the absolute difference between the best integer objective and the objective of the best remaining branch-and-bound node becomes less than this value, the solver stops.

AliasabsoluteObjectiveGap
Default1E-06
Minimum value0

capacity=double

specifies the capacity of each vehicle. The capacity is the maximum amount of goods that a vehicle can pick up from the depot to be delivered to customers. The default is the largest number that can be represented by a double.

Minimum value (exclusive)0

cutoff=double

cuts off any branch-and-bound nodes in a minimization problem that has an objective value at or above this value. The default is the largest number that can be represented by a double.

cutStrategy="AGGRESSIVE" | "AUTOMATIC" | "MODERATE" | "NONE"

specifies the level of mixed integer linear programming cutting planes to be generated. Cutting planes that are specific to the vehicle routing problem (VRP) are always generated.

DefaultAUTOMATIC
AGGRESSIVE

uses an aggressive cut strategy.

AUTOMATIC

generates cutting planes on the basis of a strategy that the action determines.

MODERATE

uses a moderate cut strategy.

NONE

disables the generation of mixed integer linear programming cutting planes (some problem-specific cutting planes are still active for validity)

depot="string" | double

specifies the depot node for the vehicle routing problem. The centralized depot is the source of goods to be delivered to customers (nodes). You must specify this parameter.

deterministic=True | False

when set to True, ensures that each invocation (with the same machine configuration and parameter settings) produces the same final result.

DefaultTrue

direction="DIRECTED" | "UNDIRECTED"

specifies whether to consider the input graph as directed or undirected.

DefaultUNDIRECTED
DIRECTED

considers the input graph to be directed. In a directed graph, each link (i,j) has a direction that defines how something (such as information) can flow over that link. In link (i,j), the flow is from node i to node j. Node i is called the source (tail) node, and node j is called the sink (head) node.

UNDIRECTED

considers the input graph to be undirected. In an undirected graph, each link {i,j} has no direction, and the flow can be in either direction. That is, {i,j} = {j,i}.

display={displayTables}

specifies a list of results tables to send to the client for display.

For more information about specifying the display parameter, see the common displayTables parameter (Appendix A: Common Parameters).

distributed=True | False

when set to True, uses a distributed graph.

DefaultFalse

graph=integer

specifies the in-memory graph to use.

Default-1

heuristics="AGGRESSIVE" | "AUTOMATIC" | "BASIC" | "MODERATE" | "NONE"

determines how frequently the algorithm applies primal heuristics during the branch-and-bound tree search and affects the maximum number of iterations that are allowed in iterative heuristics. Some computationally expensive heuristics might be disabled by the solver at less aggressive levels.

DefaultAUTOMATIC
AGGRESSIVE

applies all primal heuristics at high frequency.

AUTOMATIC

applies the default level of heuristics.

BASIC

applies basic primal heuristics at low frequency.

MODERATE

applies most primal heuristics at moderate frequency.

NONE

disables all primal heuristics.

indexOffset=integer

specifies the index offset for identifiers in the log and results output data tables. For example, if three entities are found, they are labeled entity 0, 1, and 2 by default. If the value of indexOffset is 4, the entities are labeled entity 4, 5, and 6.

Default0
Minimum value0

specifies the input data table that contains the graph link information.

Long formlinks={"name":"table-name"}
Shortcut formlinks="table-name"

The castable value can be one or more of the following:

specifies the caslib for the input table that you want to use with the action. By default, the active caslib is used. Specify a value only if you need to access a table from a different caslib.

when set to True, creates the computed variables when the table is loaded instead of when the action begins.

AliascompOnDemand
DefaultFalse

specifies the names of the computed variables to create. Specify an expression for each variable in the computedVarsProgram parameter. If you do not specify this parameter, then all variables from computedVarsProgram are automatically included.

AliascompVars

The casinvardesc value can be one or more of the following:

specifies the format to apply to the variable.

specifies the length of format field plus the length of the format precision.

specifies the descriptive label for the variable.

specifies the name for the variable.

specifies the length of the format precision.

specifies the length of the format field.

specifies an expression for each computed variable that you include in the computedVars parameter.

AliascompPgm

specifies data source options.

Aliasesoptions
dataSource

specifies the names of the variables to use for grouping results.

The casinvardesc value can be one or more of the following:

specifies the format to apply to the variable.

specifies the length of format field plus the length of the format precision.

specifies the descriptive label for the variable.

specifies the name for the variable.

specifies the length of the format precision.

specifies the length of the format field.

specifies the settings for reading a table from a data source.

Aliasimport_

For more information about specifying the importOptions parameter, see the common importOptions parameter (Appendix A: Common Parameters).

specifies the name of the input table.

specifies the variables to use in the action.

The casinvardesc value can be one or more of the following:

specifies the format to apply to the variable.

specifies the length of format field plus the length of the format precision.

specifies the descriptive label for the variable.

specifies the name for the variable.

specifies the length of the format precision.

specifies the length of the format field.

specifies an expression for subsetting the input data.

specifies an input table that contains rows to use as a WHERE filter. If the vars parameter is not specified, then all the variable names that are common to the input table and the filtering table are used to find matching rows. If the where parameter for the input table and this parameter are specified, then this filtering table is applied first.

The groupbytable value can be one or more of the following:

specifies the caslib for the filter table. By default, the active caslib is used.

specifies the settings for reading a table from a data source.

Aliasimport_

For more information about specifying the importOptions parameter, see the common importOptions parameter (Appendix A: Common Parameters).

specifies the name of the filter table.

specifies the variable names to use from the filter table.

The casinvardesc value can be one or more of the following:

specifies the format to apply to the variable.

specifies the length of format field plus the length of the format precision.

specifies the descriptive label for the variable.

specifies the name for the variable.

specifies the length of the format precision.

specifies the length of the format field.

specifies an expression for subsetting the data from the filter table.

linksVar={linksVarOpt}

specifies the data variable names for the links table.

For more information about specifying the linksVar parameter, see the common linksVarOpt parameter (Appendix A: Common Parameters).

logFreq=integer

specifies the time interval, n (in seconds), for printing information in the node log. If n = 0, then the node log is disabled. If n > 0, then the root node processing information is printed and, if possible, an entry is made every n seconds. An entry is also made each time a better integer solution is found.

AliaslogFrequency
Default5
Minimum value0

logFreqTime=integer

controls the frequency n (in seconds) for displaying iteration logs for some algorithms, where n can be any integer greater than or equal to 1. This parameter is useful for computationally intensive algorithms. Setting n too low can hurt algorithm performance.

AliaslogFrequencyTime
Default5
Minimum value1

logLevel="AGGRESSIVE" | "BASIC" | "MODERATE" | "NONE"

controls the amount of information that is displayed in the SAS log.

DefaultBASIC
AGGRESSIVE

displays a more detailed summary of the input, output, and algorithmic processing.

BASIC

displays a brief summary of the algorithmic processing.

MODERATE

displays a moderately detailed summary of the input, output, and algorithmic processing.

NONE

turns off all action-related messages in the SAS log.

maxNodes=integer

specifies the maximum number of branch-and-bound nodes to be processed. The default is the largest number that can be represented by a 32-bit integer.

Minimum value0

maxRoutes=integer

specifies the maximum number of routes allowed to service demand. The specified value must be a 32-bit integer greater than or equal to 1. The default is the largest number that can be represented by a 32-bit integer.

Minimum value1

maxSols=integer

specifies a stopping criterion. If the number of solutions that are found is greater than or equal to this value, then the algorithm stops. The default is the largest number that can be represented by a 32-bit integer.

Minimum value1

maxTime=double

specifies the maximum amount of time for the algorithm to spend. The default is the largest number that can be represented by a double.

Minimum value (exclusive)0

milp=True | False

when set to True, uses a mixed integer linear programming (MILP) solver to solve the vehicle routing problem (VRP). The MILP solver attempts to find the overall best routes by using a branch-and-cut algorithm. This algorithm can be expensive for large-scale problems. If this value is False, the algorithm uses its initial heuristics to find a feasible, but not necessarily optimal, tour as quickly as possible.

DefaultTrue

minRoutes=integer

specifies the minimum number of routes allowed to service demand. The specified value must be a 32-bit integer greater than or equal to 1.

Default1
Minimum value1

when set to True, includes multilinks when an input graph is read. By default, the value of this parameter is True for algorithms that support multilinks.

nodes={castable}

specifies the input data table that contains the graph node information.

Long formnodes={"name":"table-name"}
Shortcut formnodes="table-name"

The castable value can be one or more of the following:

"caslib":"string"

specifies the caslib for the input table that you want to use with the action. By default, the active caslib is used. Specify a value only if you need to access a table from a different caslib.

"computedOnDemand":True | False

when set to True, creates the computed variables when the table is loaded instead of when the action begins.

AliascompOnDemand
DefaultFalse
"computedVars":[{casinvardesc-1} <, {casinvardesc-2}, ...>]

specifies the names of the computed variables to create. Specify an expression for each variable in the computedVarsProgram parameter. If you do not specify this parameter, then all variables from computedVarsProgram are automatically included.

AliascompVars

The casinvardesc value can be one or more of the following:

"format":"string"

specifies the format to apply to the variable.

"formattedLength":integer

specifies the length of format field plus the length of the format precision.

"label":"string"

specifies the descriptive label for the variable.

* "name":"variable-name"

specifies the name for the variable.

"nfd":integer

specifies the length of the format precision.

"nfl":integer

specifies the length of the format field.

"computedVarsProgram":"string"

specifies an expression for each computed variable that you include in the computedVars parameter.

AliascompPgm
"dataSourceOptions":{"key-1":{any-list-or-data-type-1} <, "key-2":{any-list-or-data-type-2}, ...>}

specifies data source options.

Aliasesoptions
dataSource
"importOptions":{"fileType":"ANY" | "AUDIO" | "AUTO" | "BASESAS" | "CSV" | "DOCUMENT" | "DTA" | "ESP" | "EXCEL" | "FMT" | "HDAT" | "IMAGE" | "JMP" | "LASR" | "PARQUET" | "SPSS" | "VIDEO" | "XLS", fileType-specific-parameters}

specifies the settings for reading a table from a data source.

Aliasimport_

For more information about specifying the importOptions parameter, see the common importOptions parameter (Appendix A: Common Parameters).

* "name":"table-name"

specifies the name of the input table.

"vars":[{casinvardesc-1} <, {casinvardesc-2}, ...>]

specifies the variables to use in the action.

The casinvardesc value can be one or more of the following:

"format":"string"

specifies the format to apply to the variable.

"formattedLength":integer

specifies the length of format field plus the length of the format precision.

"label":"string"

specifies the descriptive label for the variable.

* "name":"variable-name"

specifies the name for the variable.

"nfd":integer

specifies the length of the format precision.

"nfl":integer

specifies the length of the format field.

"where":"where-expression"

specifies an expression for subsetting the input data.

"whereTable":{groupbytable}

specifies an input table that contains rows to use as a WHERE filter. If the vars parameter is not specified, then all the variable names that are common to the input table and the filtering table are used to find matching rows. If the where parameter for the input table and this parameter are specified, then this filtering table is applied first.

The groupbytable value can be one or more of the following:

"casLib":"string"

specifies the caslib for the filter table. By default, the active caslib is used.

"importOptions":{"fileType":"ANY" | "AUDIO" | "AUTO" | "BASESAS" | "CSV" | "DOCUMENT" | "DTA" | "ESP" | "EXCEL" | "FMT" | "HDAT" | "IMAGE" | "JMP" | "LASR" | "PARQUET" | "SPSS" | "VIDEO" | "XLS", fileType-specific-parameters}

specifies the settings for reading a table from a data source.

Aliasimport_

For more information about specifying the importOptions parameter, see the common importOptions parameter (Appendix A: Common Parameters).

* "name":"table-name"

specifies the name of the filter table.

"vars":[{casinvardesc-1} <, {casinvardesc-2}, ...>]

specifies the variable names to use from the filter table.

The casinvardesc value can be one or more of the following:

"format":"string"

specifies the format to apply to the variable.

"formattedLength":integer

specifies the length of format field plus the length of the format precision.

"label":"string"

specifies the descriptive label for the variable.

* "name":"variable-name"

specifies the name for the variable.

"nfd":integer

specifies the length of the format precision.

"nfl":integer

specifies the length of the format field.

"where":"where-expression"

specifies an expression for subsetting the data from the filter table.

nodesVar={nodesVarOpt}

specifies the data variable names for the nodes table.

For more information about specifying the nodesVar parameter, see the common nodesVarOpt parameter (Appendix A: Common Parameters).

nThreads=integer

specifies the maximum number of threads to use for multithreaded processing.

Range1–1024

out={casouttable}

specifies the output data table for the vehicle routing problem.

For more information about specifying the out parameter, see the common casouttable parameter (Appendix A: Common Parameters).

outGraphList={casouttable}

specifies the output data table to contain summary information about in-memory graphs.

For more information about specifying the outGraphList parameter, see the common casouttable parameter (Appendix A: Common Parameters).

specifies the output data table to contain the graph link information along with any results from the algorithms that calculate metrics on links.

For more information about specifying the outLinks parameter, see the common casouttable parameter (Appendix A: Common Parameters).

outNodes={casouttable}

specifies the output data table to contain the graph node information along with any results from the algorithms that calculate metrics on nodes.

For more information about specifying the outNodes parameter, see the common casouttable parameter (Appendix A: Common Parameters).

outputTables={outputTables}

lists the names of results tables to save as CAS tables on the server.

For more information about specifying the outputTables parameter, see the common outputTables parameter (Appendix A: Common Parameters).

AliasdisplayOut

relObjGap=double

specifies a stopping criterion that is based on the best integer objective and the objective of the best remaining node.

AliasrelativeObjectiveGap
Default0.0001
Minimum value0

when set to True, includes self-links when an input graph is read.

DefaultTrue

standardizedLabels=True | False

when set to True, specifies that the input graph data are in a standardized format.

DefaultFalse

standardizedLabelsOut=True | False

when set to True, requests that the output graph data include standardized format.

DefaultFalse

target=double

specifies a stopping criterion for minimization problems. If the best integer objective is less than or equal to this value, the solver stops. The default is the largest (in magnitude) negative number that can be represented by a double.

timeType="CPU" | "REAL"

specifies whether to use CPU time or real time for the maximum time limit.

DefaultREAL
CPU

specifies units of CPU time. The time restriction is applied per processing machine (not across all machines).

REAL

specifies units of real time.

Result Descriptions

ProblemSummary

contains a basic summary of the graph input. The result is a table. You can access the value from results.ProblemSummary.

SolutionSummary

contains a basic solution summary for the algorithm. The result is a table. You can access the value from results.SolutionSummary.

absObjGap

indicates the absolute gap between the best integer objective and the objective of the best remaining node upon termination of the solver. The result is a double. You can access the value from results.absObjGap.

bestBound

indicates the best linear programming objective value of all unprocessed nodes in the branch-and-bound tree at the end of execution. The result is a double. You can access the value from results.bestBound.

boundInf

indicates the maximum (absolute) violation by the solution of the lower or upper bounds (or both). The result is a double. You can access the value from results.boundInf.

integerInf

indicates the maximum (absolute) violation of the integrality of integer variables that are returned by the solver. The result is a double. You can access the value from results.integerInf.

numIterations

indicates the number of simplex iterations taken to solve the problem. The result is an integer. You can access the value from results.numIterations.

numNodes

specifies the number of nodes enumerated by the solver by using the branch-and-bound algorithm. The result is an integer. You can access the value from results.numNodes.

numSolutions

indicates the number of feasible solutions found. The result is an integer. You can access the value from results.numSolutions.

objective

indicates the objective value that the solver obtains at termination. The result is a double. You can access the value from results.objective.

primalInf

indicates the maximum (absolute) violation of the primal constraints by the solution. The result is a double. You can access the value from results.primalInf.

relObjGap

indicates the relative gap between the best integer objective and the objective of the best remaining node upon termination of the solver. The result is a double. You can access the value from results.relObjGap.

solutionStatus

indicates the solution status of the selected problem type (algorithm class). The result is a string. You can access the value from results.solutionStatus.

vrp Action

Solves the vehicle routing problem.

R Syntax

results <– cas.optNetwork.vrp(s,
absObjGap=double,
capacity=double,
cutoff=double,
depot="string" | double,
deterministic=TRUE | FALSE,
display=list(
caseSensitive=TRUE | FALSE,
exclude=TRUE | FALSE,
excludeAll=TRUE | FALSE,
keyIsPath=TRUE | FALSE,
names=list("string-1" <, "string-2", ...>),
pathType="LABEL" | "NAME",
traceNames=TRUE | FALSE
),
distributed=TRUE | FALSE,
graph=integer,
indexOffset=integer,
links=list(
caslib="string",
computedOnDemand=TRUE | FALSE,
computedVars=list( list(
format="string",
formattedLength=integer,
label="string",
required parameter name="variable-name",
nfd=integer,
nfl=integer
) <, list(...)>),
dataSourceOptions=list(key-1=list(any-list-or-data-type-1) <, key-2=list(any-list-or-data-type-2), ...>),
groupBy=list( list(
format="string",
formattedLength=integer,
label="string",
required parameter name="variable-name",
nfd=integer,
nfl=integer
) <, list(...)>),
importOptions=list(fileType="ANY" | "AUDIO" | "AUTO" | "BASESAS" | "CSV" | "DELIMITED" | "DOCUMENT" | "DTA" | "ESP" | "EXCEL" | "FMT" | "HDAT" | "IMAGE" | "JMP" | "LASR" | "PARQUET" | "SOUND" | "SPSS" | "VIDEO" | "XLS", fileType-specific-parameters),
required parameter name="table-name",
vars=list( list(
format="string",
formattedLength=integer,
label="string",
required parameter name="variable-name",
nfd=integer,
nfl=integer
) <, list(...)>),
where="where-expression",
whereTable=list(
casLib="string"
importOptions=list(fileType="ANY" | "AUDIO" | "AUTO" | "BASESAS" | "CSV" | "DELIMITED" | "DOCUMENT" | "DTA" | "ESP" | "EXCEL" | "FMT" | "HDAT" | "IMAGE" | "JMP" | "LASR" | "PARQUET" | "SOUND" | "SPSS" | "VIDEO" | "XLS", fileType-specific-parameters)
required parameter name="table-name"
vars=list( list(
format="string",
formattedLength=integer,
label="string",
required parameter name="variable-name",
nfd=integer,
nfl=integer
) <, list(...)>)
where="where-expression"
)
),
linksVar=list(
auxWeight="variable-name",
from="variable-name",
lower="variable-name",
to="variable-name",
upper="variable-name",
vars=list("variable-name-1" <, "variable-name-2", ...>),
varsOut=list("variable-name-1" <, "variable-name-2", ...>),
weight="variable-name"
),
logFreq=integer,
logFreqTime=integer,
maxNodes=integer,
maxRoutes=integer,
maxSols=integer,
maxTime=double,
milp=TRUE | FALSE,
minRoutes=integer,
multiLinks=TRUE | FALSE,
nodes=list(
caslib="string",
computedOnDemand=TRUE | FALSE,
computedVars=list( list(
format="string",
formattedLength=integer,
label="string",
required parameter name="variable-name",
nfd=integer,
nfl=integer
) <, list(...)>),
dataSourceOptions=list(key-1=list(any-list-or-data-type-1) <, key-2=list(any-list-or-data-type-2), ...>),
importOptions=list(fileType="ANY" | "AUDIO" | "AUTO" | "BASESAS" | "CSV" | "DELIMITED" | "DOCUMENT" | "DTA" | "ESP" | "EXCEL" | "FMT" | "HDAT" | "IMAGE" | "JMP" | "LASR" | "PARQUET" | "SOUND" | "SPSS" | "VIDEO" | "XLS", fileType-specific-parameters),
required parameter name="table-name",
vars=list( list(
format="string",
formattedLength=integer,
label="string",
required parameter name="variable-name",
nfd=integer,
nfl=integer
) <, list(...)>),
where="where-expression",
whereTable=list(
casLib="string"
importOptions=list(fileType="ANY" | "AUDIO" | "AUTO" | "BASESAS" | "CSV" | "DELIMITED" | "DOCUMENT" | "DTA" | "ESP" | "EXCEL" | "FMT" | "HDAT" | "IMAGE" | "JMP" | "LASR" | "PARQUET" | "SOUND" | "SPSS" | "VIDEO" | "XLS", fileType-specific-parameters)
required parameter name="table-name"
vars=list( list(
format="string",
formattedLength=integer,
label="string",
required parameter name="variable-name",
nfd=integer,
nfl=integer
) <, list(...)>)
where="where-expression"
)
),
nodesVar=list(
lower="variable-name",
node="variable-name",
upper="variable-name",
vars=list("variable-name-1" <, "variable-name-2", ...>),
varsOut=list("variable-name-1" <, "variable-name-2", ...>),
weight="variable-name"
),
nThreads=integer,
out=list(
caslib="string",
compress=TRUE | FALSE,
indexVars=list("variable-name-1" <, "variable-name-2", ...>),
label="string",
lifetime=64-bit-integer,
maxMemSize=64-bit-integer,
memoryFormat="DVR" | "INHERIT" | "STANDARD",
name="table-name",
onDemand=TRUE | FALSE,
promote=TRUE | FALSE,
replace=TRUE | FALSE,
replication=integer,
threadBlockSize=64-bit-integer,
timeStamp="string",
where=list("string-1" <, "string-2", ...>)
),
outGraphList=list(
caslib="string",
compress=TRUE | FALSE,
indexVars=list("variable-name-1" <, "variable-name-2", ...>),
label="string",
lifetime=64-bit-integer,
maxMemSize=64-bit-integer,
memoryFormat="DVR" | "INHERIT" | "STANDARD",
name="table-name",
onDemand=TRUE | FALSE,
promote=TRUE | FALSE,
replace=TRUE | FALSE,
replication=integer,
threadBlockSize=64-bit-integer,
timeStamp="string",
where=list("string-1" <, "string-2", ...>)
),
outLinks=list(
caslib="string",
compress=TRUE | FALSE,
indexVars=list("variable-name-1" <, "variable-name-2", ...>),
label="string",
lifetime=64-bit-integer,
maxMemSize=64-bit-integer,
memoryFormat="DVR" | "INHERIT" | "STANDARD",
name="table-name",
onDemand=TRUE | FALSE,
promote=TRUE | FALSE,
replace=TRUE | FALSE,
replication=integer,
threadBlockSize=64-bit-integer,
timeStamp="string",
where=list("string-1" <, "string-2", ...>)
),
outNodes=list(
caslib="string",
compress=TRUE | FALSE,
indexVars=list("variable-name-1" <, "variable-name-2", ...>),
label="string",
lifetime=64-bit-integer,
maxMemSize=64-bit-integer,
memoryFormat="DVR" | "INHERIT" | "STANDARD",
name="table-name",
onDemand=TRUE | FALSE,
promote=TRUE | FALSE,
replace=TRUE | FALSE,
replication=integer,
threadBlockSize=64-bit-integer,
timeStamp="string",
where=list("string-1" <, "string-2", ...>)
),
outputTables=list(
groupByVarsRaw=TRUE | FALSE,
includeAll=TRUE | FALSE,
names=list("string-1" <, "string-2", ...>) | list(key-1=list(casouttable-1) <, key-2=list(casouttable-2), ...>),
repeated=TRUE | FALSE,
replace=TRUE | FALSE
),
relObjGap=double,
selfLinks=TRUE | FALSE,
standardizedLabels=TRUE | FALSE,
standardizedLabelsOut=TRUE | FALSE,
target=double,
)

Summary: Input and Output Tables

If a row includes a subparameter, you can specify the name, caslib, and so on in the subparameter. Otherwise, you can specify the name, caslib, and so on in the parameter.

Parameters for Reading Input Tables

Parameter

Subparameter

Description

 links

—

specifies the input data table that contains the graph link information.

 nodes

—

specifies the input data table that contains the graph node information.

Parameters for Creating Output Tables

Parameter

Subparameter

Description

 out

—

specifies the output data table for the vehicle routing problem.

 outGraphList

—

specifies the output data table to contain summary information about in-memory graphs.

 outLinks

—

specifies the output data table to contain the graph link information along with any results from the algorithms that calculate metrics on links.

 outNodes

—

specifies the output data table to contain the graph node information along with any results from the algorithms that calculate metrics on nodes.

 outputTables

names

lists the names of results tables to save as CAS tables on the server.

Parameter Descriptions

absObjGap=double

specifies a stopping criterion. When the absolute difference between the best integer objective and the objective of the best remaining branch-and-bound node becomes less than this value, the solver stops.

AliasabsoluteObjectiveGap
Default1E-06
Minimum value0

capacity=double

specifies the capacity of each vehicle. The capacity is the maximum amount of goods that a vehicle can pick up from the depot to be delivered to customers. The default is the largest number that can be represented by a double.

Minimum value (exclusive)0

cutoff=double

cuts off any branch-and-bound nodes in a minimization problem that has an objective value at or above this value. The default is the largest number that can be represented by a double.

cutStrategy="AGGRESSIVE" | "AUTOMATIC" | "MODERATE" | "NONE"

specifies the level of mixed integer linear programming cutting planes to be generated. Cutting planes that are specific to the vehicle routing problem (VRP) are always generated.

DefaultAUTOMATIC
AGGRESSIVE

uses an aggressive cut strategy.

AUTOMATIC

generates cutting planes on the basis of a strategy that the action determines.

MODERATE

uses a moderate cut strategy.

NONE

disables the generation of mixed integer linear programming cutting planes (some problem-specific cutting planes are still active for validity)

depot="string" | double

specifies the depot node for the vehicle routing problem. The centralized depot is the source of goods to be delivered to customers (nodes). You must specify this parameter.

deterministic=TRUE | FALSE

when set to True, ensures that each invocation (with the same machine configuration and parameter settings) produces the same final result.

DefaultTRUE

direction="DIRECTED" | "UNDIRECTED"

specifies whether to consider the input graph as directed or undirected.

DefaultUNDIRECTED
DIRECTED

considers the input graph to be directed. In a directed graph, each link (i,j) has a direction that defines how something (such as information) can flow over that link. In link (i,j), the flow is from node i to node j. Node i is called the source (tail) node, and node j is called the sink (head) node.

UNDIRECTED

considers the input graph to be undirected. In an undirected graph, each link {i,j} has no direction, and the flow can be in either direction. That is, {i,j} = {j,i}.

display=list(displayTables)

specifies a list of results tables to send to the client for display.

For more information about specifying the display parameter, see the common displayTables parameter (Appendix A: Common Parameters).

distributed=TRUE | FALSE

when set to True, uses a distributed graph.

DefaultFALSE

graph=integer

specifies the in-memory graph to use.

Default-1

heuristics="AGGRESSIVE" | "AUTOMATIC" | "BASIC" | "MODERATE" | "NONE"

determines how frequently the algorithm applies primal heuristics during the branch-and-bound tree search and affects the maximum number of iterations that are allowed in iterative heuristics. Some computationally expensive heuristics might be disabled by the solver at less aggressive levels.

DefaultAUTOMATIC
AGGRESSIVE

applies all primal heuristics at high frequency.

AUTOMATIC

applies the default level of heuristics.

BASIC

applies basic primal heuristics at low frequency.

MODERATE

applies most primal heuristics at moderate frequency.

NONE

disables all primal heuristics.

indexOffset=integer

specifies the index offset for identifiers in the log and results output data tables. For example, if three entities are found, they are labeled entity 0, 1, and 2 by default. If the value of indexOffset is 4, the entities are labeled entity 4, 5, and 6.

Default0
Minimum value0

specifies the input data table that contains the graph link information.

Long formlinks=list(name="table-name")
Shortcut formlinks="table-name"

The castable value can be one or more of the following:

specifies the caslib for the input table that you want to use with the action. By default, the active caslib is used. Specify a value only if you need to access a table from a different caslib.

when set to True, creates the computed variables when the table is loaded instead of when the action begins.

AliascompOnDemand
DefaultFALSE

specifies the names of the computed variables to create. Specify an expression for each variable in the computedVarsProgram parameter. If you do not specify this parameter, then all variables from computedVarsProgram are automatically included.

AliascompVars

The casinvardesc value can be one or more of the following:

specifies the format to apply to the variable.

specifies the length of format field plus the length of the format precision.

specifies the descriptive label for the variable.

specifies the name for the variable.

specifies the length of the format precision.

specifies the length of the format field.

specifies an expression for each computed variable that you include in the computedVars parameter.

AliascompPgm

specifies data source options.

Aliasesoptions
dataSource

specifies the names of the variables to use for grouping results.

The casinvardesc value can be one or more of the following:

specifies the format to apply to the variable.

specifies the length of format field plus the length of the format precision.

specifies the descriptive label for the variable.

specifies the name for the variable.

specifies the length of the format precision.

specifies the length of the format field.

specifies the settings for reading a table from a data source.

Aliasimport

For more information about specifying the importOptions parameter, see the common importOptions parameter (Appendix A: Common Parameters).

specifies the name of the input table.

specifies the variables to use in the action.

The casinvardesc value can be one or more of the following:

specifies the format to apply to the variable.

specifies the length of format field plus the length of the format precision.

specifies the descriptive label for the variable.

specifies the name for the variable.

specifies the length of the format precision.

specifies the length of the format field.

specifies an expression for subsetting the input data.

specifies an input table that contains rows to use as a WHERE filter. If the vars parameter is not specified, then all the variable names that are common to the input table and the filtering table are used to find matching rows. If the where parameter for the input table and this parameter are specified, then this filtering table is applied first.

The groupbytable value can be one or more of the following:

specifies the caslib for the filter table. By default, the active caslib is used.

specifies the settings for reading a table from a data source.

Aliasimport

For more information about specifying the importOptions parameter, see the common importOptions parameter (Appendix A: Common Parameters).

specifies the name of the filter table.

specifies the variable names to use from the filter table.

The casinvardesc value can be one or more of the following:

specifies the format to apply to the variable.

specifies the length of format field plus the length of the format precision.

specifies the descriptive label for the variable.

specifies the name for the variable.

specifies the length of the format precision.

specifies the length of the format field.

specifies an expression for subsetting the data from the filter table.

linksVar=list(linksVarOpt)

specifies the data variable names for the links table.

For more information about specifying the linksVar parameter, see the common linksVarOpt parameter (Appendix A: Common Parameters).

logFreq=integer

specifies the time interval, n (in seconds), for printing information in the node log. If n = 0, then the node log is disabled. If n > 0, then the root node processing information is printed and, if possible, an entry is made every n seconds. An entry is also made each time a better integer solution is found.

AliaslogFrequency
Default5
Minimum value0

logFreqTime=integer

controls the frequency n (in seconds) for displaying iteration logs for some algorithms, where n can be any integer greater than or equal to 1. This parameter is useful for computationally intensive algorithms. Setting n too low can hurt algorithm performance.

AliaslogFrequencyTime
Default5
Minimum value1

logLevel="AGGRESSIVE" | "BASIC" | "MODERATE" | "NONE"

controls the amount of information that is displayed in the SAS log.

DefaultBASIC
AGGRESSIVE

displays a more detailed summary of the input, output, and algorithmic processing.

BASIC

displays a brief summary of the algorithmic processing.

MODERATE

displays a moderately detailed summary of the input, output, and algorithmic processing.

NONE

turns off all action-related messages in the SAS log.

maxNodes=integer

specifies the maximum number of branch-and-bound nodes to be processed. The default is the largest number that can be represented by a 32-bit integer.

Minimum value0

maxRoutes=integer

specifies the maximum number of routes allowed to service demand. The specified value must be a 32-bit integer greater than or equal to 1. The default is the largest number that can be represented by a 32-bit integer.

Minimum value1

maxSols=integer

specifies a stopping criterion. If the number of solutions that are found is greater than or equal to this value, then the algorithm stops. The default is the largest number that can be represented by a 32-bit integer.

Minimum value1

maxTime=double

specifies the maximum amount of time for the algorithm to spend. The default is the largest number that can be represented by a double.

Minimum value (exclusive)0

milp=TRUE | FALSE

when set to True, uses a mixed integer linear programming (MILP) solver to solve the vehicle routing problem (VRP). The MILP solver attempts to find the overall best routes by using a branch-and-cut algorithm. This algorithm can be expensive for large-scale problems. If this value is False, the algorithm uses its initial heuristics to find a feasible, but not necessarily optimal, tour as quickly as possible.

DefaultTRUE

minRoutes=integer

specifies the minimum number of routes allowed to service demand. The specified value must be a 32-bit integer greater than or equal to 1.

Default1
Minimum value1

when set to True, includes multilinks when an input graph is read. By default, the value of this parameter is True for algorithms that support multilinks.

nodes=list(castable)

specifies the input data table that contains the graph node information.

Long formnodes=list(name="table-name")
Shortcut formnodes="table-name"

The castable value can be one or more of the following:

caslib="string"

specifies the caslib for the input table that you want to use with the action. By default, the active caslib is used. Specify a value only if you need to access a table from a different caslib.

computedOnDemand=TRUE | FALSE

when set to True, creates the computed variables when the table is loaded instead of when the action begins.

AliascompOnDemand
DefaultFALSE
computedVars=list( list(casinvardesc-1) <, list(casinvardesc-2), ...>)

specifies the names of the computed variables to create. Specify an expression for each variable in the computedVarsProgram parameter. If you do not specify this parameter, then all variables from computedVarsProgram are automatically included.

AliascompVars

The casinvardesc value can be one or more of the following:

format="string"

specifies the format to apply to the variable.

formattedLength=integer

specifies the length of format field plus the length of the format precision.

label="string"

specifies the descriptive label for the variable.

* name="variable-name"

specifies the name for the variable.

nfd=integer

specifies the length of the format precision.

nfl=integer

specifies the length of the format field.

computedVarsProgram="string"

specifies an expression for each computed variable that you include in the computedVars parameter.

AliascompPgm
dataSourceOptions=list(key-1=list(any-list-or-data-type-1) <, key-2=list(any-list-or-data-type-2), ...>)

specifies data source options.

Aliasesoptions
dataSource
importOptions=list(fileType="ANY" | "AUDIO" | "AUTO" | "BASESAS" | "CSV" | "DOCUMENT" | "DTA" | "ESP" | "EXCEL" | "FMT" | "HDAT" | "IMAGE" | "JMP" | "LASR" | "PARQUET" | "SPSS" | "VIDEO" | "XLS", fileType-specific-parameters)

specifies the settings for reading a table from a data source.

Aliasimport

For more information about specifying the importOptions parameter, see the common importOptions parameter (Appendix A: Common Parameters).

* name="table-name"

specifies the name of the input table.

vars=list( list(casinvardesc-1) <, list(casinvardesc-2), ...>)

specifies the variables to use in the action.

The casinvardesc value can be one or more of the following:

format="string"

specifies the format to apply to the variable.

formattedLength=integer

specifies the length of format field plus the length of the format precision.

label="string"

specifies the descriptive label for the variable.

* name="variable-name"

specifies the name for the variable.

nfd=integer

specifies the length of the format precision.

nfl=integer

specifies the length of the format field.

where="where-expression"

specifies an expression for subsetting the input data.

whereTable=list(groupbytable)

specifies an input table that contains rows to use as a WHERE filter. If the vars parameter is not specified, then all the variable names that are common to the input table and the filtering table are used to find matching rows. If the where parameter for the input table and this parameter are specified, then this filtering table is applied first.

The groupbytable value can be one or more of the following:

casLib="string"

specifies the caslib for the filter table. By default, the active caslib is used.

importOptions=list(fileType="ANY" | "AUDIO" | "AUTO" | "BASESAS" | "CSV" | "DOCUMENT" | "DTA" | "ESP" | "EXCEL" | "FMT" | "HDAT" | "IMAGE" | "JMP" | "LASR" | "PARQUET" | "SPSS" | "VIDEO" | "XLS", fileType-specific-parameters)

specifies the settings for reading a table from a data source.

Aliasimport

For more information about specifying the importOptions parameter, see the common importOptions parameter (Appendix A: Common Parameters).

* name="table-name"

specifies the name of the filter table.

vars=list( list(casinvardesc-1) <, list(casinvardesc-2), ...>)

specifies the variable names to use from the filter table.

The casinvardesc value can be one or more of the following:

format="string"

specifies the format to apply to the variable.

formattedLength=integer

specifies the length of format field plus the length of the format precision.

label="string"

specifies the descriptive label for the variable.

* name="variable-name"

specifies the name for the variable.

nfd=integer

specifies the length of the format precision.

nfl=integer

specifies the length of the format field.

where="where-expression"

specifies an expression for subsetting the data from the filter table.

nodesVar=list(nodesVarOpt)

specifies the data variable names for the nodes table.

For more information about specifying the nodesVar parameter, see the common nodesVarOpt parameter (Appendix A: Common Parameters).

nThreads=integer

specifies the maximum number of threads to use for multithreaded processing.

Range1–1024

out=list(casouttable)

specifies the output data table for the vehicle routing problem.

For more information about specifying the out parameter, see the common casouttable parameter (Appendix A: Common Parameters).

outGraphList=list(casouttable)

specifies the output data table to contain summary information about in-memory graphs.

For more information about specifying the outGraphList parameter, see the common casouttable parameter (Appendix A: Common Parameters).

specifies the output data table to contain the graph link information along with any results from the algorithms that calculate metrics on links.

For more information about specifying the outLinks parameter, see the common casouttable parameter (Appendix A: Common Parameters).

outNodes=list(casouttable)

specifies the output data table to contain the graph node information along with any results from the algorithms that calculate metrics on nodes.

For more information about specifying the outNodes parameter, see the common casouttable parameter (Appendix A: Common Parameters).

outputTables=list(outputTables)

lists the names of results tables to save as CAS tables on the server.

For more information about specifying the outputTables parameter, see the common outputTables parameter (Appendix A: Common Parameters).

AliasdisplayOut

relObjGap=double

specifies a stopping criterion that is based on the best integer objective and the objective of the best remaining node.

AliasrelativeObjectiveGap
Default0.0001
Minimum value0

when set to True, includes self-links when an input graph is read.

DefaultTRUE

standardizedLabels=TRUE | FALSE

when set to True, specifies that the input graph data are in a standardized format.

DefaultFALSE

standardizedLabelsOut=TRUE | FALSE

when set to True, requests that the output graph data include standardized format.

DefaultFALSE

target=double

specifies a stopping criterion for minimization problems. If the best integer objective is less than or equal to this value, the solver stops. The default is the largest (in magnitude) negative number that can be represented by a double.

timeType="CPU" | "REAL"

specifies whether to use CPU time or real time for the maximum time limit.

DefaultREAL
CPU

specifies units of CPU time. The time restriction is applied per processing machine (not across all machines).

REAL

specifies units of real time.

Result Descriptions

ProblemSummary

contains a basic summary of the graph input. The result is a table. You can access the value from results.ProblemSummary.

SolutionSummary

contains a basic solution summary for the algorithm. The result is a table. You can access the value from results.SolutionSummary.

absObjGap

indicates the absolute gap between the best integer objective and the objective of the best remaining node upon termination of the solver. The result is a double. You can access the value from results.absObjGap.

bestBound

indicates the best linear programming objective value of all unprocessed nodes in the branch-and-bound tree at the end of execution. The result is a double. You can access the value from results.bestBound.

boundInf

indicates the maximum (absolute) violation by the solution of the lower or upper bounds (or both). The result is a double. You can access the value from results.boundInf.

integerInf

indicates the maximum (absolute) violation of the integrality of integer variables that are returned by the solver. The result is a double. You can access the value from results.integerInf.

numIterations

indicates the number of simplex iterations taken to solve the problem. The result is an integer. You can access the value from results.numIterations.

numNodes

specifies the number of nodes enumerated by the solver by using the branch-and-bound algorithm. The result is an integer. You can access the value from results.numNodes.

numSolutions

indicates the number of feasible solutions found. The result is an integer. You can access the value from results.numSolutions.

objective

indicates the objective value that the solver obtains at termination. The result is a double. You can access the value from results.objective.

primalInf

indicates the maximum (absolute) violation of the primal constraints by the solution. The result is a double. You can access the value from results.primalInf.

relObjGap

indicates the relative gap between the best integer objective and the objective of the best remaining node upon termination of the solver. The result is a double. You can access the value from results.relObjGap.

solutionStatus

indicates the solution status of the selected problem type (algorithm class). The result is a string. You can access the value from results.solutionStatus.

Last updated: June 29, 2021