pulp.solvers.PulpSolverError: PuLP: cannot execute cplex

pulp.solvers.PulpSolverError: PuLP: cannot execute cplex

我正在尝试在 Mac 上使用 PuLP 求解 MIP。我已经添加了目录 '/Applications/CPLEX_Studio1210/cplex/python/3.7/x86-64_osx', 到我的 PYTHONPATH。但每当我尝试

prob.solve(CPLEX_CMD()),

我收到以下错误消息:

File "/Users/xxxx/opt/anaconda3/envs/pulposm/lib/python3.7/site-packages/pulp/solvers.py", line 468, in actualSolve
    raise PulpSolverError("PuLP: cannot execute "+self.path)
pulp.solvers.PulpSolverError: PuLP: cannot execute cplex.

你能试试吗

import pulp
import cplex
bus_problem = pulp.LpProblem("bus", pulp.LpMinimize)
nbBus40 = pulp.LpVariable('nbBus40', lowBound=0, cat='Integer')
nbBus30 = pulp.LpVariable('nbBus30', lowBound=0, cat='Integer')

# Objective function
bus_problem += 500 * nbBus40 + 400 * nbBus30, "cost"

# Constraints
bus_problem += 40 * nbBus40 + 30 * nbBus30 >= 300
bus_problem.solve(pulp.CPLEX())

print(pulp.LpStatus[bus_problem.status])
for variable in bus_problem.variables():
    print ("{} = {}".format(variable.name, variable.varValue))

来自 https://medium.com/@alexfleischer_84755/optimization-simply-do-more-with-less-zoo-buses-and-kids-part2-python-java-c-cc04558e49b5

这与 this Whosebug 问题密切相关,但略有不同,因为您使用的是 Mac 而不是 Windows。不过,答案的要点是一样的。如评论中所述,您需要设置 PATH 环境变量(而不是 PYTHONPATH),以便 PuLP 可以执行 cplex 二进制文件。

在你的情况下,这应该是这样的:

$ export PATH=$PATH:/Applications/CPLEX_Studio1210/cplex/bin/x86-64_osx

另请参阅,this 关于在 OS X 上设置环境变量并使它们持久存在的 Whosebug 问题。

或者,您可以将 path 参数设置为 CPLEX_CMD 构造函数中 cplex 可执行文件的位置(参见 source code)。