其他文章:

通过0-1背包问题看穷举法、贪心算法、启发式算法(JAVA)

模拟退火(SA)算法实例介绍(JAVA)

遗传算法(GA)实例介绍(JAVA)

CPLEX求解器入门案例

java集成Cplex:Cplex下载、IDEA环境搭建、docker部署

cplex的下载、安装、IDE编程及相关问题解决
Cplex20.1版本bin包Linux安装过程


CPLEX求解器入门案例

官方中文JAVA手册:https://www.ibm.com/docs/zh/icos/12.9.0?topic=application-structure

cplex是IBM开发的一款线性规划问题的求解器。

一、适用范围

cplex适用于求解的问题类型:

CPLEX的适用范围:1.适用于一般的线性规划(LP)问题.2.CPLEX 还可对 LP 的多个扩展求解:2.1.网络流问题,是 LP 的一种特殊情况,CPLEX 可以通过利用问题结构以快得多的速度对其求解。2.2.二次规划 (QP) 问题,其中 LP 目标函数扩展为包括二次项。2.3.二次约束规划 (QCP) 问题,在约束中包括二次项。 实际上,CPLEX 可对二阶锥规划 (SOCP) 问题求解。2.4.混合整数规划 (MIP) 问题,其中任意或所有 LP、QP 或 QCP 变量都进一步限制为采用最优解法中的整数值,并且 MIP 自身扩展为包括诸如特殊有序集合 (SOS) 和半连续变量之类的构造。

二、求解步骤

  1. 创建(IloCplex)
  2. 构建变量(IloNumVar)
  3. 构建表达式(IloNumExpr、IloLinearNumExpr)
  4. 构建目标函数(IloObjective)
  5. 构建约束条件(IloRange)
  6. 求解
  7. 获得求解的结果精确信息

三、编码测试

package com.wuxiaolong.cplex;import ilog.concert.*;
import ilog.cplex.IloCplex;
/***  测试模型:*  目标函数: max y = x[0] + 2*x[1] + 3*x[2]*  约束条件: -x[0] + x[1] + x[2] <= 20.0       0<= x[i] <=100*/
public class Test1 {public static void main(String[] args) throws Exception{try{// 1.创建模型/*** 第一个任务是创建 IloCplex 对象。 它用于创建表示模型所需的所有建模对象。* 例如,通过调用 model.intVar(0, 10) 来创建具有界限 0 和 10 的整数变量,其中 model 是 IloCplex 对象。*/IloCplex model = new IloCplex();/*** 类 IloCplex 实现 接口 IloModeler 及其扩展 IloMPModeler 和 IloCplexModeler。* 这些接口为以下类型的建模对象(可与 IloCplex 一起使用)定义构造函数:** 建模类           描述* IloNumVar  建模变量* IloRange      类型为 lb <= expr <= ub 的范围约束* IloObjective    优化目标* IloNumExpr    使用变量的表达式  表达式可用于为模型创建约束或目标函数**/// 2.IloNumVar 构建变量// 以下说明如何创建三个连续变量(全部具有界限 0 和 100):IloNumVar[] x = model.numVarArray(3, 0.0, 100.0);// 3.IloNumExpr 构建表达式// 建模变量构建类型为 IloNumExpr 的表达式,以供在优化模型的约束或目标函数中使用。 例如,表达式: x[0] + 2*x[1] + 3*x[2]IloNumExpr expr1 = model.sum( // 求表达式的和x[0],model.prod(2.0, x[1]),  // 求表达式的积model.prod(3.0, x[2]));//            // 3.IloLinearNumExpr 构建表达式
//            // 创建表示同一表达式的对象的另一种方法是使用表达式 IloLinearNumExpr。优点在于可以更轻松在循环中构建线性表达式。
//            // 接口 IloLinearNumExpr 是 IloNumExpr 的扩展,因此可在能够使用表达式的任意位置进行使用。
//            IloLinearNumExpr expr2 = model.linearNumExpr();
//            expr2.addTerm(1.0, x[0]);
//            expr2.addTerm(2.0, x[1]);
//            expr2.addTerm(3.0, x[2]);// 4.构建目标函数// 在其求解的模型中使用该目标  model.addMaximize()  model.addMinimize()// 创建和添加目标有一种快捷表示法:IloNumExpr object = expr1;IloObjective iloObjective = model.addMaximize(object);// 5.构建约束条件// 向模型中添加约束 例如,约束: -x[0] + x[1] + x[2] <= 20.0IloRange iloRange = model.addLe(model.sum(model.negative(x[0]), x[1], x[2]), 20);//同样,为添加其他约束类型(包括等同性约束、大于或等于约束和范围约束)提供了许多方法。// 在内部,它们全部表示为具有相应界限选项的 具有相应界限选择的 IloRange 对象,因此所有这些方法才会返回 IloRange 对象。// 另请注意,可能已通过许多不同方式创建先前表达式,包括使用 IloLinearNumExpr。// 6.求解// 该方法返回布尔值以指示优化是否成功找到解法。 如果未找到解法,那么会返回 false。// 如果返回 true,那么表明 CPLEX 找到可行解法,尽管其未必是最优解法。// 可以从 getStatus 方法获取有关上次调用 solve 方法的结果的更精确信息。boolean solve = model.solve();// 7.获得求解的结果精确信息// 返回值告诉您 CPLEX 找到的有关模型的信息:它找到最优解法还是仅找到可行解法;// 它证明模型无边界还是不可行;或者此时是否尚未证明任何内容。// 通过 getCplexStatus 方法可获取有关终止优化器调用的甚至更详细的信息,参考https://www.ibm.com/docs/en/icos/12.9.0?topic=c-ilocplexstatus。if(solve){model.output().println("解的状态: " + model.getStatus());model.output().println("目标函数值: " + model.getObjValue());// 对应的未知变量的值double[] xVal = model.getValues(x);String msg = "";for( double t : xVal){msg = msg + t + "    ";}model.output().println("决策变量取值(按顺序): " + msg);}else {model.output().println("未找到解法");}// 8.关闭求解器// 一定要关闭求解器,否则会内存泄漏model.end();}catch (IloException e){// 捕获Cplex定义的异常System.out.println("模型出错了"+e.getMessage());}catch (Exception e){// 系统未知异常System.out.println("未知异常"+e.getMessage());}}
}

四、运行结果

五、官方案例

安装完成cplex后,在安装目录里有很多案例可以看。

JAVA参考案例:

https://www.ibm.com/docs/zh/icos/12.9.0?topic=cplex-java-examples

CPLEX求解器入门案例相关推荐

  1. 在matlab中通过yalmip平台调用cplex求解器,可用于求解MILP问题,适合于综合能源系统优化求解(完整程序分享)

    综合能源系统优化求解 完整程序: %% 请先确保YALMIP工具箱和CPLEX正确安装,MATLAB导入对应文件,否则无法运行程序!! %CPLEX免费试用版对求解规模有限制,如出现规模过大无法求解, ...

  2. Yalmip使用学习 配置cplex求解器 实例

    yalmip学习 0. yalmip简介 0.1 什么是yalmip yalmip是由Lofberg开发的一种免费的优化求解工具,其最大特色在于集成许多外部的最优化求解器,形成一种统一的建模求解语言, ...

  3. 利用matlab调用cplex求解器时遇到猫图是什么原因呢

    再利用cplex求解器求解目标函数最小值时,我们会遇到各种各种的困难,其中就是运行结果出现猫图,这是什么原因呢? 下面我就用一个函数求过程来举例说明: 下面展示一些 内联代码片. // 程序如下 cl ...

  4. 【求解器】超级强大的数学规划模型求解器Cplex,导入idea+java代码简单案例详解

    文章目录 前言 一.下载cplex 二.使用步骤 1.打开idea,创建一个新项目 2.导入cplex的包 3.测试,用cplex求解一个简单的线性规划问题 总结 前言 CPLEX是一种数学优化技术. ...

  5. c++调用cplex求解例子_Java调用cplex求解运输问题

    Java调用cplex求解运输问题 本文中的课件来自清华大学深圳国际研究生院,物流与交通学部张灿荣教授<生产管理>课程. 运输问题(Transportation Problem)描述 运输 ...

  6. chtMultiRegionSimpleFoam求解器的热源不在边界上【翻译】

    翻译自:CFD-online 帖子地址:http://www.cfd-online.com/Forums/openfoam-solving/126777-chtmultiregionsimplefoa ...

  7. Java调用cplex求解运输问题

    Java调用cplex求解运输问题 Java调用cplex求解运输问题 运输问题(Transportation Problem)描述 运输问题的数学模型 Java调用cplex求解运输问题 trans ...

  8. Cplex求解考虑风光燃储综合能源系统鲁棒优化调度

    鲁棒优化的目的是求得这样一个解,对于可能出现的所有情况,约束条件均满足,并且使得最坏情况下的目标函数的函数值最优.综合能源系统鲁棒调度优化,以燃气轮机为核心,融合储能单元.考虑负荷侧需求以及风光出力侧 ...

  9. Geatpy入门案例(求解器模式)---案例一

    目录 案例一 1.问题 2.代码 3.分析 4.官方函数说明文档 4.1 ea.Problem.single 4.2 ea.Problem 4.3 ea.soea_SEGA_templet 4.4 e ...

  10. c++调用cplex求解例子_视频教程 | 用Python玩转运筹优化求解器IBM CPLEX(二)

    编者按 优化求解器对于做运筹学应用的学生来说,意义重大. 然而直到今天,放眼望去,全网(包括墙外)几乎没有一个系统的Cplex中文求解器教程. 作为华人运筹学的最大的社区,『运筹OR帷幄』 责无旁贷, ...

最新文章

  1. MySQL 的性能(下篇)—— 性能优化方法
  2. 堆排序——HeapSort
  3. c++与C# winform的消息通讯--(结构体与byte数组的使用)
  4. Oracle DBA
  5. MMN实用架构过程概览
  6. p沟道mos管导通条件_打开知识大门的捷径!MOS管基本认识
  7. 深度学习(七十一)3D CNN时空特征学习
  8. C# 代码重启windows服务
  9. Copy as Markdown - 将页面链接按照 Markdown 格式copy
  10. 测试使用navicat工具将MySQL格式SQL文件导入到MogDB数据库
  11. python类库31[使用minidom读写xml]
  12. spring之httpclient doget请求
  13. mysql binlog 备份_Mysql数据库的增量备份与还原
  14. WIN10下怎么用OBS捕捉全屏放映的PPT
  15. QWebEngineView崩溃及替代方案
  16. WebGL场景的两种地面构造方法
  17. 行为树 --- [4] 简单树
  18. 跟我学-域名解析故障排查技巧
  19. 联想拯救者安装Ubuntu 16.04 系统时显示WiFi无法连接被禁用
  20. 获取电影天堂电视剧下载页面所有url地址

热门文章

  1. python手册中文版-python手册中文
  2. 什么是驱动程序签名,驱动程序如何获取数字签名?
  3. VBA员工出差管理系统(上)
  4. Python实现网段固定端口扫描
  5. java实现人脸识别(附源码)
  6. 怎么用c语言制作游戏,怎么用c语言编写游戏.doc
  7. UE4官方文档UI学习:3.UMG 创建暂停菜单
  8. Oracle 学习资料
  9. 铁路联网售票系统 按计算机应用,铁路联网售票系统按计算机应用的分类它属于...
  10. c语言贪吃蛇(简易版本含完整代码)