Python 设置条件约束
第一次使用纸浆,我试图对我正在处理的生产问题设置条件约束。不幸的是,我在文档中也找不到任何关于如何这样做的例子 目标函数是通过根据每种产品的预测价格减去成本,通知工厂每月生产哪种产品来实现收入最大化(当然这里省略了许多其他约束条件,否则会简单得多) 对于以下数据,我需要设置以下约束:Python 设置条件约束,python,linear-programming,pulp,Python,Linear Programming,Pulp,第一次使用纸浆,我试图对我正在处理的生产问题设置条件约束。不幸的是,我在文档中也找不到任何关于如何这样做的例子 目标函数是通过根据每种产品的预测价格减去成本,通知工厂每月生产哪种产品来实现收入最大化(当然这里省略了许多其他约束条件,否则会简单得多) 对于以下数据,我需要设置以下约束: 一家工厂每月只能生产一种产品,尽管它有能力生产多种产品 这就限制了工厂一个月只能生产一种产品。我对纸浆是个新手,但尽管我查阅了文档和S.O.但我找不到一个示例实现 生产数据: 到目前为止我的代码 # omitt
# omitted data etl logic - it is formatted as per the above images
# Get production info
plants = LpVariable.dicts('plants',
((month, plant, product) for month, plant, product in wp_df.index if month >= 4),
lowBound = 0,
cat='Integer')
# Get forecast price info by product
forecast_prices = LpVariable.dicts('price_by_prod',
((month, contract) for month, contract in fcst_diffs.index if month >= 4),
lowBound = 0,
cat='Integer')
# Prod costs for each month, plant.
costs = LpVariable.dicts(
'prod costs',
((month, plant) for month, plant in prod_costs_df.index),
lowBound=0,
cat='Integer')
# Define problem
model = LpProblem('Revenue Maximising Production Optimisation',
LpMaximize)
# Define objective function
model += lpSum(
[plants[m,w,g] * wp_df.loc[(m,w,g), 'production_output'] for m, w, g in wp_df.index]
+ [costs[m, w] * costs_df.loc[(m,w), 'prod_costs_usd'] for m, w in prod_costs_df.index]
)
我现在省略了一些限制,因为我有很多要设置
感谢您的帮助。介绍一组二进制变量,这些变量由{plant,product,month}索引,用于确定plant
i
是否用于在月份k
期间制造产品j
。如果为真,变量将为1
,否则为0
然后,您需要添加约束,以限制工厂
i
在k
月份生产的产品j
数量。通常,这可以通过限制该金额变量为的约束来实现。该优化的目的是根据约束(仅1个产品)和预测产品溢价来选择产品,即根据预测价格做出决策?你知道这是否可行吗?非常感谢。是的,那是绝对可能的。我上面建议的是引入二进制变量。这些变量的值将作为优化的一部分进行选择。合并预测只是将其包含在目标函数中的一种情况-根据您拥有的预测类型,您可能还需要决定如何处理预测的不确定性。谢谢Kabdulla-请您举个例子作为代码好吗?例如,如何设置变量dicts和constraints?如果您修改您的问题以包含生成最小玩具示例的i.e.代码,那么我很乐意。@kabulla我已将问题稍作更改并发布在此处:,您愿意提供帮助吗?非常感谢你的耐心