python - 有没有一种更快的方法来使用纸浆进行线性规划来定义变量?
问题描述
我试图建立一个涉及 3 个工厂和 4 个配送中心的线性规划问题。目标是最小化成本,但每个工厂配送中心组合都有不同的相关成本。
有没有更好的方法来使用纸浆或其他库创建变量,所以我不必写这么多。目前我的看起来像这样。
from pulp import *
#define the problem
prob=LpProblem('transportation', LpMinimize)
#create Variables
plant1_center1 = LpVariable('plant1_center1', lowBound=0, cat='Integer')
plant1_center2 = LpVariable('plant1_center2', lowBound=0, cat='Integer')
plant1_center3 = LpVariable('plant1_center3', lowBound=0, cat='Integer')
plant1_center4 = LpVariable('plant1_center4', lowBound=0, cat='Integer')
plant2_center1 = LpVariable('plant2_center1', lowBound=0, cat='Integer')
plant2_center2 = LpVariable('plant2_center2', lowBound=0, cat='Integer')
plant2_center3 = LpVariable('plant2_center3', lowBound=0, cat='Integer')
plant2_center4 = LpVariable('plant2_center4', lowBound=0, cat='Integer')
plant3_center1 = LpVariable('plant3_center1', lowBound=0, cat='Integer')
plant3_center2 = LpVariable('plant3_center2', lowBound=0, cat='Integer')
plant3_center3 = LpVariable('plant3_center3', lowBound=0, cat='Integer')
plant3_center4 = LpVariable('plant3_center4', lowBound=0, cat='Integer')
它有效,但我讨厌每次都必须创建这样的变量。
解决方案
如何对行(植物)和列(配送中心)使用字符串插值和几个循环:
from pulp import *
def make_var(i, j):
return LpVariable(f"plant{i}_center{j}", lowBound=0, cat="Integer")
n_plants = 3
n_dist_centers = 4
prob = LpProblem("transportation", LpMinimize)
plants = [
[make_var(i, j) for j in range(n_dist_centers)]
for i in range(n_plants)
]
for row in plants:
print(row)
我已经对其进行了零索引,因此您可以访问特定plant
using plants[plant_number][dist_center_number]
,但如果您需要 using ,您应该能够轻松地对其进行 1 索引range(1, n_plants + 1)
。
请参阅提供您可以尝试的类似模式的运输问题。
推荐阅读
- python - 在 Python 的特定列中将任何奇数值舍入为偶数值
- javascript - 如何使用 webpack4 在浏览器 devtool 中禁用显示 webpack:// 目录?
- android - android studio,播放资产交付,访问资产文件错误
- r - 用 100 列交换数据框中的前 2 列?
- kotlin - 我应该在 animateDpAsState 中使用记住吗?
- python - 尝试构建 JSON 文件,但将日期时间错误连接到字符串
- python - 延迟函数的 dask 计算字典
- excel - 从另一列复制背景颜色
- javascript - 如何在 React JS 中删除数组中的数组?
- sql - Bigquery中使用TIME格式时如何计算平均时间?