关于Python计算,请教大佬!
python吧
全部回复
仅看楼主
level 1
A物质每100克含甲元素2克 乙元素8.5克 丙元素13克
B物质每100克含甲元素77克 乙元素0.9克 丙元素7克
C物质每100克含甲元素0克 乙元素0克 丙元素75克
我现在需要91克甲元素、136克乙元素及98克丙元素
那么如何用Python计算出最优选的这个需求的每样物质重量(计算遵循原则1:缺少的元素品类越少越好。2:缺失的元素总重量越少越好)。
比如本次结果(A物质取700克左右 B物质取100克左右 C物质取0克 是最优选择 ),这样只缺乙元素76克。
请问Python代码来计算
有大佬点醒下思路吗,谢谢
2025年02月23日 16点02分 1
level 2
问deepseek
import numpy as np
from 网页链接 import linprog
# 定义每种物质每100克中甲、乙、丙元素的含量
A = np.array([2, 8.5, 13]) # A物质每100克的元素含量
B = np.array([77, 0.9, 7]) # B物质每100克的元素含量
C = np.array([0, 0, 75]) # C物质每100克的元素含量
# 定义需求
required = np.array([91, 136, 98]) # 需要的甲、乙、丙元素的总量
# 定义目标函数的系数(我们希望最小化缺失的元素总量)
# 这里我们假设缺失的元素总量为负值,因此我们需要最大化这个值
c = -np.array([2, 8.5, 13, 77, 0.9, 7, 0, 0, 75])
# 定义约束条件
# 每种物质的用量不能为负
bounds = [(0, None), (0, None), (0, None)]
# 定义约束矩阵
A_eq = np.array([
[2, 77, 0], # 甲元素
[8.5, 0.9, 0], # 乙元素
[13, 7, 75] # 丙元素
])
# 定义等式约束的右侧
b_eq = required
# 使用线性规划求解
result = linprog(c, A_eq=A_eq, b_eq=b_eq, bounds=bounds, method='highs')
# 输出结果
if result.success:
print("最优解:")
print(f"A物质用量: {result.x[0]} 克")
print(f"B物质用量: {result.x[1]} 克")
print(f"C物质用量: {result.x[2]} 克")
# 计算缺失的元素量
actual = np.dot(A_eq, result.x)
missing = required - actual
print("缺失的元素量:")
print(f"甲元素: {missing[0]} 克")
print(f"乙元素: {missing[1]} 克")
print(f"丙元素: {missing[2]} 克")
else:
print("未找到最优解")
2025年02月23日 16点02分 2
早试过了老哥,ai巨蠢,计算给出的答案是A物质4550克
2025年02月23日 16点02分
level 13
你给的条件根本不够
2025年02月24日 02点02分 3
level 13
from scipy.optimize import linprog
# 定义每种物质中元素的含量
# A物质每100克含甲元素2克 乙元素8.5克 丙元素13克
# B物质每100克含甲元素77克 乙元素0.9克 丙元素7克
# C物质每100克含甲元素0克 乙元素0克 丙元素75克
# 将其转换为每克的含量
A = [2/100, 8.5/100, 13/100]
B = [77/100, 0.9/100, 7/100]
C = [0/100, 0/100, 75/100]
# 定义变量的边界(重量不能为负)
bounds = [(0, None), (0, None), (0, None)]
# 使用linprog求解线性规划问题
result = linprog(c=[1, 1, 1], A_eq=[A,B,C], b_eq=[91, 136, 98], bounds=bounds, method='highs')
# 输出结果
if result.success: print(f"A物质重量: {result.x[0]:.2f} 克\nB物质重量: {result.x[1]:.2f} 克\nC物质重量: {result.x[2]:.2f} 克")
else: print("无法找到满足条件的解")
2025年02月24日 02点02分 4
level 5
直接取4550克A物质即可满足两个约束条件
2025年02月25日 02点02分 7
level 5
你根本没给定上限约束,取15112克B物质也可以
2025年02月25日 02点02分 8
1