python 调用cplex-学术版

转载 https://zhuanlan.zhihu.com/p/101713127

本文要解决的问题(默认你已经对python有一定的使用经验):如何用python调用cplex求解器。

这次不能信官网,害我踩了一下午坑(其实是官网表述文件和实际不符,而且还少了一个重要环节,就是用管理员授权运行)。真是忍不住想吐槽一下,害我走了好多弯路,花了一天时间,差点当场哭死!

下面是两个用python调用cplex的方法:

方法一:从python的角度解决问题,非常简单,pip安装即可。

如果只是用python调用cplex解决一些小问题可以直接使用(但是,它相当于只是安装了一个社区版的cplex求解器,对比较大的模型求解问题是运行不了的,会直接报错)。

方法二:从cplex角度解决问题,要先安装’CPLEX_Studio129(可以在官网申请下载)‘(我安装的是这个版本的教育版[1]),然后按官方网站[2](我的方法)的安装提示进行操作(还是以我为准吧,官网有点坑)。这个安装成功后就没有社区版的限制了。

官网提示和我遇到的实际情况不符,所特意在此作纪录(详情参考下文的方法二)。安装版本python3.7,cplex1290。

方法一:

正确的安装方法,非常简单:

pip install cplex

pip成功后直接运行,没有问题了。

但是出现一个问题:运行比较大的lp模型时,会报错!因为这样安装的只是一个社区版。

报错信息如下:

CplexSolverError: CPLEX Error  1016: Community Edition. Problem size limits exceeded. Purchase at http://ibm.biz/error1016.

为解决方法一的问题可以参考用方法二。

方法二:

官网的设置 CPLEX 的 Python API[3]的网页上是这样写的:

第一步:先安装CPLEX_Studio129,我安装时全部选的默认安装路径,并没有官网网站所提到的文件夹yourCPLEXhome/python/VERSION/PLATFORM。我的安装文件夹如下图所示,但是好在有setup.py文件,打开此文件后浏览代码内容,确认它确实是一个安装文件。

第二步,按照官网的使用脚本 setup.py,进行下一步,结果安装都失败

python setup.py install --home yourPythonPackageshome/cplex
python setup.py install

提示错误为:

(base) C:\Program Files\IBM\ILOG\CPLEX_Studio129\python>python setup.py install
['C:\\Program Files\\IBM\\ILOG\\CPLEX_Studio129\\cplex\\python\\3.7\\x64_win64\\cplex']
['C:\\Program Files\\IBM\\ILOG\\CPLEX_Studio129\\cplex\\python\\3.7\\x64_win64\\setup.py']
Invoking ['C:\\Users\\pc\\Anaconda3\\python.exe', 'setup.py', 'install'] in C:\Program Files\IBM\ILOG\CPLEX_Studio129\cplex\python\3.7\x64_win64
running install
running build
running build_py
creating build
error: could not create 'build': 拒绝访问。
Installation of CPLEX failed, code = 1

第三步:由于不存在此文件夹yourCplexhome/python/VERSION/PLATFORM,所以官网提示的设置环境变量 PYTHONPATH 的方法也不能使用了。

第四步:查找第二步中安装失败的原因:需要管理员授权运行[4]

在下面这个网站找到了一个相关回答,具体答案如下图所示:

CPLEX Optimizers www.ibm.com图标

最后,在jupyter lab编辑器里用,python调用cplex,求解实际的lp模型成功。

参考

  1. ^https://my15.digitalexperience.ibm.com/b73a5759-c6a6-4033-ab6b-d9d4f9a6d65b/dxsites/151914d1-03d2-48fe-97d9-d21166848e65/technology/data-science?cc=cn&mhsrc=ibmsearch_dd
  2. ^https://www.ibm.com/support/knowledgecenter/zh/SSSA5P_12.9.0/ilog.odms.cplex.help/CPLEX/GettingStarted/topics/set_up/Python_setup.html
  3. ^https://www.ibm.com/support/knowledgecenter/zh/SSSA5P_12.9.0/ilog.odms.cplex.help/CPLEX/GettingStarted/topics/set_up/Python_setup.html
  4. ^https://www.ibm.com/developerworks/community/forums/html/topic?id=352e55b1-d168-4c13-9328-abe864658a26
编辑于 2020-01-11
CPLEX
Python
API
  • 3
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: Python可以通过调用Cplex来解决Traveling Salesman Problem (TSP)。 TSP是一个经典的旅行商问题,涉及寻找一条路径,使得经过所有城市并返回出发点的总距离最小。Cplex是一个非常强大的数学建模系统和解决器,可以用于解决TSP等各种优化问题。 要在Python调用Cplex来解决TSP问题,首先需要安装Cplex和相关的Python库。Cplex有一个专门的Python接口,可以通过pip安装安装完成后,就可以在Python脚本中导入Cplex模块,并创建一个求解器对象。 接下来,需要定义TSP问题的相关参数,比如城市数量、城市之间的距离矩阵等。Cplex提供了丰富的优化建模函数,可以根据具体问题需求来定义变量、目标函数和约束条件。在TSP问题中,变量可以表示城市之间的连接关系,目标函数可以是最小化总距离,约束条件可以是保证每个城市只访问一次等。 完成模型定义后,可以调用Cplex求解器来求解TSP问题。Cplex提供了多种求解方法,比如混合整数编程、分支定界和割平面等。根据求解方法的选择和具体问题的规模,求解过程可能需要花费一定的时间。 求解完成后,可以获取最优解的变量取值和目标函数值。根据需求,可以进一步分析和处理解决方案,比如获取最优路径、计算平均旅行距离等。 总之,通过Python调用Cplex来解决TSP问题是一种高效且便捷的方法。Python的灵活性与Cplex的强大求解能力相结合,可以帮助我们更好地解决各种优化问题,包括TSP。 ### 回答2: Python调用Cplex库来解决旅行商问题(TSP)。Cplex是一个强大的优化求解器,可用于解决各种线性规划和混合整数规划问题。 首先,需要在Python安装Cplex库和相关依赖。可以通过pip命令来安装,如下所示: ```python pip install cplex ``` 接下来,需要导入Cplex库,创建一个Cplex对象,并设置TSP问题的相关参数,例如节点数、距离矩阵等。可以使用以下代码片段实现: ```python import cplex # 创建Cplex对象 problem = cplex.Cplex() # 设置目标函数为最小化 problem.objective.set_sense(problem.objective.sense.minimize) # 设置节点数 num_nodes = 5 # 设置节点间的距离矩阵 distances = [[0, 1, 2, 3, 4], [1, 0, 5, 6, 7], [2, 5, 0, 8, 9], [3, 6, 8, 0, 10], [4, 7, 9, 10, 0]] # 添加变量和约束 var_names = [] var_types = "" var_lb = [] var_ub = [] constraint_names = [] constraint_senses = "" rhs_values = [] # 添加节点访问变量 for i in range(num_nodes): var_names.append("x" + str(i)) var_types += "B" var_lb.append(0) var_ub.append(1) # 添加约束:每个节点只能访问一次 for i in range(num_nodes): row = [] for j in range(num_nodes): if j != i: row.append("x" + str(j)) constraint_names.append("c" + str(i)) constraint_senses += "E" rhs_values.append(1) problem.linear_constraints.add(lin_expr=[cplex.SparsePair(ind=row, val=[1] * (num_nodes - 1))], senses=[constraint_senses[i]], rhs=[rhs_values[i]]) # 添加约束:每个节点必须离开一次 for i in range(num_nodes): row = [] for j in range(num_nodes): if j != i: row.append("x" + str(j)) constraint_names.append("c" + str(num_nodes + i)) constraint_senses += "E" rhs_values.append(1) problem.linear_constraints.add(lin_expr=[cplex.SparsePair(ind=row, val=[1] * (num_nodes - 1))], senses=[constraint_senses[num_nodes + i]], rhs=[rhs_values[num_nodes + i]]) # 设置目标函数 problem.variables.add(obj=[distances[i][j] for i in range(num_nodes) for j in range(num_nodes)], lb=var_lb, ub=var_ub, types=var_types, names=var_names) # 求解问题 problem.solve() # 输出最优解 print("最优解:", problem.solution.get_values()) ``` 上述代码片段实现了一个简化的TSP问题,节点数为5,节点间的距离矩阵已给定。代码首先创建了一个Cplex对象,然后设置了问题的目标函数、变量和约束,最后通过调用`problem.solve()`来求解问题,并输出最优解。 通过以上方式,可以使用Python调用Cplex库来解决TSP问题,并得到最优解。当然,实际的TSP问题可能更加复杂,可能需要进一步优化模型和算法来解决。 ### 回答3: Python调用Cplex TSP(Traveling Salesperson Problem)可以通过以下步骤完成。 首先,我们需要确保已经安装CplexPythonCplex库。Cplex是一种用于求解优化问题的强大工具,而Cplex库是PythonCplex的接口。 然后,我们可以使用Python代码来调用Cplex库,并定义TSP问题的变量和参数。例如,我们可以创建一个空的Cplex问题对象,并指定问题的目标函数和约束条件。 接下来,我们需要定义问题的变量。在TSP问题中,变量通常代表城市之间的路径。我们可以使用Cplex的变量类型来定义这些变量,例如二进制变量或整数变量。 然后,我们可以使用Python代码来设置问题的目标函数。在TSP问题中,目标是找到一条路径,使得旅行的总距离最短。我们可以使用Cplex库提供的函数来设置目标函数。 随后,我们可以设置问题的约束条件。在TSP问题中,约束条件通常是确保每个城市都恰好被访问一次的条件。我们可以使用Cplex库提供的函数来设置这些约束条件。 最后,我们可以使用Cplex的求解器来解决TSP问题,并获取最优解。我们可以使用Cplex库提供的函数来调用求解器,并检查求解器的返回结果。如果返回结果为最优解,则可以获取解的相关信息,例如路径和总距离。 总的来说,Python调用Cplex TSP可以通过安装Cplex库、定义问题的变量和参数、设置目标函数和约束条件,最后使用Cplex的求解器来获取最优解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值