LINGO 应用实例
班级:2011级软件工程1班;姓名:林保京;学号:P111713222
某公司有6 个建筑工地要开工,每个工地的位置(用平面坐标a, b 表示,距离单位:公里)及水泥日用量d (吨)由下表给出。
目前有两个临时料场位于P (5, 1), Q (2, 7) ,日储量各有20 吨。
假设从料场到工地之间均有直线道路相连,试制定每天的供应计划,即从A, B 两料场分别向各工地运送多少吨水泥,使总的吨公里数最小。
为了进一步减少吨公里数,打算舍弃两个临时料场,改建两个新的,日储量仍各为20 吨,问应建在何处,节省的吨公里数有多大。
记工地的位置为(a i ,b i ),水泥的日用量为d i ,i =1…6;料场的位置为(x j ,y j ),日储量为e j ,j =1,2;从料场j 到工地i 的运送量为c ij ,这个优化问题的数学规划模型是:
min f =∑∑c ij √(x j −a i )2+(y j −b i )2
6
i−1
2j−1
st ∑c ij 2j−1
=d i ,i =1 (6)
∑c ij 6
i−1
≤e j ,j =1,2
将其转化成LINGO 代码:
MODEL :
Title Location Problem;
sets :
demand/1..6/:a,b,d;
supply/1..2/:x,y,e;
link(demand,supply):c;
endsets
data :
!需求点设置;
a=1.25,8.75,0.5,5.75,3,7.25;
b=1.25,0.75,5.75,5,6.5,7.75;
!需求量;
d=3,5,4,7,6,11;
e=20,20;
enddata
init:
!初始点;
x,y=5,1,2,7;
endinit
[OBJ] min=@sum(link(i,j):c(i,j)*((x(j)-a(i))^2+(y(j)-b(i))^2)^(1/2)); @for(demand(i):[DEMAND_CON]@sum(supply(j):c(i,j))=d(i););
@for(supply(i):[SUPPLY_CON]@sum(demand(j):c(j,i))<=e(i););
@for(supply:@free(X); @free(Y););
END
运行结果如下:
Local optimal solution found.
Objective value: 84.41406
Infeasibilities: 0.000000
Total solver iterations: 132
Model Title: Location Problem
Variable Value Reduced Cost
A( 1) 1.250000 0.000000
A( 2) 8.750000 0.000000
A( 3) 0.5000000 0.000000
A( 4) 5.750000 0.000000
A( 5) 3.000000 0.000000
A( 6) 7.250000 0.000000
B( 1) 1.250000 0.000000
B( 2) 0.7500000 0.000000
B( 3) 5.750000 0.000000
B( 4) 5.000000 0.000000
B( 5) 6.500000 0.000000
B( 6) 7.750000 0.000000
D( 1) 3.000000 0.000000
D( 2) 5.000000 0.000000
D( 3) 4.000000 0.000000
D( 4) 7.000000 0.000000
D( 5) 6.000000 0.000000
D( 6) 11.00000 0.000000
X( 1) 3.113090 0.000000
X( 2) 7.250000 -0.1954955E-06
Y( 1) 6.044738 0.000000
Y( 2) 7.750000 -0.8808641E-08
E( 1) 20.00000 0.000000 E( 2) 20.00000 0.000000 C( 1, 1) 3.000000 0.000000 C( 1, 2) 0.000000 3.701915 C( 2, 1) 0.000000 0.5747176 C( 2, 2) 5.000000 0.000000 C( 3, 1) 4.000000 0.000000 C( 3, 2) 0.000000 4.410404 C( 4, 1) 7.000000 0.000000 C( 4, 2) 0.000000 0.2961603 C( 5, 1) 6.000000 0.000000 C( 5, 2) 0.000000 3.960913 C( 6, 1) 0.000000 4.474589 C( 6, 2) 11.00000 0.000000
Row Slack or Surplus Dual Price OBJ 84.41406 -1.000000
DEMAND_CON( 1) 0.000000 -5.143988 DEMAND_CON( 2) 0.000000 -7.158911 DEMAND_CON( 3) 0.000000 -2.629659 DEMAND_CON( 4) 0.000000 -2.836331 DEMAND_CON( 5) 0.000000 -0.4690982 DEMAND_CON( 6) 0.000000 0.000000 SUPPLY_CON( 1) 0.000000 0.000000 SUPPLY_CON( 2) 4.000000 0.000000
软件运行截图
代码截图:
运行结果截图:。