主要内容gydF4y2Ba

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

这个例子展示了如何解决一个混合整数线性问题。虽然并不复杂,但该示例显示了使用for语法制定问题的典型步骤gydF4y2BaintlinproggydF4y2Ba.gydF4y2Ba

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

问题描述gydF4y2Ba

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

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

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

我gydF4y2Ba ngydF4y2Ba ggydF4y2Ba ogydF4y2Ba tgydF4y2Ba WgydF4y2Ba egydF4y2Ba 我gydF4y2Ba ggydF4y2Ba hgydF4y2Ba tgydF4y2Ba 我gydF4y2Ba ngydF4y2Ba TgydF4y2Ba ogydF4y2Ba ngydF4y2Ba 年代gydF4y2Ba %gydF4y2Ba CgydF4y2Ba 一个gydF4y2Ba rgydF4y2Ba bgydF4y2Ba ogydF4y2Ba ngydF4y2Ba %gydF4y2Ba 米gydF4y2Ba ogydF4y2Ba lgydF4y2Ba ygydF4y2Ba bgydF4y2Ba dgydF4y2Ba egydF4y2Ba ngydF4y2Ba ugydF4y2Ba 米gydF4y2Ba CgydF4y2Ba ogydF4y2Ba 年代gydF4y2Ba tgydF4y2Ba TgydF4y2Ba ogydF4y2Ba ngydF4y2Ba 1gydF4y2Ba 5gydF4y2Ba 5gydF4y2Ba 3.gydF4y2Ba $gydF4y2Ba 3.gydF4y2Ba 5gydF4y2Ba 0gydF4y2Ba 2gydF4y2Ba 3.gydF4y2Ba 4gydF4y2Ba 3.gydF4y2Ba $gydF4y2Ba 3.gydF4y2Ba 3.gydF4y2Ba 0gydF4y2Ba 3.gydF4y2Ba 4gydF4y2Ba 5gydF4y2Ba 4gydF4y2Ba $gydF4y2Ba 3.gydF4y2Ba 1gydF4y2Ba 0gydF4y2Ba 4gydF4y2Ba 6gydF4y2Ba 3.gydF4y2Ba 4gydF4y2Ba $gydF4y2Ba 2gydF4y2Ba 8gydF4y2Ba 0gydF4y2Ba

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

一个gydF4y2Ba lgydF4y2Ba lgydF4y2Ba ogydF4y2Ba ygydF4y2Ba %gydF4y2Ba CgydF4y2Ba 一个gydF4y2Ba rgydF4y2Ba bgydF4y2Ba ogydF4y2Ba ngydF4y2Ba %gydF4y2Ba 米gydF4y2Ba ogydF4y2Ba lgydF4y2Ba ygydF4y2Ba bgydF4y2Ba dgydF4y2Ba egydF4y2Ba ngydF4y2Ba ugydF4y2Ba 米gydF4y2Ba CgydF4y2Ba ogydF4y2Ba 年代gydF4y2Ba tgydF4y2Ba TgydF4y2Ba ogydF4y2Ba ngydF4y2Ba 1gydF4y2Ba 8gydF4y2Ba 6gydF4y2Ba $gydF4y2Ba 5gydF4y2Ba 0gydF4y2Ba 0gydF4y2Ba 2gydF4y2Ba 7gydF4y2Ba 7gydF4y2Ba $gydF4y2Ba 4gydF4y2Ba 5gydF4y2Ba 0gydF4y2Ba 3.gydF4y2Ba 6gydF4y2Ba 8gydF4y2Ba $gydF4y2Ba 4gydF4y2Ba 0gydF4y2Ba 0gydF4y2Ba 年代gydF4y2Ba cgydF4y2Ba rgydF4y2Ba 一个gydF4y2Ba pgydF4y2Ba 3.gydF4y2Ba 9gydF4y2Ba $gydF4y2Ba 1gydF4y2Ba 0gydF4y2Ba 0gydF4y2Ba

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

变量gydF4y2Bax (5)gydF4y2Ba通过gydF4y2Bax (7)gydF4y2Ba数量是以吨为单位的合金吗gydF4y2Ba1gydF4y2Ba,gydF4y2Ba2gydF4y2Ba,gydF4y2Ba3.gydF4y2Ba你买了,然后gydF4y2Bax (8)gydF4y2Ba是你购买的废钢的数量。gydF4y2Ba

MATLAB®配方gydF4y2Ba

通过指定输入来阐明问题gydF4y2BaintlinproggydF4y2Ba.相关的gydF4y2BaintlinproggydF4y2Ba语法是:gydF4y2Ba

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

为创建输入gydF4y2BaintlinproggydF4y2Ba从第一个开始(gydF4y2BafgydF4y2Ba)到最后(gydF4y2Ba乌兰巴托gydF4y2Ba).gydF4y2Ba

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

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

整数变量是前四个。gydF4y2Ba

Intcon = 1:4;gydF4y2Ba

提示:gydF4y2Ba若要指定二进制变量,请将变量设置为中的整数gydF4y2BaintcongydF4y2Ba,给它们一个下界gydF4y2Ba0gydF4y2Ba的上界gydF4y2Ba1gydF4y2Ba.gydF4y2Ba

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

A = [];B = [];gydF4y2Ba

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

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

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

5 * 0.05 * (1) + 3 * 0.04 * x (2) + 4 * 0.05 * x (3) + 6 * 0.03 * (4)gydF4y2Ba

+ 0.08 * 0.07 x (5) + * x (6) + 0.06 * (7) x (8) = 1.25 + 0.03 *gydF4y2Ba

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

5 * 0.03 * (1) + 3 * 0.03 * x (2) + 4 * 0.04 * x (3) + 6 * 0.04 * (4)gydF4y2Ba

+ 0.06 * 0.07 x (5) + * x (6) + 0.08 * (7) x (8) = 1.25 + 0.09 *gydF4y2Ba

指定约束,即矩阵形式的Aeq*x = beq。gydF4y2Ba

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];gydF4y2Ba

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

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

解决问题gydF4y2Ba

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

[x,fval] = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub);gydF4y2Ba
LP:最优目标值为8125.600000。切割生成:应用3 mir切割。下界为8495.000000。相对差距为0.00%。找到最优解。Intlinprog停止在根节点,因为目标值在最佳值的间隙公差范围内,选项。AbsoluteGapTolerance = 0(默认值)。intcon变量是公差范围内的整数,选项。IntegerTolerance = 1e-05(默认值)。gydF4y2Ba

查看解决方案。gydF4y2Ba

x, fvalgydF4y2Ba
x =gydF4y2Ba8×1gydF4y2Ba1.0000 1.0000 0 1.0000 7.2500 0 0.2500 3.5000gydF4y2Ba
Fval = 8.4950e+03gydF4y2Ba

最理想的购买价格是8495美元。买锭gydF4y2Ba1gydF4y2Ba,gydF4y2Ba2gydF4y2Ba,gydF4y2Ba4gydF4y2Ba,但不是gydF4y2Ba3.gydF4y2Ba,并购买7.25吨合金gydF4y2Ba1gydF4y2Ba, 0.25吨合金gydF4y2Ba3.gydF4y2Ba以及3.5吨废钢。gydF4y2Ba

集gydF4y2BaIntcon = []gydF4y2Ba看不带整数约束的解题效果。解决方案是不同的,而且是不现实的,因为你买不到一个铸锭的一小部分。gydF4y2Ba

相关的话题gydF4y2Ba