python - 使用 Pulp 解决线性规划 python
问题描述
嗨,这是我的代码,我需要帮助。这是另一个代码的简单版本,真正的我在起点使用 50,在目的地使用 70.. 有两件事我不知道该怎么做:
我不知道该怎么做的第一件事:我想限制优化中使用的 orign 数量,在这种情况下,我只想使用 3 个“原点”,但必须使用所有目标
其次,我想打印在solve()之后我使用的每个组合旁边的距离,我使用ind rnd.randint 创建的距离
tks 引起注意 =)
from pulp import *
import pandas as pd
from random import randint
import numpy as np
rnd = np.random
rnd.seed(1)
seed = 1
origin = ["1","2","3","4","5"]
destination = ["a","b","c","d","e","f","g"]
demand = {"a":1,"b":1,"c":1,"d":1,"e":1,"f":1,"g":1}
distance = {"1":{"a":rnd.randint(1,50),"b":rnd.randint(1,50),"c":rnd.randint(1,50),"d":rnd.randint(1,50),"e":rnd.randint(1,50),"f":rnd.randint(1,50),"g":rnd.randint(1,50)},
"2":{"a":rnd.randint(1,50),"b":rnd.randint(1,50),"c":rnd.randint(1,50),"d":rnd.randint(1,50),"e":rnd.randint(1,50),"f":rnd.randint(1,50),"g":rnd.randint(1,50)},
"3":{"a":rnd.randint(1,50),"b":rnd.randint(1,50),"c":rnd.randint(1,50),"d":rnd.randint(1,50),"e":rnd.randint(1,50),"f":rnd.randint(1,50),"g":rnd.randint(1,50)},
"4":{"a":rnd.randint(1,50),"b":rnd.randint(1,50),"c":rnd.randint(1,50),"d":rnd.randint(1,50),"e":rnd.randint(1,50),"f":rnd.randint(1,50),"g":rnd.randint(1,50)},
"5":{"a":rnd.randint(1,50),"b":rnd.randint(1,50),"c":rnd.randint(1,50),"d":rnd.randint(1,50),"e":rnd.randint(1,50),"f":rnd.randint(1,50),"g":rnd.randint(1,50)}
}
prob = LpProblem("Exercise", LpMinimize)
Routes = [(i, j) for i in origin for j in destination if j in distance[i]]
qual = LpVariable.dicts("Qual Centroide é atendedido por qual Postp",Routes,0)
prob += lpSum(qual[(i,j)]*distance[i][j] for (i,j) in Routes)
for j in destination:
prob += lpSum(qual[(i,j)] for i in origin if (i,j) in Routes) == demand[j]
prob.solve()
print("Status: ", LpStatus[prob.status])
list1 = []
count = 0
for v in prob.variables():
if v.varValue > 0:
count += 1
list1.append(v.name)
print(v.name, "=", v.varValue)
new_list = []
for elemento in list1:
new_list.append((re.findall('\d+', elemento)))
#print(new_list)
flattened = [item for sublist in new_list for item in sublist]
#print(flattened)
flattened = list(dict.fromkeys(flattened))
#print(flattened)
print("\nNumber of origin used = ",len(flattened)-1)
print("Number of destination used (i need to use them all) = ", count)
解决方案
推荐阅读
- javascript - 如何从 React 应用程序中执行 ExpressJS 中的功能?
- angular - 关闭两个模态的函数 angular2+
- html - :nth-child(even/odd) 不适用于 acf
- c++ - 输入后程序退出
- php - 解析 Wikipedia URL - 无法打开流:HTTP 请求失败
- go - go lang 运行一个shell来检查目录中的所有文件
- python - 在 groupby 中过滤,仅用于类似的列 python
- java - 我在哪里可以下载 Okta SAML Toolkit for Java Jar
- performance - 事件监听器与休息调用
- javascript - 为什么即使在预加载后浏览器也会多次加载音频文件?