LocalSolver快速入门指南(连载二十三) ---- 列表、集合变量3

Local Solver 列表变量特定的操作符

at运算符允许访问列表中给定位置的值。它需要两个操作数:一个列表和一个整数表达式(不一定是常量)。当给定索引为负或大于或等于countx)时,它返回-1

例如,以下模型中的目标函数是最大化列表中第一项和最后一项的乘积:

x <- list(5);
constraint count(x) > 0;
maximize x[0] * x[count(x)-1];

 

indexOf运算符返回给定整数在列表中的位置,如果该整数未包含在列表中,则返回-1。它需要两个操作数:一个列表和一个整数表达式(不一定是常量)。例如,给定一个大小为n的矩阵c,线性排序问题在于寻找最小代价的[0..n-1]的排列,其中当j在排序中在i之前时支付代价c[i][j]。以下是相应的模型表达:

x <- list(n);
constraint count(x) == n;
minimize sum[i in 0..n-1][j in 0..n-1](c[i][j] * (indexOf(x,i) > indexOf(x,j)));

 

使用列表变量进行建模

在路由问题的背景下,列表变量可以用来对各种问题建模。为了指定必须访问的所有城市,一个纯旅行商问题(TSP)用一个列表x建模,列表x有一个约束count(x)==n。这一限制将被省略为“奖金收集旅行商问题”,对不在旅途中的城市支付一个罚款。

k为卡车数量时,车辆路径问题(VRP)将用k个列表进行建模。对于一个经典的VRP,这些列表将被限制成一个分区(操作符partition),而对于一个奖金收集VRP问题,只需要它们的不相交性(操作符disjoint)

距离可以以矩阵的形式给出,用at运算符访问,也可以显式地计算出(例如用运算符powsrqt计算欧氏距离)

详细的路由和调度示例可以在我们的示例之旅中找到。学习中更多问题请联系LocalSolver中国总代理无锡迅合信息科技有限公司数学工程师。未完待续~~~~

Guess you like

Origin blog.csdn.net/qq_31243247/article/details/117995313