如何从给定产品及其属性中找到最低成本?

时间:2019-04-16 17:49:02

标签: algorithm dynamic-programming

我的熔化材料应达到要求的性能。 将有2套材料 1)报废 2)铁合金 目标:以最小的成本实现每个元素的目标值 对于前混合1000公斤后,我们要实现以下特性 碳-2.4% 硅-2.1% p-0.015% S-0.015%

现在,从给定的材料集中,我们定义了可以得到多少的价值 就像从CRC(是废钢)中获得1.1%的碳,从渗碳剂(铁合金)中获得78%的碳。 这意味着,如果我们使用100公斤的冷轧卷,可以得到1.1碳,但是如果使用5公斤的渗碳剂,则可以得到3.9碳。 因此,我们拥有每种材料的所有元素值。 另外,我们还有每种材料的价格。像CRC是25 Rs / Kg。而渗碳剂是1500 / kg。 因此,因此我们需要以最低成本达到目标值的方式混合材料,例如要获得2.4%的碳,如果我们使用100公斤的废料,我们可以得到1.1%的碳,而需要的1.4则可以从1.8公斤的渗碳机得到费用为2500 + 2700 = 5200卢比。这可以是任意数量的组合,我们需要从中找到最低成本的解决方案,但条件是必需的材料应该是可数的,例如答案应该是701.5超出正常范围,但不应是701.115,因为没人会测量115实际混合时的克数。 因此,我们需要找到最低的成本,为此,应该使用多少公斤哪种材料?这是一个要素的示例,但我们应该实现所有目标要素。

输入数据: 报废材料及其成本的元素价值

CRC废料C%-1.5 Si%-0.9成本:25 / kg

猪铁C%-1.9 Si%-1.1成本:28 / kg

MS废料C%-1.4 Si%-0.9成本:23.5 / kg

废钢c%-1.8 Si%-1.5成本:29 / kg

铁合金

渗碳剂C%-80 Si%0成本:1000 / kg

铁硅C%-0 Si%-65 S%10成本:1200 / kg

锰铁含量%-0 S%-20 P%-15成本:500 / kg

铜cu%-98成本:1500 / kg

必需值已在上面定义。现在,我们需要找到1000千克废料的混合物,并实现铁合金的物有所值的优化使用。

有没有针对这种问题的算法? 或有什么方法可以帮助我找到租赁费用?

谢谢。

1 个答案:

答案 0 :(得分:0)

所有这些都可以说成是线性程序。一旦有了这个,就可以将其插入您喜欢的求解器中,并在可行的情况下获得解决方案。

您要最小化的优化目标是总成本:

class MyAppBar extends PreferredSize {
  MyAppBar({Key key, Widget title}) : super(
    key: key,
    preferredSize: Size.fromHeight(50),
    child: AppBar(
      title: title,
      // maybe other AppBar properties
    ),
  );
}

f = w_CRC * cost_CRC + w_pigIron * cost_pigIron + ... 是每种材料的权重,代表优化变量。成本是常数。

然后添加以下约束以对需求进行建模:

w_...

w_CRC + w_pigIron + w_MS + ... = totalWeight w_CRC >= 0, w_pigIron >=0, w_MS >= 0 ... w_CRC * C_CRC + w_pigIron * C_pigIron + ... = desiredCWeight w_CRC * Si_CRC + w_pigIron * Si_pigIron + ... = desiredSiWeight C_是元素在相应材料和Si_中的比例。

如果要确保结果是“好”的数字,可以添加积分约束并将其设为整数线性程序。例如,如果要允许权重达到小数点后第一位,则可以将权重desiredXWeight = totalWeight * desiredXProportion替换为w_X并求解整数权重因子0.1 * u_X。然后,用u_X得到实际重量。但是,我认为原始公式将为您提供足够好的数字,其中大多数权重可能为零。此外,通过施加完整性约束,您可能使问题不可行。因此,可能有必要使这些完整性约束变软。您可以通过将优化目标更改为

来完成此操作
w_X = 0.1 * u_X

在这里,您将添加整数变量f = (... what we had before...) + a * ((w_CRC - 0.1 * u_CRC)^2 + (w_pigIron - 0.1 * u_pigIron)^2 + ...) ,并使权重u_X接近表示的权重。常量w_X表示您要强制执行此约束的程度。