前言
最近学习列生成算法,需要用到优化求解器。所以打算学习一下cplex这个商业求解器。
当然也有其他更多的选择,这里暂时以比较容易上手和性能比较好的cplex开始吧。其实,小编也早就想学习使用这个cplex了,毕竟是个好东西。
所以打算出多几篇推文java api,大家可以关注我们获取后续教程的更新哦。
01 Cplex是什么?
Cplex是IBM公司开发的一款商业版的优化引擎,当然也有免费版,只不过免费版的有规模限制,不能求解规模过大的问题。
Cplex专门用于求解大规模的线性规划(LP)、二次规划(QP)、带约束的二次规划(QCQP)、二阶锥规划(SOCP)等四类基本问题,以及相应的混合整数规划(MIP)问题。
优势:
能解决一些非常困难的行业问题;
求解速度非常快;
提供超线性加速功能的优势。
在Cplex的加持下,使得对于大规模问题,以及线性规划的效率,都得到飞跃的提升。
下载和安装
由于商用版太贵,现在已经能申请教育版了,功能和商用版一样。
刚好学长之前申请过一个教育版的,所以这里直接给大家分享一个出来了,这个版本是无限制的,便于我们后续的学习:
下载请移步留言区。
直接下载下来安装即可。至于安装,非常简单,一路下一步即可。
由于是基础教程,所以小编会一步一个脚印带领大家上手,从入门到放弃的那种。不过主要是侧重于Java和C++调用cplex库,关于OPL建模语言就请读者们自行学习啦。
03 cplex的java环境配置
因为小编一般用的C++和Java比较多,而且现在开发大型算法用这类面向对象的编程语言也方便得多。
基于上面的种种考虑,加上时间和精力有限,所以就暂时只做C++和Java的详细教程辣。关于和的也许后续会补上的吧。
然后在开始之前,照例先把环境给配置好。那么就先配置java的环境吧。
前面已经说了怎么下载和安装cplex了,如图:
确保已经安装上这个版本,我们才能开始下一步的工作。
3.1
将CPLEX库导入
java小编一般用的ide是java api,就配置一下关于的。其他的开发环境请大家自行设置哈。
新建一个工程,添加一个,添加一个带main函数的类。代码先别写。
在项目右键,选择build path -> Build Path……
找到->Add JARs……,然后定位到lib这个文件夹,把cplex.jar给添加进去。
到这一步还不行,还需要把CPLEX的动态运行库给添加进去,好让java程序运行的时候能够找到。
具体做法是:
1. 在项目右键,选择build path -> Build Path……
2. 找到,点开JRE
3. 在 那里点edit,把cplex下的bin文件夹给添加进去。这里面有程序运行所需要动态库。
3.2
求解一个简单的模型
一个简单的线性规划问题:
把下面代码复制进main函数里面:
try {
IloCplex cplex = new IloCplex(); // creat a model
double[] lb = {0.0, 0.0, 0.0};
double[] ub = {40.0, Double.MAX_VALUE, Double.MAX_VALUE};
IloNumVar[] x = cplex.numVarArray(3, lb, ub);
double[] objvals = {1.0, 2.0, 3.0};
cplex.addMaximize(cplex.scalProd(x, objvals));
double[] coeff1 = {-1.0, 1.0, 1.0};
double[] coeff2 = {1.0, -3.0, 1.0};
cplex.addLe(cplex.scalProd(x, coeff1), 20.0);
cplex.addLe(cplex.scalProd(x, coeff2), 30.0);
if (cplex.solve()) {
cplex.output().println("Solution status = " + cplex.getStatus());
cplex.output().println("Solution value = " + cplex.getObjValue());
double[] val = cplex.getValues(x);
for (int j = 0; j < val.length; j++)
cplex.output().println("x" + (j+1) + " = " + val[j]);
}
cplex.end();
} catch (IloException e) {
System.err.println("Concert exception caught: " + e);
}
点击运行,出现下面的结果就成功啦:
最后,如果提示找不到build path ,share 什么的,请确保第一步配置正确!至此,我们已经能愉快使用cplex啦。
04 Java 的相关API说明
cplex的java程序整体框架一般如下:
try {
} catch (IloException e) {
System.err.println("Concert exception caught: " + e);
}
1. 使用 类新建一个 cplex 类。
2. 使用 定义求解变量。
3. 使用 或 定义求解目标。
4. 使用 addLe 添加约束条件。
5. 使用 solve() 方法求解。
6. 使用 定义中间变量。
cplex 的 java api 不支持加减乘除符号,加必须用 sum 方法, 减必须用 diff 方法, 乘除必须用 prod 方法。
下一期我们将用cplex求解一个TSP问题的模型。期待吧~
END
【如对代码有疑问,可联系小编,可以提供有偿辅导服务】
【有偿辅导纯属个人行为,与团队无关】
赞 赏
长按下方二维码打赏
感谢您,
支持学生们的原创热情!
郑重承诺
打赏是对工作的认可
所有打赏所得
都将作为酬劳支付给辛勤工作的学生
指导老师不取一文
限时特惠:本站持续每日更新海量各大内部创业课程,一年会员仅需要98元,全站资源免费下载
点击查看详情
站长微信:Jiucxh