首页一、 Lingo 简介 1. 目标函数一个函数解析式, 你希望求它的最大或最小值 max= 函数解析式;或 min= 函数解析式; 例 max=3*b+2*c^2; min=b^(1/3)-c*k ; Lingo 的语句以; 号结束。 2. 运算加(+) ,减(-) ,乘(*) ,除(/) ,乘方(x^a) 3. 变量用字母或字母数字的组合表示例a,b, cc1 , x1。 Lingo 的变量缺省值为非负数。 4. 限制条件一组等式或不等式。 Lingo 的>,<与>= , <= 等价。示例程序 1 min =3*x1+5*x2; !x1,x2 是非负变量; 3*x1+2*x2>=36; 3*x1+5*x2>=45; Lingo 的注释语句用! 开头用; 结束。 5. 变量类型变量类型说明***@bin( 变量名); 限制该变量为 0或1。***@bnd( a, 变量名, b); 限制该变量介于 a,b 之间。***@free( 变量名); 允许该变量为负数。***@gin( 变量名); 限制该变量为整数。二、 Lingo 高级 sets 语句连续六个月的产量, 可以用 x1,x2,x3,x4,x5,x6 表示, 但十二个月的产量用同样的方法表示就显繁琐。 Lingo 可以通过 sets 语句设置数组功能使问题变得简单。例定义数组 x,有 x(1),x(2),x(3),x(4) … x(12) 个成员,用以表示十二个月的产量。 sets: r/1..12/:x; !r 是组的类型名,x 数组名; endsets; sets 语句以 sets 开头, endsets 结束。示例程序 2 sets : mat/1..4/: x; !mat 是组的类型名,x数组名; endsets min =50*x(1)+20*x(2)+30*x(3)+80*x(4); 400*x(1)+200*x(2)+150*x(3)+500*x(4)>=500; 3*x(1)+2*x(2)>=6; 2*x(1)+2*x(2)+4*x(3)+4*x(4)>=10; 2*x(1)+4*x(2)+x(3)+5*x(4)>=8; data 语句有时, 我们要用到常数数组, 比如在 400*x(1)+200*x(2)+150*x(3)+500*x(4)>=500 中, x(1), x(2), x(3), x(4) 的系数分别为 400 , 200 , 150 , 500 , 此时, 可用 data 语句。例定义数组 a, 其中 a(1)= 400 , a(2)= 200 , a(3)= 150 , a(4)= 500 。 sets: l/1..4/: a,x; endsets data: a=400 200 150 500; enddata data 语句是以 data 开头, enddata 结尾。示例程序 3 sets : l/1..4/: x, a; endsets data : a=7 23 9; !a(1)=7, a(2)=2, a(3)=3, a(4)=9; enddata max =x(1)*a(3)+x(2)*a(1)+x(3)*a(4)+x(4)*a(2); x(1)+x(4)-x(2)-x(3)<a(1); x(4)+2*x(2)<a(4); x(1)+x(3)<a(1); Lingo 含有一些针对数组的命令,方便了数组的使用。***@for 循环语句: ***@for( 数组类型名(i): 循环的语句); 示例程序 4( ***@gin 语句) sets : r/1..5/: a, b; endsets data : a= ; enddata max =a(1)*b(1)-a(2)*b(2)+a(3)*b(3)-a(4)*b(4); ***@for (r(i): b(i)< a(i)); !等价于 b(1)<a (1); b(2)<a(2) ; b(3)<a(3) ; b(4)<a (4); ***@for (r(i): ***@gin (b(i))); !b为整数数组; !等价于***@gin(b(1)) ; ***@gin(b(2)) ; ***@gin(b(3)) ; ***@gin(b(4)); ***@sum 语句***@sum( 数组类型名(i): 含数组名(i) 的语句); 示例程序 5 sets : r/1..5/: a, b; endsets data : a= ; enddata max = ***@sum (r(i):b(i))+ ***@sum (r(i):b(i)/a(i)) + ***@sum (r(i):b(i)*a(i)); !等价于 max=b(1)+b(2)+b(3)+b(4)+b(1)/a(1)+b(2)/a(2)+b(3)/a(3)+
lingo求解优化问题 来自淘豆网m.daumloan.com转载请标明出处.