python - 使用 Pulp 进行线性规划 - 约束分配
问题描述
我正在用 Pulp 库做一个线性编程模型。我有以下输入,它是一个数据框(df):
区 | 植物 |
---|---|
Zone_1 | Plant_1 |
Zone_1 | Plant_2 |
Zone_1 | Plant_3 |
Zone_2 | Plant_4 |
Zone_2 | Plant_5 |
有了这个输入,我必须编写约束,它们应该如下所示:
Plant_1 + Plant_2 + Plant_3 == Zone_1
Plant_4 + Plant_5 == Zone_2
我想在不为每个方程编写方程的情况下自动执行此操作。我正在做的是:定义 Zone 和 Plant 变量做:
list_zone = df['Zone'].unique().tolist()
zone_variables = [LpVariables(df[list_zone][i], lowBound = 0) for i in range(len(list_zone))]
list_Plant = df['Plant'].unique().tolist()
plant_variables = [LpVariables(df[list_Plant][i], lowBound = 0) for i in range(len(list_Plant))]
然后我想使用 lpSum oject 定义像上面这样的方程,但我不知道如何只对与每个区域关联的 Plant 变量求和。
我在想这样做:
for j in range(len(zone_variables)):
model += lpSum(plant_variables[i] for i in range(len(plant_variables))]) == zone_variables[j]
但是使用该等式,我无法将植物变量分配给每个区域。
谁能帮我?问候
解决方案
假设这些都是 Lpvariables,你可以使用 group by 来做类似的事情(检查语法)
df = pd.DataFrame(
[
['zone_1', 'plant_1'],
['zone_1', 'plant_2'],
['zone_1', 'plant_3'],
['zone_2', 'plant_4'],
['zone_2', 'plant_5']
],
columns=['zone','plant']
)
df['plant_lpvar'] = df['plant'].apply(lambda x: LpVariable(x))
zone_lpvar = LpVariable.dict('zone_lpvar',df['zone'].unique())
groups = df.groupby('zone')
for zone, group in groups:
model += lpSum(group['plant_lpvar']) == zone_lpvar[zone]
推荐阅读
- c# - 应用程序不会无限期地监听数据库连接?
- powerbi - 我可以将具有 1 个值的表转换为 Power BI 中的文本格式吗?
- html - Css 网格登陆页面
- twitter - 挑选 Flink/Kafka 应用程序的延迟图
- c++ - 使用 OpenVINO 上的 c++ API 获取模型每一层的参数/权重
- google-sheets - 如何替换谷歌表格中的文本?
- jenkins - kubernetes jenkins 奴隶没有看到主人
- python - 您可以访问已被多次询问的单个输入吗
- angular - 无法通过编辑 url (Angular) 导航到页面
- javascript - 检查字符串值是否等于 - (减号)