use*_*803 13 python mathematical-optimization linear-programming pulp
经过数年和多年的Matlab,我仍然是Python的新手.我正在尝试使用Pulp来设置整数线性程序.
鉴于一系列数字:
{P[i]:i=1...N}
Run Code Online (Sandbox Code Playgroud)
我想最大化:
sum( x_i P_i )
Run Code Online (Sandbox Code Playgroud)
受限制
A x <= b
A_eq x = b_eq
Run Code Online (Sandbox Code Playgroud)
和边界(基于矢量的边界)
LB <= x <= UB
Run Code Online (Sandbox Code Playgroud)
然而,在纸浆中,我没有看到如何正确地进行矢量声明.我用的是:
RANGE = range(numpy.size(P))
x = pulp.LpVariable.dicts("x", LB_ind, UB_ind, "Integer")
Run Code Online (Sandbox Code Playgroud)
我只能输入个别边界(所以只有1个数字).
prob = pulp.LpProblem("Test", pulp.LpMaximize)
prob += pulp.lpSum([Prices[i]*Dispatch[i] for i in RANGE])
Run Code Online (Sandbox Code Playgroud)
对于约束,我真的必须每行做这行吗?似乎我错过了一些东西.我将不胜感激.文档讨论了一个简短的例子.在我的情况下,变量的数量是几千.
您可以在初始化后在变量上设置 lowBound 和 upBound。您可以创建一个变量数组
LB[i] <= x[i] <= UB[i]
Run Code Online (Sandbox Code Playgroud)
使用以下代码。
x = pulp.LpVariable.dicts("x", RANGE, cat="Integer")
for i in x.viewkeys():
x[i].lowBound = LB_ind[i]
x[i].upBound = UB_ind[i]
Run Code Online (Sandbox Code Playgroud)
LpVariable.dict 的第二个参数是决策变量的索引集,而不是它们的下限。
| 归档时间: |
|
| 查看次数: |
6188 次 |
| 最近记录: |