ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

线性最优解java实现+Cplex java调用

2020-04-02 20:41:45  阅读:342  来源: 互联网

标签:调用 1.0 double Cplex cplex https java x1


一:cplex的使用:
1.1 导入cplex.jar,包的地址:https://pan.baidu.com/s/1Q0Bv24EQdelV2rY-IrLoZQ 提取码:xn14
1.2 将cplex1290.dll (地址:https://pan.baidu.com/s/1sQXqYTSJWywwaZt5AHVkZQ 提取码:nm0l)添加到VM option中,这里以IDEA为例,
在这里插入图片描述
在这里插入图片描述
同样eclipse
在这里插入图片描述
**二、求解问题。

  1. 一个简单的线性规划问题:**
    maxs.t.x1+2x2+3x3
    −x1+x2+x3≤20
    x1−3x2+x3≤30
    0≤x1≤40

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

输出结果:

Tried aggregator 1 time.

N

o 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

这里注意一下,求的是线性公式的最大值,而在MATLAB中利用x=linprog(f,[],[],Aeq,beq,lb);求解的是最小值(我怎么调试都不一致的原因),这里的参数就不在赘述了。
还有就是设置cplex API在https://wenku.baidu.com/view/7095dd76777f5acfa1c7aa00b52acfc789eb9fed.html有介绍(虽然是c#的,但是java可以借鉴。

三 线性最优解的java实现
代码地址:https://pan.baidu.com/s/1UeyQdPLMideXKqUaDBFYZQ 提取码:rte1
里面有详细注解,这里就不再解释,希望对大家有帮助!

借鉴:https://blog.csdn.net/robert_chen1988/article/details/78678289 ,感谢这位博主的文章。

标签:调用,1.0,double,Cplex,cplex,https,java,x1
来源: https://blog.csdn.net/hyy_blue/article/details/94763404

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有