如何用 Lingo 处理规划问题。
 
Lingo 可以高效处理各种线性规划、非线性规划问题,是求解优化模型的最佳选择。
开始前,找到:目标函数 、决策变量 、约束条件 
小朋友用法 1 2 3 4 5 !那么 Lingo 的代码就长这样, 浅白易懂; max = 72*x1 + 64*x2; x1 + x2 < 50; 12*x1 + 8*x2 < 480; 3*x1 < 100; 
1 2 3 4 5 6 !运行结果 Objective value:                              3360.000                                 Variable           Value        Reduced Cost                                       X1        20.00000            0.000000                                       X2        30.00000            0.000000 
正经大学生用法 集合 大概和数组是一个概念吧,定义方式如下:
1 2 3 4 5 sets: 集合(类)名称/成员列表/:集合(成员)1,集合(成员)2,...; ...(其他集合); 集合(二维)名称(集合名称1,集合名称2):集合(成员)1,集合(成员)2,...; endset 
数据赋值 1 2 3 data: 中间放变量,按行序赋初值。 enddata 
集循环函数 1 2 3 @for:该函数用来产生对集成员的约束。 @sum:该函数返回遍历指定的集成员的一个表达式的和。 @min 和@max:返回指定的集成员的一个表达式的最小值或最大值。 
数学函数 1 2 3 4 5 6 7 8 9 10 11 @abs(x)返回 x 的绝对值。 @sin(x)返回 x 的正弦值,x 采用弧度制。 @cos(x)返回 x 的余弦值。 @tan(x)返回 x 的正切值。 @exp(x)返回常数 e 的 x 次方。 @log(x)返回 x 的自然对数。 @mod(x,y)返回 x 除以 y 的余数。 @sign(x)如果 x>=0 时返回 1,当 x=0 时返回 0。 @floor(x)返回 x 的整数部分。当 x>=0 时,返回不超过 x 的最大整数;当 x<0 时,返回不低于 x 的最大整数。 @smax(x1,x2,…,xn)返回 x1,x2,…,xn 中的最大值。 @smin(x1,x2,…,xn)返回 x1,x2,…,xn 中的最小值。 
变量界定函数 在 Lingo 中变量默认是大于0的实数,这时候就需要变量界定函数来决定其他变量类型。
1 2 3 4 @free(x)             x取任意实数 @gin(x)              x取整数 @bin(x)              x取0或1 @bnd(L,x,R)          L<x<R 
实战 1 2 3 4 5 6 7 8 9 10 11 12 13 model: sets: var/1..100/:x; endsets min = @sqrt(@sum(var(i):x(i)^2)); @sum(var(i):x(i))=1; x(100)=@sum(var(i)|i#le#99:x(i)^2); @for(var(i)|i#le#99:@free(x(i))); end 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 model: sets: var/1..5/; link(var,var):c,x; endsets data: c = 3 8 2 10 3    8 7 2 9 7    6 4 2 7 5    8 4 2 3 5    9 10 6 9 10; enddata min = @sum(link:c*x); @for(var(i):@sum(var(j):x(i,j))=1); @for(var(j):@sum(var(i):x(i,j))=1); @for(link:@bin(x)); end