其他文章:
通过0-1背包问题看穷举法、贪心算法、启发式算法(JAVA)
模拟退火(SA)算法实例介绍(JAVA)
遗传算法(GA)实例介绍(JAVA)
CPLEX求解器入门案例
java集成Cplex:Cplex下载、IDEA环境搭建、docker部署
windows下cplex12.6.3的下载、安装、IDE编程及相关问题解决
windows下cplex20.1.0启动报错: ilog.odms.ide.opllang.IloOplLangPlugin
Cplex20.1版本bin包Linux安装过程
参考B站视频:cplex入门到精通
一、下载
进入官网:https://www.ibm.com/cn-zh/analytics/cplex-optimizer
在右上角搜索框中输入“cplex”,并点击搜索。
搜索的结果:
找到下载页面,其中学术版可以免费使用,但是需要使用学校邮箱注册。学术版的cplex的求解规模和约束变量是有限的。也可以花钱买,功能更强大。白瞟学术版即可。这里就不详细说了
如果有需要可以关注我的公众号[诸葛小猿],输入关键字“cplex”(注意:前后不能有空格),即可获得下载地址。
二、安装
获取软件包后:
双击安装:
选择简体中文,并点击确定:
点击下一步:
选择接受协议后,点击下一步:
自定义安装目录(建议不要放在系统C盘),点击下一步:
选择副本目录,选择下一步:
选择关联相关文件(一定要选),选择下一步:
选择更新PATH变量(一定要选),选择下一步:
这里展示了安装的目录(要记住自己安装的这两个目录,后续相关的文件需要到这两个目录里找),选择安装:
安装进度条提醒cplex依赖jre,所以需要提前在电脑上安装java环境,参考JDK安装。
这里提醒了重要信息:Cplex依赖Microsoft Visual C++ 2015 Redistributable Package (x64)。 暂时先忽略,下面继续遇到问题再处理这个问题。
看到上面的界面基本就安装完成了。
上面勾选了“Readme file”时,点击下一步会自动在浏览器中显示readme文件内容,建议勾选,简单读一下readme文件。
上面勾选了“CPLEX Opeimization Studio IDE”时,点击下一步会自动打开编程窗口,建议勾选。
点击下一步:
如果你愿意让IBM收集你使用cplex过程的相关信息,就选是,这里我选择否。点击下一步:
这里可以看到,如果使用Python编程调用CPLEX,请执行一下上面的python安装命令。点击下一步:
点击完成,即完成整个安装过程。
点击完成后,由于勾选了“Readme file”,这里可以看到相关内容。注意浏览器中readme文件的位置,就是我们的安装位置。
点击完成后,由于之前选择了“CPLEX Opeimization Studio IDE”,所以这里会自动打开上面IDE编辑器,并且弹框询问工作空间放在哪里,所谓的工作空间就是后续我们使用ide编辑器写代码时,我们的代码文件保存的目录,这个目录很重要,后续可以在这里找到自己之前写过的代码。建议定义好这个目录。左下角有个选项“将此值作为缺省值并且不再询问”,建议勾选,如果不勾选,以后每次打开IDE编辑器时都会弹框询问。
点击启动后报错了
查看详细信息:
启动报错:Error: “Prepare OPL runtime.” ilog.odms.ide.opllang.IloOplLangPlugin
“准备 OPL 运行时”期间发生了内部错误。“
这个错误的原因就是上面安装时提示的重要信息:Cplex依赖Microsoft Visual C++ 2015 Redistributable Package (x64)。我们的电脑没有安装这个C++的环境。
下载后,双击安装一下64位的软件就好了:
查看安装结果:
这里需要注意的是,不同版本的cplex依赖不同版本的Microsoft Visual C++ ,一般可以向下兼容。
关闭cplex后,从window左下角“开始”中再次重启CPLEX Studio IDE 20.1.0:
即可打开下面的IED代码编辑器:
上面的欢迎窗口中间有四个功能:概述、教程、样本、新增内容,可以学习一下相关使用。
关闭欢迎页面,现在就可以在编辑器中建模求解了。
三、IDE的使用
安装完成后,在电脑的左下角开始按钮中可以看到:
这里有相关的使用说明,前两个是说明,有需要的可以自己读(如下);第三个是IDE的启动按钮;第四个是交互式的约束规划引擎启动按钮;第五个是交互式的数学规划启动按钮。
四、编程测试
4.1.创建项目
- 创建OPL项目
- 选择项目位置
-
编程窗口
4.2.不使用集合语言编程(简单编程)
模型比较简单、变量约束比较少的情况,可以直接编程,比较简单。
- 模型:
min z = 2x + 3y
s.t. 2x + 3y >= 20
x + y >= 10
x,y>=0且为整数
- 代码:
// 1.定义决策变量 x,y>=0且为整数
dvar int+ x;
dvar int+ y;
// 2.定义目标函数 min z = 2x + 3y
minimize 2*x + 3*y;
// 3.定义约束条件
subject to {
2*x + 3*y >= 20;
x + y >= 10;
}
- 运行方式一:
运行后看到“问题”窗口报错了,具体错误原因出现了乱码,问题类型:OPL标记问题。原因出在项目中“运行配置”文件夹下的文件是中文的原因。右键这个“配置1(缺省值)”,重命名为config1,修改英文名后右键运行。最终的结果在“解”这个对话框中。
- 运行方式二
或者直接使用命令运行:oplrun -p <路径\项目名>
这里我这个项目的路径是D:\IBM\workspace\firstModelTest
打开命令行窗口运行命令:
4.3.使用集合语言编程
模型比较复杂时可以使用这个方式。
4.3.1.背包问题
比如一个背包问题的模型如下(假如n、p、w、C是三个已知量):
代码:
// 1.定义已知量
int n=4;
int C=13;
int p[1..4]=[12,11,9,8];
int w[1..4]=[8,6,4,3];
// 2.定义决策变量
dvar boolean x[1..n];
// 3.目标函数
maximize sum(j in 1..n) p[j] * x[j];
// 4.约束条件
subject to{
sum(j in 1..n) w[j] *x[j] <= C;
}
运行结果:
4.3.2.指派问题
模型:
代码:
// 1.定义已知量
int n = 5;
int c[1..5][1..5] =
[
[3,8,2,10,3],
[8,7,2,9,7],
[6,4,2,7,5],
[8,4,2,3,5],
[9,10,6,9,10]
];
// 2.定义决策变量
dvar boolean x[1..n][1..n];
// 3.目标函数
minimize sum(i in 1..n) sum(j in 1..n) c[i][j] * x[i][j];
// 4.约束条件
subject to {
forall(j in 1..n) sum(i in 1..n) x[i][j] == 1;
forall(i in 1..n) sum(j in 1..n) x[i][j] == 1;
}
运行结果: