數學建模演算法與應用習題1-3 解析 MATLAB 整數規劃
阿新 • • 發佈:2021-01-28
數學建模演算法與應用習題 1.3
某廠生產三種產品Ⅰ,Ⅱ,Ⅲ。每種產品要經過A,B兩道工序加工。設該廠有兩種規格的裝置能完成A工序,以A1,A2 表示;有三種規格的裝置能完成B工序,以B1,B2,B3,表示。產品Ⅰ可在A,B任何一種規格裝置上加工。產品Ⅱ可在任何規格的A裝置上加工,但完成B工序時,只能在B1裝置上加工;產品Ⅲ只能在A2與B2裝置上加工。已知在各種機床裝置的單件工時、原材料費、產品銷售價格、各種裝置有效臺時以及滿負荷操作時機床裝置的費用如表1.2所列,試安排最優的生產計劃,使該廠利潤最大。
裝置 | 產品Ⅰ | 產品Ⅱ | 產品Ⅲ | 裝置有效臺時 | 滿負荷時的裝置費用/元 |
---|---|---|---|---|---|
A1 | 5 | 10 | 6000 | 300 | |
A2 | 7 | 9 | 12 | 10000 | 321 |
B1 | 6 | 8 | 4000 | 250 | |
B2 | 4 | 11 | 7000 | 783 | |
B3 | 7 | 4000 | 200 | ||
原料費/(元/件) | 0.25 | 0.35 | 0.50 | ||
單價/(元/件) | 1.25 | 2.00 | 2.80 |
這裡,我們可以設產品Ⅰ的A1、A2、B1、B2、B3參與生產的產品數量分別為x1、x2、x3、x4、x5。
設產品Ⅱ的A1、A2、B1參與生產的產品數量分別為x6、x7、x8。
設產品Ⅲ的A2、B2參與生產的產品數量分別為x9、x10。
根據利潤公式——利潤 = 單價 - 原料 - 裝置費用,得出:
z = (1.25-0.25)(x1+x2)+(2 -0.35)x8+(2.8-0.5)x9 -(300/6000)(5x1+10x6) - (321/10000)(7x2+9x7+12x9) -(250/4000)(6x3+8x8) - (783/7000)(4x4+11x10) -(200/4000)7x5
下面是條件限制
5x1 + 10x6 ≤ 6000
7x2 + 9x7 + 12x9 ≤ 10000
6x3 + 8x8 ≤ 4000
4x4 + 11x10 ≤ 7000
7x5 ≤ 4000
x1 + x2 = x3 + x4 + x5,
x6 + x7 = x8
x9 = x10
x = 1:10
整理後
利潤公式係數分別為 3/4,7753/10000,-3/8,-3132/7000,-7/20,-1/2,-2889/10000,1.15,19148/10000,-8613/7000。
得出程式碼:
clc;clear; c = [3/4,7753/10000,-3/8,-3132/7000,-7/20,-1/2,-2889/10000,1.15,19148/10000,-8613/7000]; A = [5,0,0,0,0,10,0,0,0,0;0,7,0,0,0,0,9,0,12,0; 0,0,6,0,0,0,0,8,0,0;0,0,0,4,0,0,0,0,0,11; 0,0,0,0,7,0,0,0,0,0]; b = [6000,10000,4000,7000,4000]; aeq = [1,1,-1,-1,-1,0,0,0,0,0; 0,0,0,0,0,1,1,-1,0,0; 0,0,0,0,0,0,0,0,1,-1]; beq = [0,0,0]; options = optimoptions('linprog','Algorithm','dual-simplex'); [x,y] = linprog(-c,A,b,aeq,beq,zeros(10,1),[],options); fprintf('最優方案應該為:\n') for i = 1:10 fprintf('x%d = %.5f\n',i,x(i)); end fprintf('最大利潤為%.5f元\n',-y);
輸出為:
Optimal solution found.
最優方案應該為:
x1 = 1200.00000
x2 = 230.04926
x3 = 0.00000
x4 = 858.62069
x5 = 571.42857
x6 = 0.00000
x7 = 500.00000
x8 = 500.00000
x9 = 324.13793
x10 = 324.13793
最大利潤為1146.56650元
同答案上Lingo程式的結果對比基本一致,又因為需要進行整數規劃。這裡我們對程式碼進行一下修改。
clc;clear;
c = [3/4,7753/10000,-3/8,-3132/7000,-7/20,-1/2,-2889/10000,1.15,19148/10000,-8613/7000];
A = [5,0,0,0,0,10,0,0,0,0;0,7,0,0,0,0,9,0,12,0;
0,0,6,0,0,0,0,8,0,0;0,0,0,4,0,0,0,0,0,11;
0,0,0,0,7,0,0,0,0,0];
b = [6000,10000,4000,7000,4000];
aeq = [1,1,-1,-1,-1,0,0,0,0,0;
0,0,0,0,0,1,1,-1,0,0;
0,0,0,0,0,0,0,0,1,-1];
beq = [0,0,0];
intcon = [1 2 3 4 5 6 7 8 9 10];
[x,y] = intlinprog(-c,intcon,A,b,aeq,beq,zeros(10,1),[]);
fprintf('最優方案應該為:\n')
for i = 1:10
fprintf('x%d = %.5f\n',i,x(i));
end
fprintf('最大利潤為%.5f元\n',-y);
輸出為:
最優方案應該為:
x1 = 1200.00000
x2 = 230.00000
x3 = 0.00000
x4 = 859.00000
x5 = 571.00000
x6 = 0.00000
x7 = 500.00000
x8 = 500.00000
x9 = 324.00000
x10 = 324.00000
最大利潤為1146.41420元