文档

混合整数线性规划基础:基于求解器

这个例子展示了如何求解一个混合整数线性规划。示例并不复杂,但它展示了用语法表述问题的典型步骤intlinprog

有关此问题的基于问题的方法,请参见混合整数线性规划基础:基于问题的

问题描述

你想要混合各种化学成分的钢,以获得25吨具有特定化学成分的钢。结果应该有5%的碳和5%的钼的重量,这意味着25吨*5% = 1.25吨碳和1.25吨钼。目标是将钢的混合成本降到最低。

这个问题是Carl-Henrik Westerberg, Bengt Bjorklund和Eskil Hultman提出的混合整数规划在瑞典某钢厂的应用《界面》1977年2月卷7号第2页39-43,其摘要载于http://interfaces.journal.informs.org/content/7/2/39.abstract

有四块钢锭可供购买。每种钢锭只能有一个。

重量(吨) %碳 %钼 成本/吨
1 5 5 3. 350美元
2 3. 4 3. 330美元
3. 4 5 4 310美元
4 6 3. 4 280美元

合金钢有三种等级可供购买,废钢有一种等级可供购买。合金钢和废钢可以少量购买。

合金 %碳 %钼 成本/吨
1 8 6 500美元
2 7 7 450美元
3. 6 8 400美元
3. 9 100美元

为了阐明这个问题,首先要确定控制变量。把变量X (1) = 1意思是你购买元宝1,X (1) = 0意思是你不买钢锭。同样,变量x (2)通过x (4)二进制变量是否表示您购买了锭2通过4

变量x (5)通过x (7)数量是以吨为单位的合金吗12,3.你购买,然后x (8)是你购买的废钢数量。

MATLAB配方

通过指定输入来阐明问题intlinprog.相关的intlinprog语法如下。

[x,fval] = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub)

为创建输入intlinprog从第一(f)到最后(乌兰巴托).

f是成本系数的向量。表示铸锭成本的系数是铸锭重量乘以每吨成本。

F = [350*5,330*3,310*4,280*6,500,450,400,100];

整数变量是前四个。

Intcon = 1:4;

提示

若要指定二进制变量,请将变量设置为中的整数intcon,给它们一个下界0的上界1

没有线性不等式约束,所以一个而且b为空矩阵([]).

有三个等式约束。首先,总重量是25吨。

5 * x (1) + 3 * x (2) + 4 * x (3) + 6 * x (4) + (5) + x (6) + x (7) + (8) = 25

第二个限制是碳的重量是25吨的5%,即1.25吨。

5 * 0.05 * (1) + 3 * 0.04 * x (2) + 4 * 0.05 * x (3) + 6 * 0.03 * (4)
+ 0.08 * 0.07 x (5) + * x (6) + 0.06 * (7) x (8) = 1.25 + 0.03 *

第三个限制是钼的重量为1.25吨。

5 * 0.03 * (1) + 3 * 0.03 * x (2) + 4 * 0.04 * x (3) + 6 * 0.04 * (4)
+ 0.06 * 0.07 x (5) + * x (6) + 0.08 * (7) x (8) = 1.25 + 0.09 *

在矩阵形式下,Aeq*x = beq,在那里

Aeq = [5,3,4,6,1,1,1,1;5 * 0.05, 3 * 0.04, 4 * 0.05, 6 * 0.03, 0.08, 0.07, 0.06, 0.03;5 * 0.03, 3 * 0.03, 4 * 0.04, 6 * 0.04, 0.06, 0.07, 0.08, 0.09);Beq = [25;1.25;1.25];

每个变量都以0为界。整型变量以1为上界。

Lb = 0 (8,1);Ub = ones(8,1);ub(5:end) = Inf;非整数变量无上限

解决问题

现在您有了所有的输入,调用求解器。

[x, fval] = intlinprog (f intcon [] [], Aeq,说真的,磅,乌兰巴托);

查看解决方案。

x, fval
X = 1.0000 1.0000 0 1.0000 7.2500 0 0.2500 3.5000 fval = 8.4950e+03

最理想的购买价格是8495美元。买锭12,4,但不是3.,并购买7.25吨合金1, 0.25吨合金3.以及3.5吨废钢。

Intcon = []看不带整数约束的解题效果。解决办法是不同的,而且是不明智的,因为你买不到一个铸锭的零头。