




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/Lingo超经典案例大全LINGO是LinearInteractiveandGeneralOptimizer的缩写,即“交互式的线性和通用优化求解器”。Lingo超强的优化计算能力在很多方面(线性规划、非线性规划、线性整数规划、非线性整数规划、非线性混合规划、二次规划等)比matlab、maple等强得多,Lingo编程简洁明了,数学模型不用做大的改动(或者不用改动)便可以直接采用Lingo语言编程,十分直观。Lingo模型由4个段构成:(1)集合段(sets
endsets);(2)数据段(data
enddata);
(3)初始段(initendinit);(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=3,x2=1,最大值为4.运用matlab求时可以发现有两组解:x1=3,x2=1和x1=2,x2=2。通过验证也可知这两组解均满足。Lingo的一个缺陷是:每次只能输出最优解中的一个(有时不只一个)。那么,怎样求得其他解呢?一个办法是将求得的解作为约束条件,约束x1不等于3,x2不等于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=2,x2=2.若再次排除这组解,发现Lingo解不出第三组解了,这时我们可以断定:此优化模型有两组解:x1=3,x2=1和x1=2,x2=2.求解模型时需注意:Lingo中,默认变量均为非负;输出的解可能是最优解中的一组,要判断、检验是否还有其他解(根据具体问题的解的情况或用排除已知最优解的约束条件法)。2、非线性整数规划:
model:sets:row/1..4/:b;col/1..5/:c1,c2,x;link(row,col):a;endsetsdata:c1=1,1,3,4,2;c2=-8,-2,-3,-1,-2;a=11111122162160000115;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。发现x1,x2,x4,x5均单调减少,x3单调增加。最大值越来越小。可以简单判断第一组为最优的。当然,能够一一检验最好。
二、最优选择问题某钻井队要从10个可供选择的井位中确定5个钻井探油,使总的钻探费用为最小。若10个井位的代号为s1,s2,...,s10,相应的钻探费用c1,c2,...,c10为5,8,10,6,9,5,7,6,10,8.并且井位选择上要满足下列限制条件:
(1)或选择s1和s7,或选择钻探s9;
(2)选择了s3或s4就不能选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=581069576108;
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求得:
Totalsolveriterations:
26
Variable
Value
ReducedCost
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
Objectivevalue:
31.00000即选择井S1,S2,S4,S6,S7以达到最小费用31.
三、路径和最短问题:设平面上有N个点,求一点,使得这个点到所有点距离之和最小。这里,取N=8。数据点是1~5的随机数。Lingo:model:
sets:
position/1..8/:x,y;
ab/1/:a,b;
endsets
data:
@text('E:\matlab7.0\work\data.txt')=x,y;!读入到matlab的工作空间中;
@text('E:\matlab7.0\work\data1.txt')=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);
endmatlab:clear;
clc;
closeall;
load('data.txt');
load('data1.txt');
holdon;
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)
gridoff;
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('Solvingtheproblemoftheminimundistanceoftnesumofallthebluepointstowardsthebeingknownredpoint.');
gtext(['Theminimundistanceis',num2str(10.2685),'.'],'FontSize',16,'Color','r');
三、运输+选址问题:
某公司有6个建筑工地,位置坐标为(ai,bi)(单位:公里),水泥日用量di(单位:吨)i
1
2
3
4
5
6a
1.25
8.75
0.5
5.75
3
7.25b
1.25
0.75
4.75
5
6.5
7.75d
3
5
4
7
6
11(1)现有2料场,位于A
(5,
1),
B
(2,
7),记(xj,yj),j=1,2,
日储量ej各有20吨。假设料场和工地之间有直线道路,制定每天的供应计划,即从A,B两料场分别向各工地运送多少吨水泥,使总的吨公里数最小。取决策变量c_ij表示i工地从j料场运来的水泥量。模型(线性模型)为:
model:
sets:
demand/1..6/:a,b,d;
supply/1..2/:x,y,e;
link(demand,supply):c;
endsets
data:
a=1.258.750.55.7537.25;
b=1.250.754.7556.57.75;
d=3547611;
x=52;
y=17;
e=2020;
enddata
[obj]min=@sum(link(i,j):c(i,j)*@sqrt((a(i)-x(j))^2+(b(i)-y(j))^2));!目标函数;
@for(demand(i):@sum(supply(j):c(i,j))=d(i));
@for(supply(j):@sum(demand(i):c(i,j))<=e(j));
end求得:C(1,1)
3.000000
C(1,2)
0.000000
C(2,1)
5.000000
C(2,2)
0.000000
C(3,1)
0.000000
C(3,2)
4.000000
C(4,1)
7.000000
C(4,2)
0.000000
C(5,1)
0.000000
C(5,2)
6.000000
C(6,1)
1.000000
C(6,2)
10.00000
Objectivevalue:
136.2275(2)
改建两个新料场,需要确定新料场位置(xj,yj)和运量cij
,在其它条件不变下使总吨公里数最小。模型一样,未知量变为料场位置(xj,yj)和运量cij,变为非线性优化问题。model:
sets:
demand/1..6/:a,b,d;
supply/1..2/:x,y,e;
link(demand,supply):c;
endsets
data:
a=1.258.750.55.7537.25;
b=1.250.754.7556.57.75;
d=3547611;
e=2020;
enddata
init:
x=52;
y=17;
endinit
[obj]min=@sum(link(i,j):c(i,j)*@sqrt((a(i)-x(j))^2+(b(i)-y(j))^2));!目标函数;
@for(demand(i):@sum(supply(j):c(i,j))=d(i));
@for(supply(j):@sum(demand(i):c(i,j))<=e(j));
@for(supply:@free(x);@free(y));
end求得:C(1,1)
3.000000
C(1,2)
0.000000
C(2,1)
0.000000
C(2,2)
5.000000
C(3,1)
4.000000
C(3,2)
0.000000
C(4,1)
7.000000
C(4,2)
0.000000
C(5,1)
6.000000
C(5,2)
0.000000
C(6,1)
0.000000
C(6,2)
11.00000
(x1,y1)=(3.254884,5.652331)
(x2,y2)=(7.250000,7.750000)Objectivevalue:
85.26604
四、路径最短问题:
如上图,求从S到T的最短路径。设d(x,y):城市x与城市y之间的直线距离;L(x):城市S到城市x的最优行驶路线的路长。模型为:min{L(x)+d(x,y)}L(S)=0
model:
sets:
city/S,A1,A2,A3,B1,B2,C1,C2,T/:L;
road(city,city)/S,A1S,A2S,A3A1,B1A1,B2A2,B1A2,B2A3,B1A3,B2B1,C1B1,C2B2,C1B2,C2C1,TC2,T/:d;
endsets
data:
d=633
658674
6789
56;
L=0,6,3,3,,,,,;
enddata
@for(city(j)|j#gt#@index(city,S):L(j)=@min(road(i,j):L(i)+d(i,j)));
end求得最短路径为20.
五、指派问题(0-1规划问题):四个人完成4项任务所用的时间如下,问如何指派任务使得完成所有任务的时间最短?
任务
t1
t2
t3
t4人员m1
2
15
13
4
m2
10
4
14
15
m3
9
14
16
13
m4
7
8
11
9
c_ij:表示第i个人完成第j项任务所用的时间;决策变量x_ij:若第i个人选择第j项任务则x_ij=1;否则,x_ij=0;模型为:model:
sets:
task/1..4/:t;
man/1..4/:m;
link(man,task):c,x;
endsets
data:
c=215134
1041415
9141613
78119;
enddata
[obj]min=@sum(link:c*x);
@for(task(j):@sum(man(i):x(i,j))=1);
@for(man(i):@sum(task(j):x(i,j))=1);
@for(link:@bin(x));
end
求得:最优指派为:m1--t4,m2--t2,m3--t1,m4--t3最优值为:28。
六、装配线平衡模型(0-1规划问题)11件任务(A—K)分配到4个工作站(1—4),任务的优先次序如下图,每件任务所花费的时间如下表。目标是为每个工作站分配加工任务,尽可能使每个工作站执行相同的任务量,其最终装配线周期最短。任务A
B
C
D
E
F
G
H
I
J
K时间
45
11
9
5015121212
12
8
9
T(i):为完成第i项任务需要的时间。
SETS:TASK/
A
B
C
D
E
F
G
H
I
J
K/:
T;
!任务集合,有一个完成时间属性
T;PRED(
TASK,
TASK)/
A,B
B,C
C,F
C,G
F,J
G,JJ,K
D,E
E,H
E,I
H,J
I,J
/;
!任务之间的优先关系集合(A
必须完成才能开始
B,等等);STATION/1..4/;
!
工作站集合;TXS(
TASK,
STATION):
X;!
X
是派生集合
TXS
的一个属性。如果
X(I,K)=1,则表示第
I
个任务指派给第
K
个工作站完成;ENDSETSDATA:T
=
45
11
9
50
15
12
12
12
12
8
9;
!任务
A
B
C
D
E
F
G
H
I
J
K
的完成时间;ENDDATA@FOR(
TASK(
I):
@SUM(
STATION(
K):
X(
I,
K))
=
1);
!每一个作业必须指派到一个工作站;@FOR(
PRED(
I,
J):
@SUM(
STATION(
K):
X(I,
K))-@SUM(
STATION(
K):
X(J,
K)
)>=0)
;
!对于每一个存在优先关系的作业对(I,J)来说,I先J后安排;@FOR(
STATION(
K):@SUM(
TXS(
I,
K):
T(
I)
*
X(
I,
K))
<=
CYCTIME);
!对于每一个工作站来说,其花费时间必须不大于装配线周期;MIN
=
CYCTIME;
!目标函数是最小化转配线周期;@FOR(
TXS:
@BIN(
X));
!指定
X(I,J)
为
0/1
变量;END
解得最短周期为50.分配情况为:A-1,B-3,C-4,D-2,E-3,F-4,G-4,H-3,I-3,J-4,K-4.七、选址问题某海岛上有12个主要的居民点,每个居民点的位置(用平面坐标x,y表示,距离单位:km)和居住的人数(r)如下表所示。现在准备在海岛上建一个服务中心为居民提供各种服务,那么服务中心应该建在何处?
x08.200.505.700.772.874.432.580.729.763.195.55y00.504.905.006.498.763.269.329.963.167.207.88r6001000800140012007006008001000120010001100设建在(a,b)处最合理。建立模型:MODEL:
SETS:
VAR/1..12/:X,Y,R;
ENDSETS
DATA:
X=08.200.505.700.772.874.432.580.729.763.195.55;
Y=00.504.905.006.498.763.269.329.963.167.207.88;
R=6001000800140012007006008001000120010001100;
ENDDATA
MIN=@SUM(VAR:@SQRT((X-A)^2+(Y-B)^2)*R);
END求得:(a,b)=(3.601028,6.514223),最小值为:44236.04。
八、婚配问题:10对年龄相当的青年,任意一对男女青年配对的概率pij见下表。试给出一个配对方案,使总的配对概率最大。
w1
w2
w3
w4
w5
w6
w7
w8
w9
w10
m10.5828
0.2091
0.4154
0.2140
0.6833
0.4514
0.6085
0.0841
0.1210
0.2319
m20.4235
0.3798
0.3050
0.6435
0.2126
0.0439
0.0158
0.4544
0.4508
0.2393
m3
0.5155
0.7833
0.8744
0.3200
0.8392
0.0272
0.0164
0.4418
0.7159
0.0498
m4
0.3340
0.6808
0.0150
0.9601
0.6288
0.3127
0.1901
0.3533
0.8928
0.0784
m5
0.4329
0.4611
0.7680
0.7266
0.1338
0.0129
0.5869
0.1536
0.2731
0.6408
m6
0.2259
0.5678
0.9708
0.4120
0.2071
0.3840
0.0576
0.6756
0.2548
0.1909
m7
0.5798
0.7942
0.9901
0.7446
0.6072
0.6831
0.3676
0.6992
0.8656
0.8439
m8
0.7604
0.0592
0.7889
0.2679
0.6299
0.0928
0.6315
0.7275
0.2324
0.1739
m9
0.5298
0.6029
0.4387
0.4399
0.3705
0.0353
0.7176
0.4784
0.8049
0.1708m100.6405
0.0503
0.4983
0.9334
0.5751
0.6124
0.6927
0.5548
0.9084
0.9943取xx_ij为0-1型决策变量。模型为:
model:
sets:
man/m1..m10/;
woman/w1..w10/;
link(man,woman):p,x;
endsets
data:
p=0.5828
0.2091
0.4154
0.2140
0.6833
0.4514
0.6085
0.0841
0.1210
0.2319
0.4235
0.3798
0.3050
0.6435
0.2126
0.0439
0.0158
0.4544
0.4508
0.2393
0.5155
0.7833
0.8744
0.3200
0.8392
0.0272
0.0164
0.4418
0.7159
0.0498
0.3340
0.6808
0.0150
0.9601
0.6288
0.3127
0.1901
0.3533
0.8928
0.0784
0.4329
0.4611
0.7680
0.7266
0.1338
0.0129
0.5869
0.1536
0.2731
0.6408
0.2259
0.5678
0.9708
0.4120
0.2071
0.3840
0.0576
0.6756
0.2548
0.1909
0.5798
0.7942
0.9901
0.7446
0.6072
0.6831
0.3676
0.6992
0.8656
0.8439
0.7604
0.0592
0.7889
0.2679
0.6299
0.0928
0.6315
0.7275
0.2324
0.1739
0.5298
0.6029
0.4387
0.4399
0.3705
0.0353
0.7176
0.4784
0.8049
0.1708
0.6405
0.0503
0.4983
0.9334
0.5751
0.6124
0.6927
0.5548
0.9084
0.9943;
enddata
max=@prod(man(i):@sum(woman(j):p(i,j)*x(i,j)));
@for(woman(j):@sum(link(i,j):x(i,j))=1);
@for(man(i):@sum(link(i,j):x(i,j))=1);
@for(link:@bin(x));
end求解结果:m1-w5,m2-w8,m3-w2,m4-w4,m5-w7,m6-w3,m7-w6,m8-w1,m9-w9,m10-w10.最大值为0.055.
九、护士值班安排问题
某医院,从周一到周日都要有人值班,每天至少需要的护士如表。要求每个护士每周连续上班5天,试问该医院至少需要多少护士?并给出上班安排计划。周
1
2
3
4
5
6
7人
20
16
13
16
19
14
12
取决策变量star(i):周i开始值班的人数;目标函数:min
sum[star(i)](i=1,2,3,...,7)约束条件:连续工作五天,周j值班的人数>=required(j)(j=1,2,3,...,7)
model:sets:days/mon..sun/:required,start;endsetsdata:!每天所需的最少职员数;required=20161316191412;enddata!最小化每周所需职员数;min=@sum(days:start);@for(days(J):@sum(days(I)|I#le#5:start(@wrap(J+2+I,7)))>=required(J));end解得:
总共需要22人,周一8人开始值班,周二2人,周三0人,周四6人,周五3人,周六3人,周日0人。十、填数问题
分别把1,2,…,16填到图示的16个圈内,使得每个三角形上的所有圈内的数的和为81(共4个三角形)。
决策变量:e_ij=1,第i个圈填数a_j;e_ij=0,第i个圈不填数a_j。a_j=j,j=1,2,3,...,16。模型:model:sets:number/1..16/:a;link(number,number):e;tri1(number)/123456789/;tri2(number)/12341615121110/;tri3(number)/45671413121516/;tri4(number)/78911011121314/;endsetsdata:a=12345678910111213141516;enddata[obj]max=@sum(link(i,j):e(i,j)*a(j));@for(number(i):@sum(link(i,j):e(i,j))=1);@for(number(j):@sum(link(i,j):e(i,j))=1);@for(link(i,j):@bin(e(i,j)));@sum(number(j):@sum(tri1(i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 政府与非政府组织:公共性之比较
- 呼吸机使用护理
- 头晕的康复治疗体系框架
- 北京2025年北京教育融媒体中心招聘工作人员笔试历年参考题库附带答案详解
- 2025年04月内蒙古鄂尔多斯市康巴什区青年就业见习招募笔试历年典型考题(历年真题考点)解题思路附带答案详解
- 2025至2031年中国海洋表行业投资前景及策略咨询研究报告
- 2025至2031年中国水动透润按摩膏行业投资前景及策略咨询研究报告
- 2025至2031年中国标准孔板节流装置行业投资前景及策略咨询研究报告
- 2025至2031年中国感应洁具专用线路板行业投资前景及策略咨询研究报告
- 2025至2031年中国底盘焊接流水线行业投资前景及策略咨询研究报告
- 2024年巴西生物可降解一次性餐具市场机会及渠道调研报告
- 儿童传染病疫情报告分析
- 24春国家开放大学《机电一体化系统综合实训》大作业参考答案
- DZ∕T 0097-2021 工程地质调查规范(1:50 000)(正式版)
- 英文版中国故事绘本愚公移山
- CATIA知识工程参数化教程课件
- 林木种质资源调查表(新表)
- 建筑业企业资质标准-建市2014159号(文本版)
- 《肩关节功能解剖》课件
- 项目管理-基层科普行动计划项目解析
- 孕期体重科学管理1护理课件
评论
0/150
提交评论