gydF4y2Ba约束极小化问题是寻找一个向量的问题
符合下列条件的:<年代pan class="inlineequation">c(
最优化工具箱™求解器中使用的许多方法都基于<年代pan class="emphasis">信任区域,年代pan>一个简单但强大的优化概念。
gydF4y2Ba要了解优化的信任区域方法,请考虑无约束的最小化问题,最小化
当前点被更新为
gydF4y2Ba关键问题在于确定具体的信任区域最小化方法
gydF4y2Ba在标准信赖域方法中(
在哪里
这样的算法提供了一个精确的解决方案
这种选择背后的哲学
gydF4y2Ba使用信任区域思想的无约束最小化的草图现在很容易给出:
构建二维信任域子问题。
解决
如果<年代pan class="inlineequation">f(
Δ调整。
这四个步骤重复,直到收敛。信任区域维度Δ根据标准规则进行调整。特别是,如果试验步骤不被接受,它就会减少,即:<年代pan class="inlineequation">f(
gydF4y2Ba最优化工具箱求解器处理一些重要的特殊情况
求解大型、对称、正定线性方程组的一种流行方法<年代pan class="inlineequation">惠普=-
gydF4y2Ba在最小化的情况下,你可以假设Hessian矩阵
线性约束使描述的无约束极小化情况复杂化。然而,前面描述的基本思想可以以一种干净有效的方式进行。最优化工具箱求解器中的信任区域方法生成严格可行的迭代。
gydF4y2Ba给出了一般线性等式约束极小化问题
在哪里
gydF4y2Ba用来求解的方法
在哪里<年代pan class="inlineequation">
接近
方框约束问题是这样的
在哪里
gydF4y2Ba缩放的修正牛顿阶跃是通过考察库恩-塔克必要条件得到的
在哪里
和向量
如果<年代pan class="inlineequation">g<年代ub>我年代ub>< 0和<年代pan class="inlineequation">u<年代ub>我年代ub><∞年代pan>然后<年代pan class="inlineequation">v<年代ub>我年代ub>=
如果<年代pan class="inlineequation">g<年代ub>我年代ub>≥0和<年代pan class="inlineequation">l<年代ub>我年代ub>>-∞年代pan>然后<年代pan class="inlineequation">v<年代ub>我年代ub>=
如果<年代pan class="inlineequation">g<年代ub>我年代ub>< 0和<年代pan class="inlineequation">u<年代ub>我年代ub>=∞年代pan>然后<年代pan class="inlineequation">v<年代ub>我年代ub>= 1
如果<年代pan class="inlineequation">g<年代ub>我年代ub>≥0和<年代pan class="inlineequation">l<年代ub>我年代ub>=-∞年代pan>然后<年代pan class="inlineequation">v<年代ub>我年代ub>= 1年代pan>
非线性系统
gydF4y2Ba缩放的修正牛顿阶跃
在
和
在这里
gydF4y2Ba第二,
在约束优化中,一般的目标是将问题转化为一个更容易解决的子问题,然后作为迭代过程的基础。大量早期方法的一个特点是,通过对接近或超出约束边界的约束使用罚函数,将约束问题转化为基本的无约束问题。通过这种方法,使用参数化无约束优化序列来解决约束问题,该序列在序列的极限范围内收敛于约束问题。这些方法现在被认为是相对低效的,已被侧重于解决问题的方法所取代
gydF4y2Ba请参阅全科医生(
除了原始约束
gydF4y2Ba第一个方程描述了目标函数与解点主动约束之间的梯度的抵消。对于要取消的梯度,拉格朗日乘数(
KKTgydF4y2Ba方程的解决方案构成了许多非线性编程算法的基础。这些算法尝试直接计算Lagrange乘法器。受限的准牛顿方法通过累积关于KKT方程的二阶信息使用Quasi-Newton更新程序来保证超连线收敛。这些方法通常被称为顺序二次编程(SQP)方法,因为QP子问题在每个主要迭代(也称为迭代二次编程,递归二次编程,递归二次编程和约束可变度量方法)。
gydF4y2Ba的
SQP方法代表了非线性规划方法的发展现状。Schittkowski
gydF4y2Ba根据比格斯的研究
gydF4y2Ba鉴于GP中的问题描述(
在这里你简化
(14)年代trong> |
这个子问题可以用任何QP算法来解决(例如,
x<年代ub>
步长参数
gydF4y2Ba使用SQP,非线性约束问题通常比无约束问题的迭代次数更少。其中一个原因是,由于可行区域的限制,优化器可以对搜索方向和步长做出明智的决定。
gydF4y2Ba考虑
与无约束情况下的140次迭代相比,SQP实现在96次迭代中解决了这个问题。
图5-3,SQP方法在非线性约束Rosenbrock的函数上年代trong>
SQP的实现包括三个主要阶段,我们将在以下小节简要讨论:
更新Hessian矩阵。年代trong>在每一次主要迭代中,拉格朗日函数的Hessian的正定拟牛顿近似,
在哪里
鲍威尔
在哪里
和增加
gydF4y2Ba的函数粉刺
fminimax,fgoalattain,fseminf所有用SQP。如果展示 被设置为“通路” 在选项 ,然后给出各种信息,例如函数值和最大约束违规。当Hessian必须使用前一过程的第一阶段进行修改时,将其保持正定,然后黑森修改 会显示出来。如果Hessian必须再次使用上述方法的第二阶段进行修改,那么黑森修改两次会显示出来。当QP子问题不可行时,则不可行会显示出来。这种显示通常不会引起关注,但表明问题是高度非线性的,收敛时间可能比通常更长。有时候消息没有更新 ,显示“?<年代pan class="inlineequation">
几乎是零。这可能表明问题设置是错误的,或者您正在试图最小化一个非连续函数。<年代trong id="f26746">二次规划的解决方案。年代trong>在每个主要的迭代SQP方法,解决了以下形式的QP问题,在其中一个<年代ub>我年代ub> 指的是我 第一行米 - - - - - -- - - - - -------n矩阵一个 .
(18)年代trong>
最优化工具箱函数中使用的方法是一种主动的集合策略(也称为投影方法),类似于Gill等人的方法[18] 和[17] .对线性规划(LP)和二次规划(QP)问题进行了改进。
gydF4y2Ba解决过程包括两个阶段。第一阶段包括可行点(如果存在)的计算。第二阶段包括生成收敛于解的可行点迭代序列。在这种方法中,一个活动集,<年代pan class="inlineequation">
,它是解点上活动约束(即,那些在约束边界上的约束)的估计。几乎所有的QP算法都是主动集合方法。之所以强调这一点,是因为存在许多不同的方法,它们在结构上非常相似,但它们的描述却大相径庭。
<年代pan class="inlineequation">
在每个迭代更新k ,这用于为搜索方向构成基础<年代pan class="inlineequation">
.相等约束始终保持在活动集中<年代pan class="inlineequation">
.变量的符号<年代pan class="inlineequation">
是用来区分它和d<年代ub>k 在SQP方法的主要迭代中。搜索方向<年代pan class="inlineequation">
,并使目标函数最小化,同时保持在任何主动约束边界上。的可行子空间<年代pan class="inlineequation">
由基础形成Z<年代ub>k 哪些列正交于活动集的估计<年代pan class="inlineequation">
(例如,<年代pan class="inlineequation">
).的列的任意组合的线性和形成的搜索方向Z<年代ub>k ,保证保持在主动约束的边界上。
gydF4y2Ba矩阵Z<年代ub>k 由最后形成<年代pan class="inlineequation">米------l年代pan>矩阵QR分解的列<年代pan class="inlineequation">
,在那里l 主动约束的数量是多少l < m .也就是说,Z<年代ub>k 是(谁)给的
(19)年代trong>
在哪里
一次Z<年代ub>k 是发现了,一个新的搜索方向<年代pan class="inlineequation">
寻求最小化问 (d ),
是在主动约束的零空间中。也就是说,<年代pan class="inlineequation">
是列向量的线性组合吗Z<年代ub>k :<年代pan class="inlineequation">
为向量p .
gydF4y2Ba然后,如果您将二次视为函数p ,通过替换<年代pan class="inlineequation">
,你有
(20)年代trong>
对它求导p 产量
(21)年代trong>
∇问 (p )年代pan>被称为二次函数的投影梯度因为它是在子空间中投影的梯度由Z<年代ub>k .这个词<年代pan class="inlineequation">
叫做投影黑森。假设Hessian矩阵H 是正定的(这是SQP实现中的情况),那么函数的最小值是多少问 (p 定义的子空间Z<年代ub>k 发生在<年代pan class="inlineequation">∇问 (p ) = 0,它是线性方程组的解
(22)年代trong>
然后采取一步
(23)年代trong>
在每次迭代时,由于目标函数的二次性质,只有两个步长的选择α .这是团结前进的一步<年代pan class="inlineequation">
函数的最小值的精确步是否限制在零空间<年代pan class="inlineequation">
.如果可以在不违反约束的情况下采取这样的步骤,那么这就是QP (方程18 ).否则,继续前进<年代pan class="inlineequation">
到最近的约束小于单位,在下一次迭代时一个新的约束被包含在活动集中。任意方向到约束边界的距离<年代pan class="inlineequation">
是(谁)给的
(24)年代trong>
它是为不在活动集合中的约束定义的,方向在哪里<年代pan class="inlineequation">
为约束边界,即:<年代pan class="inlineequation">
.
gydF4y2Ba当n 在活动集中包含独立约束,没有极小值的位置,拉格朗日乘子,λ<年代ub>k 计算满足非线性线性方程组的计算
(25)年代trong>
如果所有的元素λ<年代ub>k 是积极的,x<年代ub>k 为QP (方程18 ).然而,如果有λ<年代ub>k 为负,且组件不对应相等约束,则从活动集中删除相应的元素,并寻找新的迭代。
<年代trong id="f26916">初始化。年代trong>该算法需要一个可行的起始点。如果从SQP方法中得到的当前点是不可行的,那么可以通过求解线性规划问题找到一个点
(26)年代trong>
的符号一个<年代ub>我年代ub> 表示我 矩阵的第一行一个 .你可以找到一个可行点(如果存在的话)方程26 通过设置x 转换为满足相等约束的值。您可以通过求解由等式约束集形成的线性方程组的过定或过定来确定这个值。如果这个问题有一个解决方案,那么松弛变量γ 设为该点的最大不等式约束。
针对LP问题,可以修改前面的QP算法,将搜索方向设置为每次迭代的最陡下降方向g<年代ub>k 为目标函数的梯度(等于线性目标函数的系数)。
(27)年代trong>
如果使用上述LP方法找到一个可行点,则进入主QP阶段。搜索方向<年代pan class="inlineequation">
用搜索方向初始化<年代pan class="inlineequation">
从解线性方程组中得到
(28)年代trong>
在哪里g<年代ub>k 目标函数的梯度是否在当前迭代中x<年代ub>k (例如,<年代pan class="inlineequation">Hx<年代ub>k+c年代pan>).
gydF4y2Ba如果对QP问题没有找到可行的解决方案,则搜索方向为主要的SQP程序<年代pan class="inlineequation">
被认为是最小化的γ .
<年代trong id="f26965">直线搜索和优点函数。年代trong>QP子问题的解产生一个向量d<年代ub>k ,它用于形成新的迭代
(29)年代trong>
步长参数α<年代ub>k 确定为了产生足够的减少价值函数。韩寒使用的价值函数[22] 和鲍威尔[33] 在此实现中使用下列形式。
(30)年代trong>
鲍威尔建议设置惩罚参数
(31)年代trong>
这允许QP解决方案中不活跃但最近活跃的约束作出积极贡献。在这个实现中,惩罚参数r<年代ub>我年代ub> 最初被设置为
(32)年代trong>
在哪里<年代pan class="inlineequation">
表示欧几里得范数。
gydF4y2Ba这确保了较小梯度的约束对惩罚参数的贡献更大,这将是解决方案点上的主动约束的情况。
年代ect我on>
fmincon SQP算法
gydF4y2Ba的sqp 算法(几乎相同sqp-legacy 算法)类似于有效集 算法(有关描述,请参见fmincon活动集算法 ).的基本sqp 算法在Nocedal和Wright的第18章中进行了描述[31] .
gydF4y2Ba的sqp 算法本质上和sqp-legacy 算法,但有不同的实现。通常情况下,sqp 比?有更快的执行时间和更少的内存使用sqp-legacy .
gydF4y2Ba最重要的区别是sqp 和有效集 算法是:
<年代ect我on itemprop="content">
对界限的严格可行性
的sqp 算法的每一步迭代都在有边界约束的区域内进行。此外,有限差分步也是有界的。界限不严格;一步可以恰好在一个边界上。当你的目标函数或非线性约束函数是未定义的或在受边界约束的区域之外是复杂的时,这种严格的可行性是有益的。
年代ect我on>
非双结果的稳健性
在它的迭代过程中sqp 算法可以尝试采取失败的步骤。这意味着您提供的目标函数或非线性约束函数返回值为正 ,南 ,或复数。在这种情况下,算法会尝试进行更小的步长。
年代ect我on>
重构线性代数例程
的sqp 算法使用一组不同的线性代数例程来解决二次规划子问题,方程14 .这些例程在内存使用和速度上都比有效集 例程。
年代ect我on>
新配方可行性的例程
的sqp 算法中有两种新的求解方法方程14 当约束不满足时。
的sqp 该算法将目标函数和约束函数结合成一个价值函数。该算法试图最小化约束条件下的价值函数。这个修改过的问题可以引出一个可行的解决方案。然而,这种方法比原来的问题有更多的变量,所以问题的规模方程14 增加。增大的规模会减缓子问题的求解速度。这些例程是基于Spellucci的文章[60] 和语气[61] .的sqp 算法为价值函数设置惩罚参数方程30 根据在[41] .
假设不满足非线性约束,并且尝试的步骤导致约束违背增长。的sqp 算法尝试使用约束的二阶近似来获得可行性。二阶方法可以得到一个可行的解。然而,这种技术会因为需要更多的非线性约束函数的计算而减慢求解速度。
fmincon内点算法<年代pan id="interior_point" class="anchor_target">
屏障功能
约束极小化的内点方法是求解一系列近似极小化问题。最初的问题是
(33)年代trong>
为每一个μ >0,近似问题是
(34)年代trong>
有很多松弛变量年代<年代ub>我年代ub> 因为存在不平等约束g .的年代<年代ub>我年代ub> 限制为正,以使迭代保持在可行域内。作为μ 减小到零,最小值f<年代ub>μ 应该接近最小值f .加上的对数项称为a屏障功能 .这种方法在[40] ,[41] ,[51] .gydF4y2Ba近似的问题方程34 是一系列等式约束问题。这些问题比原来的不等式约束问题更容易解决方程33 .
gydF4y2Ba为了解决近似问题,该算法在每次迭代中使用两种主要步骤中的一种:
默认情况下,算法首先尝试采取直接步骤。如果不能,它就尝试CG步骤。在一种情况下,它不采取直接步骤是当近似问题不是局部凸附近的当前迭代。
gydF4y2Ba在每次迭代时,算法减少a优值函数,如
(35)年代trong>
的参数<年代pan class="inlineequation">
可以随着迭代次数的增加而增加,以迫使解朝着可行的方向发展。如果一个尝试的步骤没有降低价值函数,算法拒绝尝试的步骤,并尝试新的步骤。gydF4y2Ba如果目标函数或非线性约束函数返回一个复值NaN, Inf或在迭代时返回一个错误x<年代ub>j ,算法拒绝x<年代ub>j .拒绝具有同样的效果,如果价值函数没有充分减少:算法然后尝试一个不同的,更短的步骤。包装任何可能出错的代码试一试 -抓 :
function val = userFcn(x) try val =…%代码可以错误捕获val = NaN;结束
目标和约束必须产生适当的(双 )初始点处的值。
年代ect我on>
直接的步骤
下面的变量用于定义直接步骤:
H表示拉格朗日的黑森州f<年代ubcl作为年代="math">μ年代ub> :
(36)年代trong>
J<年代ub>g表示约束函数的雅可比矩阵g .
J<年代ub>h表示约束函数的雅可比矩阵h .
年代=诊断接头(年代 )年代pan>.
λ为约束相关的拉格朗日乘子向量g
Λ=诊断接头(λ )年代pan>.
y为所关联的拉格朗日乘子向量h .
e表示与的大小相同的向量g .
定义直接步骤<年代pan class="inlineequation">(Δx ,Δ年代)年代pan>:
(37)年代trong>
这个方程直接来自于试图求解方程2 和方程3 使用线性化的拉格朗日。
gydF4y2Ba你可以通过预乘第二个变量使方程对称Δ年代 通过年代 <年代up>1:
(38)年代trong>
为了解这个方程<年代pan class="inlineequation">(Δx ,Δ年代)年代pan>,算法对矩阵进行LDL分解。(见例3 - D的结构 在MATLAB<年代up>®低密度脂蛋白函数引用页面。)这是计算上最昂贵的步骤。这种因式分解的结果之一是决定投影的黑森是否为正定;如果不是,算法使用共轭梯度步长,如共轭梯度步骤 .
年代ect我on>
更新障碍参数
对于近似问题方程34 为了解决原来的问题,用势垒参数μ 随着迭代的进行,需要减少到0。该算法有两个barrier参数更新选项,您可以使用BarrierParamUpdate 选择:“单调” (默认),预估的 .
gydF4y2Ba的“单调” 选项减少参数μ 当近似问题在先前的迭代中以足够的准确度解决了近似问题时,通过1/100或1/5。当算法只需要一个或两个迭代以实现足够的准确度并使用否则使用1/5时,该选项使用1/100因子。准确度的度量是以下测试,它决定了右侧所有术语的大小是否方程38 小于μ :
请注意年代trong>
粉刺覆盖了BarrierParamUpdate 设置为“单调” 在上述任一情况下:
该问题没有不等式约束,包括边界约束。
的子项产算法 选择是“重心” .
的预估的 更新屏障参数的算法μ 和线性规划相似吗预估 算法。
gydF4y2Ba预测校正步长可以通过调整牛顿步长中的线性化误差来加速现有的Fiacco-McCormick(单调)方法。预测校正算法的效果是双重的:它经常改进步进方向,同时用定心参数σ自适应地更新势垒参数,以鼓励迭代遵循中心路径。参见Nocedal和Wright的[31] 讨论线性程序的预测-校正步骤,以理解为什么中心路径允许更大的步长,从而更快的收敛。
gydF4y2Ba预测步长采用线性化的步长μ = 0,表示没有barrier函数:
定义ɑ<年代ub>年代年代ub> 和ɑ<年代ub>λ 为不违反非负性约束的最大步长。
现在从预测器步骤计算互补性。
(39)年代trong>
在哪里米 为约束的数量。
gydF4y2Ba第一校正器步长对牛顿求根线性化中忽略的二次项进行调整
要纠正二次误差,请解决校正器步方向的线性系统。
第二校正步骤是定心步骤。定心校正是基于变量的σ 在等式的右边
在这里,σ 被定义为
在哪里μ<年代ub>P 定义在方程中方程39 ,<年代pan class="inlineequation">
.
gydF4y2Ba为了防止势垒参数下降过快,潜在地破坏算法的稳定性,算法保留了定心参数σ 1/100以上。这个动作导致了势垒参数μ 减少不超过1/100
gydF4y2Ba在算法上,第一次校正和定心步骤是相互独立的,所以它们是一起计算的。此外,预测器和两个校正器步骤的矩阵在左边是相同的。在算法上,矩阵被分解一次,这个分解被用于所有这些步骤。
gydF4y2Ba该算法可以在步长增大价值函数值时拒绝所提出的预测-校正步长方程35 ,将互补性至少增加了两倍,或者计算出的惯性是错误的(问题看起来是非凸的)。在这些情况下,算法尝试采取不同的步骤或共轭梯度步骤。
年代ect我on>
共轭梯度步骤
用共轭梯度法求解近似问题方程34 与其他共轭梯度计算相似。在这种情况下,算法对两者都进行调整x 和年代 ,把裤子留着年代 积极的。该方法是在受线性化约束的情况下,最小化信赖域内近似问题的二次逼近。
gydF4y2Ba具体地说,让R 表示信任区域的半径,并让其他变量定义为直接的步骤 .该算法通过近似求解KKT方程得到拉格朗日乘子
在最小的方形感觉中,受到影响λ 是积极的。然后再走一步<年代pan class="inlineequation">(Δx ,Δ年代)年代pan>约解决
(40)年代trong>
受线性化约束
(41)年代trong>
来解决方程41 ,算法试图最小化半径为的区域内线性化约束的范数R .然后方程40 是在约束条件匹配的情况下求解的吗方程41 ,呆在半径的信任区域内R ,并保持年代 严格正的。具体算法和推导请参见[40] ,[41] ,[51] .关于共轭梯度的另一种描述,请参阅预条件共轭梯度法 .年代ect我on>
可行性模式
当EnableFeasibilityMode 选择是真正的 当迭代速度不够快时,算法切换到可行性模式。这种切换发生在算法在正常模式下不能降低不可行性后,然后切换到共轭梯度模式后再次失败。因此,为了在没有可行性模式的情况下求解器无法找到可行解时获得最佳性能,设置子项产算法 到“重心” 使用可行性模式时。这样做可以避免在正常模式下进行无结果的搜索。
gydF4y2Ba可行性模式算法基于Nocedal、Öztoprak和Waltz[1] .该算法忽略了目标函数,而是试图最小化不可行性,即不等式约束函数的正部分与等式约束函数的绝对值的和。用松弛变量表示<年代pan class="inlineequation">
,分别对应于不等式,等式的正部分,和等式的负部分,问题是
受约束
为了解决松弛问题,该软件采用了带有对数势垒函数和松弛函数的内点公式<年代pan class="inlineequation">
最小化
受约束
轻松问题的解决过程开始于μ 初始化为当前屏障参数值。的松弛变量年代<年代ub>我年代ub> 初始化为从主模式继承的当前不等松弛值。的r 变量初始化为
其余的slack被初始化为
从这个初始点开始,可行性模式算法重用了常规内点算法的代码。这个过程需要特殊的步骤计算,因为r 变量是线性的,因此,它们相关的二阶导数为零。也就是说,可行性问题的目标函数Hessian是缺位的。因此,算法不能走牛顿步。相反,算法采取了最陡下降的方向步骤。该算法从目标相对于变量的梯度开始,将梯度投影到约束雅可比矩阵的零空间上,并对结果向量进行缩放,使其具有适当的步长。这一步可以有效地减少不可行性。
gydF4y2Ba可行性模式算法在将不可行性降低10倍时结束。当可行性模式结束时,算法通过变量x 和年代<年代ub>我年代ub> 对主算法进行了简化,并丢弃了其他松弛变量和松弛变量r .
参考文献
[1] Nocedal, Jorge, Figen Öztoprak,和Richard A. Waltz。具有非可行性检测能力的非线性规划的内点方法。 优化方法与软件29(4),2014年7月,pp. 837-854。
内点算法的选择
下面是内部点算法中几个选项的含义和效果。
HonorBounds-当设置为真正的 ,每个迭代都满足您设置的约束。当设置为假 ,算法可能在中间迭代期间违反界限。
HessianApproximation—当设置为:
“蓄热”,粉刺 用稠密的拟牛顿近似计算Hessian。
“lbfgs”,粉刺 通过有限内存的大规模准牛顿近似计算Hessian。
“fin-diff-grads”,粉刺 通过梯度的有限差分计算hessian -time -vector乘积;其他选项需要适当设置。
赫索斯·福克- - - - - -粉刺 使用中指定的函数句柄赫索斯·福克 来计算Hessian。看到包括麻布 .
HessianMultiplyFcn-给出一个单独的hessian时间向量计算函数。有关详细信息,请参见包括麻布 和Hessian乘法功能 .
子项产算法-决定是否尝试直接牛顿步。默认设置“分解” 允许尝试此类型的步骤。设置“重心” 只允许共轭梯度步骤。
有关选项的完整列表,请参见<年代trong class="emphasis bold">内部点算法年代trong>在粉刺 选项
.
年代ect我on>
fminbnd算法
fminbnd 是一个求解器,可在任何MATLAB安装。它求解一维有界区间内的局部最小值。它不是基于衍生品。相反,它使用黄金分割搜索和抛物线插值。
年代ect我on>
问题的表述和算法<年代pan id="csh_fseminfproblem" class="anchor_target">
fseminf问题公式化
fseminf用附加类型的约束来解决优化问题粉刺 .的制定粉刺 是
这样<年代pan class="inlineequation">c(x )≤0,量表信(x ) = 0,·x≤b,Aeq·x =说真的 ,l≤x≤u年代pan>.
fseminf 将下列半无限约束加到已经给出的约束上。为w<年代ub>j 以单维或二维有界间隔或矩形我<年代ub>j ,对于连续函数的向量<年代pan class="inlineequation">K(x ,w )年代pan>,约束条件为
K<年代ub>j(x ,w<年代ub>j )≤0w<年代ub>j∈我<年代ub>j.
术语“维度”的fseminf 问题是指约束集的最大维数我 :1如果全部我<年代ub>j 是否为间隔,如果至少为1则为2我<年代ub>j 是一个长方形。向量的大小K 不涉及维度的概念。
gydF4y2Ba之所以称之为半无限规划,是因为变量的数量是有限的(x 和w<年代ub>j ),但是无限数量的约束。这是因为约束x 超过一组连续的间隔或矩形我<年代ub>j ,其中包含无限多的点,因此存在无限多的约束:<年代pan class="inlineequation">K<年代ub>j(x ,w<年代ub>j )≤0对于无穷多个点w<年代ub>j .
gydF4y2Ba你可能会认为一个有无限个约束条件的问题是不可能解决的。fseminf 解决这个问题的方法是将问题重新表述成一个等价的问题,这个问题有两个阶段:最大和最小。半无限约束被重新表述为
(42)年代trong>
在|K |是向量的分量数K ;即半无限约束函数的个数。固定x ,这是一个普通的在有界区间或矩形上的最大值。
fseminf 通过制造分段二次或立方近似来进一步简化问题<年代pan class="inlineequation">κ<年代ub>j(x ,w<年代ub>j )年代pan>的功能<年代pan class="inlineequation">K<年代ub>j(x ,w<年代ub>j )年代pan>,对于每一个x 解算者访问的地方。fseminf 只考虑插值函数的最大值<年代pan class="inlineequation">κ<年代ub>j(x ,w<年代ub>j )年代pan>,而不是<年代pan class="inlineequation">K<年代ub>j(x ,w<年代ub>j )年代pan>,在方程42 .这将原始问题,即最小化半无限约束函数,简化为具有有限个数约束的问题。
<年代trong id="brpqbpl">采样点。年代trong>半无限约束函数必须提供一组采样点,用于进行二次或三次逼近。为了做到这一点,它应该包括:
最初的间距年代 在抽样点之间w
一种生成采样点集的方法w 从年代
最初的间距年代 是一个|K |2矩阵。的j th排年代 表示约束函数相邻采样点的间距K<年代ub>j .如果K<年代ub>j 取决于一维w<年代ub>j ,设置年代(j, 2) = 0 .fseminf 更新矩阵年代 在随后的迭代。
fseminf 使用矩阵年代 生成采样点w ,然后用它来创建近似<年代pan class="inlineequation">κ<年代ub>j(x ,w<年代ub>j )年代pan>.用来生成w 从年代 是否应该保持相同的间隔或矩形我<年代ub>j 在优化。
<年代trong id="bro4wg_">创建采样点的示例。年代trong>考虑两个半无限约束的问题,K <年代ub>1和K <年代ub>2.K <年代ub>1有一维w <年代ub>1,K<年代ub>2有二维w <年代ub>2.下面的代码生成一个抽样集w <年代ub>1=2至12:
%初始采样间隔如果是isnan(s(1,1))s(1,1)= .2;s(1,2)= 0;末端%采样集W1 = 2:S(1,1):12;
fseminf指定年代 作为南 当它第一次调用约束函数时。对此进行检查允许您设置初始采样间隔。
gydF4y2Ba下面的代码生成一个抽样集w <年代ub>2在一个正方形中,每个分量从1到100,最初第一个分量比第二个分量取样更频繁:
isnan(s(1,1)) s(2,1) = 0.2;s (2, 2) = 0.5;end %采样集w2x = 1:s(2,1):100;w2y = 1: s (2, 2): 100;(天气,王寅)= meshgrid (w2x w2y);
以上代码片段可以简化如下:
%初始采样间隔如果isnan(s(1,1)) s = [0.2 0;0.2 0.5];end %采样集w1 = 2:s(1,1):12;w2x = 1: s (2,1): 100;w2y = 1: s (2, 2): 100;(天气,王寅)= meshgrid (w2x w2y);
年代ection>
fseminf算法
fseminf从本质上讲,将半无限规划问题简化为粉刺 .fseminf 采用以下步骤求解半无限规划问题:
的现值x ,fseminf 识别所有的w<年代ub>j,我年代ub> 使插值<年代pan class="inlineequation">κ<年代ub>j(x ,w<年代ub>j,我年代ub> )年代pan>为局部最大值。(最大值指的是变化w 固定x .)
fseminf在解中采用一个迭代步骤粉刺 问题:
这样<年代pan class="inlineequation">c(x )≤0,量表信(x ) = 0,·x≤b,Aeq·x =说真的 ,l≤x≤u年代pan>,在那里c (x 的所有极大值增广<年代pan class="inlineequation">κ<年代ub>j(x ,w<年代ub>j )年代pan>接管了所有<年代pan class="inlineequation">w<年代ub>j∈我<年代ub>j年代pan>等于最大值除以j 和我 的<年代pan class="inlineequation">κ<年代ub>j(x ,w<年代ub>j,我年代ub> )年代pan>.
fseminf检查在新点是否满足任何停止条件x (停止迭代);如果没有,则继续执行步骤4。
fseminf检查半无限约束离散化是否需要更新,并适当更新采样点。这提供了一个更新的近似<年代pan class="inlineequation">κ<年代ub>j(x ,w<年代ub>j )年代pan>.然后继续到第1步。