Python下cplex的安装

若直接寻找 cplex 安装文件中的 install.py 文件,往往其版本跟目前 python 运行的版本不一致,在安装的过程中出现各种难以解决的错误,文章结合目前提到的多种方法,在python下安装cplex时找到了快速安装的方式,需要在python下安装cplex的小伙伴可以试试看

直接使用 Anaconda 安装 cplex 包,因为 cplex 把自己最新的 python 包都发到 Anaconda 云里面了。

一、Cplex简介

Cplex由IBM开发。使用Cplex可以将复杂的业务问题表现为数学规划(Mathematic Programming)模型。是用于线性规划、混合整数规划和二次规划的高性能数学规划解析器
附上Cplex的官方网址:https://www.ibm.com/support/knowledgecenter/en/SSSA5P_12.9.0/ilog.odms.studio.help/Optimization_Studio/topics/COS_home.html

二、安装步骤

1.确认python的版本

cplex文件夹里只支持python3.6 和3.7 的版本。所以安装的3.8版本以上的需要将版本降至3.7
在Anaconda Prompt下输入python -V查看python版本

如果python的版本在3.8以上,需要先将版本降至3.7才可以

2.安装Cplex

代码如下(示例):

pip install cplex

或者在DOS命令行窗口输入

conda install -c IBMDecisionOptimization docplex cplex

在 ipython 里面输入 import cplex

import cplex

若加载成功,则证明 cplex 包已经成功添加了

简单的使用例子

# -*- coding: utf-8 -*-
# The MIP problem solved in this example is:
# 问题描述
#   Maximize  x1 + 2 x2 + 3 x3 + x4
#   Subject to
#      - x1 +   x2 + x3 + 10 x4 <= 20
#        x1 - 3 x2 + x3         <= 30
#               x2      - 3.5x4  = 0
#   Bounds
#        0 <= x1 <= 40
#        0 <= x2
#        0 <= x3
#        2 <= x4 <= 3
#   Integers
#       x4import cplex
from cplex.exceptions import CplexError# data common to all populateby functions
my_obj = [1.0, 2.0, 3.0, 1.0]   # 系数
my_ub = [40.0, cplex.infinity, cplex.infinity, 3.0] # 变量上界
my_lb = [0.0, 0.0, 0.0, 2.0]    # 变量下界
my_ctype = "CCCI"               # 变量类型, I 表示Integer
my_colnames = ["x1", "x2", "x3", "x4"]  # 变量名
my_rhs = [20.0, 30.0, 0.0]      # 约束右端的值
my_rownames = ["r1", "r2", "r3"]    # 约束名
my_sense = "LLE"            # 约束的属性:L表示小于,E表示等于def populatebyrow(prob):prob.objective.set_sense(prob.objective.sense.maximize) # 求最大值 maximizeprob.variables.add(obj=my_obj, lb=my_lb, ub=my_ub, types=my_ctype,names=my_colnames)# 导入刚才设置变量相关的值rows = [[["x1", "x2", "x3", "x4"], [-1.0, 1.0, 1.0, 10.0]],[["x1", "x2", "x3"], [1.0, -3.0, 1.0]],[["x2", "x4"], [1.0, -3.5]]]# 设置约束的系数prob.linear_constraints.add(lin_expr=rows, senses=my_sense,rhs=my_rhs, names=my_rownames)# 填充线性参数进模型try:my_prob = cplex.Cplex()handle = populatebyrow(my_prob)     # 调用函数填充模型my_prob.solve()except CplexError as exc:print(exc)print()
# solution.get_status() returns an integer code
print("Solution status = ", my_prob.solution.get_status(), ":", end=' ')
# the following line prints the corresponding string
print(my_prob.solution.status[my_prob.solution.get_status()])
print("Solution value  = ", my_prob.solution.get_objective_value()) # 获取最优解的值numcols = my_prob.variables.get_num()
numrows = my_prob.linear_constraints.get_num()#slack = my_prob.solution.get_linear_slacks()
x = my_prob.solution.get_values()   # 获取取得最优解的变量值print('x: ')
print(x)      

```python
execfile("cplexpypath.py")
import cplex
from cplex.exceptions import CplexError
import sys# data common to all populateby functions
my_obj = [1.0, 2.0, 3.0]
my_ub = [40.0, cplex.infinity, cplex.infinity]
my_colnames = ["x1", "x2", "x3"]
my_rhs = [20.0, 30.0]
my_rownames = ["c1", "c2"]
my_sense = "LL"def populatebyrow(prob):prob.objective.set_sense(prob.objective.sense.maximize)# since lower bounds are all 0.0 (the default), lb is omitted hereprob.variables.add(obj = my_obj, ub = my_ub, names = my_colnames)# can query variables like the following bounds and names:# lbs is a list of all the lower boundslbs = prob.variables.get_lower_bounds()# ub1 is just the first lower boundub1 = prob.variables.get_upper_bounds(0)# names is ["x1", "x3"]names = prob.variables.get_names([0, 2])rows = [[[0,"x2","x3"],[-1.0, 1.0,1.0]],[["x1",1,2],[ 1.0,-3.0,1.0]]]prob.linear_constraints.add(lin_expr = rows, senses = my_sense,rhs = my_rhs, names = my_rownames)# because there are two arguments, they are taken to specify a range# thus, cols is the entire constraint matrix as a list of column vectorscols = prob.variables.get_cols("x1", "x3")def populatebycolumn(prob):prob.objective.set_sense(prob.objective.sense.maximize)prob.linear_constraints.add(rhs = my_rhs, senses = my_sense,names = my_rownames)c = [[[0,1],[-1.0, 1.0]],[["c1",1],[ 1.0,-3.0]],[[0,"c2"],[ 1.0, 1.0]]]prob.variables.add(obj = my_obj, ub = my_ub, names = my_colnames,columns = c)
def populatebynonzero(prob):prob.objective.set_sense(prob.objective.sense.maximize)prob.linear_constraints.add(rhs = my_rhs, senses = my_sense,names = my_rownames)prob.variables.add(obj = my_obj, ub = my_ub, names = my_colnames)rows = [0,0,0,1,1,1]cols = [0,1,2,0,1,2]vals = [-1.0,1.0,1.0,1.0,-3.0,1.0]prob.linear_constraints.set_coefficients(zip(rows, cols, vals))# can also change one coefficient at a time# prob.linear_constraints.set_coefficients(1,1,-3.0)# or pass in a list of triples# prob.linear_constraints.set_coefficients([(0,1,1.0), (1,1,-3.0)])
def lpex1(pop_method):try:my_prob = cplex.Cplex()if pop_method == "r":handle = populatebyrow(my_prob)if pop_method == "c":handle = populatebycolumn(my_prob)if pop_method == "n":handle = populatebynonzero(my_prob)my_prob.solve()except CplexError, exc:print excreturnnumrows = my_prob.linear_constraints.get_num()numcols = my_prob.variables.get_num()print# solution.get_status() returns an integer codeprint "Solution status = " , my_prob.solution.get_status(), ":",# the following line prints the corresponding stringprint my_prob.solution.status[my_prob.solution.get_status()]print "Solution value = ", my_prob.solution.get_objective_value()slack = my_prob.solution.get_linear_slacks()pi = my_prob.solution.get_dual_values()x = my_prob.solution.get_values()dj = my_prob.solution.get_reduced_costs()for i in range(numrows):print "Row %d: Slack = %10f Pi = %10f" % (i, slack[i], pi[i])for j in range(numcols):print "Column %d: Value = %10f Reduced cost = %10f" % (j, x[j], dj[j])my_prob.write("lpex1.lp")if __name__ == "__main__":if len(sys.argv) != 2 or sys.argv[1] not in ["-r", "-c", "-n"]:print "Usage: lpex1.py -X"print " where X is one of the following options:"print " r generate problem by row"print " c generate problem by column"print " n generate problem by nonzero"print " Exiting..."sys.exit(-1)lpex1(sys.argv[1][1])
else:prompt = """Enter the letter indicating how the problem data should be populated:r : populate by rowsc : populate by columnsn : populate by nonzeros\n ? > """r = ’r’c = ’c’n = ’n’lpex1(input(prompt))

总结

以上来自于一个刚刚入门编程的科研小白的分享,对于python的安装,我是通过Anaconda的安装配置好python环境后进行安装的,因此在后续的cplex的安装也非常的顺利,目前不清楚,使用python直接安装调用cplex和下载cplex安装包后进行安装在使用上有什么差别
附上参考链接,如果上述方法不行的话,可以尝试参考以下连接:
https://blog.csdn.net/robert_chen1988/article/details/80946466?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160369931819724822553867%2
https://blog.csdn.net/weixin_30776273/article/details/96280823?utm_medium=distribute.pc_relevant.none-task-blog-utm_term-2&spm=1001.2101.3001.4242

Python下cplex的安装相关推荐

  1. python下requests的安装、测试、入门资料、官方资料

    首先按博客http://blog.csdn.net/wenhao_ir/article/details/52297317中的方法安装好python 然后设置用户环境变量,如下: 测试环境变量是否设置成 ...

  2. Python下利用epd_free安装pandas

    EPD(Enthought Python Distribution),现在已经归为Enthought Canopy的一部分了,大家可以直接下载Enthought Canopy,Enthought Ca ...

  3. Windows 系统中 Python下 Pygame 的安装

    Pygame是跨平台Python模块,专为电子游戏设计,可用于管理图形.动画乃至声音,建立在SDL基础上,允许实时电子游戏研发而无需被低级语言(如机器语言和汇编语言)束缚,通过使用Pygame来处理在 ...

  4. 手机怎么下载python并安装-CentOS下python的下载及安装

    针对" CentOS下python的下载及安装 "的问题,下面由IT产品经理-陆亦晓为您解答: Python这门编程语言在数据分析.数据发掘以及服务端开发等方面都有非常好的使用,我 ...

  5. centos 7下独立的python 2.7环境安装

    之前写过python 3.x的独立安装,相对来说比较简单直接安装即可,因为对于系统默认的python版本是2.x,那么安装3.x的时候只需要编译到新的目录即可,所有的模块都不会和之前的2有联系,但是如 ...

  6. win下python环境搭建以及安装pip、django

    1. 安装python并配置 下载安装python,这里我下载的是python2.7,听说2.7比较好用 地址:https://www.python.org/downloads/source/ 记住你 ...

  7. python安装第三方库win10_音频处理 windows10下python三方库librosa安装教程

    librosa是处理音频库里的opencv,使用python脚本研究音频,先安装三方库librosa. 如下通过清华镜像源安装librosa: pip install -i https://pypi. ...

  8. scipy是python下的什么_Python下科学计算包numpy和SciPy的安装

    Python下大多数工具包的安装都很简单,只需要执行 "python setup.py install"命令即可.然而,由于SciPy和numpy这两个科学计算包的依赖关系较多,安 ...

  9. python安装不了jupyter_python学习笔记——Windowns下Python3之安装jupyter

    Windowns下Python3之安装jupyter Jupyter notebook: 一个交互式笔记本,支持运行40多种编程语言. 利用它来写Python,代码和运行结果都可以保存下载,十分方便. ...

最新文章

  1. 常量和指针(Pointers and Constants)
  2. 我自学python的路-Python学习路线图的总结
  3. Unity3D游戏开发初探—1.跨平台的游戏引擎让.NET程序员新生
  4. windows php cli 后台运行_【续】windows环境redis未授权利用方式梳理
  5. OpenCASCADE绘制测试线束:OCAF 命令之标准演示命令
  6. 通过粘性仙人掌基元进行延迟加载和缓存
  7. CSS 让数字滑动显示
  8. CentOS8安装jdk1.8
  9. 实验三:跟踪分析Linux内核的启动过程
  10. matlab俄罗斯方块说明,俄罗斯方块MATLAB版的代码
  11. 第五篇:关于MVPArms打包混淆及报错解决
  12. ios12完美深色模式插件_越狱插件(三)
  13. linux恢复,Linux 5.13还原及修复明尼苏达大学的问题补丁
  14. 奈奎斯特与香农定理_奈奎斯特定理和香农定理有什么区别?
  15. 制造并批量生产现实版“储物戒指”
  16. 190108每日一句
  17. win10搭FTP与单片机通信:配置+编程实现的完整流程
  18. Android 10 解决无法通过adb install 安装persistent app
  19. 第一届中国数字藏品大会顺利召开
  20. 关于拯救者笔记本亮度调节按钮失灵修复方法

热门文章

  1. DC-DC升压转换器如何选择电感值?
  2. 设置Activity使用系统壁纸作为背景
  3. 安卓厨房软件linux,无烦恼厨房游戏安卓版
  4. Konva(一个HTML5 Canvas JavaScript 框架)快速入门
  5. react项目搭建教程
  6. Missing artifact javax.jms:jms:jar: Missing artifact com.sun.jdmk Missing artifact com.sun.jmx:jmxri
  7. 靠自学Python也能搭建HTTP服务器
  8. 字节码操控框架ASM - 初识
  9. 在Redis中使用Pipelining提升查询速度
  10. 超酷的 CSS3 loading 预加载动画特效