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. POJ 3617:Best Cow Line(贪心,字典序)

    Best Cow Line Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 30684   Accepted: 8185 De ...

  2. LG2044 [NOI2012]随机数生成器

    题意 栋栋最近迷上了随机算法,而随机数是生成随机算法的基础.栋栋准备使用线性同余法(Linear Congruential Method)来生成一个随机数列,这种方法需要设置四个非负整数参数m,a,c ...

  3. GridView实现数据编辑和删除

    <asp:GridView ID="gv_Emplogin" runat="server" AutoGenerateColumns="False ...

  4. JS 得细心的坑位

    <script> function test(link) { link = link || 'none'; alert(link); } function test2(){ var lin ...

  5. KindEditor 上传文件 在Asp.net中的使用

    以前一直用FCK编辑器,因为配置比较简单,但是发现Kindeditor这个编辑器更加好看,更加灵活,就用了下. 但是发现在上传文件的时候,出现了大问题,弄了我好久的时间,为了记录下,或许能帮助到您,共 ...

  6. 监控Linux的Steps&Q&A

    spolight的下载地址:https://www.quest.com/spotlight-on-windows/ 问题1.sar -u 之后,只有一条记录.这种情况执行一下:sudo sar -d; ...

  7. 【转】每天一个linux命令(59):rcp命令

    原文网址:http://www.cnblogs.com/peida/archive/2013/03/14/2958685.html rcp代表“remote file copy”(远程文件拷贝).该命 ...

  8. 通过手动安装来启动ZStack

    当您使用手动安装手册完成ZStack的安装之后,您可以继续进行一些必要的配置 以便用它来自动云环境.ZStack的管控工具zstack-ctl会安装到每一个ZStack管理节点,您可以使用它来控制本地 ...

  9. mysql的一些 参数查询

    1 查询 事务 超时时间: SHOW GLOBAL VARIABLES LIKE 'innodb_lock_wait_timeout'; (默认innodb引擎事务的超时时间) 2 查询事务隔离级别 ...

  10. html 子元素和父元素都监听了 click 事件,点击子元素时为何先触发的是父元素的 click 事件?

    先上一段代码,点击子元素时先触发的是父元素的 click 事件 <html> <head> <script type="text/javascript" ...