Lingo超经典案例大全解读

Lingo超经典案例大全
LINGOLinear Interactive and General Optimizer的缩写,即交互式的线性和通用优化求解器Lingo超强的优化计算能力在很多方面(线性规划、非线性规划、线性整数规划、非线性整数规划、非线性混合规划、二次规划等)比matlabmaple等强得多,Lingo编程简洁明了,数学模型不用做大的改动(或者不用改动)便可以直接采用Lingo语言编程,十分直观。
Lingo模型由4个段构成:
1集合段(sets  endsets);(2)数据段(data  enddata)
 (3)初始段(init endinit);(4)目标与约束段。
Lingo的五大优点:
1. 对大规模数学规划,LINGO语言所建模型较简洁,语句不多;
2. 模型易于扩展,因为@FOR@SUM等语句并没有指定循环或求和的上下限,如果在集合定义部分增加集合成员的个数,则循环或求和自然扩展,不需要改动目标函数和约束条件;
3. 数据初始化部分与其它部分语句分开,对同一模型用不同数据来计算时,只需改动数据部分即可,其它语句不变;
4. “集合LINGO有特的概念,它把实际问题中的事物与数学变量及常量联系起来,是实际问题到数学量的抽象,它比C语言中的数组用途更为广泛。 
5. 使用了集合以及@FOR@SUM等集合操作函数以后可以用简洁的语句表达出常见的规划模型中的目标函数和约束条件,即使模型有大量决策变量和大量数据,组成模型的语句并不随之增加.
 一、求解线性整数规划、非线性整数规划问题:
1.线性整数规划:

model:
max=x1+x2;
x1+9/14*x2<=51/14;
-2*x1+x2<=1/3;
@gin(x1);@gin(x2);
end
求得x1=3x2=1,最大值为4.运用matlab求时可以发现有两组解:x1=3x2=1x1=2x2=2。通过验证也可知这两组解均满足。Lingo的一个缺陷是:每次只能输出最优解中的一个(有时不只一个)。那么,怎样求得其他解呢?一个办法是将求得的解作为约束条件,约束x1不等于3x2不等于1,再求解。如下:
model:
max=x1+x2;
x1+9/14*x2<=51/14;
-2*x1+x2<=1/3;
@gin(x1);@gin(x2);
@abs(x1-3)>0.001;
@abs(x2-1)>0.001;
end
求得x1=2x2=2.若再次排除这组解,发现Lingo解不出第三组解了,这时我们可以断定:此优化模型有两组解:
x1=3x2=1x1=2x2=2.
求解模型时需注意:Lingo中,默认变量均为非负;输出的解可能是最优解中的一组,要判断、检验是否还有其他解(根据具体问题的解的情况或用排除已知最优解的约束条件法)。
2、非线性整数规划:

model:
sets:
row/1..4/:b;
col/1..5/:c1,c2,x;
link(row,col):a;
endsets
data:
c1=1,1,3,4,2;
c2=-8,-2,-3,-1,-2;
a=1 1 1 1 1
1 2 2 1 6
2 1 6 0 0
0 0 1 1 5;
b=400,800,200,200;
enddata     
max=@sum(col:c1*x^2+c2*x);
@for(row(i):@sum(col(j):a(i,j)*x(j))<b(i));
@for(col:@gin(x));
@for(col:@bnd(0,x,99));
End
求得:x1=50,x2=99,x3=0,x4=99,x5=20.最大值为51568
这里,我们看不出是否还有其他解,需要将已知的最优解排除掉。
利用1的方法分别可得到其他解:
x1=48,x2=98,x3=1,x4=98,x5=19.最大值为50330
x1=45,x2=97,x3=2,x4=97,x5=18.最大值为49037
x1=43,x2=96,x3=3,x4=96,x5=17.最大值为47859
x1=40,x2=95,x3=4,x4=95,x5=16.最大值为46636
......
发现x1x2x4x5均单调减少,x3单调增加。最大值越来越小。可以简单判断第一组为最优的。当然,能够一一检验最好。
 
二、最优选择问题
某钻井队要从10个可供选择的井位中确定5个钻井探油,使总的钻探费用为最小。若10个井位的代号为s1,s2,...,s10,相应的钻探费用c1,c2,...,c105,8,10,6,9,5,7,6,10,8.并且井位选择上要满足下列限制条件:
1 或选择s1s7,或选择钻探s9
2 选择了s3s4就不能选s5,或反过来也一样;
3 s5,s6,s7,s8中最多只能选两个.
试建立这个问题的整数规划模型,确定选择的井位。冗余性
0-1变量s_i,若s_i=1,则表示选取第i个井,若s_i=0,则表示不选取第i个井。建立数学模型如下:

model:
sets:
variables/1..10/:s,cost;
endsets约翰-纳什
data:
cost=5 8 10 6 9 5 7 6 10 8;
enddata
min=@sum(variables:cost*s);
(s(1)+s(7)-2)*(s(9)-1)=0;
s(3)*s(5)+s(4)*s(5)=0;
@sum(variables(i)|i#ge#5#and#i#le#8:s(i))<=2;
@sum(variables:s)=5;
@for(variables:@bin(s));
end
求得:
                          Total solver iterations:   26

                       Variable           Value        Reduced Cost
                          S( 1)        1.000000           -4.000000
                          S( 2)        1.000000            0.000000
孔子文学                          S( 3)        0.000000            2.000000
                          S( 4)        1.000000           -2.000000
                          S( 5)        0.000000            0.000000
                          S( 6)        1.000000           -1.000000
                          S( 7)        1.000000            0.000000
                          S( 8)        0.000000            0.000000
                          S( 9)        0.000000            2.000000
                         S( 10)        0.000000            0.000000

                         Objective value:   31.00000
即选择井S1S2S4S6S7以达到最小费用31.
 
 三、路径和最短问题:
设平面上有N个点,求一点,使得这个点到所有点距离之和最小。这里,取N=8。数据点是1~5的随机数。
Lingo
model:
sets:
position/1..8/:x,y;
ab/1/:a,b;
endsets
data:
@text('E:\matlab7.0\')=x,y;!读入到matlab的工作空间中;
@text('E:\matlab7.0\')=a,b;
enddata
x(1)=1+4*@rand(0.12345);
y(1)=1+4*@rand(0.25);
@for(position(i)|i#ge#2:x(i)=1+4*@rand(x(i-1)));!随机产生1~5克林顿中的8黄冈日报电子版个点;
@for(position(i)|i#ge#2:y(i)=1+4*@rand(y(i-1)));
[obj]min=@sum(position(i):@sqrt((x(i)-a(1))^2+(y(i)-b(1))^2));!目标函数;
@bnd(1,a(1),5);
@bnd(1,b(1),5);
end
matlab
clear;黑芝
clc;
close all;
load('');
load('');
hold on;
plot(data1(1),data1(2),'o','MarkerSize',15,'MarkerFaceColor','r');
plot(data(:,1),data(:,2),'or','MarkerSize',15,'MarkerFaceColor','b');
set(gcf,'Color','w');
set(gca,'FontSize',16)
grid off;
data1=repmat(data1,8,1);
P=[data1(:,1)';data(:,1)'];
Q=[data1(:,2)';data(:,2)'];
plot(P,Q,'g','LineWidth',2);
xlabel('x');
ylabel('y');
title('Solving the problem of the minimun distance of tne sum of all the blue points towards the being known red point.');
gtext(['The minimun distance is ',num2str(10.2685),'.'],'FontSize',16,'Color','r');

本文发布于:2024-09-22 14:31:25,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/173593.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:规划   模型   整数   集合   问题   语句
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议