题目:某饮料厂生产一种饮料以满足市场需求.该厂销售科根据市场预测,已经确定了未来4周该饮料的需求量.计划科根据本厂实际情况给出了未来4周的生产能力和生产成本,如下表所示.每周当饮料满足需求后有剩余时,要支出存贮费,为每周每千箱饮料0.2千元.
周次 | 需求量(千箱) | 生产能力(千箱) | 每千箱成本(千元) |
1 | 15 | 30 | 5.0 |
2 | 25 | 40 | 5.1 |
3 | 35 | 45 | 5.4 |
4 | 25 | 20 | 5.5 |
合计 | 100 | 135 |
(1)如何安排生产计划,在满足每周市场需求的条件下,使4周的总费用最小?
(2)如果工厂必须在未来4周的某一周安排一次设备检修,检修将占用当周15千箱的生产能力,但会使检修以后每周的生产能力提高5千箱,则检修应该安排在哪一周?
(3)饮料厂是使用生产线生产饮料.如果某周开工生产饮料,就要清洗设备和更换部分部件,于是需支出生产准备费用8千元,若不生产,则不需支出生产准备费用.在此情况下,如何安排生产计划,使4周的总费用最小?
基本假设:
- 假设在第一周开始时没有库存.
- 从总费用最小考虑,第四周也不应有库存.
- 周末有库存时应支出一周的存储费.
- 每周末的库存量就是下周初的库存量.
符号说明:
- 问题的决策变量是未来四周的饮料生产量,分别记作x1,x2,x3,x4;
- 由于存储费取决于库存量,记第1,2,3周末的库存量分别为y1,y2,y3;
- 四周的总费用生产成本与存储费用总和记作z.
1.每周的产量、需求与库存之间存在着平衡关系,比如第二周有y1+x2-25 = y2,再注意到第一周初和第四周末的库存为0,就得到下面模型的约束条件(2-1)-(2-4).(3)(4)分别是产量限制和非负约束,综上可得知如下的线性规划模型
(1)
(2-1)
(2-2)
(2-3)
(2-4)
(3)
(4)
lingo代码如下
model:
title:shengchanjihua2222221;
min=5.0*x1+5.1*x2+5.4*x3+5.5*x4+0.2*y1+0.2*y2+0.2*y3;
x1-y1=15;
x2+y1-y2=25;
x3+y2-y3=35;
x4+y3=25;
x1<=30;
x2<=40;
x3<=45;
x4<=20;
@gin(x1);
@gin(x2);
@gin(x3);
@gin(x4);
@gin(y1);
@gin(y2);
@gin(y3);
end
2.第二个问题在需要安排检修时,如果希望以上生产计划保持不变,可以看出:第1周和第2周都有不小于15千箱的生产能力剩余,因此这两周都可以安排检修:究竟将检修安排在哪一周呢?实际上,由于检修后生产能力发生变化,把检修安排在第1或第2周不一定是最佳选择.从题目给的条件来看,将检修安排在任何一周都是可以的.我们引入0-1变量w1,w2,w3,w4,用wi=1表示检修安排在第t周(t=1,2,3,4).由于检修将占用当周15千箱的生产能力,但会使检修以后每周的生产能力提高5千箱,所以上面模型中关于产量限制的约束条件(3)需要修改为
(5-1)
(5-2)
(5-3)
(5-4)
同时,由于四周中只有一次检修,模型中还需要增加关于w1,w2,w3,w4的约束:
(5-5)
(5-6)
lingo代码如下:
model:
title:shengchanjihua2222221;
min=5.0*x1+5.1*x2+5.4*x3+5.5*x4+0.2*y1+0.2*y2+0.2*y3;
x1-y1=15;
x2+y1-y2=25;
x3+y2-y3=35;
x4+y3=25;
x1+15*w1<=30;
x2+15*w2-5*w1<=40;
x3+15*w3-5*w1-5*w2<=45;
x4+15*w4-5*w1-5*w2-5*w3<=20;
w1+w2+w3+w4=1;
@bin(w1);
@bin(w2);
@bin(w3);
@bin(w4);
@gin(x1);
@gin(x2);
@gin(x3);
@gin(x4);
@gin(y1);
@gin(y2);
@gin(y3);
end
3.第三个问题从题目给的条件来看,要想达到总费用的最小值,应当在集中在几周内把需求量全都解决掉,后续空出时间不生产,便可使总费用更小,我们引入0-1变量w1,w2,w3,w4,用wi=1表示在第t周(t=1,2,3,4)会开工,即xi值大于0的时候有开工wi=1.
则目标函数变成
(6-1)
(6-2)
lingo代码如下
model:
title: shengchanjihua2222221;
min=5*x1+5.1*x2+5.4*x3+5.5*x4+0.2*y1+0.2*y2+0.2*y3+8*w1+8*w2+8*w3+8*w4;
x1-y1=15;
x2+y1-y2=25;
x3+y2-y3=35;
x4+y3=25;
w1=@if(x1#gt#0,1,0);
w2=@if(x2#gt#0,1,0);
w3=@if(x3#gt#0,1,0);
w4=@if(x4#gt#0,1,0);
@bin(w1);
@bin(w2);
@bin(w3);
@bin(w4);
x1<=30;
x2<=40;
x3<=45;
x4<=20;
End