基于Or-Tools的线性规划问题求解

news2024/11/15 11:42:20

画出可行域如图所示:
在这里插入图片描述

Python调用ortools求解

导入求解器

# 导入(或包含)or - tools线性求解器包装器,这是MIP求解器和线性求解器的接口,如下所示
from ortools.linear_solver import pywraplp

声明线性规划求解器

MPsolver is a wrapper for several different solvers, including Glop. The code below declares the GLOP solver.

solver = pywraplp.Solver.CreateSolver("GLOP")

创建决策变量

x = solver.NumVar(0, solver.infinity(), "x")
y = solver.NumVar(0, solver.infinity(), "y")
f"Number of variables ={solver.NumVariables()}"
'Number of variables =2'

约束条件

# Constraint 0: x + 2y <= 14.
solver.Add(x + 2 * y <= 14.0)
# Constraint 1: 3x - y >= 0.
solver.Add(3 * x - y >= 0.0)
# Constraint 2: x - y <= 2.
solver.Add(x - y <= 2.0)

print("Number of constraints =", solver.NumConstraints())

定义目标函数

# Objective function: 3x + 4y.
solver.Maximize(3 * x + 4 * y)

调用求解器

status = solver.Solve()
### 打印结果

if status == pywraplp.Solver.OPTIMAL:
    print("Solution:")
    print("Objective value =", solver.Objective().Value())
    print("x =", x.solution_value())
    print("y =", y.solution_value())
else:
    print("The problem does not have an optimal solution.")
Solution:
Objective value = 0.0
x = 0.0
y = 0.0

Java调用ortools求解

package org.example;

import com.google.ortools.Loader;
import com.google.ortools.linearsolver.MPConstraint;
import com.google.ortools.linearsolver.MPObjective;
import com.google.ortools.linearsolver.MPSolver;
import com.google.ortools.linearsolver.MPVariable;

/**
 * Simple linear programming example.
 */
public final class LinearProgrammingExample {
    public static void main(String[] args) {
        Loader.loadNativeLibraries();
        MPSolver solver = MPSolver.createSolver("GLOP");

        double infinity = java.lang.Double.POSITIVE_INFINITY;
        // x and y are continuous non-negative variables.
        MPVariable x = solver.makeNumVar(0.0, infinity, "x");
        MPVariable y = solver.makeNumVar(0.0, infinity, "y");
        System.out.println("Number of variables = " + solver.numVariables());

        // x + 2*y <= 14.
        MPConstraint c0 = solver.makeConstraint(-infinity, 14.0, "c0");
        c0.setCoefficient(x, 1);
        c0.setCoefficient(y, 2);

        // 3*x - y >= 0.
        MPConstraint c1 = solver.makeConstraint(0.0, infinity, "c1");
        c1.setCoefficient(x, 3);
        c1.setCoefficient(y, -1);

        // x - y <= 2.
        MPConstraint c2 = solver.makeConstraint(-infinity, 2.0, "c2");
        c2.setCoefficient(x, 1);
        c2.setCoefficient(y, -1);
        System.out.println("Number of constraints = " + solver.numConstraints());

        // Maximize 3 * x + 4 * y.
        MPObjective objective = solver.objective();
        objective.setCoefficient(x, 3);
        objective.setCoefficient(y, 4);
        objective.setMaximization();

        final MPSolver.ResultStatus resultStatus = solver.solve();

        if (resultStatus == MPSolver.ResultStatus.OPTIMAL) {
            System.out.println("Solution:");
            System.out.println("Objective value = " + objective.value());
            System.out.println("x = " + x.solutionValue());
            System.out.println("y = " + y.solutionValue());
        } else {
            System.err.println("The problem does not have an optimal solution!");
        }

        System.out.println("\nAdvanced usage:");
        System.out.println("Problem solved in " + solver.wallTime() + " milliseconds");//运行时间
        System.out.println("Problem solved in " + solver.iterations() + " iterations");//迭代次数
    }

    private LinearProgrammingExample() {
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1133565.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

js双向绑定

题目来源&#xff1a; 双向绑定_牛客题霸_牛客网 (nowcoder.com) JS37 双向绑定 描述 请补全JavaScript代码&#xff0c;要求如下&#xff1a; 1. 监听对象属性的变化 2. 当"person"对象属性发生变化时&#xff0c;页面中与该属性相关的数据同步更新 3. 将输入框中…

【C++面向对象】8. 继承

文章目录 【 1. 基本原理 】【 2. 派生类的访问权限 】【 3. 派生类继承得到的成员的权限 】【 4. 多继承 】 继承允许我们依据另一个类来定义一个类&#xff0c;这使得创建和维护一个应用程序变得更容易。这样做&#xff0c;也达到了 重用代码功能 和 提高执行时间 的效果。当…

【Qt之QSetting】介绍及使用

概述 QSettings类提供了一种持久的、与平台无关的应用程序设置存储功能。 用户通常期望一个应用能在不同会话中记住其设置&#xff08;窗口大小和位置&#xff0c;选项等&#xff09;。在Windows上&#xff0c;这些信息通常存储在系统注册表中&#xff1b;在macOS和iOS上&…

MySQL数据库 #4

文章目录 一、MySQL外键基本概念1. 表与表之间的关系1.一对多的表关系2.多对多3.一对一注意事项 2.多表查询1.子查询2.数据准备3.连表查询&#xff08;重点&#xff09; 二、多表查询练习题1.习题试题的SQL文件2.Navicata可视化软件1.连接数据库2 操作数据库3.导入备份4.查询数…

01. 板载硬件资源和开发环境

一、板载硬件资源 STM32F4VGT6-DISCOVERY硬件资源如下&#xff1a; (1). STM32F407VGT6微控制器有1M的FLASH存储器&#xff0c;192K的RAM&#xff0c;LQFP100封装 (2). 板上的ST-LINK_V2可以使用选择的方式把套件切换成一个独立的ST-LINK/V2来 使用&#xff08;可以使用SWD…

UML中类之间的六种主要关系

UML中类之间的六种主要关系: 继承&#xff08;泛化&#xff09;&#xff08;Inheritance、Generalization&#xff09;, 实现&#xff08;Realization&#xff09;&#xff0c;关联&#xff08;Association)&#xff0c;聚合&#xff08;Aggregation&#xff09;&#xff0c;组…

Java架构师内功嵌入式技术

目录 1 导学2 嵌入式微处理体系结构3 微处理器分类4 多核处理器5 嵌入式软件6 嵌入式系统6.1 系统组成7 嵌入式实时操作系统8 嵌入式软件设计9 软件开发工具想学习架构师构建流程请跳转:Java架构师系统架构设计 1 导学 嵌入式技术对软件架构的作用主要体现在以下几个方面: …

搜索二叉树实现(非递归版本)

目录 一&#xff0c;搜索二叉树是个啥&#xff1f; 二&#xff0c;搜索二叉树的实现 1.前期工作 2.方法实现 1.插入 2&#xff0c;查找 3.删除 三&#xff0c;实现二叉搜索树的全部代码 一&#xff0c;搜索二叉树是个啥&#xff1f; 话不多所&#xff0c;先给各位来一个…

查看linux下dns信息并修改

cat /etc/resolv.conf 查看dns 常用dns nameserver 114.114.114.114 nameserver 100.125.0.250 nameserver 8.8.8.8 nameserver 8.8.4.4 nameserver 192.168.122.1 nameserver 100.125.1.250 nameserver 100.125.1.251 nameserver 223.5.5.5 可以用vi 修改&#xff0c;修改后 …

【云原生】portainer管理多个独立docker服务器

目录 一、portainer简介 二、安装Portainer 1.1 内网环境下&#xff1a; 1.1.1 方式1&#xff1a;命令行运行 1.1.2 方式2&#xff1a;通过compose-file来启动 2.1 配置本地主机&#xff08;node-1&#xff09; 3.1 配置其他主机&#xff08;被node-1管理的节点服务器&…

spring常见问题汇总

1. 什么是spring? Spring是一个轻量级Java开发框架&#xff0c;最早有Rod Johnson创建&#xff0c;目的是为了解决企业级应用开发的业务 逻辑层和其他各层的耦合问题。它是一个分层的JavaSE/JavaEE full-stack&#xff08;一站式&#xff09;轻量级开源框架&#xff0c; 为开…

【LeetCode刷题日志】189.轮转数组

目录 1.题目描述 2.解题思路代码实现 方法一&#xff1a;使用额外的数组 解题思路&#xff1a; 代码实现&#xff1a; 方法二&#xff1a;环状替换 解题思路&#xff1a; 代码实现&#xff1a; 方法三&#xff1a;数组翻转 解题思路&#xff1a; 代码实现&#xff1a…

跨平台开发技术

目录 1.Qt1.简介2.优势3.劣势 2.NET CoreVue1.简介2.优点 3.Flutter1.简介2.优点3.缺点 4.Maui1.简介2.优点3.缺点 5.Avalonia1.简介2.优点3.缺点 6. Cordova1.简介2.优点3.缺点 7.Electron1.简介2.优点3.缺点 个人搜集资料并总结了一些跨平台开发技术&#xff0c;如有不足欢迎…

实战!RPA厂商选型分享

企业发展&#xff0c;必先科技先行&#xff0c;通过科技来提升内部运营、业务效率&#xff0c;从而达到降本、提质、增效的目标。但无论在技术选型亦或者厂商选择&#xff0c;都需要漫长的对比和调研&#xff0c;方能选择适合自身企业发展解决问题的技术和长期合作的技术伙伴。…

MathType7 公式编辑器嵌入Word\WPS,MathType 公式编辑常用小技巧

目录 1 MathType-7 下载 2 安装 4 嵌入word 5 嵌入wps 6 Mathtype 常用小技巧 6.1 四种插入公式的区别 &#xff1a; 6.2 MathType 常用快捷键 6.3 MathType转换公式 6.4 MathType公式编号 6.5 改变公式编号 6.6 mathtype 公式格式转换为latex格式 背景&#xff1a; w…

如何保卫您的网站:解决DDoS攻击与CC攻击

在当今数字化时代&#xff0c;网站安全是至关重要的。网络攻击如DDoS&#xff08;分布式拒绝服务&#xff09;和CC&#xff08;恶意请求洪水&#xff09;攻击可能会导致网站不稳定甚至不可用。本文将详细分析DDoS攻击和CC攻击的差异&#xff0c;以及如何使用CDN&#xff08;内容…

【C++】priority_queue仿函数

今天我们来学习C中另一个容器适配器&#xff1a;优先级队列——priority_queue&#xff1b;和C一个重要组件仿函数&#xff1a; 目录 一、priority_queue 1.1 priority_queue是什么 1.2 priority_queue的接口 1.2.1 priority_queue使用举例 二、仿函数 三、关于priority…

Linux C语言开发-D7D8运算符

算术运算符&#xff1a;-*/%&#xff0c;浮点数可以参与除法运算&#xff0c;但不能参与取余运算 a%b&#xff1a;表示取模或取余 关系运算符&#xff1a;<,>,>,<,,! 逻辑运算符:!,&&,|| &&,||逻辑运算符是从左到右&#xff0c;依次运算&#…

freeRTOS内部机制——栈的作用

上图中*pa 和*pb分别为R0&#xff0c;R1&#xff0c;调用C函数时&#xff0c;第一个参数保存在R0中第二个参数保存在R1中。这是约定。 指令保存在哪里&#xff1f; 指令保存在flash上面 LR等于什么? LR是返回地址&#xff0c;函数执行完了过后LR等于下一条指令的地址 运行…

JDK8新特性:Stream流

目录 1.获取Stream流 2.Stream流常见的中间方法 3.Stream流常见的终结方法 1、 Stream 是什么&#xff1f;有什么作用&#xff1f;结合了什么技术&#xff1f; ●也叫 Stream 流&#xff0c;是Jdk8开始新增的一套 API ( java . util . stream .*)&#xff0c;可以用于操作集…