如何将以下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) 我使用 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) 我正在尝试解决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中,并使用来自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)
该限制是:
df['New Budget']必须相等5000New Budget给定信道可以去不低比Cost MinNew Budget给定信道可以走不高比Cost Max有关如何使用PuLP或任何其他求解器方法转换此pandas数据帧求解器线性问题的任何想法?最终结果将是您在下图中看到的结果.
我试图用通过将变量 A 除以变量 B 计算得出的约束来解决 LP 问题。
问题的简单版本如下:
该产品由两种材料(A 和 B)制成
A 的百分比应大于 50%
B的%应小于40%
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) 我将Pulp与Python配合使用来解决优化问题。
我在用
import pulp
# code
pulp.prob.objective.value()
Run Code Online (Sandbox Code Playgroud)
现在,我想访问优化变量。这该怎么做?
在Pulp的文档中,我发现了类似的东西,use_vars[i].varValue但是我应该循环获取整个向量。我可以像客观价值一样直接得到它吗?有谁熟悉纸浆吗?
我使用 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) 我是LP的新手,并且只PuLP在Python中使用过.
为什么SCIP 3.2.1 - CPLEX 12.63和之间存在速度差异CPLEX 12.6.3?SCIP是否仍然使用CPLEX进行求解?
为什么有人将SCIP与CPLEX求解器一起使用,而不是直接使用CPLEX?
我正在尝试使用 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 …
我正在尝试使用 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)