我有一个由化学元素制成的一些材料,每公斤克有一个价格:
A: { cu: 0.02, mg: 0.3, nc: 0.005, price: 1000 }
字符串
这意味着1千克的材料A是由0.02克“铜”,0.3克“毫克”,0.005克“数控”,并具有1000$的价格。我有一些其他类似的材料:
A: { cu: 0.02, mg: 0.3, nc: 0.005, price: 1000 }
B: { cu: 0.033, mg: 0.2, nc: 0.00, price: 1500 }
C: { cu: 0.05, mg: 0.35, nc: 0.00, price: 1700 }
型
我想建立一个产品,让我们称之为Pr_1,有10千克的重量,由材料A,B和/或C制成,所以Pr_1有最低价格。Pr_1也有一些限制:
Pr_1: {minCu: 0.00, maxCu: 1.2, minMg: 1.2, maxMg: 1.9, minNc: 0, maxNc: 0}
型
这意味着10千克的Pr_1应该至少有0.00克,最多1.2克“铜”,也应该至少有1.2克,最多1.9克“毫克”,它不应该有任何“nc”。正如我提到的,Pr_1必须在所有可能的材料A,B和C的组合中具有最低价格。
因此,让我们将由材料A、B和C制成的Pr_1的权重分别表示为x_A、x_B和x_C。目标是使总成本最小化:
最小化:
1000*x_A + 1500*x_B + 1700*x_C
型
我们有三个不等式:
0.00 <= 0.02*x_A + 0.033*x_B + 0.05*x_C <= 1.2 // cu constraint
1.2 <= 0.03*x_A + 0.2*x_B + 0.35*x_C <= 1.9 // mg constraint
0.005*x_A + 0.00*x_B + 0.00*x_C = 0 // nc constraint
型
我不知道如何使用Scipy和Python来解决这个问题。
from scipy.optimize import linprog
# Coefficients of the objective function (costs)
c = [1000, 1500, 1700]
# Coefficients of the inequality constraints matrix
A = [
[-0.02, -0.033, -0.05], # Cu constraint
[-0.3, -0.2, -0.35], # Mg constraint
[-0.005, 0, 0] # Nc constraint
]
# Right-hand side of the inequality constraints
b = ???? # I don't know what this should be
# Bounds for each variable (x_A, x_B, x_C)
x_bounds = (0, None)
# Solve the linear programming problem
result = linprog(c, A_ub=A, b_ub=b, bounds=[x_bounds, x_bounds, x_bounds], method='highs')
# Print the results
print("Optimal weights for Pr_1 from A, B, and C:", result.x)
print("Minimum cost of Pr_1:", result.fun)
型
2条答案
按热度按时间cigdeys31#
正如我在评论中所说,在你目前的限制下,这个问题是不可行的。
在相同的约束条件下,您可以生产9 kg。此外,我认为您应该更加小心和明确地使用您的单位,因此我使用Pandas演示了尺寸管理。最后,这产生了一个更清晰的输出。
另外,猜测一下,你的
Nc
意味着镍实际上是Ni
。个字符
要找到最大总质量,请更改您的目标:
的字符串
8dtrkrch2#
在你的帖子中定义的系统可以写如下:
字符串
我们需要复制这两个约束,并将其放在
A_ub @ x <= b_ub
的形式中(参见documentation):型
你还需要一个严格的等式:
型
我们把一切联系在一起:
型
注意
0.005*x_A + 0.00*x_B + 0.00*x_C = 0
约束力x_A = 0
。optimize.linprog
的替代方案是optimize.milp
:型
它还允许积分解约束:
型