数学工兵 发表于 2008-7-21 22:00:03

请问这个解法有什么问题吗

工厂生产计划(不好意思,新手不会编辑,请看下面)
某厂拥有4台磨床、2台立式钻床、3台卧式钻床、一台镗床和一台刨床,用以生产7中产品,记作P1至P7。工厂收益规定为产品售价减去原材料费用之剩余。每种新产品单件的收益及所需各机床的加工工时(以小时计)列于表1
本月(一月)和随后的5个月中,下列机床停工维修(时间一个月):
一月 磨床1台;
二月 卧式钻床2台;
三月 镗床1台;
四月 立式钻床1台;
五月 磨床1台,立式钻床1台;
六月 刨床1台,卧式钻床1台。
各种产品各月份的市场容量如表2.

表1
产品
P1
P2
P3
P4
P5
P6
P7
收益
10
6
8
4
11
9
3

0.5
0.7
0
0
0.3
0.2
0.5
垂直钻孔0.1
0.2
0
0.3
0
0.6
0
水平钻孔0.2
0
0.8 0
0
0
0.6
镗孔
0.05 0.03 0
0.07 0.1
0
0.08

0
0
0.01 0
0.05 0
0.05

表二
产品
P1
P2
P3
P4
P5
P6
P7
一月
500
1000 300 300 800
200
100
二月
600
500
200 0
400
300
150
三月
300
600
0
0
500
400
100
四月
200
300
400 500 200
0
100
五月
0
100
500 100 1000
300
0
六月
500
500
100 300 1100
500
60
每种产品存货最多可到100件。存费每件每月为0.5元。现在无存货。要求到6月底每种产品有存货50件。
工厂每周工作6天,每天2班,每班8h。
为使收益最大,工厂应如何安排各月份产品的产量?考虑价格的某种变化及引入新机床对计划和收益的影响?


我是这样解的:
令收益为a(i),单件i产品在机床j上的加工工时为b(i,j),i种产品t月市场容量为c(i,t), i种产品t月末的剩余量为d(i,t),第t月第j种机床需检修的数量为e(j,t),第j种机床的数量为f(j),lingo代码如下:
sets:
si/1..7/:a;
st/1..6/;
sj/1..5/:f;
sij(si,sj):b;
sit(si,st):x,c,d;
sjt(sj,st):e;
endsets

data:
a=10 6 8 4 11 9 3;
c=500
600 300 200 0
500


1000 500 600 300 100
500


300
200 0
400 500
100


300
0
0
500 100
300


800
400 500 200 1000 1100

200
300 400 0
300
500


100
150 100 100 0
60
;
b=0.5 0.1 0.2 0.05 0

0.70.2 0
0.03 0

0
0
0.8 0
0.01

0
0.3 0
0.07 0

0.30
0
0.1
0.05

0.20.6 0
0
0

0.50
0.6 0.08 0.05;
e=1 0 0 0 1 0

0 00 1 1 0

0 20 0 0 1

0 01 0 0 0

0 00 0 0 1;
f=4 2 3 1 1;
enddata

max=@sum(si(i):@sum(st(t):a(i)*x(i,t)))-0.5*@sum(sit(i,t):d(i,t));
@for(si(i):d(i,1)=x(i,1)-c(i,1));
@for(si(i):

@for(st(t)|t#LT#6:d(i,t+1)=d(i,t)+x(i,t+1)-c(i,t+1))

);
@for(si(i):d(i,6)=50);
@for(si(i):@for(st(t)|t#LT#6:d(i,t)<=100));
@for(sj(j):

@for(st(t):

@sum(si(i):x(i,t)*b(i,j))<=24*16*(f(j)-e(j,t))

)

);
@for(sit(i,t):@gin(x(i,t)));
请问这个解法有什么问题吗?大家帮忙指正下哈

[ 本帖最后由 数学工兵 于 2008-7-21 22:15 编辑 ]

数学工兵 发表于 2008-7-21 22:10:28

请问这个解法有什么问题吗(不好意思,刚才代码错了)

工厂生产计划
某厂拥有4台磨床、2台立式钻床、3台卧式钻床、一台镗床和一台刨床,用以生产7中产品,记作P1至P7。工厂收益规定为产品售价减去原材料费用之剩余。每种新产品单件的收益及所需各机床的加工工时(以小时计)列于表1
本月(一月)和随后的5个月中,下列机床停工维修(时间一个月):
一月 磨床1台;
二月 卧式钻床2台;
三月 镗床1台;
四月 立式钻床1台;
五月 磨床1台,立式钻床1台;
六月 刨床1台,卧式钻床1台。
各种产品各月份的市场容量如表2.
             表1
产品    P1   P2   P3P4P5    P6   P7
收益    10   6    8   4   11    9    3
磨      0.50.70   0   0.3   0.20.5
垂直钻孔0.10.20   0.30    0.60
水平钻孔0.20    0.8 0    0    0    0.6
镗孔    0.05 0.03 0   0.07 0.10    0.08
刨      0    0    0.01 0   0.05 0    0.05
             表二
产品    P1   P2   P3P4P5    P6   P7
一月    5001000 300 300 800   200100
二月    600500200 0   400   300150
三月    3006000   0   500   400100
四月    200300400 500 200   0    100
五月    0    100500 100 10003000
六月    500500100 300 110050060
每种产品存货最多可到100件。存费每件每月为0.5元。现在无存货。要求到6月底每种产品有存货50件。
工厂每周工作6天,每天2班,每班8h。
为使收益最大,工厂应如何安排各月份产品的产量?考虑价格的某种变化及引入新机床对计划和收益的影响?


我是这样解的:
令收益为a(i),单件i产品在机床j上的加工工时为b(i,j),i种产品t月市场容量为c(i,t), i种产品t月末的剩余量为d(i,t),第t月第j种机床需检修的数量为e(j,t),第j种机床的数量为f(j),lingo代码如下:
sets:
si/1..7/:a;
st/1..6/;
sj/1..5/:f;
sij(si,sj):b;
sit(si,st):x,c,d;
sjt(sj,st):e;
endsets

data:
a=10 6 8 4 11 9 3;
c=500600 300 200 0    500
1000 500 600 300 100500
300200 0   400 500100
3000   0   500 100300
800400 500 200 1000 1100
200300 400 0   300500
100150 100 100 0    60;
b=0.5 0.1 0.2 0.05 0
0.7 0.2 0   0.03 0
0   0   0.8 0    0.01
0   0.3 0   0.07 0
0.3 0   0   0.10.05
0.2 0.6 0   0    0
0.5 0   0.6 0.08 0.05;
e=1 0 0 0 1 0
0 0 0 1 1 0
0 2 0 0 0 1
0 0 1 0 0 0
0 0 0 0 0 1;
f=4 2 3 1 1;
enddata

max=@sum(si(i):@sum(st(t):a(i)*x(i,t)))-0.5*@sum(sit(i,t):d(i,t));
@for(si(i):d(i,1)=x(i,1)-c(i,1));
@for(si(i):
      @for(st(t)|t#LT#6:d(i,t+1)=d(i,t)+x(i,t+1)-c(i,t+1))
    );
@for(si(i):d(i,6)=50);
@for(si(i):@for(st(t)|t#LT#6:d(i,t)<=100));
@for(sj(j):
    @for(st(t):
          @sum(si(i):x(i,t)*b(i,j))<=24*16*(f(j)-e(j,t))
      )
   );
@for(sit(i,t):@gin(x(i,t)));
请问这个解法有什么问题吗?大家帮忙指正下哈

[ 本帖最后由 数学工兵 于 2008-7-21 22:15 编辑 ]
页: [1]
查看完整版本: 请问这个解法有什么问题吗