Python MCLP在纸浆中的应用

Python MCLP在纸浆中的应用,python,pulp,Python,Pulp,几个小时前我刚开始用果肉。我正在解决一个MCLP问题,但我不知道如何实现Ni公式:见下图。我的想法是,如果一个需求节点被覆盖,那么另一个小于100m的需求节点也应该被设施覆盖 有几种方法可以做到这一点。最符合您的公式的方法是使用python的“列表理解”功能。请参见以下内容,其中应输出: Status: Optimal Population Served is = 100.0 x = [1. 0.] 简单示例,使用虚拟数据: import numpy as np import pandas

几个小时前我刚开始用果肉。我正在解决一个MCLP问题,但我不知道如何实现Ni公式:见下图。我的想法是,如果一个需求节点被覆盖,那么另一个小于100m的需求节点也应该被设施覆盖


有几种方法可以做到这一点。最符合您的公式的方法是使用python的“列表理解”功能。请参见以下内容,其中应输出:

Status: Optimal
Population Served is =  100.0
x =  [1. 0.]
简单示例,使用虚拟数据:

import numpy as np
import pandas as pd
from pulp import *

# Some dummy data, let's have 3 demand nodes and 2 possible sites
I = [0,1,2]
J = [0,1]
S = 100
d = [[50, 150], [80, 110], [160, 10]]

a = [80, 20, 30]
P = 1

# Compute the sets Ni
# NB: this will be a list in which each item is a list of nodes
# within the threshold distance of the i'th node
N = [[j for j in J if d[i][j] < S] for i in I]

# Formulate optimisation

prob = LpProblem("MCLP", LpMaximize)
x = LpVariable.dicts("x", J, 0)
y = LpVariable.dicts("y", I, 0)

# Objective
prob += lpSum([a[i]*y[i] for i in I])

# Constraints
for i in I:
    prob += lpSum([x[j] for j in N[i]]) >= y[i]

prob += lpSum([x[j] for j in J]) == P

# Solve problem
prob.solve()

x_soln = np.array([x[j].varValue for j in J])

# And print some output
print (("Status:"), LpStatus[prob.status])
print ("Population Served is = ", value(prob.objective))
print ("x = ", x_soln)
将numpy导入为np
作为pd进口熊猫
从纸浆进口*
#一些虚拟数据,让我们有3个需求节点和2个可能的站点
I=[0,1,2]
J=[0,1]
S=100
d=[[50,150],[80,110],[160,10]]
a=[80,20,30]
P=1
#计算集合Ni
#注意:这将是一个列表,其中每个项目都是一个节点列表
#在第i个节点的阈值距离内
N=[[j表示j中的j,如果d[i][j]=y[i]
prob+=lpSum([x[j]表示j中的j])==P
#解决问题
问题解决()
x_soln=np.array([x[j].j中j的varValue])
#然后打印一些输出
打印((“状态:”),LpStatus[问题状态])
打印(“服务人口数量=”,值(问题目标))
打印(“x=”,x_soln)