目录
在使用lingo集合语言编程中,我们经常使用到for和sum这两个函数,本文以实测示例对这两个函数的使用方法进行介绍
1 sum函数
使用语法:
@sum(集合(下标):集合表达式) |
冒号之前定义要参与求和的下标,之后定义与前述下标相关的集合表达式
代码示例
表达方式 | 示例 |
数学表达式 | |
Lingo编码 | min = @sum(arc(i,j) : x(i) * d(i,j)); |
Latex编码 | min = \sum_{i = 1}^{3}\sum_{j=1}^{3}x(i)*d(i,j) |
2 for函数
使用方法:
@for(集合(下标)[|逻辑表达式] : 集合表达式); |
冒号之前定义要参与求和的下标,之后定义与前述下标相关的集合表达式;逻辑表达式定义了存在于下标之间的约束关系
表达方式 | 示例 |
数学表达式 | |
Lingo编码 | @for(node(i) : x(i) < 10); |
Latex编码 | x(i) < 10; i \in \{1,2,3\} |
@for(CXC:@BIN(X)); 经集合X中所有元素设置为二进制变量,CXC为集合X为集合的实例
3 一个示意性的演示程序
model:
sets:
node/1..3/:x;
arc(node,node):d;
endsets
data:
x = 1,2,4;
d = 1 1 1
2 2 2
3 3 3 ;
enddata
min = @sum(arc(i,j) : x(i) * d(i,j));!单独使用sum函数;
@for(node(i) | i #ne# 2: x(i) < 10);!单独使用for函数,无效约束,只为说明for函数的使用方法;
@for(node(i) : @sum(node(j) : x(i) * d(i,j)) < 10000000);!for与sum结合使用,无效约束,只为说明for函数和sum函数结合使用的方法;
end
如果喜欢我的分享,可关注以下两个公众帐号