OPL 函数的摘要表

提供每个 OPL 函数的语法和简短描述,以及对应完整描述的链接。

下表列出了 OPL 中提供的预定义函数。 它提供了每个函数的语法和简短描述,以及对应的每个完整描述的链接。 它们的形式为:

returnType functionName(argumentType [,argumentType]*)

带有 CP 标记的所有函数都不能在 CPLEX 模型的约束块中使用。

通过指定 Opl 名称空间,可以在 IBM ILOG Script 语句中使用 OPL 函数,如下所示:

( Opl.xxx() )

例如,对于 abs 函数:

int i = 10;

execute {
   var resu = Opl.abs(i);
}

在 OPL 中,当代码包含表时,还可以使用 OPL 关键字 all。 例如,请参阅函数 allDifferent

表 1. 预定义的 OPL 函数
函数 描述
cumulFunction int<=(调度) 累积函数的约束(调度)。
float abs(float) 绝对值

boolean allDifferent(int[ ])

boolean allDifferent(dvar int[ ]

CP。 数组中的所有整数变量都采用不同的值。

boolean allMinDistance(int[ ],int)

boolean allMinDistance(dvar int[ ],int)

CP。 作为第一个自变量给出的数组中包含的所有整数变量两两进行比较时,相差值至少等于第二个自变量给出的值。

boolean allowedAssignments({<tuple type>}, int, ...)

boolean allowedAssignments({<tuple type>}, dvar int, ...)

CP。 针对多个整数决策变量允许的值组合。
boolean 替代项(dvar interval, dvar interval[ ]) 在区间之间创建排他备选区间(调度)。
boolean alwaysConstant(stateFunction,int,int, [,int,int]) 用于在状态函数上保持恒定性的约束(调度)。
boolean alwaysEqual(stateFunction,int,int, int[,int,int]) 用于在状态函数上保持常量值的约束(调度)。
boolean alwaysIn(*function,int,int,int,int) 用于在状态或累积函数上保持恒定范围的约束(调度)。
boolean alwaysNoState(stateFunction,int,int) 用于在状态函数上保持空状态的约束(调度)。

int[ ]append(int[ ], ...)

interval[ ] append(interval[ ], ...)

CP。 合并整数数组。
{int}asSet(range-int) 将整数范围转换为整数集。
boolean before(dvar sequence, dvar interval, dvar interval) 将一个区间安排到序列中另一个区间前面(调度)。
int card(set) 集、数字或项的基数
float ceil(float) 上限:大于等于某个数字的最小整数

int count(int[ ],int)

int count(dvar int[ ],int) )

CP。 计算数组中有多少个变量等于作为第二个自变量给出的值。
int cumulFunctionValue (cumulFunction, int) 在特定时间返回累积函数的值(调度)。
float distToInt(float)

与最近整数的距离:

abs(x-round(x))

float dual(ct) 从约束获取对偶值。 在后处理上下文中使用。

float element(*[range], int n)

float element(*[range], dexpr int n)

float element(*[range], dvar int n)

int element(*[range], int n)

int element(*[range], dexpr int n)

int element(*[range], dvar int n)

CP。 返回其索引为 n 的元素。
boolean endAtEnd(dvar interval, dvar interval, dexpr int) 对区间结束时间的约束(调度)。
boolean endAtStart(dvar interval, dvar interval, dexpr int) 对区间结束和开始时间的约束(调度)。
boolean endBeforeEnd(dvar interval, dvar interval, dexpr int) 对区间结束时间的约束(调度)。
boolean endBeforeStart(dvar interval, dvar interval, dexpr int) 对区间结束和开始时间的约束(调度)。
dexpr float endEval(dvar interval, pwlFunction[,float]) 对区间结束时的函数求值(调度)。
dexpr int endOf (dvar interval, [,int]) 返回区间结束(调度)。
dexpr int e = endOfNext(p, a ,nVal [,absVal]); 返回给定序列中下一个区间的结束(调度)。
dexpr int e = endOfPrev(p, a ,pVal [,absVal]); 返回给定序列中前一个区间的结束(调度)。
float exp(float) 自然指数函数

int first({int})

float first({float})

string first({string})

<tuple type> first({<tuple type>})

返回整数集、浮点数集、字符串集或元组集中的第一个元素。
boolean first(dvar sequence, dvar interval) 将区间变量排在序列中的第一位(调度)。
float floatValue(string) 将字符串转换为浮点值。
float floor(float) 下限:小于等于某个数字的最大整数

boolean forbiddenAssignments({<tuple type>}, int, ...)

boolean forbiddenAssignments({<tuple type>}, dvar int, ...)

CP。 针对多个整数决策变量禁止的值组合
boolean forbidEnd(dvar interval, stepFunction) 限制区间的结束时间(调度)。
boolean forbidExtent(dvar interval, stepFunction) 限制区间的可用时间(调度)。
boolean forbidStart(dvar interval, stepFunction) 限制区间的开始时间(调度)。
float frac(float) 小数部分
int ftoi(float) 将浮点数转换为整数而不会产生截断或错误。
dexpr int heightAtEnd(dvar interval, cumulFunction) 在区间结束点处将区间添加返回到函数。
dexpr int heightAtStart(dvar interval, cumulFunction) 在区间开始点处将区间添加返回到函数。
int intValue(string) 将字符串转换为整数值。

boolean inverse(int[],int[])

boolean inverse(dvar int[ ],int[])

采用两个整数变量数组,这两个数组必须以整数编制索引且必须是一维数组。

isomorphism(A, B);

isomorphism(A, B, M, v);

where

dvar interval A[];

dvar interval B[];

dvar int M[];

dexpr int v;

用于对两个数组中存在的区间之间的一对一对应关系建模(调度)。

int item({int},int)

float item({float},int)

string item({string},int)

<tuple type> item({<tuple type>},int)

授予对某个集的第 n 个项的访问权。

计数从 0 算起。

int last({int})

float last({float})

string last({string})

<tuple type> last({<tuple type>})

返回整数集、浮点数集、字符串集或元组集中的最后一个元素。
boolean last (dvar sequence, dvar interval) 将区间变量排在序列中的最后一位(调度)。
int length(string) 返回字符串中的字符数。
dexpr float lengthEval (dvar interval, pwlFunction[,float]) 对区间长度函数求值(调度)。
dexpr int lengthOf (dvar interval, [,int]) 返回区间长度(调度)。
dexpr int l = lengthOfNext(p, a ,nVal [,absVal]); 返回给定序列中下一个区间的长度(调度)。
dexpr int l = lengthOfPrev(p, a ,pVal [,absVal]); 返回给定序列中前一个区间的长度(调度)。
boolean lex(int[ ],int[ ]); 比较决策变量数组与字母数字顺序。
float lg(float) 以 2 为底的对数
float ln(float) 自然对数
float 日志(float) 以 10 为底的对数
int matchAt(string,string) 获取字符串中某个子字符串的第一个位置。

int maxl(int, ...)

float maxl(float,...)

一列整数或浮点值中的最大值

int minl(int, ...)

float minl(float,...)

一列整数或浮点值中的最小值

int next({int},int)

float next({float},float)

string next({string},string)

<tuple type> next({<tuple type>},<tuple type>)

返回整数集、浮点数集、字符串集或元组集中的下一个元素。

int next({int},int,int)

float next({float},float,int)

string next({string},string,int)

<tuple type> next({<tuple type>},<tuple type>,int)

返回整数集、浮点数集、字符串集或元组集中的下一个元素。 第三个自变量 (int) 指示要移动的位置数。 将该自变量设置为 1 等效于调用具有两个自变量的该函数。

int nextc({int},int)

float nextc({float},float)

string nextc({string},string)

<tuple type> nextc({<tuple type>},<tuple type>)

等效 next 函数的循环版本:如果第二个自变量是最后一个元素,则返回集的第一个元素。

int nextc({int},int,int)

float nextc({float},float,int)

string nextc({string},string,int)

<tuple type> nextc({<tuple type>},<tuple type>,int)

等效 next 函数的循环版本:如果第二个自变量是最后一个元素,则返回集的第一个元素。 第三个自变量 (int) 指示要移动的位置数。 将该自变量设置为 1 等效于调用具有两个自变量的该函数。
boolean noOverlap(dvar sequence, [,{tuple}]) 不允许序列中的区间重叠(调度)。
int numberOfSegments(cumulFunction) 返回解法中某个累积函数中的段数(调度)。

int ord({int},int)

int ord({float},float)

int ord({string},string)

int ord({<tuple type>},<tuple type>)

返回整数集、浮点数集、字符串集或元组集中的某个元素的位置。

dexpr int overlapLength(dvar interval, dvar interval)

dexpr int overlapLength(dvar interval, dvar interval, int)

dexpr int overlapLength(dvar interval, int, int)

dexpr int overlapLength(dvar interval, int, int, int)

返回一个表达式来表示两个区间变量的重叠长度,或者一个区间变量和一个固定区间的重叠长度。

boolean pack(int[],int[],int[])

boolean pack(dvar int[ ],dvar int[ ],int[])

boolean pack(int[],int[],int[],int)

boolean pack(dvar int[ ],dvar int[ ],int[],dvar int)

CP。 在给定一组加权项和项到容器的分配后,保持一组容器或分箱的负载。
float pow(float,float) 计算浮点值的幂值。
boolean presenceOf(dvar interval) 指定某个区间必须存在(调度)。

int prev({int},int)

float prev({float},float)

string prev({string},string)

<tuple type> prev({<tuple type>},<tuple type>)

返回整数集、浮点数集、字符串集或元组集中的前一个元素。

int prev({int},int,int)

float prev({float},float,int)

string prev({string},string,int)

<tuple type> prev({<tuple type>},<tuple type>,int)

返回整数集、浮点数集、字符串集或元组集中的前一个元素。 第三个自变量 (int) 指示要移动的位置数。 将该自变量设置为 1 等效于调用具有两个自变量的该函数。
boolean prev (dvar sequence, dvar interval, dvar interval) 将一个区间安排到紧靠序列中另一个区间的前面(调度)。

int prevc({int},int)

float prevc({float},float)

string prevc({string},string)

<tuple type> prevc({<tuple type>},<tuple type>)

等效 prev 函数的循环版本:如果第二个自变量是第一个元素,则返回集的最后一个元素。

int prevc({int},int,int)

float prevc({float},float,int)

string prevc({string},string,int)

<tuple type> prevc({<tuple type>},<tuple type>,int)

等效 prev 函数的循环版本:如果第二个自变量是第一个元素,则返回集的最后一个元素。
cumulFunction pulse(dvar interval, int, int) 针对区间变量或一段时间的累积函数的表达式(调度)。

int rand(int)

int rand(void)

返回随机非负整数,限制于

x-1。

返回随机非负整数,限制于 maxint-1。

float reducedCost(var) 从决策变量获取降低的成本值。 在后处理上下文中使用。
float round(float) 返回最接近的整数,下限 (x+0.5)。

boolean sameCommonSubsequence(dvar sequence, dvar sequence)

boolean sameCommonSubsequence(dvar sequence, dvar sequence, dvar interval[], dvar interval[])

对一对序列变量的二元约束。 该约束声明区间变量的某些相关子集的相对位置在两个序列中是相同的。

boolean sameSequence(dvar sequence, dvar sequence)

boolean sameSequence(dvar sequence, dvar sequence, dvar interval[], dvar interval[])

对一对序列变量的二元约束。 该约束声明相关区间变量的相对位置在两个序列中是相同的。
int segmentEnd(cumulFunction, int) 返回解法中累积函数的索引段结束(调度)。
int segmentStart(cumulFunction, int) 返回解法中累积函数的索引段开始(调度)。
int segmentValue(cumulFunction, int) 返回解法中累积函数的索引段值(调度)。
int sgn(dexpr float); 表达式的符号
dexpr float sizeEval (dvar interval, pwlFunction[,float]) 对区间大小函数求值(调度)。
dexpr int sizeOf (dvar interval, [,int]) 返回区间大小(调度)。
dexpr int sz = sizeOfNext(p, a ,nVal [,absVal]); 返回给定序列中下一个区间的大小(调度)。
dexpr int sz = sizeOfPrev(p, a ,pVal [,absVal]); 返回给定序列中前一个区间的大小(调度)。
float slack(ct) 从约束获取松弛值。 在后处理上下文中使用。
boolean 跨越(dvar interval, dvar interval[ ]) 用于让一个区间横跨一组其他区间(调度)。
float sqrt(float) 抽取浮点数的平方根。
int srand(int) 植入随机计算。

float standardDeviationint[ ]):float

float standardDeviation(dvar int[ ])

数组的标准差
boolean startAtEnd(dvar interval, dvar interval, dexpr int) 对区间开始和结束的约束(调度)。
boolean startAtStart(dvar interval, dvar interval, dexpr int) 对区间开始时间的约束(调度)。
boolean startBeforeEnd(dvar interval, dvar interval, dexpr int) 对区间开始和结束的约束(调度)。
boolean startBeforeStart(dvar interval, dvar interval, dexpr int) 对区间开始时间的约束(调度)。
dexpr float startEval (dvar interval, pwlFunction[,float]) 对区间开始时的函数求值(调度)。
dexpr int startOf (dvar interval, [,int]) 返回区间开始(调度)。
dexpr int s = startOfNext(p, a ,nVal [,absVal]); 返回给定序列中下一个区间的开始(调度)。
dexpr int s = startOfPrev(p, a ,pVal [,absVal]); 返回给定序列中前一个区间的开始(调度)。
int stateFunctionValue (stateFunction, int) 返回特定时间的状态函数的值(调度)。
minimize staticLex (dexpr, dexpr) )

maximize staticLex (dexpr, dexpr)

由 CP Optimizer 在具有多条件目标的模型中使用。
cumulFunction step (int, int) 在某一时间点的累积函数的表达式(调度)。
cumulFunction stepAtEnd (dvar interval, int) 在区间结束时的累积函数的表达式(调度)。
cumulFunctionstepAtStart (dvar interval, int) 在区间开始时的累积函数的表达式(调度)。

strong(dvar int [])

boolean strong (dvar int, dvar int, ...)

对于约束规划:给出对一组变量的加强指示。
boolean 同步 (dvar interval, dvar interval[ ]) 用于同步区间的开始和结束(调度)。
float trunc(float) 截断(移除)小数部分。
dexpr int t = typeOfNext(p, a ,nVal [,absVal]); 返回给定序列中下一个区间的类型(调度)。
dexpr int t = typeOfPrev(p, a ,pVal [,absVal]); 返回给定序列中前一个区间的类型(调度)。