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介绍及使 ...
随机推荐
- BZOJ3879: SvT【后缀数组+单调栈】
Description (我并不想告诉你题目名字是什么鬼) 有一个长度为n的仅包含小写字母的字符串S,下标范围为[1,n]. 现在有若干组询问,对于每一个询问,我们给出若干个后缀(以其在S中出现的起始 ...
- 水题 不要62 HDU 2089
先预处理出所有的数是不是可能拿来用,我的想法是记录1-i这个区间内可用的数为s[i]. 输入a,b.答案就为s[b] - s[a-1]. 贴代码: #include<cstdio> #de ...
- SVN服务器搭建和使用(四)
在第一次使用TortoiseSVN从服务器CheckOut的时候,会要求输入用户名和密码,这时输入框下面有个选项是保存认证信息,如果选了这个选项,那么以后就不用每次都输入一遍用户名密码了. 不过,如果 ...
- linux I2C_client产生方法一
\arch\arm\mach-omap2/board-am335xevm.c static struct i2c_board_info am335x_i2c2_boardinfo[] = { { I ...
- 用Qstring给char[]数组赋值(转)
tree_data.Desc //Desc是char[80]类型的数据 Qstring newDescStr; strcpy(tree_data.Desc , newDescStr.toLocal8 ...
- Angular 4 路由介绍
Angular 4 路由 1. 创建工程 ng new router --routing 2. 创建home和product组件 ng g component home ng g component ...
- C# 爬取网页上的数据
最近工作中需求定时爬取不同城市每天的温度.其实就是通过编程的方法去抓取不同网站网页进行分析筛选的过程..NET提供了很多类去访问并获得远程网页的数据,比如WebClient类和HttpWebReque ...
- 【python】单下划线与双下划线的区别
Python 用下划线作为变量前缀和后缀指定特殊变量. _xxx 不能用'from moduleimport *'导入 __xxx__ 系统定义名字 __xxx 类中的私有变量名 以单下划线开头(_f ...
- qt 中文乱码
首先呢,声明一下,QString 是不存在中文支持问题的,很多人遇到问题,并不是本身 QString 的问题,而是没有将自己希望的字符串正确赋给QString. 很简单的问题,"我是中文&q ...
- java 网络编程TCP
客户端 服务端