惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 叶小钗
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Microsoft Security Blog
Microsoft Security Blog
罗磊的独立博客
大猫的无限游戏
大猫的无限游戏
美团技术团队
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
aimingoo的专栏
aimingoo的专栏
腾讯CDC
WordPress大学
WordPress大学
Apple Machine Learning Research
Apple Machine Learning Research
F
Fortinet All Blogs
G
Google Developers Blog
MongoDB | Blog
MongoDB | Blog
Microsoft Azure Blog
Microsoft Azure Blog
小众软件
小众软件
Engineering at Meta
Engineering at Meta
博客园_首页
B
Blog RSS Feed
D
Docker
M
MIT News - Artificial intelligence
爱范儿
爱范儿
I
InfoQ

又见苍岚

COLMAP PatchMatch Stereo 算法详解 事件驱动的状态机框架:从理论到工程实践 Git 在国内网络环境下无法 Push 的排查与修复 —— 配置 Clash 代理 分段五次多项式插值原理详解 路径插值方法深度对比研究 Claude Code 使用指南 OpenClaw 记忆管理与技能创建指南 CBS(Conflict-Based Search)算法详解 A* 算法及其变种详解 OpenClaw 配置多 Agents Windows Powershell 无法加载文件,因为在此系统上禁止运行脚本问题的解决方案 MaxClaw 安装流程 大模型 AI 名词介绍 AList 网盘聚合工具简介 Protobuf 简介与测试 Claude Code 简介以及 GLM 4.7 模型接入 Github 歌词下载工具 163MusicLyrics Python __getattr__ 懒加载 Python TypedDict 机器人仿真平台 Gazebo 安装记录 机器人仿真平台 Gazebo 简介 多机器人路径规划问题(Multi-Agent Path Finding, MAPF)简介 Python exifread 读取修改过的 jpeg 信息错误问题修复 3D 坐标系变换的理解 3D 旋转矩阵基本概念 MongoDB Compass 介绍 Python 环境管理工具 uv Flutter 开发指南 Snipaste 安装下载与黑屏问题解决方案 全局路径规划算法记录
Python 求解线性规划
Yiwei Zhang · 2025-06-16 · via 又见苍岚

本文记录 Python 实现现行规划的实现方案。

SciPy

提供linprog函数,支持单纯形法和内点法,适合标准线性规划问题。

示例:最小化目标函数 $𝑍=2𝑥_1+3𝑥_2$ 并满足约束 $𝑥_1+𝑥_2≤4$ 和 $2𝑥_1+𝑥_2≤5$:

1
2
3
4
5
6
7
8
from scipy.optimize import linprog
c = [-2, -3] # 目标函数系数(取负转为最小化)
A = [[1, 1], [2, 1]] # 不等式约束矩阵
b = [4, 5] # 约束右侧常数
bounds = [(0, None), (0, None)] # 变量非负
result = linprog(c, A_ub=A, b_ub=b, bounds=bounds, method='highs')
print(result.x) # 输出最优解
print(- result.fun) # 输出目标函数的最大值

输出:

1
2
[0. 4.]
12.0

PuLP

可读性高,适合更加复杂的现行规划。

示例:求解同样的问题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import pulp
# 创建问题实例,这里我们使用最大化问题
prob = pulp.LpProblem("Minimize_Problem", pulp.LpMaximize)
# 定义决策变量
x1 = pulp.LpVariable("x1", lowBound=0)
x2 = pulp.LpVariable("x2", lowBound=0)
# 定义目标函数
prob += 2*x1 + 3*x2, "Z"
# 添加约束条件
prob += x1 + x2 <= 4, "C1"
prob += 2*x1 + x2 <= 5, "C2"
# 求解问题
prob.solve()
# 输出结果
print("Status:", pulp.LpStatus[prob.status])
print("Optimal value (Z) = ", pulp.value(prob.objective))
print("x1 = ", pulp.value(x1))
print("x2 = ", pulp.value(x2))

输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Welcome to the CBC MILP Solver 
Version: 2.10.3
Build Date: Dec 15 2019

command line - /solverdir/cbc/linux/i64/cbc /tmp/424b9f916f264e4c9f6eb369b6031c8b-pulp.mps -max -timeMode elapsed -branch -printingOptions all -solution /tmp/424b9f916f264e4c9f6eb369b6031c8b-pulp.sol (default strategy 1)
At line 2 NAME MODEL
At line 3 ROWS
At line 7 COLUMNS
At line 14 RHS
At line 17 BOUNDS
At line 18 ENDATA
Problem MODEL has 2 rows, 2 columns and 4 elements
Coin0008I MODEL read with 0 errors
Option for timeMode changed from cpu to elapsed
Presolve 2 (0) rows, 2 (0) columns and 4 (0) elements
0 Obj -0 Dual inf 4.9999998 (2)
0 Obj -0 Dual inf 4.9999998 (2)
1 Obj 12
Optimal - objective value 12
Optimal objective 12 - 1 iterations time 0.002
Option for printingOptions changed from normal to all
Total time (CPU seconds): 0.00 (Wallclock seconds): 0.00

Status: Optimal
Optimal value (Z) = 12.0
x1 = 0.0
x2 = 4.0

文章链接:
https://www.zywvvd.com/notes/study/math/python-lp/python-lp/