数学建模——非线性规划

1.概念

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

|----------|---------------------------------|--------------------------------------------------|
| | 线性规划 | 非线性规划 |
| 相同点 | 1. 两者均属于数学优化 范畴,目标是通过调整决策变量,在满足约束条件下最大化或最小化目标函数。 2. 基本要素一致 * 决策变量:需确定的未知量(如生产量、投资比例)。 * 约束条件:对变量的限制(如资源上限、技术规范)。 * 目标函数:需优化的数学表达式(如利润、成本)。 ||
| 数学形式 | 目标函数与约束均为线性(如 ax+by≤c) | 目标函数或约束存在非线性(如 x2+sin(y)≤10) |
| 应用典型 | 资源分配、运输问题(如最小成本流) | 工程设计、金融组合优化(如带风险惩罚的收益最大化) |
| 最终结果 | 可以直接给出整体最优解 有特定的方法 并且最优解一定是在边界上 | 只能先求局部最优解,找近似解 目前没有适合各种问题的通用解法 最优解可能在可行域内的任何一点达到 |

2.函数模型

|-------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| | 线性规划 | 非线性规划 |
| 模型标准型 | | |
| 函数名 | linprog | fmincon |
| 函数用法 | Matlab [x, fval] = linprog(f, A, b, Aeq, beq, lb); | Matlab [x, fval] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,option); |

参数含义:

|-----|--------------------------------|---------|----------------------------------------------------------------------------------|
| linprog || fmincon ||
| f | 目标函数系数向量(列向量) | fun | 把目标函数定义成一个单独的函数文件(min) |
| A | 不等式约束矩阵(左侧系数) | x0 | 决策变量的初始值 |
| b | 不等式约束右侧常数向量 | A,b | 线性约束****不等式 变量系数矩阵和常数项矩阵(左侧系数和右侧向量,支持) |
| 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 | 要写一个独立的脚本存非线性约束 |
| 决策变量 | 才能被matlab识别 |
| 若不存在某种约束,可以用 [ ] 代替 若后面全都是 [ ] ,且option是默认,后面的 [ ] 可以不写 ||

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

比如这个如何写系数矩阵

有12个参数

矩阵全写出来

j=1

j=2

看似矩阵写作

实际上应该补0

应该写作

相关推荐
shenghaide_jiahu1 天前
数学建模——多目标规划
数学建模
shenghaide_jiahu1 天前
数学建模——灰色关联分析
数学建模
Finn_JLU1 天前
MacTex+Vscode数学建模排版
ide·vscode·数学建模
同元软控2 天前
赋能建模实践,服务教学科研 | 同元软控亮相第十九届数学建模教学与应用会议
数学建模
行然梦实2 天前
论文阅读:《多目标和多目标优化的回顾与评估:方法和算法》
论文阅读·算法·机器学习·数学建模
绿炮火2 天前
【MATLAB】(一)简介
开发语言·数学建模·matlab
tzc_fly2 天前
人类语言驱动物理机制建模的AIVC
数学建模
shenghaide_jiahu2 天前
数学建模——01规划/整数规划
算法·数学建模
行然梦实3 天前
粒子群优化算法(Particle Swarm Optimization, PSO) 求解二维 Rastrigin 函数最小值问题
算法·机器学习·数学建模