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

Local solver列表变量和集合变量操作符

一元操作符和二元操作符

 

count运算符返回集合中的元素数量。例如,以下模型仅表示搜索一个集合的最大元素个数:

x <- set(5);
maximize count(x);

 

contains操作符表示元素出现在集合中。例如,下面的模型使用集合定义了一个背包问题:

knapsack <- set(n);
constraint sum[i in 0..n-1](weight[i] * contains(knapsack, i)) <= capacity;
maximize sum[i in 0..n-1](value[i] * contains(knapsack, i));
 

N元操作符

disjoint)不相交算子适用于共享同一个域的N个列表或N个集合。当所有集合都是成对不相交的(也就是说没有值出现在多个集合中)时,它取值1,否则取值0。它至少需要一个操作数。在下面的例子中,我们试图最大化三个列表中的最小个数。由于它们被约束为不相交,所以这个最大值将为3:

x <- list(10);
y <- list(10);
z <- list(10);
constraint disjoint(x, y, z);
maximize min(count(x), count(y), count(z));

 

 (partition)分区运算符适用于共享同一个域的N个列表或N个集合。当给定的集合构成集合[0,n-1]的一个分区时,它取值1,否则取值0。它至少需要一个操作数。换言之, partition(xcolls) 等价于 disjoint(xcolls) && sum[i in 0..count(xcolls)-1](count(xcolls[i])) == n.

当将项目分配给几个组或容器中的一个时,这些操作符特别有用。每组将由其自己的集合代表。例如,这些项目可能是要分派到几台机器中的一台的任务,或者是要由几辆卡车中的一辆来服务的交货地点。

下一个章节:列表变量特定的操作符》任何问题可咨询LocalSolver中国区独家代理商无锡迅合信息科技有限公司数学工程师。

Guess you like

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