数学建模——工厂生产计划模型
顾骏、李渊、王成
摘要
本文以工厂的生产计划和影响生产计划的因素为研究对象,采用了线性规划的分析方法,我们通过求解不同产品的生产计划以及按计划生产所获得的利润,解决了工厂为达到最大利润时的产品生产计划问题。
问题一的求解过程中,以每月每种产品的销售量和生产量为决策变量,以工厂所获得的利润为目标函数,得到了最大收益为94511.5元。
问题二在问题一的基础上考虑了单件产品市场收益的变化及引入新机床两个因素。为使模型简化,首先考虑市场价格的变化对计划和收益的影响,得出最大利润随单件产品的月收益减少率y的增大而基本呈线性的减小,总利润随产品P5的月收益减少率y的增大呈明显减小趋势。再考虑引进新机床,得出增加一台刨床和一台镗床时工厂的总利润最大化。
问题三在问题一的基础上将每个月的机床维修数量重新规划,改变原有的约束条件,利用Lingo软件,得出当第一个月维修两台卧式机床,第二个月维修一台立式机床,第三个月不维修,第四个月维修刨床和镗床各一台,第五个月维修两台磨床和一台立式机床,第六个月维修一台卧式机床时,工厂的利润最大。
关键字:工厂生产计划 销售量 生产量 线性规划
一、问题重述
某厂拥有4台磨床、2台立式钻床、3台卧式钻床、1台镗床和1台刨床,用以生产7种产品,记作P1至P7。工厂收益规定为产品售价减去原材料费用之剩余。每种产品单件的收益及所需各机床的加工工时(以小时计)列于下表:
产品 |
P1 |
P2 |
P3 |
P4 |
P5 |
P6 |
P7 |
收益 |
10 |
6 |
8 |
4 |
11 |
9 |
3 |
磨床 |
0.5 |
0.70 |
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.1 |
0 |
0.05 |
0 |
0.05 |
本月(一月)和随后的5个月中,下列机床停工维修:
1月 |
2月 |
3月 |
4月 |
5月 |
6月 |
磨床一台 |
卧式钻床两台 |
镗床一台 |
立式钻床一台 |
磨床一台和立式钻床一台 |
卧式钻床一台和刨床一台 |
各种产品各月份的市场容量如下表:
产品 |
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班,每班8小时。不需要考虑排队等待加工的问题。
1、为使收益最大,工厂应如何安排各月份各产品的生产?
2、研究市场价格的某种变化及引入新机床对计划和收益的影响。
3、若各机床的停工维修时间不作预先规定,而是选择最合适的月份维修。除磨床外,每台机床在这6各月中的一个月必须停工维修;六个月中4台磨床有2台需要维修。扩展工厂计划模型,使得可以对灵活安排机床维修时间做出决策。停工时间的这种灵活性价值如何?
二、模型假设
1.机器除维修时期外,其他时间均能正常工作。
2.不需要考虑排队等待加工的问题。
3.产品在储存过程中不发生质量问题。
4.该工厂生产的产品除存货外,在不超过市场容量的情况下均能售出。
5.机床顺序按照:磨床,立式钻床,卧式钻床,镗床,刨床。
三、模型分析及建立模型
1、符号说明
符号 |
意义 |
第k种机床的总数量 |
|
第i个月产生的库存费用 |
|
第j种产品的单件收益 |
|
第i个月第j种产品的利润 |
|
第i个月第k种机床的维修数量 |
|
第i个月第k种机床的可用数量 |
|
第k种机床生产第j种产品的用时 |
|
第i个月第j种产品的市场容量 |
|
第i个月第j种产品的生产量 |
|
第i个月第j种产品的存储量 |
|
第i个月第j种产品的销售量 |
2、模型的分析
2.1需解决的问题
按照题意,充分利用工厂资源,给出一个优化的生产加工方案,要求出每月每种机床加工各种产品的数量,使得工厂的利润最大化。
2.2达到的目标
工厂的目标即为获得最大的利润,对于本题,工厂的利润等于每种产品销售的数量乘上每种产品的利益减去库存产品产生的存储费,本题要达到的目标就是建立最优化数学模型寻求工厂利润的最大化。
2.3约束条件
由于工厂的利润等于产品的总收益减去库存产品时产生的存储费用,就是说影响利润的因素有产品的数量、库存产品的存储费用量两个因素,利用其约束条件将转化为求解线性规划方程组的问题,现分别对它的约束条件作如下分析。
(1)机床每月可工作时间的约束
工厂每周工作6天,每天2班,每班8小时,所以每台机器每月可工作416个小时(按每月工作26天计算),转化为数学表达式即:
(2)各种产品销售量的约束
每种产品每月的销售量由上一个月的存储量和这个月的生产量决定,并且这种产品的销售量必须满足当月此产品的市场容量。题目中已经给出左右产品每个月的市场容量表及每种产品的最大存货量最大可达100件。
故销售量应小于等于存储量和生产量之和,并且不超过当月的市场容量:
(3)6月底每种产品有存货50件
(4)第一个月每种产品的存货为0件
(5)机床停工维修时间的限制.
由于每个月份都有机床停工维修,经分析,当该种机器处于维修状态时,其可用台数Nik会减少从而影响各种产品的生产数量,进而影响总的销售额
模型的建立与求解
3.1问题一的模型建立与求解
3.1.1模型的建立
(1)目标函数
题目目标为使利润最大,总利润等于6个月的收益总和:
每个月的收益Yi等于每种产品这个月的销售总量乘上每种产品的单件售价:
每个月各种产品在仓库的存货所产生的费用:
目标函数可表示为:
(2)约束条件
机床每月可工作的时间 |
|
每月销售数量必须小于等于当月的产量和上一个月的库存总和 |
|
每月销售数量不能超过当月市场容量的最大值 |
|
每月每种产品的库存不能超过100 |
|
第6个月月底每件产品的库存要有50件 |
|
第一个月的库存为0 |
|
每个月每种产品的库存等于上个月的库存加上这个月的产量减去这个月的销售量 |
目标函数与约束条件的优化模型即为问题一的模型。
3.1.2模型的求解
我们根据建立的线性规划模型,通过lingo软件编程(程序见附录1),得到工厂产品加工计划的最大值为94511.5元。具体的生产安排计划见表1和表2。
产品 月份 |
||||||||
一 月 |
生产量(个) |
500 |
1000 |
343 |
300 |
800 |
200 |
36 |
二 月 |
生产量(个) |
700 |
600 |
157 |
0 |
500 |
300 |
250 |
三 月 |
生产量(个) |
0 |
0 |
0 |
0 |
0 |
400 |
0 |
四 月 |
生产量(个) |
200 |
300 |
400 |
500 |
200 |
0 |
100 |
五 月 |
生产量(个) |
0 |
100 |
600 |
100 |
1100 |
300 |
100 |
六 月 |
生产量(个) |
550 |
550 |
0 |
350 |
0 |
550 |
0 |
表1 问题一的产品生产量
产品 月份 |
||||||||
一 月 |
销售量(个) |
500 |
1000 |
300 |
300 |
800 |
200 |
36 |
二 月 |
销售量(个) |
600 |
500 |
200 |
0 |
400 |
300 |
150 |
三 月 |
销售量(个) |
100 |
100 |
0 |
0 |
100 |
400 |
100 |
四 月 |
销售量(个) |
200 |
300 |
400 |
500 |
200 |
0 |
100 |
五 月 |
销售量(个) |
0 |
100 |
500 |
100 |
1000 |
300 |
0 |
六 月 |
销售量(个) |
500 |
500 |
50 |
300 |
50 |
500 |
50 |
表2 问题一的产品销售量
3.1.3结果的分析
加工计划与当月能用的机床、市场容量、加工产品的时间及加工产品的单项收益有关,尽量在前期避免生产量大于销售量,不然会增加存储费用从而增加成本,尽量增大单项收益高、加工时间短的产品的生产量。
3.2问题二的模型建立与求解
3.2.1模型的建立
该问研究市场价格的某种变化及引入新机床对计划和收益的影响。为简化模型,我们先分析市场价格对计划和收益的影响,然后在此基础上,逐个增加五种机床的引进数量并分析总收益的变化趋势来反映其对引入新机床对计划和收益的影响。
假设单个产品的收益月减少率为y,则第i个月第j个产品的利润:
其中为第1个月第j个产品单件的收益。故可以建立总收益的目标函数
其它约束条件均不变。
3.2.2模型的求解
当y从0.01每次逐渐增加0.1时,利用lingo软件(程序见附录2),得到每种产品对应每个y值时的最大总收益,如下表3所示
y |
P1 |
P2 |
P3 |
P4 |
P5 |
P6 |
P7 |
94127.1 |
94245.4 |
94223.2 |
94377.5 |
93919.9 |
94085.9 |
94484.8 |
|
0.02 |
93753.9 |
93987.1 |
93942.4 |
94247.5 |
93343.8 |
93673.0 |
94458.6 |
0.03 |
93391.4 |
93736.2 |
93668.7 |
94121.4 |
92782.9 |
93272.3 |
94432.9 |
0.04 |
93039.4 |
93492.7 |
93402.2 |
93999.2 |
92236.9 |
92883.7 |
94407.7 |
0.05 |
92697.7 |
93256.3 |
93142.6 |
93880.6 |
91705.6 |
92506.7 |
94383.0 |
0.06 |
92365.8 |
93026.9 |
92889.9 |
93765.7 |
91188.6 |
92141.1 |
94358.8 |
0.07 |
92043.6 |
92804.2 |
92643.9 |
93654.3 |
90685.7 |
91786.5 |
94335.1 |
0.08 |
91730.7 |
92588.1 |
92404.5 |
93546.3 |
90196.5 |
91442.7 |
94311.9 |
0.09 |
91426.9 |
92378.3 |
92171.5 |
93441.8 |
89720.7 |
91109.3 |
94289.1 |
0.10 |
91131.9 |
92174.8 |
91944.9 |
93340.5 |
89258.2 |
90786.2 |
94266.8 |
表3每种产品不同y值时的最大总收益
接着考虑市场价格不变,即单项产品收益不变时引入新机床对计划和收益的影响。分别考虑每种机床数量逐次增加时对总收益的影响,如首先讨论磨床的数量由4逐次增加至11的过程中,总收益Y的变化趋势来衡量引入磨床对总收益的影响。
当每种机床逐次增加时,利用lingo软件,得到对应每种机床增加数量时的最大总收益,如下表4所示
磨床数量 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
总收益(元) |
94511.5 |
94703.5 |
94703.5 |
94703.5 |
94703.5 |
94703.5 |
94703.5 |
94703.5 |
立式钻床数量 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
总收益(元) |
94511.5 |
94511.5 |
94511.5 |
94511.5 |
94511.5 |
94511.5 |
94511.5 |
94511.5 |
卧式钻床数量 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
总收益(元) |
94511.5 |
94533 |
94533 |
94533 |
94533 |
94533 |
94533 |
94511.5 |
镗床数量 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
总收益(元) |
94511.5 |
104133 |
104133 |
104133 |
104133 |
104133 |
104133 |
94511.5 |
刨床数量 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
总收益(元) |
94511.5 |
106641.5 |
106641.5 |
106641.5 |
106641.5 |
106641.5 |
106641.5 |
94511.5 |
表4每种机床数量和总收益关系
3.2.3结果的分析
用Matlab软件绘图得到图1:
图1:最大利润与单个产品的月收益减少率的关系
从图中可以发现,每种产品最大总收益随y的增大而基本呈线性的减小,且总收益为正。
产品P7的月收益减少率对工厂利润的影响不大;而产品P5随着月收益减少率的增大,工厂总利润呈明显减小趋势。
用Matlab软件绘图得到图2:
图2:最大收益与每种机床数量的关系
分析结果发现引进磨床对总收益没有太大的影响,总收益最大上浮200元左右,对公司收益影响不大。再进行研究,发现引进立式钻床、卧式钻床对总收益也基本无影响。但当单独引进一台镗床时总收益变为104133元,比原来增加了9621.5元。当单独引进一台刨床时,总收益变为106642元,较原来增加了12130.5元。
从图二中可以看出,镗床和刨床的数量至多为2,总收益共这四种结果,再引进机床无影响。为最大化公司收益,当同时引进一台镗床和一台刨床时,总收益为116263.0元,较原来增加了21751.5元。
从引进机床的结果可以看出,原题中的机床维修对总收益并无很大影响。原因可能是总收益还受到市场容量以及存储量的限制,所以多引进机床并不能多生产。而引进镗床和刨床则会使生产方案发生变化,因为原有的这两台机床就很少,而且在某一月中还要进行维修。
3.3问题三的模型建立与求解
3.3.1模型的改进
由于机床的停工维修时间不作预先规定,而是选择最合适的月份维修,对各种产品每月的加工数量的限制改变了。针对这个情况,对于问题三的模型,仍采用问题一的模型,只不过对约束条件进行了修改。
(1)目标函数:
(2)约束条件:
由以上分析得到如下约束条件:
磨床在6个月中必须有两台进行维修 |
|
6个月中除磨床外其他所有机床必须全部维修一次 |
|
机床每月可工作的时间 |
|
每月销售数量必须小于等于当月的产量和上一个月的库存总和 |
|
每月销售数量不能超过当月市场容量的最大值 |
|
每月每种产品的库存不能超过100 |
|
第6个月月底每件产品的库存要有50件 |
|
第一个月的库存为0 |
|
每个月每种产品的库存等于上个月的库存加上这个月的产量减去这个月的销售量 |
3.3.2模型的求解
利用lingo软件,得到对应每个月各种机床的维修数量如下表所示时的最大利益为108855元,维修计划如下表5所示
1月 |
2月 |
3月 |
4月 |
5月 |
6月 |
卧式钻床两台 |
立式钻床一台 |
无 |
刨床一台和镗床一台 |
磨床两台 和立式钻床一台 |
卧式钻床一台 |
表5机床维修时间的最佳分配
3.3.3结果的分析
重新安排工厂的机床维修计划,比原始维修计划多收益14343.5元,原始维修计划在安排上存在漏洞,导致某个产品市场容量很大而生产量和库存都满足不了,而当市场容量很小时机床闲置不生产,重新安排维修计划使得工厂的利润最大化。
四、模型的优缺点分析
1.模型的优点
1.在模型求解的时候,利用了专门求解规划问题的lingo数学软件,求解速度很快,而且结果准确;
2.在模型的改进中,采用了动态规划模型,考虑不同变量之间的关系,求解全局最优解。
3.对工厂的最大总收益进行了研究分析,认为增加一台镗床和一台刨床更能提高最大总收益。
4.对机床的维修时间进行了研究分析,认为工厂原始的维修方案缺乏科学性,应该修改原始的维修方案。
5.通过比较发现对维修时间的修改带来的利益比引进新机床带来的利益更大,而且也不用成本。
2.模型的缺点
1. 在题目中,我们没有考虑产品每天的存储费用,只是简单地把存储费用看作是月底的存储量与存储价格的积,这样不太全面,有失偏差;
2.模型较为单一,并且没有用很好的检验方法来检验最大收益值。
五、模型的推广
本模型是一个典型的线性规划模型,用来求解最大或最小目标函数值问题。此类问题很多,也有很多的推广应用价值。优化问题可以说是人们应用科学、工程设计、商业贸易等领域中最常遇到的一类问题。
这种用数学建模的方法来处理优化问题,即建立和求解所谓优化模型。虽然由于建模时要做适当的简化,可能使得结果不一定完全可行或达到实际上的最优,但是它基于客观规律和数据,模型的建立与求解并不需要耗费太多时间。如果在建模的基础上再赋予其现实意义,就可以期望得到实际问题的一个比较圆满的回答。
六、参考文献
[1].袁新生 邵大宏等 《LINGO和excel在数学建模中的应用》科学出版社 2007年1月.
[2]姜启源,谢金星,叶俊,数学模型(第三版),高等教育出版社,2003年8月.
[3]叶其孝,大学生数学建模竞赛辅导教材(三),湖南教育出版社,1998年5月.
[4]张珠宝,数学建模与数学实验,高等教育出版社,2005年3月.
[5]百度文库,存储模型,
http://wenku.baidu.com/view/813e588a6529647d27285233.html
七、附录
附录1:问题一中的程序代码
sets: row/1..6/; col/1..7/ : P; mach/1..5/ : A; link1(row,mach) : N; link2(mach,col) : T; link3(row,col) : V, L, X, S; endsets data: A = 4 2 3 1 1; P = 10 6 8 4 11 9 3; N = 3 2 3 1 1 4 2 1 1 1 4 2 3 0 1 4 1 3 1 1 3 1 3 1 1 4 2 2 1 0; T = 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.1 0 0.05 0 0.05; V = 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; enddata @for(row(i) : @for(mach(k) : @sum(col(j) : (X(i,j)*T(k,j))) <= 416*N(i,k))); @for(col(j) : S(1,j) <= X(1,j)); @for(row(i)|i#ge#2 : @for(col(j) : S(i,j) <= X(i,j)+L(i-1,j))); @for(row(i) : @for(col(j) : S(i,j) <= V(i,j))); @for(row(i) : @for(col(j) : L(i,j) <= 100)); @for(col(j) : L(6,j) = 50); @for(col(j) : L(1,j) = x(1,j)-S(1,j)); @for(row(i)|i#ge#2 : @for(col(j) : L(i,j) = L(i-1,j)+x(i,j)-S(i,j))); @for(link3(i,j) : @gin(X(i,j)); @gin(V(i,j)); @gin(S(i,j)); @gin(L(i,j))); [OBJ]MAX = @sum(row(i) : @sum(col(j) : S(i,j)*P(j)) - 0.5*@sum(col(j) : L(i,j)));
附录2:问题二中当y值变化时的程序代码
sets: row/1..6/; col/1..7/ : F; mach/1..5/ : A; link1(row,mach) : N; link2(mach,col) : T; link3(row,col) : V, L, X, S, P; endsets data: A = 4 2 3 1 1; F = 10 6 8 4 11 9 3; N = 3 2 3 1 1 4 2 1 1 1 4 2 3 0 1 4 1 3 1 1 3 1 3 1 1 4 2 2 1 0; T = 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.1 0 0.05 0 0.05; V = 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; enddata y = 0.01; r = 1; @for(col(j) : P(1,j) = F(j)); @for(row(i)|i#ge#2 : P(i,r) = P(i-1,r)*(1-y)); @for(col(j)|j#lt#r : @for(row(i)|i#ge#2 : P(i,j) = F(j))); @for(col(j)|j#gt#r : @for(row(i)|i#ge#2 : P(i,j) = F(j))); @for(row(i) : @for(mach(k) : @sum(col(j) : (X(i,j)*T(k,j))) <= 416*N(i,k))); @for(col(j) : S(1,j) <= X(1,j)); @for(row(i)|i#ge#2 : @for(col(j) : S(i,j) <= X(i,j)+L(i-1,j))); @for(row(i) : @for(col(j) : S(i,j) <= V(i,j))); @for(row(i) : @for(col(j) : L(i,j) <= 100)); @for(col(j) : L(6,j) = 50); @for(col(j) : L(1,j) = x(1,j)-S(1,j)); @for(row(i)|i#ge#2 : @for(col(j) : L(i,j) = L(i-1,j)+x(i,j)-S(i,j))); @for(link3(i,j) : @gin(X(i,j)); @gin(V(i,j)); @gin(S(i,j)); @gin(L(i,j))); [OBJ]MAX = @sum(row(i) : @sum(col(j) : S(i,j)*P(i,j)) - 0.5*@sum(col(j) : L(i,j)));
附录3:问题二中引进磨床时的程序代码
sets: row/1..6/; col/1..7/ : P; mach/1..5/ : A; link1(row,mach) : N, M; link2(mach,col) : T; link3(row,col) : V, L, X, S; endsets data: A = 8 2 3 1 1; P = 10 6 8 4 11 9 3; M = 1 0 0 0 0 0 0 2 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 0 0 0 0 1 0 1; T = 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.1 0 0.05 0 0.05; V = 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; enddata @for(row(i) : @for(mach(j) : N(i,j) = (A(j) - M(i,j)))); @for(row(i) : @for(mach(k) : @sum(col(j) : (X(i,j)*T(k,j))) <= 416*N(i,k))); @for(col(j) : S(1,j) <= X(1,j)); @for(row(i)|i#ge#2 : @for(col(j) : S(i,j) <= X(i,j)+L(i-1,j))); @for(row(i) : @for(col(j) : S(i,j) <= V(i,j))); @for(row(i) : @for(col(j) : L(i,j) <= 100)); @for(col(j) : L(6,j) = 50); @for(col(j) : L(1,j) = x(1,j)-S(1,j)); @for(row(i)|i#ge#2 : @for(col(j) : L(i,j) = L(i-1,j)+x(i,j)-S(i,j))); @for(link3(i,j) : @gin(X(i,j)); @gin(V(i,j)); @gin(S(i,j)); @gin(L(i,j))); [OBJ]MAX = @sum(row(i) : @sum(col(j) : S(i,j)*P(j)) - 0.5*@sum(col(j) : L(i,j)));
附录4:问题三中把机床维修时间作为决策变量时的程序代码
sets: row/1..6/; col/1..7/ : P; mach/1..5/ : A; link1(row,mach) : N, M; link2(mach,col) : T; link3(row,col) : V, L, X, S; endsets data: A = 4 2 3 1 1; P = 10 6 8 4 11 9 3; T = 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.1 0 0.05 0 0.05; V = 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; enddata @sum(row(i) : M(i,1)) = 2; @for(link1(i,k) : @gin(M); @gin(N)); @for(mach(k)|k#ge#2 : @sum(row(i) : M(i,k)) = A(k)); @for(row(i) : @for(mach(k) : N(i,k) = (A(k) - M(i,k)))); @for(row(i) : @for(mach(k) : @sum(col(j) : (X(i,j)*T(k,j))) <= 416*N(i,k))); @for(col(j) : S(1,j) <= X(1,j)); @for(row(i)|i#ge#2 : @for(col(j) : S(i,j) <= X(i,j)+L(i-1,j))); @for(row(i) : @for(col(j) : S(i,j) <= V(i,j))); @for(row(i) : @for(col(j) : L(i,j) <= 100)); @for(col(j) : L(6,j) = 50); @for(col(j) : L(1,j) = x(1,j)-S(1,j)); @for(row(i)|i#ge#2 : @for(col(j) : L(i,j) = L(i-1,j)+x(i,j)-S(i,j))); @for(link3(i,j) : @gin(X(i,j)); @gin(V(i,j)); @gin(S(i,j)); @gin(L(i,j))); [OBJ]MAX = @sum(row(i) : @sum(col(j) : S(i,j)*P(j)) - 0.5*@sum(col(j) : L(i,j)));