【求解器】调用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
目录
相关文章
|
2月前
|
Java 数据安全/隐私保护
快手小红书抖音留痕工具,自动留痕插件工具,java代码开源
这个框架包含三个核心模块:主操作类处理点赞评论、配置管理类和代理管理类。使用时需要配合
|
1月前
|
算法 IDE Java
Java 项目实战之实际代码实现与测试调试全过程详解
本文详细讲解了Java项目的实战开发流程,涵盖项目创建、代码实现(如计算器与汉诺塔问题)、单元测试(使用JUnit)及调试技巧(如断点调试与异常排查),帮助开发者掌握从编码到测试调试的完整技能,提升Java开发实战能力。
223 0
|
2月前
|
Java 机器人 API
tiktok群控脚本,养号关注私信点赞脚本插件,java代码分享
这个代码模拟了一个社交机器人的基本行为模式,包括登录、关注、点赞、私信等操作。请注意
|
2月前
|
Java 编译器 数据库连接
Java异常处理:写出更健壮的代码
Java异常处理:写出更健壮的代码
149 0
|
4月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
5月前
|
前端开发 Java
java实现队列数据结构代码详解
本文详细解析了Java中队列数据结构的实现,包括队列的基本概念、应用场景及代码实现。队列是一种遵循“先进先出”原则的线性结构,支持在队尾插入和队头删除操作。文章介绍了顺序队列与链式队列,并重点分析了循环队列的实现方式以解决溢出问题。通过具体代码示例(如`enqueue`入队和`dequeue`出队),展示了队列的操作逻辑,帮助读者深入理解其工作机制。
150 1
|
2月前
|
安全 Java 测试技术
Java 项目实战中现代技术栈下代码实现与测试调试的完整流程
本文介绍基于Java 17和Spring技术栈的现代化项目开发实践。项目采用Gradle构建工具,实现模块化DDD分层架构,结合Spring WebFlux开发响应式API,并应用Record、Sealed Class等新特性。测试策略涵盖JUnit单元测试和Testcontainers集成测试,通过JFR和OpenTelemetry实现性能监控。部署阶段采用Docker容器化和Kubernetes编排,同时展示异步处理和反应式编程的性能优化。整套方案体现了现代Java开发的最佳实践,包括代码实现、测试调试
120 0
|
3月前
|
人工智能 前端开发 Java
Java 面试资料中相关代码使用方法与组件封装方法解析
这是一份详尽的Java面试资料代码指南,涵盖使用方法与组件封装技巧。内容包括环境准备(JDK 8+、Maven/Gradle)、核心类示例(问题管理、学习进度跟踪)、Web应用部署(Spring Boot、前端框架)、单元测试及API封装。通过问题库管理、数据访问组件、学习进度服务和REST接口等模块化设计,帮助开发者高效组织与复用功能,同时支持扩展如用户认证、AI推荐等功能。适用于Java核心技术学习与面试备考,提升编程与设计能力。资源链接:[点此下载](https://pan.quark.cn/s/14fcf913bae6)。
95 6
Java 面试资料中相关代码使用方法与组件封装方法解析
|
7月前
|
JavaScript NoSQL Java
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
364 96
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡

热门文章

最新文章