最优化算法是一个很大的家族,线性规划只是很简单的一种,本文旨在引导大家理解什么叫最优化,简单说就是 在 所有 x 里面找到 y 最大的方法
线性规划
优化模型试图在满足给定约束的决策变量的所有值的集合中,找到优化(最大化或最小化)目标函数的决策变量的值。
它的三个主要组成部分是:
- 目标函数:要优化的函数(最大化或最小化)。
- 决策变量:影响系统性能的可控变量。
- 约束:决策变量的一组约束(即线性不等式或等式)。非负性约束限制了决策变量取正值。 【约束都是线性的,故叫线性规划】
优化模型的解称为最优可行解。
示例
import numpy as np import matplotlib.pyplot as mpl from scipy import optimize ### 问题 # minmize: # -7x1+7x2-2x3-x4-6x5 # s.t.: # 3x1-x2+x3-2x4=-3 # 2x1+x2+x4+x5=4 # -x1+3x2-3x4+x6=12 # xi>=0 ### 线性规划代码 c = np.array([-7, 7, -2, -1, -6, 0]) a = np.array([[3, -1, 1, -2, 0, 0], [2, 1, 0, 1, 1, 0], [-1, 3, 0, -3, 0, 1]]) b = np.array([-3, 4, 12]) res = optimize.linprog(c, A_eq=a, b_eq=b, bounds=((0, None), (0, None), (0, None), (0, None), (0, None), (0, None))) print(res) # con: array([-6.18438634e-12, -1.54809499e-12, 1.85451654e-11]) # fun: -16.50000000001507 # message: 'Optimization terminated successfully.' # nit: 6 # slack: array([], dtype=float64) # status: 0 # success: True # x: array([4.31310891e-13, 3.96214625e-13, 2.56502186e-13, 1.50000000e+00, # 2.50000000e+00, 1.65000000e+01])
fun 是最终的 y,x 为对应的解
注意:约束必须是有限的可行解,不能是无穷解
更多用法
更完整的示例请看参考资料
如 xi>0 的约束如何表示
通过 [-1,0,0]*x1=-x1来表示 x1的非负约束
参考资料:
https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.linprog.html 官网
https://www.cnblogs.com/caiyishuai/p/11175373.html 【数学建模】线性规划各种问题的Python调包方法
https://baijiahao.baidu.com/s?id=1666564495926266704&wfr=spider&for=pc 使用Python进行线性规划示例
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)