标签: pulp

如何简化重复的Python PuLP语法?

如何将以下Python PuLP语句简化为Pythonic,可管理和正确的内容:

import pulp as lp

#delare variables
#Note that I have to model a 100 year period!
year_1 = lp.LpVariable("2011", 0, None, lp.LpInteger)    
year_2 = lp.LpVariable("2012", 0, None, lp.LpInteger)
year_. = lp.LpVariable("201.", 0, None, lp.LpInteger)
year_n = lp.LpVariable("201n", 0, None, lp.LpInteger)

#declare constraints
prob += year_1 - year_0 >= 0
prob += year_2 - year_1 >= 0
prob += year_. - year_. >= 0
prob += year_n - year_n_1 >= 0
Run Code Online (Sandbox Code Playgroud)

python linear-programming pulp

4
推荐指数
1
解决办法
852
查看次数

从 PuLP 迁移到 Scipy

我使用 PuLP 来解决一些具有约束、上限和下限的最小化问题。它非常容易和干净。

但我只需要使用 Scipy 和 Numpy 模块。

我正在阅读:http : //docs.scipy.org/doc/scipy/reference/tutorial/optimize.html

多元标量函数的约束最小化

但是我有点迷茫......一些好心人可以在Scipy中发布一个像PuLP这样的小例子吗?

提前致谢。毫米

from pulp import *

'''
Minimize        1.800A + 0.433B + 0.180C
Constraint      1A + 1B + 1C = 100
Constraint      0.480A + 0.080B + 0.020C >= 24
Constraint      0.744A + 0.800B + 0.142C >= 76
Constraint                            1C <= 2
'''

...
Run Code Online (Sandbox Code Playgroud)

python numpy scipy pulp

4
推荐指数
1
解决办法
2143
查看次数

puLP求解器错误

我正在尝试解决puLP(Python)中的MILP,并且不断收到以下错误:

Traceback (most recent call last):
  File "main_lp.py", line 63, in <module>
    ans = solve_lp(C)
  File "/home/ashwin/Documents/Williams/f2014/math317_or/project/solve_lp.py", line 36, in solve_lp
    prob.solve()
  File "/usr/local/lib/python2.7/dist-packages/PuLP-1.5.6-py2.7.egg/pulp/pulp.py", line 1619, in solve
    status = solver.actualSolve(self, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/PuLP-1.5.6-py2.7.egg/pulp/solvers.py", line 1283, in actualSolve
    return self.solve_CBC(lp, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/PuLP-1.5.6-py2.7.egg/pulp/solvers.py", line 1346, in solve_CBC
    raise PulpSolverError("Pulp: Error while executing "+self.path)
pulp.solvers.PulpSolverError: Pulp: Error while executing /usr/local/lib/python2.7/dist-packages/PuLP-1.5.6-py2.7.egg/pulp/solverdir/cbc-32
Run Code Online (Sandbox Code Playgroud)

对于我的线性编程问题,我试图将不同向量的总和作为约束,并且我认为我一定做错了这个问题,因为一个更简单的问题可以解决。我已经附上了代码(C是一个N×N numpy数组)。

def solve_lp(C):
    N = len(C)
    prob=LpProblem('Scheduling',LpMinimize)

    X = [[LpVariable('X' + str(i+1) + str(j+1), 0, C[i,j],LpBinary)
          for …
Run Code Online (Sandbox Code Playgroud)

python pulp coin-or-cbc

4
推荐指数
3
解决办法
7553
查看次数

线性编程(Simplex LP)PuLP?

仅在Python中,并使用来自Pandas数据帧的数据,我如何使用PuLP以与Excel相同的方式解决线性编程问题?应在新预算栏目下为每个渠道分配多少预算,以便最大化估算成功的总数?我真的在寻找一个使用数据框中数据的具体示例,而不是真正的高级建议.

问题数据设置

    Channel  30-day Cost  Trials  Success  Cost Min  Cost Max  New Budget
0  Channel1      1765.21    9865      812    882.61   2647.82           0
1  Channel2      2700.00   15000      900   1350.00   4050.00           0
2  Channel3      2160.00   12000      333   1080.00   3240.00           0
Run Code Online (Sandbox Code Playgroud)

这是一个最大化问题.

目标函数为:

objective_function = sum((df['New Budget']/(df['30-day Cost']/df['Trials']))*(df['Success']/df['Trials']))
Run Code Online (Sandbox Code Playgroud)

限制是:

  1. 总和df['New Budget']必须相等5000
  2. New Budget给定信道可以去不Cost Min
  3. New Budget给定信道可以走不Cost Max

有关如何使用PuLP或任何其他求解器方法转换此pandas数据帧求解器线性问题的任何想法?最终结果将是您在下图中看到的结果.

期望的结果

python linear-programming dataframe pandas pulp

4
推荐指数
1
解决办法
3470
查看次数

如何在 PuLP 中使用变量作为除数

我试图用通过将变量 A 除以变量 B 计算得出的约束来解决 LP 问题。

问题的简单版本如下:

  1. 该产品由两种材料(A 和 B)制成

  2. A 的百分比应大于 50%

  3. B的%应小于40%

  4. A和B的总金额为100

目标:A 的最小数量是多少?

代码如下:

from pulp import *

prob = LpProblem('Simple problem', LpMinimize)
x = LpVariable('x', 0, None, 'Integer')
y = LpVariable('y', 0, None, 'Integer')
prob += x
prob += x / (x + y) > 0.5  # <== Where the error happens
prob += y / (x + y) < 0.4
prob += x + y == 100
prob.solve()

print 'Result: %s' % LpStatus[prob.status] …
Run Code Online (Sandbox Code Playgroud)

python pulp

4
推荐指数
1
解决办法
4715
查看次数

如何使用Python获取Pulp中的最佳优化变量?

我将Pulp与Python配合使用来解决优化问题。

我在用

import pulp
# code
pulp.prob.objective.value()
Run Code Online (Sandbox Code Playgroud)

现在,我想访问优化变量。这该怎么做?

Pulp文档中,我发现了类似的东西,use_vars[i].varValue但是我应该循环获取整个向量。我可以像客观价值一样直接得到它吗?有谁熟悉纸浆吗?

python pulp

4
推荐指数
1
解决办法
3959
查看次数

如何在不使用 exec 的情况下生成 PuLP 变量和约束?

我使用 PuLP 库编写了以下 Python 代码,用于使用整数规划公式解决背包问题。我使用字符串生成 LpVariable 命令并添加约束,然后使用 eval 执行它们。有没有办法在不使用 eval 的情况下做到这一点?

from pulp import *

#Knapsack problem

items = input ('Enter the number of items :')

items = int(items)

#print('Enter %d items one by one')

print ('Enter {0} items profit one by one'.format(items))

obj = []
weight = []
knapweight = 0


for i in range(0,items):
    print('Enter {0} item profit : '.format(i+1))
    obj.append(input())

for i in range(0, items):
    print('The profit at {0} is {1}'.format(i, obj[i]))

print ('\nEnter {0} items weights …
Run Code Online (Sandbox Code Playgroud)

python linear-programming pulp

4
推荐指数
1
解决办法
5837
查看次数

使用SCIP的CPLEX与CPLEX的速度

我是LP的新手,并且只PuLP在Python中使用过.

  1. 为什么SCIP 3.2.1 - CPLEX 12.63和之间存在速度差异CPLEX 12.6.3?SCIP是否仍然使用CPLEX进行求解?

  2. 为什么有人将SCIP与CPLEX求解器一起使用,而不是直接使用CPLEX?

在此输入图像描述

scipy cplex scip gurobi pulp

4
推荐指数
1
解决办法
1393
查看次数

如何在 Python 上使用 PuLP GLPK 为混合整数线性规划 (MILP) 的决策变量编写 IF 条件?

我正在尝试使用 Python 上的 GLPK 求解器在 PuLP 上使用混合整数线性规划来解决优化问题。到目前为止,我已经成功地解决了具有约束的基本优化问题,例如:

prob = LpProblem("MILP", LpMinimize)
x1 = LpVariable("x1",lowBound=0, cat = 'Binary')
x2 = LpVariable("x2", cat = 'Continuous')
prob += 4*x1 + x2, "Objective Function"
prob += x2 - 4*x1 <= 0
prob += x2 - 2*x1 >= 0
status = prob.solve()
LpStatus[status]
value(x1), value(x2), value(prob.objective)
Run Code Online (Sandbox Code Playgroud)

这给出了最佳结果,其中 x1 = 1.0、x2 = 3.0 和目标函数 = 7.0

我想弄清楚的是如何解决具有if条件的优化问题,例如,以下约束:

x1 > 0 IF x2 > 2
Run Code Online (Sandbox Code Playgroud)

或类似的东西:

x1 > 0 IF x2 == 3
Run Code Online (Sandbox Code Playgroud)

基本上,如何将 if …

python glpk pulp

4
推荐指数
1
解决办法
1640
查看次数

Python PuLP 优化问题 - 最小化与平均值的偏差

我正在尝试使用 PuLP 解决优化问题,但在编写目标函数时遇到问题。

我已将现实生活中的示例简化为使用谷物的更简单的示例。假设我有一个产品列表和一些可以将它们放入的过道(对于本示例 2)。每种产品都有一个我们通常每周销售的数量(例如:我们每周销售 20 盒水果圈和 6 盒麦片)。每个物品还需要一定数量的架子(例如:磨砂片需要 1 个架子,但玉米片需要 2 个)。

产品 销售量 货架 指定通道
水果圈 20 2
磨砂片 15 1
可可卵石 8 1
果味鹅卵石 9 1
玉米片 12 2
麦片 6 1

每个过道只有4个货架。因此,理论上我可以将水果圈和玉米片放在一个过道上(2 个架子 + 2 个架子)。如果我将这些商品放在一个过道中,则该过道的每周销售额将为 20 + 12 = 32。如果我将其他 4 件商品(1 个货架 + 1 + 1 + 1)放入一个过道中,则该过道的销售额将为 15 + 8 + 9 + 6 = 38。过道的平均销售额应为 35。我的优化问题的目标是让每个过道尽可能接近该平均数字。我想最小化每个过道每周总销售额和平均数量之间的总绝对差异。在此示例中,我的偏差为 ABS(38-35) + ABS(32-35) = 6。这就是我想要最小化的数字。

我不知道如何写,所以 PuLP 接受了我的目标。我无法在网上找到具有这种复杂程度的示例,它将每个值与平均值进行比较并获取累积绝对偏差。当我写出技术上可以计算的代码时,PuLP 似乎不接受它。

这是一些示例代码:

products = ['Fruit Loops', 'Frosted Flakes', …
Run Code Online (Sandbox Code Playgroud)

python mathematical-optimization linear-programming pulp

3
推荐指数
1
解决办法
1469
查看次数