idea配置gurobi及体验

idea配置Gurobi以及gurobi的使用

1、idea配置gurobi

先将安装好的gurobi导入程序中,本文用的是idea。找到安装路径,导入gurobi。
在这里插入图片描述

导入好后,就可以在现在的包下使用了,下面是一个简单的gurobi程序。

2、gurobi的使用

下面的例子是gurobi安装目录下的帮助文档下的。

C:\gurobi903\win64\docs quickstart_windows.pdf

我们使用gurobi求解一下模型:

模型:
	maximize  	x + y + 2z
	Subject to	x + 2y + 3z <= 4
    			x + y		>= 1
    			x, y , z binary		//这里可以理解为x,y,z只能取0或1

step1:创建环境和模型

使用gurobi之前,第一步是通过GRBEnv创建环境,然后创建模型。

GRBEnv env = new GRBEnv(ture);	
GRBModel model = new GRBModel(env); // 以上面创建的环境创建模型

step2:创建变量

/*
	参数一:变量的上限
	参数二:变量的下限
	参数三:这里可以理解为变量在目标函数的系数
	参数四:变量的类型,有01类型、连续性等
	参数五:变量的名称
*/
GRBVar x = model.addVar(0.0, 1.0, 1.0, GRB.BINARY, "x");
GRBVar y = model.addVar(0.0, 1.0, 1.0, GRB.BINARY, "y");
GRBVar z = model.addVar(0.0, 1.0, 1.0, GRB.BINARY, "z");

step3:创建目标函数

/*
	目标函数: x + y + 2z
	1、创建一个空的线性表达式,用于存储目标函数
	2、addTerm添加变量及其系数
	3、setObjective
		参数一为目标函数;
		参数二为目标,即为最大值、最小值
*/
GRBLinExpr expr = new GRBLinExpr();
expr.addTerm(1.0, x); expr.addTerm(1.0, y); expr.addTerm(2.0, z);
model.setObjective(expr, GRB.MAXIMIZE);

step4:创建约束

/*
	约束是通过函数addConstr构建的。
		参数一:约束的左边
		参数二:"<="
		参数三:约束的右边
		参数四:这个约束的名称
*/
/*
	约束一:x + 2 y + 3 z <= 4
*/
expr = new GRBLinExpr();
expr.addTerm(1.0, x); expr.addTerm(2.0, y); expr.addTerm(3.0, z);
model.addConstr(expr, GRB.LESS_EQUAL, 4.0, "c0");

/*
	约束二:x + y >= 1
*/
expr = new GRBLinExpr();
expr.addTerm(1.0, x); expr.addTerm(1.0, y);
model.addConstr(expr, GRB.GREATER_EQUAL, 1.0, "c1");

step5:优化模型

最后一步,优化模型并输出最后的结果。

model.optimize();

// 输出最优解下x,y,z的取值
System.out.println(x.get(GRB.StringAttr.VarName) + " " + x.get(GRB.DoubleAttr.X));
System.out.println(y.get(GRB.StringAttr.VarName) + " " + y.get(GRB.DoubleAttr.X));
System.out.println(z.get(GRB.StringAttr.VarName) + " " + z.get(GRB.DoubleAttr.X));
// 输出最优解
System.out.println("Obj: " + model.get(GRB.DoubleAttr.ObjVal));

// 回收处理环境和模型
model.dispose();
env.dispose();

最终的完整代码:

import gurobi.*;

public class MIP02 {
    public static void main(String[] args) throws GRBException {
        try {
            // 创建空的环境
            GRBEnv env = new GRBEnv(true);
            env.set("logFile", "mip1.log");
            env.start();

            // 创建空的模型
            GRBModel model = new GRBModel(env);

            // 创建变量
            GRBVar x = model.addVar(0.0,1.0,0.0, GRB.BINARY,"x");
            GRBVar y = model.addVar(0.0,1.0,0.0, GRB.BINARY,"y");
            GRBVar z = model.addVar(0.0,1.0,0.0, GRB.BINARY,"z");

            // 设置目标函数,maximize x + y + 2z
            GRBLinExpr expr = new GRBLinExpr();
            expr.addTerm(1.0,x);expr.addTerm(1.0,y);expr.addTerm(2.0,z);
            model.setObjective(expr,GRB.MAXIMIZE);

            // 添加约束条件一 x + 2y + 3z <= 4
            expr = new GRBLinExpr();
            expr.addTerm(1.0,x);expr.addTerm(2.0,y);expr.addTerm(3.0,z);
            model.addConstr(expr,GRB.LESS_EQUAL,4.0,"c0");

            // 添加约束条件二 x + y >= 1
            expr = new GRBLinExpr();
            expr.addTerm(1.0,x);expr.addTerm(1.0,y);
            model.addConstr(expr,GRB.GREATER_EQUAL,1.0,"c1");

            // 优化模型
            model.optimize();

            System.out.println(x.get(GRB.StringAttr.VarName) + " " + x.get(GRB.DoubleAttr.X));
            System.out.println(y.get(GRB.StringAttr.VarName) + " " + y.get(GRB.DoubleAttr.X));
            System.out.println(z.get(GRB.StringAttr.VarName) + " " + z.get(GRB.DoubleAttr.X));

            System.out.println("Obj:" + model.get(GRB.DoubleAttr.ObjVal));

            // 回收处理
            model.dispose();
            env.dispose();
        } catch (GRBException e){
            System.out.println("Error code:" + e.getErrorCode() + ". " + e.getMessage());
        }
    }
}

参考文档:
http://www.gurobi.com/documentation/
https://blog.csdn.net/owen6314/article/details/70342275

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值