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

数学建模——非线性规划

1.概念

非线性规划(Nonlinear Programming, NLP)是数学建模中用于解决目标函数或约束条件至少有一个为非线性的优化问题。与线性规划不同,非线性规划能处理更复杂的现实问题,如工程设计、经济学中的效用最大化等。

线性规划非线性规划
相同点
  1. 两者均属于数学优化范畴,目标是通过调整决策变量,在满足约束条件下最大化或最小化目标函数

  2. 基本要素一致

    • 决策变量:需确定的未知量(如生产量、投资比例)。

    • 约束条件:对变量的限制(如资源上限、技术规范)。

    • 目标函数:需优化的数学表达式(如利润、成本)。

数学形式目标函数与约束均为线性(如 ax+by≤c)目标函数或约束存在非线性(如 x2+sin(y)≤10)
应用典型资源分配、运输问题(如最小成本流)工程设计、金融组合优化(如带风险惩罚的收益最大化)
最终结果

可以直接给出整体最优解

有特定的方法

并且最优解一定是在边界上

只能先求局部最优解,找近似解

目前没有适合各种问题的通用解法

最优解可能在可行域内的任何一点达到

2.函数模型 

线性规划非线性规划
模型标准型

min \; \; \; f(x)

s.t.\left\{\begin{matrix} Ax\leq b,Aeq\cdot x=beq \\ lb\leq x\leq ub \end{matrix}\right.

min \; \; \; f(x)

s.t.\left\{\begin{matrix} Ax\leq b,Aeq\cdot x=beq \\ c(x)\leq 0,Ceq(x)=0 \\ lb\leq x\leq ub \end{matrix}\right.

函数名linprogfmincon
函数用法
[x, fval] = linprog(f, A, b, Aeq, beq, lb);
[x, fval] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,option);

参数含义:

linprogfmincon
f目标函数系数向量(列向量)fun把目标函数定义成一个单独的函数文件(min)
A不等式约束矩阵(左侧系数)x0决策变量的初始值
b不等式约束右侧常数向量A,b线性约束不等式变量系数矩阵和常数项矩阵(左侧系数和右侧向量,支持\leq or<
Aeq等式约束矩阵(Aeq),空表示无等式约束Aeq,beq线性约束等式变量系数矩阵和常数项矩阵(左侧系数和右侧向量)
beq等式约束右侧常数向量(beq),空表示无等式约束lb,ub决策变量的最小与最大取值(变量上下界)
lb变量下界(lower bound)nonlcon非线性约束(包括不等式与等式)
ub变量上界(upper bound)option求解非线性规划使用的方法

 最不同的就是下面几个点:

x0

x0是初始值,这个选取比较重要,非线性规划算的是局部最优解,是在这个初始值下的最优解

1.可以给定不同初始值,在所有解里面得到最优解

2.先用蒙特卡罗模拟,找到一个蒙特卡罗解,然后把这个解作为初始值来求最优解

option

有5个算法可以选择

1.interior-point
默认算法,适用于大规模问题,支持稀疏矩阵。通过内点法处理约束,结合障碍函数和牛顿法迭代求解。

2.sqp (Sequential Quadratic Programming)
序列二次规划法,适用于中小规模问题。通过求解一系列二次规划子问题逼近最优解,对初始点敏感。

3.sqp-legacy
旧版SQP算法,保留用于兼容性。与当前SQP实现类似,但效率可能较低。

4.active-set
活动集算法,适用于中小规模问题。通过识别活跃约束的集合来迭代更新解,可能陷入局部最优。

5.trust-region-reflective
信赖域反射算法,仅适用于无约束或边界约束问题。需要提供梯度信息,利用二次模型逼近目标函数。

选择建议

  • 大规模问题优先选用interior-point
  • 需要更高精度或对初始点敏感时尝试sqp
  • 仅边界约束问题可考虑trust-region-reflective
  • 其他算法通常用于特定兼容性或历史代码。
目标函数要写一个独立的脚本存目标函数
nonlcon要写一个独立的脚本存非线性约束
决策变量x_{1}\rightarrow x(1)才能被matlab识别

若不存在某种约束,可以用 [  ] 代替

若后面全都是 [  ] ,且option是默认,后面的 [  ] 可以不写

这里另外提一句,这个公式不是特别好套用,尤其是存在\sum而且有i,j之类的,感觉最好的办法是写出所有的xij按照行和列排,然后前面的系数提出来就是系数矩阵,尤其是不要忘记了前面是0系数的因素

比如这个如何写系数矩阵

有12个参数x_{11},x_{21},x_{31},x_{41},x_{51},x_{61},x_{12},x_{22},x_{32},x_{42},x_{52},x_{62}

矩阵全写出来

j=1  x_{11}+x_{21}+x_{31}+x_{41}+x_{51}+x_{61}\leq e_1

j=2  x_{12}+x_{22}+x_{32}+x_{42}+x_{52}+x_{62}\leq e_2

看似矩阵写作\begin{bmatrix} 1 & 1& 1& 1 & 1 & 1\\ 1 &1 & 1 &1 & 1 & 1 \end{bmatrix}

实际上应该补0

x_{11}+x_{21}+x_{31}+x_{41}+x_{51}+x_{61}+0x_{12}+0x_{22}+0x_{32}+0x_{42}+0x_{52}+0x_{62}\leq e_1

0x_{11}+0x_{21}+0x_{31}+0x_{41}+0x_{51}+0x_{61}+x_{12}+x_{22}+x_{32}+x_{42}+x_{52}+x_{62}\leq e_2

应该写作

http://www.xdnf.cn/news/16727.html

相关文章:

  • 大文档免费翻译方法分享
  • 政策合规性前端设计:工业数据安全的可视化技术规范与落地实践
  • C语言进阶(指针2.函数指针和指针函数,二级指针,指针数组和数组指针,void*指针)
  • 数据结构 排序(2)---选择排序
  • 使用鼠标在Canvas上绘制矩形
  • PDF转Word免费工具!批量处理PDF压缩,合并, OCR识别, 去水印, 签名等全功能详解
  • Shader开发(四)计算机图形学中的颜色定义
  • Java 大视界 -- Java 大数据机器学习模型在金融信用评级模型优化与信用风险动态管理中的应用(371)
  • Day23-二叉树的层序遍历(广度优先搜素)
  • [明道云]-基础教学2-工作表字段 vs 控件:选哪种?
  • Redis 跨主机连接超时分析:从网络波动到架构优化
  • 个人健康管理小程序(消息订阅、Echarts图形化分析)
  • TGD第八篇:二维应用——图像边缘检测
  • ftp加ssl,升级ftps
  • 三维扫描相机:工业自动化的智慧之眼——迁移科技赋能智能制造新纪元
  • 从东南亚出发:小程序容器技术如何助力 App 快速打入全球市场?
  • LeetCode 1616.分割两个字符串得到回文串
  • PHP性能优化与高并发处理:从基础到高级实践
  • 直播间里的酒旅新故事:内容正在重构消费链路
  • 设计模式:状态模式 State
  • 配置daemon.json使得 Docker 容器能够使用服务器GPU【验证成功】
  • 设计模式十三:代理模式(Proxy Pattern)
  • mac 字体遍历demo
  • 网络原理 - TCP/IP(一)
  • 大数据集分页优化:LIMIT OFFSET的替代方案
  • 解密数据结构之二叉树
  • 解锁全球数据:Bright Data MCP 智能解决代理访问难题
  • 84、【OS】【Nuttx】【启动】栈溢出保护:asm 关键字(下)
  • 使用jQuery时的注意事项
  • 网络安全运维面试准备