龙空技术网

详解在Eclipse下用Java调用CPLEX

OMer 243

前言:

此刻姐妹们对“java调用cplex如何配置”大概比较重视,兄弟们都想要了解一些“java调用cplex如何配置”的相关知识。那么小编同时在网络上搜集了一些有关“java调用cplex如何配置””的相关资讯,希望朋友们能喜欢,小伙伴们一起来了解一下吧!

准备工作:

1. 安装好Java并配置好环境变量

2. 网上下载Cplex并安装

以下面这个线性规划问题为例:

Maximize x1 + 2x2 + 3x3

subject to

-x1 + x2 + x3 ≦20

x1 - 3x2 + x3 ≦30

with these bounds

0 ≦x1 ≦40

0 ≦x2 ≦+∞

0≦ x3≦ +∞

1、打开eclipse,新建一个Java项目。File --> New --> Java Project。输入项目名称,这里定义为test。建好如下图:

2. 新建Java类。Src --> New --> Class,出现下图,填图中红框中的内容。

3、添加cplex.jar和cplex1271.dll。在..\cplex\lib目录下找到cplex.jar,在..\cplex\bin目录下找到cplex1271.dll。src-->build Path --> Configuration Build Path,出现如下图:

点击Libraries--> Add JARs.. --> 找到cplex.jar所在路径,添加cplex.jar。

点击Native library location--->Edit...-->找到cplex1271.dll所在路径,添加cplex1271.dll。

4、编写代码。具体说明见注释。

import ilog.concert.IloException;import ilog.concert.IloNumVar;import ilog.cplex.IloCplex;public class test {public static void main(String[] args) {try {//			申明一个cplex对象IloCplex cplex = new IloCplex();//			定义决策变量下界double[] lb = {0.0,0.0,0.0};//			定义决策变量上界double[] ub = {40.0,Double.MAX_VALUE,Double.MAX_EXPONENT}; //			设置决策变量上下界IloNumVar[] x = cplex.numVarArray(3,lb, ub); //			定义目标函数的参数double[] objvals = {1.0,2.0,3.0}; //			定义目标函数cplex.addMaximize(cplex.scalProd(x, objvals)); //			定义第一个约束条件cplex.addLe(cplex.sum(cplex.prod(-1.0, x[0]),cplex.prod(1.0, x[1]),cplex.prod(1.0, x[2])),20.0);//			定义第二个约束条件cplex.addLe(cplex.sum(cplex.prod(1.0, x[0]),cplex.prod(-3, x[1]),cplex.prod(1, x[2])),30.0); //			求解if(cplex.solve()){cplex.output().println("solution status:"+cplex.getStatus());cplex.output().println("solution value:"+cplex.getObjValue());double[] val = cplex.getValues(x);int ncols = cplex.getNcols();for(int j = 0;j<ncols;j++){cplex.output().println("column:"+j+"value="+val[j]);}cplex.end();}} catch (IloException e) {e.printStackTrace();}}}

5、运行Java代码,出现结果如下。

6、结语。java调用Cplex求解简单的线性规划还是比较容易的,在处理复杂的优化问题时当然还有更多细节去处理,但这篇文章可以作为一个入门的Demo练习下,为接下来的coding打下基础。

标签: #java调用cplex如何配置