Python中的传输算法

时间:2015-07-27 15:58:30

标签: algorithm python-2.7 optimization scipy mathematical-optimization

在google上进行了大量搜索后,我无法在python中找到任何传输算法求解器。我希望在Scipy中找到一些但没有用的东西。有人可以指引我找到正确的来源吗?

Idk在哪里发布这个问题,我知道一些策展人会问我代码或者说这不是一个合适的地方。在这种情况下,请不要忘记指引我到正确的地方。

我的问题:

Max(Sum_{i,j}( Cij*Xij) )

x11 + x12 + x13 = D1
X21 + X22 + x23 = D2
X11<10
X23 <100

我通常会有100,000个接收器(创建需求)和大约1000个接收器(提供需求)。

1 个答案:

答案 0 :(得分:2)

我将在pulp(python线性编程API)的帮助下使用线性编程技术。与纸浆一起分发的默认解算器是cbc(您可以切换到商业解决方案)。

我只是提供一些适合您的问题/问题描述的代码((&#34;玩具问题&#34;)。在纸浆的github存储库中有一些例子。

# Import PuLP modeler functions
from pulp import *

# INSTANCE
EDGES = [ (0,10), (0,20), (0,50), (0,30), (0,10), (0,40) ] # lower/upper flow
COSTS = [0.3, 0.7, 0.2, 0.6, 0.2, 0.5]
D1, D2 = [24, 10]

# MODEL
prob = LpProblem("Problem",LpMaximize)
# VARS
x11, x12, x13 = LpVariable("x11", *EDGES[0]), LpVariable("x12", *EDGES[1]), LpVariable("x13", *EDGES[2])
x21, x22, x23 = LpVariable("x21", *EDGES[3]), LpVariable("x22", *EDGES[4]), LpVariable("x23", *EDGES[5])
# OBJECTIVE FUNCTION -> added before constraints => important ,
prob += lpDot(COSTS, [x11,x12,x13,x21,x22,x23]), "Costs"
# CONSTRAINTS
prob += x11 + x12 + x13 == D1
prob += x21 + x22 + x23 == D2

# SOLVE
status = prob.solve()

# PRINT SOLUTION
print LpStatus[status]
for var in [x11,x12,x13]:
    print value(var)
print
for var in [x21,x22,x23]:
    print value(var)
print("Total Costs = ", value(prob.objective))

输出:

Optimal
4.0
20.0
0.0

10.0
0.0
0.0
('Total Costs = ', 21.2)