java 调用 cplex
最近使用 java 调用 cplex, 发现 cplex 对 java 的支持比对matlab强大多了,类跟方法有几百个。
但这些类和方法的注释并不是特别详细,还需要结合例子来看懂。
一、 准备工作:导入 cplex 库 到 eclipse 中
1. 首先从官网上下载 cplex:
https://www.ibm.com/developerworks/community/blogs/jfp/entry/CPLEX_Is_Free_For_Students?lang=en, 这个页面能申请学术版。
http://www-01.ibm.com/software/websphere/products/optimization/cplex-studio-community-edition, 这个是普通的免费版,最多只能有1000个约束条件和1000个变量。
cplex 的 java 使用手册:http://download.csdn.net/download/robert_chen1988/10119473
2. 将 cplex库导入java里面。
新建一个java项目,右键单击项目,build path, add libraries, 如下图所示:
然后选择 user library, 刚开始里面并没有 cplex库,那么我们继续 点击 user libraries 将 cplex 库添加进来。选择新建,如下图所示:
可以命名为 cplex, 然后开始导入cplex 的库:
选择导入外部 jar, 选择 cplex 安装目录中的 lib 文件夹,将 cplex.jar 添加进去即可,这个项目就能调用 cplex 了。
3. 添加 cplex 的java 例子。
cplex 的 java 例子在安装程序的 cplex\examples\src\java 目录下, 可以在java 项目里新建一个package,将 例子全部导进去,就能查看例子了。
二、求解问题。
1. 一个简单的线性规划问题:
\begin{align} &\max\quad &&x_1 + 2x_2 +3x_3\nonumber\\ &s.t.&&\nonumber\\ & &&-x_1 + x_2 + x_3 \leq 20\nonumber\\ & &&x_1 - 3x_2 + x_3 \leq 30\nonumber\\ & &&0\leq x_1\leq 40\nonumber \end{align}
java 中的 cplex 代码如下:
import ilog.concert.IloException;
import ilog.concert.IloNumVar;
import ilog.cplex.IloCplex;public class LP1 {public static void main(String[] args) {try {IloCplex cplex = new IloCplex(); // creat a modeldouble[] 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);}}
}
输出结果:
Tried aggregator 1 time.
No LP presolve or aggregator reductions.
Presolve time = 0.00 sec. (0.00 ticks)
Iteration log . . .
Iteration: 1 Dual infeasibility = 0.000000
Iteration: 2 Dual objective = 202.500000
Solution status = Optimal
Solution value = 202.5
x1 = 40.0
x2 = 17.5
x3 = 42.5
2. 使用java 调用 cplex 的几点感受:
(1)使用 IloCplex 类新建一个 cplex 类, 使用 IloNumVar 定义求解变量, 使用 addMaximize 或addMinimize 定义求解目标,
使用 addLe 添加约束条件, 使用 solve() 方法求解。
(2)使用 IloNumExpr 定义中间变量。
(3)cplex 的 java api 不支持加减乘除符号,加必须用 sum 方法, 减必须用 diff 方法, 乘除必须用 prod 方法。
java 调用 cplex相关推荐
- Java调用cplex求解运输问题
Java调用cplex求解运输问题 Java调用cplex求解运输问题 运输问题(Transportation Problem)描述 运输问题的数学模型 Java调用cplex求解运输问题 trans ...
- 运筹优化学习21:Java调用Cplex实现求解Cuting Stock Porblem的列生成算法详解
目录 1 CSP问题与模型 1.1 问题描述 1.2 模型构建 2 列生成方法理论 2.1 引子 2.2 单纯形法到列生成 2.3 subproblem 2.3.1 对偶理论 2.3.2 影子价格 2 ...
- java调用Cplex:添加约束
由于课题相关要用到cplex,但是一直都没有时间好好查看api,导致自己以前写的代码过于冗长,今天简单介绍一种添加约束的方法. 例如添加约束,拿着个约束用两种添加方式举例: ,V=DUC // 车辆数 ...
- JSP(机器调度问题)使用java调用cplex求解
机器调度问题(JSP问题)描述为:在给定每个工件的加工流程.每个工件使用机器的序列及每个工件每道工序的加工时间确定的情况下,安排工件的加工顺序,使得待加工的工件在机器上进行加工的最大完工时刻最小. 接 ...
- Java调用Cplex的基础简单教程
介绍 官方英文文档: ILOG CPLEX Optimization Studio 12.10.0 - IBM Documentation 简单案例 官网给的例子 public class MyTes ...
- java调用cplex实现经典Benders分解算法求解混合整数规划问题
算法介绍 Benders分解算法是由Jacques F. Benders在1962年首先提出,目的是用于解决混合整数规划问题(MIP问题),即连续变量与整数变量同时出现的极值问题.随着分解算法的不断演 ...
- c++调用cplex求解例子_Java调用cplex求解运输问题
Java调用cplex求解运输问题 本文中的课件来自清华大学深圳国际研究生院,物流与交通学部张灿荣教授<生产管理>课程. 运输问题(Transportation Problem)描述 运输 ...
- c++调用cplex求解例子_视频教程 | 用Python玩转运筹优化求解器IBM CPLEX(二)
编者按 优化求解器对于做运筹学应用的学生来说,意义重大. 然而直到今天,放眼望去,全网(包括墙外)几乎没有一个系统的Cplex中文求解器教程. 作为华人运筹学的最大的社区,『运筹OR帷幄』 责无旁贷, ...
- c++调用cplex求解例子_c++调用CPLEX环境配置
详情见公 号mp.weixin.qq.com 很难想象没有求解软件的几十年前 那些杰(苦)出(逼)的运筹学博士 要花多少个日日夜夜亲自撸一遍所有代码 才能把结果跑出来 毕(个)业(人)难(能)度(力 ...
- CPLEX-分支定界算法调用cplex求解VRPTW
前面讲了Cplex直接求解VRPTW的模型,下面我们在分支定界算法中调用Cplex来求解VRPTW 1.分支定界算法 (1)定义: (2)求解过程: 1)确定一个下界(初始解LB),上界定为无穷大UB ...
最新文章
- 耐高温防腐计算机电缆,防腐耐高温计算机屏蔽控制电缆
- Linux网络编程 之 IO多路复用poll(九)
- 用命令行的方式运行Spark平台的wordcount项目
- [转]关于sizeof()的一些思考
- Bzoj4556 [Tjoi2016Heoi2016]字符串
- c:forTokens
- 推荐一款好用的jquery弹出层插件——wbox
- DRL前沿之:Benchmarking Deep Reinforcement Learning for Continuous Control
- rocketmq顺序消费问题
- Atitit.得到网络邻居列表java php c#.net python
- 用Python网络爬虫来抓取网易云音乐歌词
- 摩尔庄园不同服务器账号互通吗,摩尔庄园手游服务器互通吗?摩尔庄园手游不同区可以一起玩吗?...
- 广州海客智能机器人:为什么要让孩子从小学习机器人课程
- App工厂之痛:一个知识问答社区的死亡样本
- 【机器学习基础】最大边缘分类器
- 云原生背景运维转型之SRE实践
- beyond compare 4 license 过期解决办法
- 【To Be Continued】一些有意思的计算机小问题
- ps怎么抠地图线路_用Photoshop怎么抠地图?
- 今天是微信7周年 7年之痒 一切都已被改变