Java—Gurobi学习笔记(一)

根据Gurobi自带的Mip1案例去编写的。

代码

import gurobi.*;

import static gurobi.GRB.GREATER_EQUAL;
import static gurobi.GRB.LESS_EQUAL;
/*
    maximize    x +   y + 2 z
     subject to  x + 2 y + 3 z <= 4
                 x +   y       >= 1
                 x, y, z binary

 */

/**
 * @Author:superNova
 * @ClassName:Mip1
 * @Description:example from gurobi itself(Mip1)
 * @Date:2022/09/02/21:01
 * @Email:shiyudawei@qq.com
 * @Blog:https://blog.csdn.net/shiyudawei?spm=1018.2226.3001.5343
 */

public class Mip1 {
    public static void main(String[] args) {
        try {
            //创建环境
            GRBEnv grbEnv = new GRBEnv("grbEnv");
            GRBModel grbModel = new GRBModel(grbEnv);

            //创建变量
            GRBVar x = grbModel.addVar(0,1,0,GRB.BINARY, "x");
            GRBVar y = grbModel.addVar(0,1,0,GRB.BINARY, "y");
            GRBVar z = grbModel.addVar(0,1,0,GRB.BINARY, "z");

            //创建变量数组
            GRBVar[] grbVars = {x,y,z};

            //创建限制条件
            GRBLinExpr expr1 = new GRBLinExpr();
            expr1.addTerms(new double[]{1,2,3},grbVars);
            grbModel.addConstr(expr1,LESS_EQUAL,4,"expr1");
            GRBLinExpr expr2 = new GRBLinExpr();
            expr2.addTerms(new double[]{1,1,0},grbVars);
            grbModel.addConstr(expr1,GREATER_EQUAL,1,"expr2");

            //设置目标函数
            GRBLinExpr target = new GRBLinExpr();
            target.addTerms(new double[]{1,1,2},grbVars);
            grbModel.setObjective(target,GRB.MAXIMIZE);

            //求解
            grbModel.optimize();

            //输出结果
            System.out.println("最优解为:" + grbModel.get(GRB.DoubleAttr.ObjVal));
            for (int i = 0; i < grbVars.length; i++) {
                System.out.println(grbVars[i].get(GRB.StringAttr.VarName) + "=" + grbVars[i].get(GRB.DoubleAttr.X));

            }

            //处理模型和环境
            grbModel.dispose();
            grbEnv.dispose();


        }catch (Exception e){
            e.printStackTrace();

        }
    }
}

结果

Optimal solution found (tolerance 1.00e-04)
Best objective 3.000000000000e+00, best bound 3.000000000000e+00, gap 0.0000%
最优解为:3.0
x=1.0
y=0.0
z=1.0

分析

  1. 创建环境
    GRBEnv grbEnv = new GRBEnv("name");

  2. 创建模型
    GRBModel grbModel = new GRBModel(grbEnv);

  3. 创建变量
    GRBVar x = grbModel.addVar(left.right,obj,vtype,name);

    left:x的左极限
    right....
    obj:x的客观系数,暂时不清楚何时能用到。
    vtype:x的类型continuous、binary、Integer......

  4. 创建数组变量
    GRBVar[] grbVars = {x1, x2, x3.....};
    创建这个数组方便后面操作
    
  5. 声明约束
    GRBLinExpr expr1 = new GRBLinExpr();
    expr1.addTerms(new double[]{1,2,3},grbVars);
    建立线性表达式,前面是系数,后面是变量数组
    
    
    grbModel.addConstr(expr1,GRB.LESS_EQUAL,4,"expr1");
    (左侧表达式/左侧值,符号,右侧表达式/右侧值,名字)
  6. 目标函数
    GRBLinExpr target = new GRBLinExpr();
    target.addTerms(new double[]{1,1,2},grbVars);
    grbModel.setObjective(target,GRB.MAXIMIZE);

  7. 求解
    grbModel.optimize();

  8. 输出结果
     System.out.println("最优解为:" + grbModel.get(GRB.DoubleAttr.ObjVal));
     for (int i = 0; i < grbVars.length; i++) {
         System.out.println(grbVars[i].get(GRB.StringAttr.VarName) + "=" + grbVars[i].get(GRB.DoubleAttr.X));
    }

  9. 处理模型和环境
    grbModel.dispose();
    grbEnv.dispose();

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

super_Novaa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值