lingo总结
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
lingo总结
集(set)
定义原始集的语法规则:集的名字[/集的成员/][:集成员的属性];
注意:用“[]”表示该部分内容可选。
显式的:
1.sets:
students(集的名字)/John ,Jill,Rose ,Mike(集的成员)/:sex,age(集成员的属性);(成员也可以用空格隔开)
Endsets (记得这儿是不用分号的)
2.集成员不放在集定义中,而在随后的数据部分来定义:
sets:
students:sex,age;
endsets
data:
students,sex,age= John 1 16
Jill 0 14
Rose 0 17
Mike 1 13;
enddata
隐式
sets:
students(集的名字)/1..19(集的成员)/:sex,age(集成员的属性);(成员也可以用空格隔开)
Endsets
(不用一一列出所有的成员)
注释是以!开头,以;结束。
有时在定义集时,不写成员,成员在后面再列明。
for example:
max z=3*x1+5*x2
s.t. x1<4
2*x2<12
3*x1+2*x2<=18
一维:
c1*x1+c2*x2+..+cN*xN
sets:
decision/1..n/:c,x;
endsets
@sum(decision(j):c(j)*x(j))
多维:
a11*x1+a12*x2+...+a1n*xn<=b1 .
.
am1*x1+am2*x2+...+amn*xn<=bm decision/1..n/:C,x;
constraint/1..m/:B;
matrix(constraint,decision):A;
C=3 5;
B=4 12 18;
A=1 0
0 2
3 2;
lingo是不区分大小写的
数据的定义:
sets:
decision/1 2/:C,X;
constraint/1..3/:B;
Matrix (constraint,decision):A; endsets;
max=@sum(decision(i):c(i)*x(i));
@for(constraint(i):
@sum(decision(j)):
a(i,j)*x(j))
Data:
c=3,5;
B=4 12 18;
A=1 0
0 2
3 2;
注意项:(1)将目标函数的表示方式从“min”变成了“min=”
(2)“ST”在LINGO 模型中不再需要,所以被删除了
(3)每个系数与变量间增加了运算符“*”(即乘号不能省略)
(4)每行(目标、约束和说明语句)后面均增加了一个分号“;”
(5)模型结束标志“END”也被删除了(LINGO 中只有当模型以“MODEL:”开始时才能以“END”结束)。
逻辑运算符:
这些运算符的优先级由高到低为:
高#not#(非)
#eq# (等于)#ne# (不相等)#gt# (大于)#ge# (大于等于)#lt# (小于)#le#(小于等于)
低#and#(逻辑与)#or#(逻辑或)
数学函数:
Lingo提供了大量的标准数学函数:
@abs(x) 返回x的绝对值
@sin(x) 返回x的正弦值,x采用弧度制
@cos(x) 返回x的余弦值
@tan(x) 返回x的正切值
@exp(x) 返回常数e的x次方
@log(x) 返回x的自然对数
@lgm(x) 返回x的gamma函数的自然对数
@sign(x) 如果x<0返回-1;否则,返回1
@floor(x) 返回x的整数部分。当x>=0时,返回不超过x的最大整数;当x<0时,返回不低于x的最大整数。
@smax(x1,x2,…,xn) 返回x1,x2,…,xn中的最大值
@smin(x1,x2,…,xn) 返回x1,x2,…,xn中的最小值
@size(set_name) 返回集的成员个数
@index(set_name,成员名)【有时不用写set_name】返回成员的位置
@in(set_name,@index(...))【index要写set_name 】显示该成员是否在该集中,在,返回1,否则,返回0。
变量界定函数:
@bin(x) 限制x为0或1
@bnd(L,x,U) 限制L≤x≤U
@free(x) 取消对变量x的默认下界为0的限制,即x可以取任意实数
@gin(x) 限制x为整数
min = @smax(f(1),f(2),f(3));(首先求f(i)的最小值,然后求三个最小值中的最大值)
在默认情况下,Lingo规定变量是非负的,也就是说下界为0,上界为+∞。@free取消了默认的下界为0的限制,使变量也可以取负值。@bnd用于设定一个变量的上下界,它也可以取
消默认下界为0的约束。
集循环函数:
@function(setname[(set_index_list)[|conditional_qualifier]]: expression_list);
(1)@function相应于下面罗列的四个集循环函数之一(@for 、@sum、@max、@min);(2)setname是要遍历的集;
(3)set_ index_list是集索引列表;
(4)conditional_qualifier是用来限制集循环函数的范围,当集循环函数遍历集的每个成员时,LINGO都要对conditional_qualifier