其他文章:

通过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”,并点击搜索。

搜索的结果:

image-20210915003212033

找到下载页面,其中学术版可以免费使用,但是需要使用学校邮箱注册。学术版的cplex的求解规模和约束变量是有限的。也可以花钱买,功能更强大。白瞟学术版即可。这里就不详细说了

如果有需要可以关注我的公众号[诸葛小猿],输入关键字“cplex”,即可获得下载地址。如果不能下载,请到公众号文章下留言。

二、安装

获取软件包后:

image-20210914235101813

双击安装:

image-20210914235142270

选择简体中文,并点击确定:

image-20210914235224743

点击下一步:

image-20210914235343552

选择接受协议后,点击下一步:

image-20210914235516882

自定义安装目录(建议不要放在系统C盘),点击下一步:

image-20210914235803104

选择副本目录,选择下一步:

image-20210914235904877

选择关联相关文件(一定要选),选择下一步:

image-20210914235941163

选择更新PATH变量(一定要选),选择下一步:

image-20210915000042286

这里展示了安装的目录(要记住自己安装的这两个目录,后续相关的文件需要到这两个目录里找),选择安装:

image-20210915000327084

看到上面的界面基本就安装完成了。安装进度条提醒cplex依赖jre,所以需要提前在电脑上安装java环境,如果不会安装java环境请百度。

上面勾选了“Readme file”时,点击下一步会自动在浏览器中显示readme文件内容,建议勾选,简单读一下readme文件。

上面勾选了“CPLEX Opeimization Studio IDE”时,点击下一步会自动打开编程窗口,建议勾选。

点击下一步:

image-20210915000529541

点击完成。

点击完成后,由于勾选了“Readme file”,这里可以看到相关内容。注意浏览器中readme文件的位置,就是我们的安装位置。

image-20210915002931542

点击完成后,由于之前选择了“CPLEX Opeimization Studio IDE”,所以这里会自动打开上面IDE编辑器,并且弹框询问工作空间放在哪里,所谓的工作空间就是后续我们使用ide编辑器写代码时,我们的代码文件保存的目录,这个目录很重要,后续可以在这里找到自己之前写过的代码。建议定义好这个目录。左下角有个选项“将此值作为缺省值并且不再询问”,建议勾选,如果不勾选,以后每次打开IDE编辑器时都会弹框询问。

image-20210915001126119

点击确定,即可打开下面的IED代码编辑器。

image-20210915001938618

上面的欢迎窗口中间有四个功能:概述、教程、样本、新增内容,可以学习一下相关使用。

关闭欢迎页面,现在就可以在编辑器中建模求解了。

image-20210915002138085

三、IDE的使用

安装完成后,在电脑的左下角开始按钮中可以看到:

image-20210915004654222

这里有相关的使用说明,前四个是说明,有需要的可以自己读(如下),第五个是IDE的启动按钮。

image-20210915004548147

四、编程测试

4.1.创建项目
  • 创建OPL项目

image-20210915231444895

  • 选择项目位置

image-20210915231729367

  • 编程窗口

    image-20210915231810202

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;
 }
  • 运行方式一:

image-20210915233903028

运行后看到“问题”窗口报错了,具体错误原因出现了乱码,问题类型:OPL标记问题。原因出在项目中“运行配置”文件夹下的文件是中文的原因。右键这个“配置1(缺省值)”,重命名为config1,修改英文名后右键运行。最终的结果在“解”这个对话框中。

image-20210916001224853

  • 运行方式二

或者直接使用命令运行:oplrun -p <路径\项目名>

这里我这个项目的路径是D:\IBM\workspace\firstModelTest

打开命令行窗口运行命令:

image-20210915234702097

4.3.使用集合语言编程

模型比较复杂时可以使用这个方式。

4.3.1.背包问题

比如一个背包问题的模型如下(假如n、p、w、C是三个已知量):

image-20210916221953261

代码:

// 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;
}

运行结果:

image-20210916223224775

4.3.2.指派问题

模型:

image-20210916225708810

代码:

// 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;
}

运行结果:

image-20210916231052439

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐