当前位置: 首页 > article >正文

线性规划工具推荐篇 开源+商用 按需取用

一、开源免费工具

1. GLPK (GNU Linear Programming Kit)
  • 特点

    • 支持线性规划(LP)、混合整数规划(MIP)
    • 使用MathProg语言建模,可通过glpsol命令行求解
    • 适合中小规模问题,性能低于商业求解器
  • 适用场景:学术研究、小规模优化问题

  • 安装:Linux (sudo yum install glpk),Windows需手动安装

  • 示例

    var x1 >= 0;
    var x2 >= 0;
    maximize obj: 0.6 * x1 + 0.5 * x2;
    s.t. c1: x1 + 2 * x2 <= 1;
    s.t. c2: 3 * x1 + x2 <= 2;
    solve;
    display x1, x2;
    end;
    
2. PuLP (Python库)
  • 特点

    • 基于Python,支持多种求解器(包括GLPK、CBC)
    • 语法简洁,适合熟悉Python的用户
  • 适用场景:数据科学、自动化优化任务

  • 示例

    from pulp import *
    prob = LpProblem("Bike Production", LpMaximize)
    x = LpVariable("x", 0, 3)  # Mountain bikes
    y = LpVariable("y", 0, 4)  # Racers
    prob += 15*x + 10*y, "Profit"
    prob += x + y <= 5, "Metal Finishing"
    prob.solve()
    
3. Google OR-Tools
  • 特点

    • 支持线性规划、整数规划、约束编程
    • 提供Python、C++、Java等接口
    • 适合大规模问题
  • 适用场景:物流优化、排产调度

  • 安装pip install ortools

  • 示例

    from ortools.linear_solver import pywraplp
    solver = pywraplp.Solver.CreateSolver('GLOP')
    x = solver.NumVar(0, solver.infinity(), 'x')
    y = solver.NumVar(0, solver.infinity(), 'y')
    solver.Add(x + 2*y <= 14)
    solver.Maximize(3*x + 4*y)
    solver.Solve()
    
4. PyMathProg
  • 特点

    • Python接口,底层调用GLPK
    • 支持高级建模(如参数化、动态约束)
  • 适用场景:复杂优化模型

  • 示例

    python

    复制

    from pymprog import *
    begin('bike production')
    x, y = var('x, y') 
    maximize(15*x + 10*y, 'profit')
    x <= 3  # Mountain bike limit
    y <= 4  # Racer limit
    x + y <= 5  # Metal finishing
    solve()
    

二、商业工具(部分提供免费版本)

1. Gurobi
  • 特点:高性能,支持大规模LP/MIP
  • 免费版:学术免费,商业需付费
  • 适用场景:工业级优化
2. CPLEX
  • 特点:IBM开发,支持复杂优化问题
  • 免费版:学术免费,商业需授权
  • 适用场景:金融、供应链优化
3. LINGO
  • 特点:支持非线性规划、整数规划
  • 免费版:功能受限
  • 适用场景:工程优化

三、替代方案对比

工具类型适用规模编程需求优势
GLPK开源中小规模中(需建模)免费、轻量
PuLP开源中小规模高(Python)灵活,支持多种求解器
Google OR-Tools开源大规模中(Python)高性能,支持多种优化问题
Gurobi商业超大规模速度最快,企业级支持

四、如何选择?

  • 小规模/个人使用:GLPK 或 PuLP(免费)
  • 中等规模/自动化:Google OR-Tools(免费)
  • 企业级/高性能需求:Gurobi 或 CPLEX(商业)

如需更详细的安装及使用指南,可参考对应工具的官方文档或社区教程。

相关文章:

线性规划工具推荐篇 开源+商用 按需取用

一、开源免费工具 1. GLPK (GNU Linear Programming Kit) 特点&#xff1a; 支持线性规划&#xff08;LP&#xff09;、混合整数规划&#xff08;MIP&#xff09;使用MathProg语言建模&#xff0c;可通过glpsol命令行求解适合中小规模问题&#xff0c;性能低于商业求解器 适用…...

linux -- php 扩展之xlswriter

xlswriter - PHP 最强性能 Excel 扩展 linux 安装 完整编译安装步骤 ## 下载wget https://pecl.php.net/get/xlswriter tar -zxvf xlswriter cd xlswriterphpize # 执行配置 ./configure # 编译 make make install ./configure 如果报错&#xff0c;就指定配置路径 …...

Dockerfile文件构建镜像Anaconda+Python教程

文章目录 前言Dockerfile 核心模块解析**一、Dockerfile基础镜像选择二、系统基础配置1、时区设置2、镜像源替换 三、系统依赖安装四、复制本地文件五、指定路径六、Anaconda环境配置1、anaconda环境安装2、配置虚拟环境3、创建conda虚拟环境4、启动和安装环境 七、完整dockerf…...

本地部署大模型-web界面(ollama + open-webui)

一、安装ollama 二、安装部署open-webui 1、项目运行环境 &#xff08;1&#xff09;配置python环境—官方下载链接 可通过命令行直接更改python镜像源为阿里云镜像源&#xff1a; >pip config set global.index-url http://mirrors.aliyun.com/pypi/simple/也可手动修…...

Uniapp 实现微信小程序滑动面板功能详解

文章目录 前言一、功能概述二、实现思路三、代码实现总结 前言 Uniapp 实现微信小程序滑动面板功能详解 一、功能概述 滑动面板是移动端常见的交互组件&#xff0c;通常用于在页面底部展开内容面板。本文将介绍如何使用 Uniapp 开发一个支持手势滑动的底部面板组件&#xff0…...

redis一些常用的命令(1)

启动redis redis-server /home/XXX/myredis/redis.conf 默认不是后台运行的&#xff0c;修改配置文件&#xff0c;daemonized on /var/run/redis.pid when daemonized port 6380 默认端口的6379 bind&#xff1a;127.0.0.1 默认是本地 连接不同的端口 redis-cli -p 6380 制…...

Java虚拟机JVM知识点(已完结)

JVM内存模型 介绍下内存模型 根据JDK8的规范&#xff0c;我们的JVM内存模型可以拆分为&#xff1a;程序计数器、Java虚拟机栈、堆、元空间、本地方法栈&#xff0c;还有一部分叫直接内存&#xff0c;属于操作系统的本地内存&#xff0c;也是可以直接操作的。 详细解释一下 程…...

【C++进阶四】vector模拟实现

目录 1.构造函数 (1)无参构造 (2)带参构造函数 (3)用迭代器构造初始化函数 (4)拷贝构造函数 2.operator= 3.operator[] 4.size() 5.capacity() 6.push_back 7.reserve 8.迭代器(vector的原生指针) 9.resize 10.pop_back 11.insert 12.erase 13.memcpy…...

VUE3+Mapbox-GL 实现鼠标绘制矩形功能的详细代码和讲解

以下是如何使用 Mapbox GL JS 实现鼠标绘制矩形功能的详细代码和讲解。Mapbox GL JS 是一个强大的 JavaScript 库&#xff0c;可以用来创建交互式地图。下面将通过监听鼠标事件并动态更新地图图层来实现这一功能。 实现步骤 初始化地图 在 HTML 文件中引入 Mapbox GL JS 库&…...

《筋斗云的K8s容器化迁移》

点击下面图片带您领略全新的嵌入式学习路线 &#x1f525;爆款热榜 88万阅读 1.6万收藏 文章目录 **第一章&#xff1a;斗战胜佛的延迟焦虑****第二章&#xff1a;微服务化的紧箍咒****第三章&#xff1a;混沌中的流量劫持****第四章&#xff1a;量子筋斗的终极形态****终章&…...

面试遇到的几个问题小记20250401

一、echarts设置数据的几种方式 在 ECharts 里&#xff0c;设置数据存在多种方式&#xff0c;下面为你详细介绍&#xff1a; 在初始化配置项时设置数据 这是最为常见的方式&#xff0c;也就是在创建 ECharts 实例的时候&#xff0c;于配置项 option 里直接设置数据。 // 基于…...

java swing 密码框如何在获取到焦点时,输入法自动切换为英文状态

一、java swing 密码框如何在获取到焦点时&#xff0c;输入法自动切换为英文状态 在 Java Swing 中&#xff0c;JPasswordField 用于输入密码&#xff0c;默认情况下&#xff0c;输入法状态不受控。要在获取焦点时自动切换为英文状态&#xff0c;可以通过以下步骤实现&#xf…...

图像处理中的Transformer Block实现与解析

图像处理中的Transformer Block实现与解析 随着深度学习技术的不断进步&#xff0c;Transformer结构在自然语言处理领域取得了显著的成功。近年来&#xff0c;这种注意力机制也被引入到计算机视觉任务中&#xff0c;展示了其强大的表现力和效果提升能力。本文将从代码实现的角…...

基于SpringBoot的“考研学习分享平台”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“考研学习分享平台”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统总体功能结构图 局部E-R图 系统首页界面 …...

Web3.0隐私计算与云手机的结合

Web3.0隐私计算与云手机的结合 Web3.0隐私计算与云手机的结合&#xff0c;标志着从“数据垄断”向“数据自主”的范式转变。通过技术互补&#xff0c;两者能够构建更安全、高效且用户主导的数字生态。尽管面临技术整合和成本挑战&#xff0c;但随着区块链、AI和分布式存储的成…...

视觉与激光点云 融合的 三维重建算法

以下是一些结合激光点云&#xff08;LiDAR&#xff09;与其他数据&#xff08;如图像、RGB-D等&#xff09;的三维重建算法&#xff0c;这类方法通过融合多模态数据提升重建的精度和完整性&#xff1a; ‌1. 传统几何融合方法‌ ‌(1) LiDAR 相机&#xff08;RGB/LiDAR Fusion…...

Linux上位机开发实践(超越MPP去开发产品)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 对于芯片厂商来说&#xff0c;肯定希望客户的应用和自己的芯片绑定地越紧密越好。最好就是&#xff0c;他们自己成为客户的独家供应商。但是对于嵌…...

雪花算法生成的主键存在哪些问题,为什么不能使用自增ID或者UUID做MySQL的主键

MySQL 分布式架构中的主键选择&#xff1a;自增ID、UUID与雪花算法 为什么MySQL分布式架构中不能使用自增主键&#xff1f; 在分布式架构中&#xff0c;自增主键存在以下问题&#xff1a; 主键冲突风险&#xff1a;多个数据库实例同时生成自增主键会导致ID重复分片不均匀&am…...

SpringBean模块(二)bean初始化(2)和容器初始化顺序的比较--引入ApplicationContextInitializer

前面介绍了获取容器可以让spring bean实现ApplicationContextAware&#xff0c;实际也是初始化执行了setApplicationContext接口&#xff0c; 初始化接口还可以借助一些注解或者spring bean的初始化方法&#xff0c;那么他们的执行顺序是什么样的呢&#xff1f; 一、验证&…...

【分享】内外网文件摆渡系统:让数据传输更安全更可靠

【分享】Ftrans内外网文件摆渡系统&#xff1a;让数据传输更安全更可靠&#xff01; 随着大数据时代的到来&#xff0c;数据的重要性日渐得到重视&#xff0c;数据作为数字经济时代下的基础性资源和战略性资源&#xff0c;是决定国家经济发展水平和竞争力的核心驱动力。以行业…...

2025年江苏省职业院校技能大赛 (高职组)大数据应用开发赛项任务书 (样题)

2025年江苏省职业院校技能大赛 &#xff08;高职组&#xff09;大数据应用开发赛项任务书 &#xff08;样题&#xff09; 背景描述&#xff1a;任务A&#xff1a;离线数据处理&#xff08;35分&#xff09;子任务一&#xff1a;数据抽取子任务三&#xff1a;指标计算 任务B&…...

前端学习记录之HTML

1. 网页 1.1 什么是网页 网站是指在因特网上根据一定的规则&#xff0c;使用HTML等制作的用于展示特定内容相关的网页集合。 网页是网站中的一“页”&#xff0c;通常是HTML格式的文件&#xff0c;它要通过浏览器来阅读 网页是构成网站的基本元素。它通常由图片&#xff0c;…...

解释一下Unity碰撞的触发条件

Unity中碰撞的触发条件主要与物体的碰撞体&#xff08;Collider&#xff09;和刚体&#xff08;Rigidbody&#xff09;组件有关。具体来说&#xff0c;Unity的物理引擎会根据物体的配置来检测碰撞&#xff08;Collision&#xff09;和触发器&#xff08;Trigger&#xff09;事件…...

手机显示5GA图标的条件

最近有星友问在什么情况下才能显示5G-A&#xff1f;虽然这个我也不知道&#xff0c;但是我有几个运营商的5G终端白皮书&#xff0c;从上面就可以找到答案。 如上是几个运营商显示5G-A的条件&#xff0c;基本上考虑的都是3CC的情况&#xff0c;联通还有考虑200M CA 2CC的场景&am…...

Spring Boot 实现文件秒传功能

前言 在开发Web应用时&#xff0c;文件上传是一个常见需求。然而&#xff0c;当用户需要上传大文件或相同文件多次时&#xff0c;会造成带宽浪费和服务器存储冗余。此时可以使用文件秒传技术通过识别重复文件&#xff0c;实现瞬间完成上传的效果&#xff0c;大大提升了用户体验…...

使用AOP技术实现Java通用接口验签工具

一、背景 在给第三方提供接口时,我们需要对接口进行验签。具体来说,当外部系统调用我们的接口时,请求中需要携带一个签名,我们接收到请求后,会解析数据并校验签名是否正确,以确保请求的合法性和安全性。 为了在不同项目中方便地使用这一功能,我们将签名校验规则封装成一…...

Foldseek快速蛋白质结构比对

1. 下载和安装 Foldseek 如果只是单个蛋白质结构的序列比对&#xff0c;我们只需要用Foldseek 的网站服务 https://search.foldseek.com/search 上传我们的蛋白质结构并选择想要进行比对的数据库即可&#xff0c;这里不做重点讲解。做生物信息学研究&#xff0c;我们难免需要批…...

JAVA设计模式之适配器模式《太白金星有点烦》

太白金星握着月光凝成的鼠标&#xff0c;第108次检查南天门服务器的运行日志。这个刚从天枢院调来的三等仙官&#xff0c;此刻正盯着瑶池主机房里的青铜鼎发愁——鼎身上"天地同寿"的云纹间&#xff0c;漂浮着三界香火系统每分钟吞吐的十万条功德数据。看着居高不下的…...

w2ui 水平滚动移动 虚拟列 数据丢失

https://w2ui.com/web/docs/1.5/w2grid.disableCVS https://github.com/vitmalina/w2ui/issues/1398 解决方案来源 问题现象: 窗口缩小 导致多列 出现水平滚动,滚动时触发本地样式重绘,导致record undefined,从而引发多列报错 解决方案: 使用 disableCVS : true 一次加载到d…...

aarch64-none-elf-gcc与aarch64-linux-gnu-gcc

1. 场景描述 在Ubuntu 24.04.1 LTS x86_64架构下交叉编译能跑在aarch64架构下裸机程序&#xff0c;遇到缺aarch64-none-elf-gcc的情况&#xff0c;做此记录。 2. aarch64-none-elf-gcc与aarch64-linux-gnu-gcc 运行环境 aarch64-none-elf-gcc 生成的代码是 裸机程序&#xf…...