线性规划(Python)

引入

有这样一些常见的运筹优化问题:_____共有多少,如何去安排分配,使得_____最优

比如,要生产两种机床,利润分别为,机器有不同的维护费用、工作时间,如何安排生产能让总利润最大化?

线性规划(LP)

是研究线性约束条件下线性目标函数的极值问题的数学理论和方法。

线性规划模型特点

  • 要解决的问题是优化类的
  • 目标函数和约束函数都是决策变量的线性函数

线性规划模型的三要素

  • 决策变量:要确定的未知量,由决策者控制
  • 目标函数:决策变量的函数
  • 约束条件:决策变量的取值所受到的约束和限制条件

线性规划模型建立步骤

  • 找到决策变量
  • 确定目标函数
  • 确定约束条件

线性规划模型的表现形式

一般形式:

矩阵形式:

其中

线性规划模型求解

  • 单纯形法------手算
  • matlab、Python函数

Python 代码

python 复制代码
import numpy as np
from scipy.optimize import linprog
# linprog 则是一个线性规划优化函数。
c = np.array([2, 3, 1])
# 表示线性规划问题中目标函数的系数。在这个例子中,目标函数是 (2x_1 + 3x_2 + x_3)。
A_up = np.array([[-1, -4, -2], [-3, -2, 0]])
# 矩阵 A_up 表示不等式约束的系数。
# 每一行对应一个约束条件。
# 第一行表示 (-x_1 - 4x_2 - 2x_3 \leq -8),
# 第二行表示 (-3x_1 - 2x_2 \leq -6)。
b_up = np.array([-8, -6])
# b_up 表示不等式约束的右侧。
# 第一个元素(-8)对应第一个不等式的右侧,
# 第二个元素(-6)对应第二个不等式的右侧。
r = linprog(c, A_ub=A_up, b_ub=b_up, bounds=((0, None), (0, None), (0, None)))
# 使用 linprog 函数,传入目标函数系数 (c)、不等式约束矩阵 (A_up)、不等式约束右侧 (b_up),
# 以及每个变量的取值范围(在这个例子中,(x_1)、(x_2)、(x_3) 都是非负数)。
print(r)

运行结果分析:

message: Optimization terminated successfully. (HiGHS Status 7: Optimal)

  • 说明优化成功终止,并且 HiGHS 状态码为 7,表示达到最优解。

success: True

  • 表示求解器成功找到了最优解。

status: 0

  • 与 HiGHS 状态码相关的信息,这里为0表示成功。

fun: 7.0

  • 最优解的目标函数值是7.0。

x: 8.000e-01 1.800e+00 0.000e+00

  • 最优解对应的变量值为 0.8, 1.8, 0.0。

nit: 3

  • 迭代次数,表示找到最优解所经历的迭代次数。

lower: residual: 8.000e-01 1.800e+00 0.000e+00

  • 对应约束下界的残差。

marginals: 0.000e+00 0.000e+00 0.000e+00

  • 对应约束下界的拉格朗日乘子(或者说边际值)。

upper: residual: inf inf inf

  • 对应约束上界的残差。由于上界是无穷大,残差为无穷大。

marginals: 0.000e+00 0.000e+00 0.000e+00

  • 对应约束上界的拉格朗日乘子。

eqlin: residual: \[\]

  • 等式约束的残差。

marginals: \[\]

  • 等式约束的拉格朗日乘子。

ineqlin: residual: 0.000e+00 0.000e+00

  • 不等式约束的残差。

marginals: -5.000e-01 -5.000e-01

  • 不等式约束的拉格朗日乘子。

mip_node_count: 0

  • MIP(Mixed Integer Programming,混合整数规划)中的节点数。

mip_dual_bound: 0.0

  • MIP 中的对偶边界值。

mip_gap: 0.0

  • MIP 中的优化间隙。

总体而言,结果表明问题成功被 HiGHS 求解器解决,找到的最优解为 0.8, 1.8, 0.0,对应的目标函数值为7.0。各种残差和拉格朗日乘子等信息用于检查解的合理性和对应的约束情况。

相关推荐
实名上网宋凯宣7 小时前
Django
后端·python·django
如若1238 小时前
【论文复现】CoFailMed:从零复现医学图像分割的共享失败审计,含完整代码流程与科研绘图
人工智能·python
ZhengEnCi9 小时前
GPT-6 Astra 爆改 Qwen 权重真有那么神吗:权重空间编程 0.016% 参数的真相
算法·架构
罗西的思考9 小时前
【轻量化复刻大模型 / KIMI K3】KDA(Kimi Delta Attention):并行
人工智能·算法·机器学习
砚底藏山河10 小时前
python量化自定义周期 K 线合成
java·开发语言·数据库·python·金融
视觉小萌新10 小时前
AI Class 3 · Chapter 1:变量、字符串、list/dict、if/for(python学习-小白版-有经验可跳过)
python·学习·list
薛定谔的猫-菜鸟程序员11 小时前
软件架构设计师开发资料大全(从入门到精通)
后端·python·系统架构·flask·架构设计师
夜不会漫长11 小时前
C++:红黑树
数据结构·算法
AI备案指南-满满12 小时前
算法备案审核不通过,一般是什么原因?
java·人工智能·算法·大模型备案·算法备案·大模型登记
Ramble_Naylor12 小时前
Rust深度解读:Send 与 Sync 的本质与线程安全边界
python·算法·rust