按照http://www.coin-or.org/PuLP/main/installing_pulp_at_home.html#installation的说明,我使用"从源安装的Windows安装"安装了PuLP
当我尝试在页面上运行测试时(页面上的说明:"为了测试你的纸浆安装是否正常工作,请在python解释器中键入以下内容并注意输出应该类似.下面的输出就是你的如果你没有安装任何其他求解器和与纸浆捆绑在一起的CoinMP求解器,我们会期待.")
我的结果:
import pulp pulp.pulpTestAll()Solver pulp.solvers.CPLEX_DLL不可用.Solver pulp.solvers.CPLEX_CMD不可用.Solver pulp.solvers.COIN_CMD不可用.Solver pulp.solvers.COINMP_DLL不可用.Solver pulp.solvers.GLPK_CMD不可用.Solver pulp.solvers.XPRESS不可用.Solver pulp.solvers.GUROBI不可用.
根据网页,这应该是我的输出:
import pulp pulp.pulpTestAll()
Solver pulp.pulp.COIN_MEM不可用.Solver pulp.pulp.COIN_CMD不可用.测试连续LP解决方案测试最大化连续LP解决方案测试无界连续LP解决方案测试MIP解决方案测试MIP松弛测试可行性问题(无客观)测试不可行问题测试整数不可行问题(要修复的错误)测试基于列的建模测试基于列的建模空约束测试双变量和松弛报告测试解决问题测试顺序求解测试分数约束测试弹性约束(无变化)测试弹性约束(freebound)测试弹性约束(惩罚不变)测试弹性约束(惩罚无界)*求解器纸浆. pulp.COINMP_DLL通过.Solver pulp.pulp.GLPK_MEM不可用.Solver pulp.pulp.GLPK_CMD不可用.Solver pulp.pulp.XPRESS无法使用.
我在Windows 7 64位上使用Python 2.7.1,PuLP 1.4.7.
我想这是因为与PuLP捆绑在一起的CoinMP求解器无效.一周前我刚刚开始研究Python,我只是编程方面的业余爱好者.
我正在用Python中的Pulp实现一个运行时非常重要的代码。
#Initialize model
model = LpProblem('eUCB_Model', sense=LpMaximize)
#Define decision variables
y = LpVariable.dicts('tenant', [(i) for i in range(size)], lowBound=None, upBound=None, cat='Binary')
#Define model
model += lpSum([y[i]*th_hat[t][i] for i in range(size)])
#Define Constraints
model += lpSum([y[i]*R[t][i] for i in range(size)]) <= C
#solving the model
model.solve()
Run Code Online (Sandbox Code Playgroud)
我的问题是,每次我调用使用该方法求解模型时,model.solve()都会在终端中打印大量信息,如下所示:
Welcome to the CBC MILP Solver
Version: 2.9.0
Build Date: Feb 12 2015
command line - /Users/henriquelima/opt/anaconda3/lib/python3.7/site-packages/pulp/apis/../solverdir/cbc/osx/64/cbc /var/folders/_6/r2j2fp7n5mxd5_1w2sbs8rvw0000gn/T/514d0624e4d645ae8582e6fa5203bc54-pulp.mps max ratio None allow None threads None presolve on strong None gomory on knapsack …Run Code Online (Sandbox Code Playgroud) 我正在使用COIN-OR的CBC求解器来解决一些数值优化问题。我正在通过PuLP构建Python中的优化问题。
我注意到,GUROBI和CPLEX之类的求解器会创建日志文件,但是我似乎无法弄清楚如何使CBC创建日志文件(与在屏幕上打印优化程序的进度相反)。
有人知道CBC中设置日志文件的选项吗?将所有stdout重定向到文件对我来说不起作用,因为我正在并行解决一堆问题,并希望将其日志文件分开。
这是我如何调用求解器的示例。这很好用,并将进度打印到终端。
prob.solve(pulp.COIN_CMD(msg=1, options=['DivingVectorlength on','DivingSome on']))
Run Code Online (Sandbox Code Playgroud)
这就是我认为应该构建解决方案的方式(尽管显然LogFileName不是有效的CBC选项)。
prob.solve(pulp.COIN_CMD(msg=1, options=['DivingVectorlength on', 'DivingSome on', 'LogFileName stats.log']))
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激。我已经花了数小时试图浏览互联网,文档和CBC互动会议。
python mathematical-optimization python-2.7 pulp coin-or-cbc
我正在尝试使用PuLP,但是需要50秒才能添加4000个约束(67个变量).解决问题只需要几分之一秒.
我们希望使用PuLP轻松测试一大堆问题上的几个求解器.
它应该花这么长时间服用PuLP吗?直接使用PyGLPK只需要一小部分时间,包括设置和求解,所以我希望不会.我该怎么做才能提高PuLP中这一步骤的效率?
更新
我的约束矩阵非常稀疏,并且通过仅包括非零系数,我能够将该特定问题的建立时间减少到4或5秒.我仍然能够编写自己的.lp或.mps格式的文件,用cbc或glpsol子进程解决问题,并且比PuLP更有效地解析解决方案,因为我可以在几毫秒内编写输入文件PuLP需要几秒钟.我仍然不确定为什么会这样.
python 库 PULP 的新手,我发现文档有点无用,因为它不包含使用变量列表的示例。我试图在下面创建一个绝对简约的示例来说明我的困惑。
import pulp
IDENTIFIERS = ['A','B','C','D','E']
PRICES = dict( zip( IDENTIFIERS, [100.0, 99.0, 100.5, 101.5, 200.0 ] ) )
n = len( IDENTIFIERS )
x = pulp.LpVariable.dicts( "x", indexs = IDENTIFIERS, lowBound=0, upBound=1, cat='Integer', indexStart=[] )
prob = pulp.LpProblem( "Minimalist example", pulp.LpMaximize )
prob += pulp.lpSum( [ x[i]*PRICES[i] for i in IDENTIFIERS ] ), " Objective is sum of prices of selected items "
prob += pulp.lpSum( [ x[i] for i in IDENTIFIERS ] )==2, " Constraint …Run Code Online (Sandbox Code Playgroud) 使用Python和PuLP库,我们如何创建线性规划模型来解决旅行商问题(TSP)?
从维基百科,目标函数和约束是
问题:这是我卡住的部分尝试。
我没有在代码中包含最终约束,因为我不知道如何定义它。我相信这个带有u变量的约束是为了防止解决方案中的子周期
另外,求解当前模型会给出决策变量,例如x0_0和x1_1等于,1.0这肯定是错误的...即使我有,我也不知道为什么会这样
if i == j:
upperBound = 0
Run Code Online (Sandbox Code Playgroud)Python代码
import pulp
def get_dist(tsp):
with open(tsp, 'rb') as tspfile:
r = csv.reader(tspfile, delimiter='\t')
d = [row for row in r]
d = d[1:] # skip header row
locs = set([r[0] for r in d]) | set([r[1] for r in d])
loc_map = {l:i for i, l in enumerate(locs)}
idx_map = {i:l for i, l in enumerate(locs)}
dist = …Run Code Online (Sandbox Code Playgroud) 我会尽量让我的问题简短明了。如果您需要任何进一步的信息,请告诉我。
我有一个 MIP,用 Python 包 PuLP 实现。(大约 100 个变量和约束)问题的数学表述来自一篇研究论文。本文还包括一项数值研究。然而,我的结果与作者的结果不同。
我的问题变量叫做prob
prob = LpProblem("Replenishment_Policy", LpMinimize)
Run Code Online (Sandbox Code Playgroud)
prob.solve()
LpStatus我通过退货解决问题Optimal
当我添加一些最佳(论文)结果作为约束时,我得到了稍微更好的客观值。将目标函数限制为稍低的值也是如此。LpStatus 保持不变Optimal。
original objective value: total = 1704.20
decision variable: stock[1] = 370
adding constraints: prob += stock[1] == 379
new objective value: 1704.09
adding constraints: prob += prob.objective <= 1704
new objective value: 1702.81
Run Code Online (Sandbox Code Playgroud)
我的假设是 PuLP 的求解器近似解。计算速度很快,但显然不太准确。有没有办法可以提高 PuLP 所使用的求解器的精度?我正在寻找类似的内容:prob.solve(accuracy=100%).我查看了文档,但不知道该怎么做。有什么想法可能是什么问题吗?
任何帮助表示赞赏。谢谢。
python linear-programming solver pulp mixed-integer-programming
我的问题是关于最大权重 B 匹配问题。
二部匹配问题将二部图中的两组顶点配对。甲最大加权匹配二部(MWM)被定义为一个匹配,其中在匹配的边的值的总和有最大值。一个著名的 MWM 多项式时间算法是匈牙利算法。
我感兴趣的是一个特定的最大加权二分匹配,称为权重二分 B 匹配问题。权重二分 B 匹配问题 (WBM) 寻求匹配顶点,以便每个顶点与不超过其容量b允许的顶点匹配。
此图(来自Chen 等人)显示了 WBM 问题。输入图的得分为 2.2,即所有边权重的总和。解决方案 H 的蓝色边缘在满足红色度约束的所有子图中产生最高分,1.6。
尽管最近有一些工作解决了 WBM 问题(this和this),但我找不到该算法的任何实现。有谁知道 WBM 问题是否已经存在于像 networkX 这样的任何库中?
我正在尝试解决一个具有超过 45.000 个二进制变量和约 350.000 个约束的大规模线性整数优化问题 (MILP)。
我正在使用Pulp来解决问题,但我无法在合理的时间内找到解决方案。
有什么方法可以大大加快优化过程吗?例如:
我正在尝试使用 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 ×10
python ×10
glpk ×2
python-2.7 ×2
algorithm ×1
bipartite ×1
coin-or-cbc ×1
graph ×1
networkx ×1
optimization ×1
solver ×1