You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Scipy的预算约束下生产收益最大化问题求解误区与修正

预算约束下生产函数最大化问题的修正方案

逻辑误区分析

  • 目标函数完全错误:你当前的obj函数试图最大化原材料采购成本(通过最小化-(25x₀+20x₁+10x₂)),但真实需求是最大化产品总价值(即max_out(x)的输出),两者完全无关,这是最终产品价值远低于预算的核心原因。
  • 术语混淆:你把原材料总成本标注为“production revenue”,把产品总价值标注为“cost of product”,概念完全颠倒——原材料支出是成本,max_out(x)的结果才是生产收益/产品价值。
  • 约束可更精准:这类优化问题的最优解必然耗尽全部预算(生产函数是递增的,投入越多产出越高),因此可将预算约束从不等式改为等式,提升计算效率。

修正后的代码实现

from scipy.optimize import minimize

def product_value(x):
    # 生产函数:计算产品总价值(原max_out函数)
    return 36 * x[0]**(1/2) * x[1]**(1/3) * x[2]**(1/4)

def objective(x):
    # scipy.minimize求最小值,最大化产品价值等价于最小化其负值
    return -product_value(x)

def budget_constraint(x):
    # 预算约束:原材料总成本等于7800(最优解会耗尽预算)
    return 25*x[0] + 20*x[1] + 10*x[2] - 7800

# 约束条件:预算等式约束 + 原材料非负约束
constraints = (
    {'type': 'eq', 'fun': budget_constraint},
    {'type': 'ineq', 'fun': lambda x: x[0]},
    {'type': 'ineq', 'fun': lambda x: x[1]},
    {'type': 'ineq', 'fun': lambda x: x[2]}
)

# 初始猜测值
initial_guess = [10, 10, 10]

# 执行优化
result = minimize(objective, initial_guess, method='SLSQP', constraints=constraints)

# 输出结果
optimal_inputs = result.x
rounded_inputs = [round(x) for x in optimal_inputs]

print("最优原材料投入(四舍五入后):", rounded_inputs)
print(f"原材料总成本:{25*rounded_inputs[0] + 20*rounded_inputs[1] + 10*rounded_inputs[2]:.2f} $")
print(f"最大化的产品总价值:{product_value(rounded_inputs):.2f} $")

代码说明

  1. 目标函数修正:将目标改为最小化-product_value(x),实现最大化产品总价值的核心需求。
  2. 约束优化:把预算约束改为等式约束,确保最优解完全使用预算(符合生产函数的递增特性)。
  3. 术语修正:重新命名函数和输出标注,明确区分原材料成本与产品价值的概念。

运行修正后的代码,你会得到7800美元预算下能实现的最高产品价值,此时原材料总成本会刚好(或因四舍五入接近)等于预算。

内容的提问来源于stack exchange,提问作者JeeyCi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 10:13:16