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

使用PuLP进行线性规划时有没有更快捷的变量定义方法?

解决方案

方法1:使用PuLP原生LpVariable.dicts()批量生成变量(推荐)

PuLP本身已经提供了针对多索引变量的批量创建接口,无需手动逐个声明,仅需要先定义工厂、配送中心的索引集合,一行代码即可生成全量变量:

from pulp import *

# 定义问题
prob = LpProblem('transportation', LpMinimize)

# 定义工厂、配送中心索引集合,后续扩容只需修改这两个列表即可
plants = ["plant1", "plant2", "plant3"]
centers = ["center1", "center2", "center3", "center4"]

# 批量生成所有工厂到配送中心的运输量变量
flow = LpVariable.dicts("flow", (plants, centers), lowBound=0, cat="Integer")

调用变量的方式非常简单,你原来代码里的plant1_center1等价于flow["plant1"]["center1"],完全兼容后续约束、目标函数的编写逻辑。

同时这种写法还支持后续批量构造目标函数、批量添加约束,不用再逐个写变量名:

# 示例成本矩阵,存储每个工厂到配送中心的单位运输成本
cost = {
    "plant1": {"center1": 10, "center2": 8, "center3": 5, "center4": 9},
    "plant2": {"center1": 7, "center2": 9, "center3": 12, "center4": 6},
    "plant3": {"center1": 6, "center2": 3, "center3": 8, "center4": 11}
}

# 批量构造目标函数:总成本最小
prob += lpSum([flow[p][c] * cost[p][c] for p in plants for c in centers])

方法2:自定义字典推导式生成(适合需要自定义命名规则的场景)

如果你需要对变量命名规则做自定义调整,也可以用Python原生的字典推导式生成变量,效果和原生接口一致:

flow = {
    p: {c: LpVariable(f"{p}_{c}", lowBound=0, cat="Integer") for c in centers} 
    for p in plants
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:18:01