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-样例代码解析的更多相关文章

  1. java 线程、线程池基本应用演示样例代码回想

    java 线程.线程池基本应用演示样例代码回想 package org.rui.thread; /** * 定义任务 * * @author lenovo * */ public class Lift ...

  2. java文件夹相关操作 演示样例代码

    java文件夹相关操作 演示样例代码 package org.rui.io; import java.io.File; import java.io.FilenameFilter; import ja ...

  3. java 又一次抛出异常 相关处理结果演示样例代码

    java 又一次抛出异常 相关处理结果演示样例代码 package org.rui.ExceptionTest; /** * 又一次抛出异常 * 在某些情况下,我们想又一次掷出刚才产生过的违例,特别是 ...

  4. java I/O进程控制,重定向 演示样例代码

    java I/O进程控制,重定向 演示样例代码 package org.rui.io.util; import java.io.*; /** * 标准I/O重定向 */ public class Re ...

  5. Java 18 新增@snipppet标签,注释中写样例代码更舒适了!

    在这次的Java 18中,新增了一个@snipppet标签,主要用于JavaDoc中需要放示例代码的场景.其实在Java 18之前,已经有一个@code标签,可以用于在JavaDoc中编写小段的代码内 ...

  6. ECharts组件应用样例代码

    一.从Echarts官网上下载最新版本组件 Echarts是百度开发的开源Web图表组件,界面美观,使用简单.组件下载地址:http://echarts.baidu.com/echarts2/doc/ ...

  7. 10分钟理解Android数据库的创建与使用(附具体解释和演示样例代码)

    1.Android数据库简单介绍. Android系统的framework层集成了Sqlite3数据库.我们知道Sqlite3是一种轻量级的高效存储的数据库. Sqlite数据库具有以下长处: (1) ...

  8. Java二进制指令代码解析

    http://www.blogjava.net/DLevin/archive/2011/09/13/358497.html http://blog.csdn.net/sum_rain/article/ ...

  9. [Python] SQLBuilder 演示样例代码

    用Python写一个SQLBuilder.Java版能够从 http://www.java2s.com/Code/Java/Database-SQL-JDBC/SQLBuilder.htm 看到. 附 ...

  10. Linux下用OTL操作MySql(包含自己封装的类库及演示样例代码下载)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/ClamReason/article/details/23971805 首先重点推荐介绍otl介绍及使 ...

随机推荐

  1. 任务02——安装 Intellj IDEA,编写一个简易四则运算小程序,并将代码提交到 GitHub

    github地址:https://github.com/ErhuoHome/First.git 安装jdk与intellij idea没有太大问题,以前安装过eclipse 在程序方面,由于对真分数的 ...

  2. 自动化工具-jenkins

    jenkins自动化工具使用教程 自动化构建.测试.部署.代码检测越来越重要.主要有一下几点原因 企业做大,项目变多,多端支持(web,h5,小程序等) 微服务提倡高内聚低耦合,项目因拆分变多 Dev ...

  3. MySQL--”自然键”和”代理键”优缺点

    ##=====================================================================================## 在数据库表设计中会纠 ...

  4. 转 sql 优化

    1.关于SQL查询效率,100w数据,查询只要1秒,与您分享: 机器情况p4: 2.4内存: 1 Gos: windows 2003数据库: ms sql server 2000目的: 查询性能测试, ...

  5. silverlight 中javascript 代码与托管代码的互调用 以及一些思考

    silverlight 客户端javascript 代码与托管代码的互调用时比较用意义的同时,因为silverlight本身就是一个插件,如果两者之间不能进行相互的调用,对于web 上的一些特殊的功能 ...

  6. hadoop之 参数调优

    一. hdfs-site.xml 配置文件 1. dfs.blocksize 参数:hadoop文件块大小描述:新文件的默认块大小,以字节为单位,默认 134217728 字节.可以使用以下后缀(大小 ...

  7. vue-cli 下的 webpack 优化

    app bundle 可以通过组件懒加载优化 vender 优化方法: 使用 cdn,然后在 webpack 配置中指定 externals. 利用 webpack 的插件 DllPlugin 和 D ...

  8. AngularJS+ThinkPHP实例教程

    总体思路 thinkphp通过RESTful方式提供数据给angular,前端(包括模板页面)全部由angular来接管. 示例 实现一个用户管理模块,走通增删改查4个操作,通过该示例,演示如何在th ...

  9. R(6): 数据处理包dplyr

    dplyr包是Hadley Wickham的新作,主要用于数据清洗和整理,该包专注dataframe数据格式,从而大幅提高了数据处理速度,并且提供了与其它数据库的接口,本节学习dplyr包函数基本用法 ...

  10. RPC终结点映射

    “没有更多的终结点可用”错误消息表示 RPC 终结点映射程序无法对基于 RPC 运行的服务使用大于 1024 的端口.注意:RPC 终结点映射程序在端口 135 上运行. http://support ...