主要内容gydF4y2Ba

混合整数线性规划基础:基于问题的gydF4y2Ba

这个例子展示了如何解决一个混合整数线性问题。虽然并不复杂,但该示例显示了使用基于问题的方法来制定问题的典型步骤。有关显示此示例的视频,请参见gydF4y2Ba用优化建模方法求解一个混合整数线性规划问题gydF4y2Ba.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

制定问题gydF4y2Ba

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

变量gydF4y2Ba合金(1)gydF4y2Ba通过gydF4y2Ba合金(3)gydF4y2Ba数量是以吨为单位的合金吗gydF4y2Ba1gydF4y2Ba,gydF4y2Ba2gydF4y2Ba,gydF4y2Ba3.gydF4y2Ba你买的东西。gydF4y2Ba废gydF4y2Ba是你购买的废钢的数量。gydF4y2Ba

Steelprob =优化问题;Ingots = optimvar(gydF4y2Ba“锭”gydF4y2Ba4gydF4y2Ba“类型”gydF4y2Ba,gydF4y2Ba“整数”gydF4y2Ba,gydF4y2Ba下界的gydF4y2Ba,0,gydF4y2Ba“UpperBound”gydF4y2Ba1);合金= optimvar(gydF4y2Ba“合金”gydF4y2Ba3,gydF4y2Ba下界的gydF4y2Ba, 0);报废= optimvar(gydF4y2Ba“取消”gydF4y2Ba,gydF4y2Ba下界的gydF4y2Ba, 0);gydF4y2Ba

为与变量相关的成本创建表达式。gydF4y2Ba

weightIngots = [5,3,4,6];成本锭=重量锭。*[350,330,310,280];costalloy = [500,450,400];costScrap = 100;成本=成本铸锭*铸锭+成本合金*合金+成本废铁*废铁;gydF4y2Ba

将成本作为问题的目标函数。gydF4y2Ba

steelprob。目标=成本;gydF4y2Ba

这个问题有三个等式约束。第一个限制是总重量是25吨。计算钢的重量。gydF4y2Ba

总重量=总重量*锭数+总和(合金)+废钢;gydF4y2Ba

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

carbonIngots = [5,4,5,3]/100;carbonalloy = [8,7,6]/100;carbonScrap = 3/100;totalCarbon = (weights tingots .* carbon锭)*锭+ carbonalloy *合金+ carbonScrap*废料;gydF4y2Ba

第三个限制是钼的重量为1.25吨。计算钢中钼的重量。gydF4y2Ba

molybIngots = [3,3,4,4]/100;molybAlloys = [6,7,8]/100;钼废料= 9/100;totalMolyb = (weighttingots .*molybIngots)*锭+ molybAlloys*合金+钼废料*废料;gydF4y2Ba

在问题中包含约束条件。gydF4y2Ba

steelprobe . constraints .conswt = totalWeight == 25;steelprobe . constraints .conscarb = totalCarbon == 1.25;steelprobe . constraints .consmolyb = totalMolyb == 1.25;gydF4y2Ba

解决问题gydF4y2Ba

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

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

查看解决方案。gydF4y2Ba

sol.ingotsgydF4y2Ba
ans =gydF4y2Ba4×1gydF4y2Ba1.0000 1.0000 0 1.0000gydF4y2Ba
sol.alloysgydF4y2Ba
ans =gydF4y2Ba3×1gydF4y2Ba7.2500 0 0.2500gydF4y2Ba
sol.scrapgydF4y2Ba
Ans = 3.5000gydF4y2Ba
fvalgydF4y2Ba
Fval = 8.4950e+03gydF4y2Ba

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

相关的话题gydF4y2Ba