数学建模(一):LP 问题
数学建模(一):LP 问题
在人们的生产实践中,经常会遇到如何利用现有资源来安排生产,以取得最大经济效益的问题。此类问题构成了运筹学的一个重要分支—数学规划,而线性规划(Linear Programming 简记LP)则是数学规划的一个重要分支。自从1947年G.B.Dantzig提出求解线性规划的单纯形方法以来,线性规划在理论上趋向成熟,在实用中日益广泛与深入。特别是在计算机能处理成千上万个约束条件和决策变量的线性规划问题之后,线性规划的适用领域更为广泛了,已成为现代管理中经常采用的基本方法之一。
我们可以使用 lingo 来求解复杂的线性规划问题:https://blog.csdn.net/qq_62789540/article/details/125926169,这里的重点不是 lingo
一、 MATLAB求解
线性规划求解主要弄清楚两个部分,目标函数(max,min)和约束条件(s.t.),我们求解时一般要化为MATLAB标准形式:
其中 c 和 x 为 n 维列向量,A、Aeq为适当维数的矩阵,b、beq为适当维数的列向量。
注意,是求最小值,而不是最大值。
如果使用MATLAB求解的代码为:
[x,fval]=linprog(c,A,b,Aeq,beq,LB,UB,X0,OPTIONS) %% LB,UB分别为x的上界和下界,即最优解的范围
如,求解:
代码示例:
c = [-2, -3, 5]; % 将最大值装换为求最小值 A = [ [-2, 5, -1]; [1, 3, 1] ]; % Ax <= b b = [-10; 12]; Aeq = [1, 1, 1]; % Aeq x = beq beq = 7; [x,y] = linprog(c, A, b, Aeq, beq, zeros(3, 1)); x, y = -y % 最后记得要把最终解加一个负号,装换为最大值
二、 Python 求解
使用 Python 求解的话,需要 numpy 和 scipy 库的支持。
第三方库的安装:pip install numpy, scipy -i https://mirrors.aliyun.com/pypi/simple
from scipy import optimize import numpy as np #求解函数 res = optimize.linprog(c,A,b,Aeq,beq,LB,UB,X0,OPTIONS) #目标函数最小值 print(res.fun) #最优解 print(res.x)
我们还是求解上述的那个线性规划问题:
示例代码:
from numpy import array, zeros from scipy import optimize c = [-2, -3, 5] A = [ [-2, 5, -1], [1, 3, 1] ] b = [ [-10], [12] ] Aeq = [[1, 1, 1]] beq = [7] res = optimize.linprog(array(c), array(A), array(b), array(Aeq), array(beq), (0, None)) print(-res.fun, res.x)
fun就是目标函数最小值,x就是最优解。
当然,我们也可以使用 lingo 来求解线性规划的问题。
本文来自博客园,作者:Kenny_LZK,转载请注明原文链接:https://www.cnblogs.com/liuzhongkun/p/17177854.html
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器