CPLEX-求解一个简单的模型

接下来我们用Java语言调用Cplex来求解下面的一个简单模型:
CPLEX-求解一个简单的模型_第1张图片
首先新建项目,将cplex.jar包导入项目中且配置好环境。
CPLEX-求解一个简单的模型_第2张图片

package com.chb;

import ilog.concert.IloException;
import ilog.concert.IloNumVar;
import ilog.cplex.IloCplex;

public class test01 {
	public static void main(String[] args) {
		try {
			IloCplex cplex=new IloCplex();//创建一个模型
			
			double lb[]= {0.0,0.0,0.0};//三个变量的下界
			double ub[]= {40.0,Double.MAX_VALUE,Double.MAX_VALUE};//三个变量的上界
			IloNumVar x[]=cplex.numVarArray(3, lb, ub);//三个变量
			
			double objvals[]= {1.0,2.0,3.0};//目标函数的系数
			cplex.addMaximize(cplex.scalProd(x, objvals));//目标函数
			
			double coeff1[]= {-1.0,1.0,1.0};//约束1的系数
			double coeff2[]= {1.0,-3.0,1.0};//约束2的系数
			
			cplex.addLe(cplex.scalProd(x, coeff1), 20.0);//约束1
			cplex.addLe(cplex.scalProd(x, coeff2), 30.0);//约束2
			
			if(cplex.solve()) {
				cplex.output().println("Solution status="+cplex.getStatus());//解的状态
				cplex.output().println("Solution value="+cplex.getObjValue());//解的值
				
				double val[]=cplex.getValues(x);
				for (int i = 0; i < val.length; i++) {
					cplex.output().println("x"+(i+1)+"="+val[i]);//打印三个变量的值
				}
			}
			cplex.end();
		} catch (IloException e) {
			System.err.println("Concert exception caught: " + e);
		}
	}
}

运行结果:
CPLEX-求解一个简单的模型_第3张图片
注:
(1)cplex的java程序整体框架一般如下:

try {
			
		} catch (IloException e) {
			System.err.println("Concert exception caught: " + e);
		}

(2)IloCplex类创建一个cplex模型, IloNumVar定义求解变量, IloNumExpr定义中间变量,cplex.scalProd(x,y)不仅求xy,还求它们的累加和,cplex.addLe(a,b)表示a小于等于b,cplex.addGe(a,b)表示a大于等于b,cplex.addEq(a,b)表示a=b,
(3)cplex.solve()求解模型,cplex.end()结束求解,cplex.output().println()打印
(4)cplex 的 java api 不支持加减乘除符号,加必须用 sum 方法, 减必须用 diff 方法, 乘除必须用 prod 方法

参考文献:
[1]https://blog.csdn.net/robert_chen1988/article/details/78678289
[2]https://mp.weixin.qq.com/s/RIJIGTpLJI5D1dWUTME_Sg

你可能感兴趣的:(CPLEX)