cplex-Java-样例代码解析
import ilog.cplex.IloCplex;
import ilog.concert.*; /**
*
*
*
* 最大化 x1 + 2x2 + 3x3</br>
* 约束 </br>
* –x1 + x2 . + x3 ≤ 20</br>
* x1 – 3x2 + x3 ≤ 30</br>
* 使用这些界限 </br>
* 0 ≤ x1 ≤ 40</br>
* 0 ≤ x2 ≤ infinity</br>
* 0 ≤ x3 ≤ infinity</br>
*
*
*
* @author caicai
*
*/
public class Color
{
static
{
System.loadLibrary("cplex1271");
} public static void main(String[] args) throws IloException
{ // Create the modeler/solver object
IloCplex cplex = new IloCplex(); IloNumVar[][] var = new IloNumVar[1][];
IloRange[][] rng = new IloRange[1][]; // Evaluate command line option and call appropriate populate
// method.
// The created ranges and variables are returned as element 0 of
// arrays
// var and rng. populateByRow(cplex, var, rng);
// populateByColumn(cplex, var, rng);
//populateByNonzero(cplex, var, rng); // write model to file,保存模型
cplex.exportModel("lpex1.lp"); // solve the model and display the solution if one was found
if (cplex.solve())
{
//var[0] = x,计算后各变量的取值
double[] x = cplex.getValues(var[0]);
double[] dj = cplex.getReducedCosts(var[0]);
//对偶
double[] pi = cplex.getDuals(rng[0]);
double[] slack = cplex.getSlacks(rng[0]);
//cplex.setWarning(System.err);
cplex.output().println("totalTime = "+cplex.getCplexTime()); cplex.output()
.println("Solution status = " + cplex.getStatus());
//f(x)的结果
cplex.output()
.println("Solution value = " + cplex.getObjValue()); int nvars = x.length;
for (int j = 0; j < nvars; ++j)
{
cplex.output().println("Variable " + j + ": Value = " + x[j]
+ " Reduced cost = " + dj[j]);
} int ncons = slack.length;
for (int i = 0; i < ncons; ++i)
{
cplex.output().println("Constraint " + i + ": Slack = "
+ slack[i] + " Pi = " + pi[i]);
}
}
cplex.end();
} // The following methods all populate the problem with data for the
// following
// linear program:
//
// Maximize
// x1 + 2 x2 + 3 x3
// Subject To
// - x1 + x2 + x3 <= 20
// x1 - 3 x2 + x3 <= 30
// Bounds
// 0 <= x1 <= 40
// End
//
// using the IloMPModeler API static void populateByRow(IloMPModeler model, IloNumVar[][] var,
IloRange[][] rng) throws IloException
{
//变量取值下界
double[] lb = { 0.0, 0.0, 0.0 };
//变量取值上界
double[] ub = { 40.0, Double.MAX_VALUE, Double.MAX_VALUE };
//变量名
String[] varname = { "x1", "x2", "x3" };
//初始化变量,3是变量个数
IloNumVar[] x = model.numVarArray(3, lb, ub, varname);
var[0] = x; //变量前系数
//y = x1 + 2x2 + 3x3
//计算y的最大值
double[] objvals = { 1.0, 2.0, 3.0 };
model.addMaximize(model.scalProd(x, objvals)); //约束条件
rng[0] = new IloRange[2];
//c1
//–x1 + x2 . + x3 ≤ 20
rng[0][0] = model.addLe(model.sum(model.prod(-1.0, x[0]),
model.prod(1.0, x[1]), model.prod(1.0, x[2])), 20.0, "c1");
//c2
//x1 – 3x2 + x3 ≤ 30
rng[0][1] = model.addLe(model.sum(model.prod(1.0, x[0]),
model.prod(-3.0, x[1]), model.prod(1.0, x[2])), 30.0, "c2");
} static void populateByColumn(IloMPModeler model, IloNumVar[][] var,
IloRange[][] rng) throws IloException
{ IloObjective obj = model.addMaximize(); rng[0] = new IloRange[2];
rng[0][0] = model.addRange(-Double.MAX_VALUE, 20.0, "c1");
rng[0][1] = model.addRange(-Double.MAX_VALUE, 30.0, "c2"); IloRange r0 = rng[0][0];
IloRange r1 = rng[0][1]; var[0] = new IloNumVar[3];
var[0][0] = model.numVar(
model.column(obj, 1.0)
.and(model.column(r0, -1.0).and(model.column(r1, 1.0))),
0.0, 40.0, "x1");
var[0][1] = model.numVar(
model.column(obj, 2.0)
.and(model.column(r0, 1.0).and(model.column(r1, -3.0))),
0.0, Double.MAX_VALUE, "x2");
var[0][2] = model.numVar(
model.column(obj, 3.0)
.and(model.column(r0, 1.0).and(model.column(r1, 1.0))),
0.0, Double.MAX_VALUE, "x3");
} static void populateByNonzero(IloMPModeler model, IloNumVar[][] var,
IloRange[][] rng) throws IloException
{
double[] lb = { 0.0, 0.0, 0.0 };
double[] ub = { 40.0, Double.MAX_VALUE, Double.MAX_VALUE };
IloNumVar[] x = model.numVarArray(3, lb, ub);
var[0] = x; double[] objvals = { 1.0, 2.0, 3.0 };
model.add(model.maximize(model.scalProd(x, objvals))); rng[0] = new IloRange[2];
rng[0][0] = model.addRange(-Double.MAX_VALUE, 20.0);
rng[0][1] = model.addRange(-Double.MAX_VALUE, 30.0); rng[0][0].setExpr(model.sum(model.prod(-1.0, x[0]),
model.prod(1.0, x[1]), model.prod(1.0, x[2])));
rng[0][1].setExpr(model.sum(model.prod(1.0, x[0]),
model.prod(-3.0, x[1]), model.prod(1.0, x[2]))); x[0].setName("x1");
x[1].setName("x2");
x[2].setName("x3");
rng[0][0].setName("c1");
rng[0][1].setName("c2");
}
}
cplex-Java-样例代码解析的更多相关文章
- java 线程、线程池基本应用演示样例代码回想
java 线程.线程池基本应用演示样例代码回想 package org.rui.thread; /** * 定义任务 * * @author lenovo * */ public class Lift ...
- java文件夹相关操作 演示样例代码
java文件夹相关操作 演示样例代码 package org.rui.io; import java.io.File; import java.io.FilenameFilter; import ja ...
- java 又一次抛出异常 相关处理结果演示样例代码
java 又一次抛出异常 相关处理结果演示样例代码 package org.rui.ExceptionTest; /** * 又一次抛出异常 * 在某些情况下,我们想又一次掷出刚才产生过的违例,特别是 ...
- java I/O进程控制,重定向 演示样例代码
java I/O进程控制,重定向 演示样例代码 package org.rui.io.util; import java.io.*; /** * 标准I/O重定向 */ public class Re ...
- Java 18 新增@snipppet标签,注释中写样例代码更舒适了!
在这次的Java 18中,新增了一个@snipppet标签,主要用于JavaDoc中需要放示例代码的场景.其实在Java 18之前,已经有一个@code标签,可以用于在JavaDoc中编写小段的代码内 ...
- ECharts组件应用样例代码
一.从Echarts官网上下载最新版本组件 Echarts是百度开发的开源Web图表组件,界面美观,使用简单.组件下载地址:http://echarts.baidu.com/echarts2/doc/ ...
- 10分钟理解Android数据库的创建与使用(附具体解释和演示样例代码)
1.Android数据库简单介绍. Android系统的framework层集成了Sqlite3数据库.我们知道Sqlite3是一种轻量级的高效存储的数据库. Sqlite数据库具有以下长处: (1) ...
- Java二进制指令代码解析
http://www.blogjava.net/DLevin/archive/2011/09/13/358497.html http://blog.csdn.net/sum_rain/article/ ...
- [Python] SQLBuilder 演示样例代码
用Python写一个SQLBuilder.Java版能够从 http://www.java2s.com/Code/Java/Database-SQL-JDBC/SQLBuilder.htm 看到. 附 ...
- Linux下用OTL操作MySql(包含自己封装的类库及演示样例代码下载)
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/ClamReason/article/details/23971805 首先重点推荐介绍otl介绍及使 ...
随机推荐
- stm32 ADC配置
STM32 的 ADC 是 12 位逐次逼近型的模拟数字转换器,它有 18 个通道,可测量 16 个外部和 2 个内部信号源 各通道的 A/D 转换可以单次.连续.扫描或间断模式执行. ADC 的结果 ...
- Java/JDK安装教程手册(正规图文全流程)、运行、环境配置
Java/JDK教程手册 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 一 Download Resouc ...
- ZOJ2067 经典 DP(单调队列优化)
题目:一个由‘.’和‘#’组成矩形,统计里面'.'组成的矩形的个数. 点击打开链接 自己写挂了,懒得搞了 #include <stdio.h> #include <string.h& ...
- null 与 undefinded
null表示"没有对象",即该处不应该有值.典型用法是: (1) 作为函数的参数,表示该函数的参数不是对象. (2) 作为对象原型链的终点. Object.getPrototype ...
- 第二百七十六节,MySQL数据库,【显示、创建、选定、删除数据库】,【用户管理、对用户增删改查以及授权】
MySQL数据库,[显示.创建.选定.删除数据库],[用户管理.对用户增删改查以及授权] 1.显示数据库 SHOW DATABASES;显示数据库 SHOW DATABASES; mysql - 用户 ...
- 4.图像sensor的特性和驱动解析
修改 摄像头SDK中支持的sensor需要做的事 例如:ar0130 --> ov9712 1.修改加载load3518e脚本的参数 vi /etc/profile ./load3518e -i ...
- php取两个整数的最大公约数算法大全
php计算两个整数的最大公约数常用算法 <?php//计时,返回秒function microtime_float (){ list( $usec , $sec ) = explode ( &q ...
- linQ to sql 查询生成的sql语句
1. 如果是控制台应用,直接 db.Log = Console.Out; 2.其他应用则用如下语句: StringBuilder sql = new StringBuilder(); db.Log ...
- JSP include 指令
1. 创建test5.jsp test5_1.jsp test5_2.jsp test5_1.jsp <%@ page import="java.util.*" %> ...
- nginx在centos & ubuntu上的安装
安装Centos 添加当前账号加入sudoers,具备sudo功能 安装编辑器vim Yum install vim Su root Cd cp /etc/sudoers /etc/sudoers[d ...