【求解器】调用Gurobi求解LP问题(Java代码示例)

简介: 【求解器】调用Gurobi求解LP问题(Java代码示例)

@[toc]


问题

在这里插入图片描述

代码

import gurobi.*;
/**
 * @Author:WSKH
 * @ClassName:TestGurobi
 * @ClassType:
 * @Description:
 * @Date:2022/6/5/11:38
 * @Email:1187560563@qq.com
 * @Blog:https://blog.csdn.net/weixin_51545953?type=blog
 */
public class TestGurobi{
    public static void main(String[] args) {
        try {
            // 创建环境
            GRBEnv grbEnv = new GRBEnv("grbEnv");
            // 创建模型
            GRBModel grbModel = new GRBModel(grbEnv);
            // 声明CONTINUOUS连续变量
            GRBVar x1 = grbModel.addVar(-10, 50, -10, GRB.CONTINUOUS, "x1");
            GRBVar x2 = grbModel.addVar(0, Double.MAX_VALUE, 0, GRB.CONTINUOUS, "x2");
            GRBVar x3 = grbModel.addVar(5, 5, 5, GRB.CONTINUOUS, "x3");
            // 声明变量数组
            GRBVar[] grbVars = {x1, x2, x3};
            // 声明约束
            // 约束1:x1+2*x2+x3<=100
            GRBLinExpr expr1 = new GRBLinExpr();
            expr1.addTerms(new double[]{1,2,1},grbVars);
            grbModel.addConstr(expr1,GRB.LESS_EQUAL,100,"expr1");
            // 约束2:x1+x2-2x3>=10
            GRBLinExpr expr2 = new GRBLinExpr();
            expr2.addTerms(new double[]{1,1,-2},grbVars);
            grbModel.addConstr(expr2,GRB.GREATER_EQUAL,10,"expr2");
            // 目标函数:x1+2*x2+3*x3
            GRBLinExpr target = new GRBLinExpr();
            target.addTerms(new double[]{1,2,3},grbVars);
            grbModel.setObjective(target,GRB.MAXIMIZE);
            // 开始求解
            grbModel.optimize();
            // 输出求解结果
            System.out.println("最优解为:"+grbModel.get(GRB.DoubleAttr.ObjVal));
            System.out.println("x1 = "+x1.get(GRB.DoubleAttr.X));
            System.out.println("x2 = "+x2.get(GRB.DoubleAttr.X));
            System.out.println("x3 = "+x3.get(GRB.DoubleAttr.X));
            // 处理模型和环境
            grbModel.dispose();
            grbEnv.dispose();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

求解结果

Set parameter Username
Academic license - for non-commercial use only - expires 2022-08-03
Gurobi Optimizer version 9.5.1 build v9.5.1rc2 (win64)
Thread count: 6 physical cores, 12 logical processors, using up to 12 threads
Optimize a model with 2 rows, 3 columns and 6 nonzeros
Model fingerprint: 0x5c13f6c7
Coefficient statistics:
  Matrix range     [1e+00, 2e+00]
  Objective range  [1e+00, 3e+00]
  Bounds range     [5e+00, 5e+01]
  RHS range        [1e+01, 1e+02]
Presolve removed 2 rows and 3 columns
Presolve time: 0.00s
Presolve: All rows and columns removed
Iteration    Objective       Primal Inf.    Dual Inf.      Time
       0    1.1000000e+02   0.000000e+00   0.000000e+00      0s

Solved in 0 iterations and 0.00 seconds (0.00 work units)
Optimal objective  1.100000000e+02
最优解为:110.0
x1 = 50.0
x2 = 22.5
x3 = 5.0
目录
相关文章
|
7天前
|
搜索推荐 Java 索引
|
7天前
|
搜索推荐 Java 索引
|
1天前
|
数据可视化 Java
使用ChatGPT实现可视化操作扫雷小游戏 【java代码实现】
这篇文章介绍了使用Java语言和Swing框架实现的扫雷小游戏的详细代码和实现过程。
使用ChatGPT实现可视化操作扫雷小游戏 【java代码实现】
|
1天前
|
前端开发 IDE Java
"揭秘前端转Java的秘径:SpringBoot Web极速入门,掌握分层解耦艺术,让你的后端代码飞起来,你敢来挑战吗?"
【8月更文挑战第19天】面向前端开发者介绍Spring Boot后端开发,通过简化Spring应用搭建,快速实现Web应用。本文以创建“Hello World”应用为例,展示项目基本结构与运行方式。进而深入探讨三层架构(Controller、Service、DAO)下的分层解耦概念,通过员工信息管理示例,演示各层如何协作及依赖注入的使用,以此提升代码灵活性与可维护性。
|
3天前
|
Java 开发者
Java中的Lambda表达式:简化你的代码之旅
【8月更文挑战第17天】 在编程的海洋中,简洁是航行的风帆。Lambda表达式,作为Java 8的一大亮点,为开发者提供了一种更为紧凑、易读的编码方式。本篇文章将带你领略Lambda表达式的魅力,从基础概念到实际应用,让你的代码像诗句一样流畅。
13 4
|
1天前
|
设计模式 算法 安全
Java编程中的设计模式:提升代码的可维护性和扩展性
【8月更文挑战第19天】在软件开发的世界里,设计模式是解决常见问题的一种优雅方式。本文将深入探讨Java编程语言中常用的几种设计模式,并解释如何通过这些模式来提高代码的可维护性和扩展性。文章不涉及具体的代码实现,而是侧重于理论和实践相结合的方式,为读者提供一种思考和改善现有项目的新视角。
|
1天前
|
设计模式 Java
常用设计模式介绍~~~ Java实现 【概念+案例+代码】
文章提供了一份常用设计模式的全面介绍,包括创建型模式、结构型模式和行为型模式。每种设计模式都有详细的概念讲解、案例说明、代码实例以及运行截图。作者通过这些模式的介绍,旨在帮助读者更好地理解源码、编写更优雅的代码,并进行系统重构。同时,文章还提供了GitHub上的源码地址,方便读者直接访问和学习。
常用设计模式介绍~~~ Java实现 【概念+案例+代码】
|
1天前
|
Java 开发者
在Java编程的广阔天地中,if-else与switch语句犹如两位老练的舵手,引领着代码的流向,决定着程序的走向。
在Java编程中,if-else与switch语句是条件判断的两大利器。本文通过丰富的示例,深入浅出地解析两者的特点与应用场景。if-else适用于逻辑复杂的判断,而switch则在处理固定选项或多分支选择时更为高效。从逻辑复杂度、可读性到性能考量,我们将帮助你掌握何时选用哪种语句,让你在编程时更加得心应手。无论面对何种挑战,都能找到最适合的解决方案。
6 1
|
7天前
|
搜索推荐 Java
|
7天前
|
搜索推荐 Java