使用线性规划的纸浆定义变量有没有更快的方法?

2024-09-30 08:20:08 发布

您现在位置: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')  

它可以工作,但我讨厌每次都要创建这样的变量


Tags: 目标工厂integer中心cat成本lowboundlpvariable
1条回答
网友
1楼 · 发布于 2024-09-30 08:20:08

对行(工厂)和列(配送中心)使用字符串插值和几个循环如何:

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)

我已经为它建立了零索引,因此您可以使用plants[plant_number][dist_center_number]访问特定的plant,但是如果需要使用range(1, n_plants + 1),您应该能够轻松地对它进行1索引

请参阅A Transportation Problem,它提供了类似的模式,您可以尝试

相关问题 更多 >

    热门问题