给定一些输入,找到图形边缘的最佳权重以最大化某些输出

Given some input, find the optimal weightings for edges of a graph to maximize some output

我有一个有向图,它通过配方(边)描述了项目(节点)之间的关系。
食谱的简单示例:2 Iron Ore => 1 Iron Ingot.

我想为每个配方找到一个权重(也就是说每个配方应该应用的次数),以便给定一些起始数量的项目,它会产生指定项目的最大数量。

我怎样才能找到每个食谱的权重?

注意:所有权重必须是非负数(可以是小数)。没有权重会导致需要的输入多于可用的数量。


这是我要解决的主要问题,但接下来,我要解决的下一件事是考虑能源使用情况。每个食谱都会使用一定量的能量或产生一定量的能量。

如何确保在求权重时,能源生产减去能源消耗是非负的?

提前感谢您的任何建议:)

我已经设法通过放弃图形结构并将问题视为 linear programming problem 来解决这个问题。

如果将问题视为 max flow problem,则可能可以使用图结构,但我还没有研究它。

这是求解最大铁锭的 LP 的一个小例子:

Maximize
 iron_ingot: 30 recipe_iron_ingot + 50 recipe_iron_alloy_ingot + 65 recipe_pure_iron_ingot

Subject To
 iron_ore: 30 recipe_iron_ingot + 20 recipe_iron_alloy_ingot + 35 recipe_pure_iron_ingot <= 70380
 copper_ore: 20 recipe_iron_alloy_ingot <= 28860

Bounds
 0 <= recipe_iron_ingot
 0 <= recipe_iron_alloy_ingot
 0 <= recipe_pure_iron_ingot

End

这代表每分钟输入70380铁矿石,每分钟输入28860铜矿石和无限水。它分析了制造铁锭的 3 种不同配方。

结果为:

0×铁锭配方
1443×铁alloy锭配方
1186.29×纯铁锭配方

相当于每分钟 149258.85 铁锭。

这还没有考虑到电力生产/消耗,但只需将电力视为 input/output 就像处理物品一样,这应该很容易添加。