s147596 发表于 2009-8-27 16:57

lingo程序哪里错?

本帖最后由 s147596 于 2009-8-27 22:21 编辑

2000年b题
B题
钢管订购和运输

要铺设一条 的输送天然气的主管道, 如图一所示(见下页)。经筛选后可以生产这种主管道钢管的钢厂有 。图中粗线表示铁路,单细线表示公路,双细线表示要铺设的管道(假设沿管道或者原来有公路,或者建有施工公路),圆圈表示火车站,每段铁路、公路和管道旁的阿拉伯数字表示里程(单位km)。
为方便计,1km主管道钢管称为1单位钢管。
一个钢厂如果承担制造这种钢管,至少需要生产500个单位。钢厂 在指定期限内能生产该钢管的最大数量为 个单位,钢管出厂销价1单位钢管为 万元,如下表:

1
2
3
4
5
6
7

800
800
1000
2000
2000
2000
3000

160
155
155
160
155
150
160

1单位钢管的铁路运价如下表:

里程(km)
≤300
301~350
351~400
401~450
451~500
运价(万元)
20
23
26
29
32

里程(km)
501~600
601~700
701~800
801~900
901~1000
运价(万元)
37
44
50
55
60

1000km以上每增加1至100km运价增加5万元。?
公路运输费用为1单位钢管每公里0.1万元(不足整公里部分按整公里计算)。
钢管可由铁路、公路运往铺设地点(不只是运到点 ,而是管道全线)。
(1)请制定一个主管道钢管的订购和运输计划,使总费用最小(给出总费用)。
(2)请就(1)的模型分析:哪个钢厂钢管的销价的变化对购运计划和总费用影响最大,哪个钢厂钢管的产量的上限的变化对购运计划和总费用的影响最大,并给出相应的数字结果。
(3)如果要铺设的管道不是一条线,而是一个树形图,铁路、公路和管道构成网络,请就这种更一般的情形给出一种解决办法,并对图二按(1)的要求给出模型和结果
model:
sets:
one/1..7/:p,s;
two/1..14/:R,Y;
three(one,two):c,k;
p=160    155    155    160    155    150    160;
s=800    800    1000   2000   2000   2000   3000;
c=110.3  205.3  220.3  255.3  245.3  255.3  260.3;
  90.2   190.2  200.2  235.2  225.2  235.2  240.2;
  135    235    200    230    225    245    240;
  38     161    121    156    146    156    160.1;
  20.5   145.5  105.5  150.5  130.5  140.5  145.5;
  3.1    138.1  96     131    121    131    136;
  21.2   121.2  86.2   126.5  111.2  121.2  126.2;
  64.2   164.2  48.2   134.2  79.2   84.2   79.2;
  87     192    82     62     57     62     67;
  96     151    86     51     33     51     38;
  106    156    96     61     51     45     56;
  121.2  171.2  111.2  76.2   71.2   26.2   38.2;
  128    173    118    83     73     7      26;
  152    192    132    97     87     28     2;
R=104    405    1155   1761   1955   2160   2361  3041   3521   3821   4041   4251   4671   5171;
Y=5067   4766   4016   3410   3216   3216   2810  2130   1650   1350   1130   920    500    0;
  min=@sum(three(i,j):p(i)*k(i,j))+@sum(three(i,j):c(i,j)*k(i,j))+@sum(two(j):h*(n))+@sum(two(j):h*g(m));
@for(two(j)sum(ones(i):k(i,j))<a(i)+b(j));
@sum(two(j):k(i,j))>=500;
@for(one(i):k(i,j)<=s(i));
@sum(two(j):a(i))=5171;
@sum(two(j):b(j))=5171;
@for(two(J):a(j)<R(j));
@for(two(J):a(j)<Y(j));
end

zsuzengli 发表于 2009-8-27 19:22

问题太多啦,最好把问题也贴出来啊。
1.首先数据输入就有问题
sets:
one/1..7/:p,s;
two/1..14/:R,Y;
three(one,two):c,k;
endsets
data:
p=160    155    155    160    155    150    160;
s=800    800    1000   2000   2000   2000   3000;
c=110.3  205.3  220.3  255.3  245.3  255.3  260.3
  90.2   190.2  200.2  235.2  225.2  235.2  240.2
  135    235    200    230    225    245    240
  38     161    121    156    146    156    160.1
  20.5   145.5  105.5  150.5  130.5  140.5  145.5
  3.1    138.1  96     131    121    131    136
  21.2   121.2  86.2   126.5  111.2  121.2  126.2
  64.2   164.2  48.2   134.2  79.2   84.2   79.2
  87     192    82     62     57     62     67
  96     151    86     51     33     51     38
  106    156    96     61     51     45     56
  121.2  171.2  111.2  76.2   71.2   26.2   38.2
  128    173    118    83     73     7      26
  152    192    132    97     87     28     2;
R=104    405    1155   1761   1955   2160   2361  3041   3521   3821   4041   4251   4671   5171;
Y=5067   4766   4016   3410   3216   3216   2810  2130   1650   1350   1130   920    500    0;
enddata
2.你的目标函数有问题
3.约束中a和b没定义啊,约束条件的写法也错得离谱
总之,太混乱啦!是不是在做2000B题啊?建议看看Lingo软件的使用说明吧。

s147596 发表于 2009-8-27 20:27

已改~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

s147596 发表于 2009-8-27 22:46

已改~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

s147596 发表于 2009-8-28 09:33

没人懂吗?

alair009 发表于 2012-1-26 09:57

页: [1]
查看完整版本: lingo程序哪里错?