非线性规划
非线性规划
如果目标函数中包含非线性函数, 就称这种规划问题为非线性规划问题.
目前解决非线性规划还没有一种通用方法.
线性规划和非线性规划的区别
如果线性规划的最优解存在, 其最优解只能在其可行域的边界上达到(特别是可行域的顶点上达到); 而非线性规划的最优解可能在可行域的任意一点达到.
非线性规划的MATLAB解法
首先可以将非线性规划表示为如下形式:
C(x), Ceq(x)是非线性向量函数.
MATLAB计算非线性规划的函数为
x = fmincon(fun, x0, A, B, Aeq, Beq, LB, UB, NONLCON, OPTIONS)
fun
是用.m文件定义的目标函数; x0表示决策变量的初始值; NONLCON是用.m文件定义的非线性向量函数; OPTIONS定义了优化参数; 其余参数与线性规划一致.
示例
求解下列非线性规划问题
用MATLAB代码求解为
编写目标函数的.m文件target.m
function f = target(x);
f = sum(x.^2) + 8;
编写非线性约束条件的.m文件nonlinear.m
function [g,h] = nonlinear(x);
g = [-x(1)^2 + x(2) - x(3)^2
x(1) + x(2)^2 + x(3)^3 - 20
]; %非线性不等式约束
f = [
-x(1) - x(2)^2 + 2
x(2) + 2x(3)^2 - 3
]; %非线性等式约束
主程序文件main.m
options = optimset('largescale', 'off');
[x, y] = fmincon('target', rand(3,1), [], [], [], [], zeros(3,1),[], 'nonlinear', options)
求解非线性规划的基本迭代格式(难点)
由于线性规划的目标函数为线性函数, 可行域为凸集, 所以求出的最优解就是整个可行域上的最优解. 非线性规划则不然, 有时求出的解虽然是一部分可行域上的极值点, 但不一定是整个可行域上的全局最优解.
对于非线性规划模型(NP), 可以采用迭代方法求最优解. 基本思想为: 从一个选定的初始点出发, 按照一个特定的迭代规则产生一个点列{xk}; 使得当{xk}是有穷点列时, 其最后一个点是(NP)的最优解; 为无穷点列时, 它有极限点, 并且极限点是(NP)的最优解;
设是某迭代方法的第k轮迭代点, 是第n+1轮迭代点, 记
通常将基本迭代格式中的称为第k轮搜索方向, 为沿方向的步长. 有机器学习那味儿了.
对于向量p, 如果存在使得
K即为可行域, 则称p为关于K的可行方向.
凸函数, 凸规划
凸函数的定义为: 若对区间(0,1)内的任何实数, 恒有
的函数为定义在R上的严格凸函数.
目标函数为凸函数, 约束函数也为凸函数的非线性规划为凸规划.
可以证明, 凸规划的可行域为凸集, 其局部最优解即为全局最优解, 而且其最优解的集合形成一个凸集. 当凸规划的目标函数f(x)为严格凸函数时, 其最优解必定唯一.
无约束问题
无约束问题即没有约束条件的问题, 即求解函数极小值的问题
一维搜索方法
当用迭代法求函数的极小点时, 常常用到一维搜索, 即沿一已知方向求目标函数的极小点.
一种比较一个区间上两端函数值的方法, 原理非常简单, 不讲了.
但是这种方法一般只能用于单极值区间, 对于一个多极值的函数. 可以尝试先画出函数图, 然后找出所有只有单个极值的区间分别求解.
斐波那契法
上面那种方法本是随机选取区间的两个点, 斐波那契法能够保证区间按照按照斐波那契数进行缩小.
即
根据需要求解的精度, 确定迭代次数的方式
也可以用黄金比例数代替斐波那契数列.
二次插值法
对极小化问题, 当f(t)在[a,b]上连续时, 可以考虑用多项式插值来进行一维搜索. 基本思想为: 在搜索区间内, 不断用低次(不超过三次)多项式来近似目标函数, 并逐步用插值多项式的极小点来逼近极小化问题的最优解.
无约束问题的解法
梯度下降法
总是朝着梯度下降最快的方向前进
牛顿法
首先需要了解一下什么是黑塞矩阵
考虑目标函数f在处的二次逼近式
假设黑塞矩阵
正定
由于正定, 函数Q的驻点是Q(x)的极小点. 令
解得
所以从出发的搜索方向为
牛顿法的优点是收敛速度快; 缺点是有时不好用而需采取改进措施, 当维度很高时, 计算矩阵的逆矩阵计算量将会很大.
变尺度法
变尺度法由于能够避免计算二阶导数矩阵及其逆矩阵, 对于高纬度问题具有显著的优越性.
为了不计算二阶导数矩阵及其逆矩阵, 我们设法构造另一个矩阵, 来逼近二阶导数矩阵, 这一类也称为拟牛顿法(Quasi-Newton Method).
当f(x)是二次函数时, 任两点和的梯度之差为
因此, 我们构造黑塞矩阵的第k+1次近似满足关系式
这就是拟牛顿条件.
令
记
称为校正矩阵.
省略中间过程, 可求得校正矩阵
从而有
以上矩阵称为尺度矩阵, 取第一个尺度矩阵为单位矩阵.
由此可得DFP变尺度法的计算步骤为:
- 给定初始点以及梯度允许误差
- 若, 则为近似点, 停止迭代.否则转下一步.
- 令
在方向进行一维搜索, 确定最佳步长
于是可以得到下一个近似点
- 对于近似点, 计算其梯度, 若有
则停止迭代, 最终解为; 否则根据式(18)计算, 令. 在方向进行一维搜索, 得到, 从而得到下一个近似点
- 不断重复第4步直到满足允许误差.
约束极值问题
带有约束条件的极值问题称为约束极值问题, 也叫规划问题.
二次规划问题
目标函数为自变量的二次函数的问题称为二次规划问题.
二次规划的模型可以表述为
MATLAB中求解二次规划的函数为
[x, f] = quadprog(H, f, A, b, Aeq, beq, LB, UB, X0, OPTIONS)
罚函数法
利用罚函数法, 可将非线性规划问题转化为一系列无约束机制问题. 因此也称这种方法为序列无约束最小化技术, SUMT(Sequential Unconstrained Minization Technique).
罚函数法的基本思想是利用问题中的约束函数作出适当的罚函数, 由此构造出带参数的增广目标函数, 把问题转化为无约束线性规划问题.
罚函数法分为外罚函数法和内罚函数法. 现在介绍外罚函数法.
对于问题:
取一个充分大的正数M, 构造函数
MATLAB 求约束极值问题
fminbnd 函数
求单变量非线性函数在区间上的最小值
语法格式
[x, f] = fminbnd(fun, x1, x2, options)
fminimax 函数
可以用来求解带有非线性约束条件的问题
x = fminimax(fun, x0, A, B, Aeq, Beq, LB, UB, NONLCON)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)