运筹说 第102期 | 非线性规划—制约函数法

2023-11-11 22:12

本文主要是介绍运筹说 第102期 | 非线性规划—制约函数法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

       通过上期学习,大家已经了解了非线性规划中约束极值问题的最优性条件。本期小编将为大家介绍约束极值问题的求解方法:制约函数法,包括概念以及最基本的两种制约函数法:罚函数法障碍函数法等内容。

图片

       制约函数法是通过构造某种制约函数,并将它加到非线性规划的目标函数上,从而将原来的约束极值问题,转化为无约束极值问题来求解。此处介绍的方法用来求解一系列无约束问题,故称为序列无约束极小化技术。

一、罚函数法

        对于非线性规划

图片

构造函数

图片

g_{j}(X)视为t,将约束条件的函数加到原目标函数中,构造新的目标函数:

图片

      新的目标函数转变为求解无约束问题,假定该问题极小点为X*,必有g_{j}(X)\geq 0X*是新构造无约束问题的极小点,同样也是原非线性规划问题的极小点。

       但是,如上构造的函数ψ(t)在0处不连续,不可导,这就无法使用很多有效的无约束极值极小化方法进行求解。因此将其修改为

图片

       修改后的ψ(t)处处可导,ψ(t)ψ′(t)处处连续。这时,修改后的函数的极小点不一定就是原非线性规划问题的极小点。于是,选取很大的实数M>0,作为惩罚因子,则得到

图片

该式也可以写成另一种形式

图片

在这个式子中,M称为惩罚因子M\sum_{j=1}^{l}\Psi (g_{j}(\mathbf{X}))为惩罚项,P(X,M)罚函数

X∈R时,P(X,M)=P(X);当X∉R时,M\sum_{j=1}^{l}\Psi (g_{j}(\mathbf{X)})就会很大,离可行域越远,惩罚越大。当M足够大时,是新构造无约束问题的极小点,同样也是原非线性规划问题的极小点。

       现引进阶跃函数

图片

得到如下转变

图片

       随着罚因子M增大,惩罚项起到的作用就越大,minP(X,M)越趋近于可行域d_{0},当0<M1<M2<...Mk<...,趋于无穷大时,点列\left \{ \mathbf{X}(M_{k}) \right \}会从可行域R的外部趋于原非线性规划的问题的极小点(此处假设点列\left \{ \mathbf{X}(M_{k}) \right \}收敛)。

       和不等式约束问题类似,对于等式约束问题,也可做如下变换:

图片

对于既含有等式约束,又有不等式约束的一般非线性规划问题

图片

其罚函数为

图片

图片

迭代步骤

       (1)取第一个罚因子M_{1}>0,允许ε>0,并令k:=1。

       (2)求下述无约束极值问题的最优解:minP(\mathbf{X},M_{k}),设其极小点为\mathbf{X}^{(k)}

       (3)若存在某一个j (1≤jl),有-g_{j}(X)>\varepsilon,或(和)存在某一个(1≤im),有\left | h_{i} (X^{K})\right |> \varepsilon,则取M_{k+1}>M_{k}(例如M_{k+1}=cM_{k},c=5),并令K:=k+1。然后,转回第(2)步;否则停止迭代,得到所要的点\mathbf{X}^{(k)}

例题

       用罚函数法求解

图片

解:

(1)构造罚函数

图片

(2)对于固定的M,令

图片

对于不满足约束条件的点x,有

图片

(3)求得其极小点x(M)

图片

M=0,x(M)=1/2

M=1,x(M)=1/4

M=10,x(M)=1/22

M→∞,x(M)→0

因此,原约束问题的极小点x*=0

图片

二、障碍函数法

       对于罚函数而言,函数P(X,M)可在整个E_{n}空间内进行优化,迭代过程往往在可行域外进行,不能以中间结果作为近似解使用。同时,目标函数在可行域外的性质比较复杂,甚至没有定义,就无法使用罚函数法。

       障碍函数法与其不同,该方法要求迭代过程始终在可行域内进行。如果初始迭代点取在可行域内部(严格内点),在进行无约束极小化时,会阻止函数迭代到R的边界上,使迭代过程始终在可行域内部。此时的极小化是在不包括可行域边界的可行域开集上进行的,是一种具有无约束性质的极值问题,可用无约束极小化方法求解。

       考虑非线性规划

图片

       当X点从可行域R内部趋于边界时,至少有某一个约束函数g_{j}(X)(j=1,2,...,l)趋于0,从而得到倒数函数\sum_{j=1}^{l}\frac{1}{g_{j}(\mathbf{X})}以及(负)对数函数-\sum_{j=1}^{l}lg(g_{j}(\mathbf{X}))都无限增大。

把倒数函数或对数函数加到目标函数上,则能构成新目标函数。取实数并构成一系列无约束性质的极小化问题如下:

图片

其中

图片

图片

此处,R_{0}为严格内点的集合,即

图片

       上述式子中,r_{k}\sum_{j=1}^{l}\frac{1}{g_{j}(\mathbf{X})}r_{k}\sum_{j=1}^{l}lg(g_{j}(\mathbf{X}))被称为障碍项,此处r_{k}为障碍因\left (r_{k}>0\right ),函数\bar{P}(\mathbf{X},r_{k})障碍函数

       若从某一点X^{(0)}出发,按无约束极小化方法对问题进行迭代,随着障碍因子r_{k}减小,障碍项起到的作用越小,minP(X,M)求得的解会逐步逼近原约束问题的最小解。

r_{1}>r_{2}>...r_{k}>...>0

       因而,求得问题的解X(r_{k})就会逐步逼近原约束问题的极小解。若原问题在可行域R的边界上,则随着r_{k}的减小,所求得障碍函数的极小点会不断靠近R的边界,直到满足某一精度要求时为止。

迭代步骤

(1)取第一个障碍因子r_{1}>0,允许误差ε>0,并令k:=1。

(2)构造障碍函数,如下所示。

图片

(3)对障碍函数进行无约束极小化(注意,迭代点必须在R_{0}内),设极小解为X^{(k)}\in R_{0}

(4)检查是否满足收敛准则:

图片

满足则停止迭代并得到所要的近似极小解{X}^{(k)}。否则取r_{(k+1)}<r_{k}并令k:=k+1。然后,转回第(3)步继续迭代。

例题

       用障碍函数法求解

图片

解:

(1)构造障碍函数

图片

(2)对于固定的r_{k},由

图片

(3)求得其极小点x(r)x(r)=\pm \sqrt{r_{k}}

r=1,x(r)=1

r=0.1,x(r)=0.316

r=0.01,x(r)=0.1

r→0,x(r)→0

因此,原约束问题的极小点 x*= 0

图片

初始内点迭代步骤

(1)任取一点X^{(1)}\in E_{n}r_{1}>0,并令k:=1。

(2)确定指标集\bar{T_{k}}T_{k}

图片

(3)检查\bar{T_{k}}是否为空集,若为空集,则取X^{(k)}为初始内点,停止迭代;否则,进行下一步。

(4)构造函数,将严格不等式不能满足的约束函数为假拟目标函数,严格满足的约束函数形成障碍项,构成一无约束性质问题,构造函数

图片

X^{(k)}为初始点,求解

图片

其中,

图片

设求出的极小点\mathbf{X}^{(k+1)},则\mathbf{X}^{(k+1)}\in \bar{R_{k}}。令0\leq r_{k+1}\leq r_{k}k:=k+1,转回第(2)步。

       以上就是非线性规划中罚函数法与障碍函数法的全部内容了,通过本节学习大家是否对制约函数法有了一个大致的认识呢?到此为止,非线性规划的所有知识点就已经介绍完了,想要进一步了解运筹学,关注公众号运筹说,快快学起来吧!下期小编将为大家介绍与非线性规划相关的精品案例,敬请关注!

作者 |林若唯 唐京茹

责编 | 陈梦

审核 | 徐小峰

知乎 :运筹说

Bilibili :运筹说

 CSDN :运筹说

这篇关于运筹说 第102期 | 非线性规划—制约函数法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/393164

相关文章

hdu1171(母函数或多重背包)

题意:把物品分成两份,使得价值最接近 可以用背包,或者是母函数来解,母函数(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v) 其中指数为价值,每一项的数目为(该物品数+1)个 代码如下: #include<iostream>#include<algorithm>

动态规划---打家劫舍

题目: 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。 思路: 动态规划五部曲: 1.确定dp数组及含义 dp数组是一维数组,dp[i]代表

软考系统规划与管理师考试证书含金量高吗?

2024年软考系统规划与管理师考试报名时间节点: 报名时间:2024年上半年软考将于3月中旬陆续开始报名 考试时间:上半年5月25日到28日,下半年11月9日到12日 分数线:所有科目成绩均须达到45分以上(包括45分)方可通过考试 成绩查询:可在“中国计算机技术职业资格网”上查询软考成绩 出成绩时间:预计在11月左右 证书领取时间:一般在考试成绩公布后3~4个月,各地领取时间有所不同

poj 2976 分数规划二分贪心(部分对总体的贡献度) poj 3111

poj 2976: 题意: 在n场考试中,每场考试共有b题,答对的题目有a题。 允许去掉k场考试,求能达到的最高正确率是多少。 解析: 假设已知准确率为x,则每场考试对于准确率的贡献值为: a - b * x,将贡献值大的排序排在前面舍弃掉后k个。 然后二分x就行了。 代码: #include <iostream>#include <cstdio>#incl

代码随想录冲冲冲 Day39 动态规划Part7

198. 打家劫舍 dp数组的意义是在第i位的时候偷的最大钱数是多少 如果nums的size为0 总价值当然就是0 如果nums的size为1 总价值是nums[0] 遍历顺序就是从小到大遍历 之后是递推公式 对于dp[i]的最大价值来说有两种可能 1.偷第i个 那么最大价值就是dp[i-2]+nums[i] 2.不偷第i个 那么价值就是dp[i-1] 之后取这两个的最大值就是d

C++操作符重载实例(独立函数)

C++操作符重载实例,我们把坐标值CVector的加法进行重载,计算c3=c1+c2时,也就是计算x3=x1+x2,y3=y1+y2,今天我们以独立函数的方式重载操作符+(加号),以下是C++代码: c1802.cpp源代码: D:\YcjWork\CppTour>vim c1802.cpp #include <iostream>using namespace std;/*** 以独立函数

函数式编程思想

我们经常会用到各种各样的编程思想,例如面向过程、面向对象。不过笔者在该博客简单介绍一下函数式编程思想. 如果对函数式编程思想进行概括,就是f(x) = na(x) , y=uf(x)…至于其他的编程思想,可能是y=a(x)+b(x)+c(x)…,也有可能是y=f(x)=f(x)/a + f(x)/b+f(x)/c… 面向过程的指令式编程 面向过程,简单理解就是y=a(x)+b(x)+c(x)

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

轨迹规划-B样条

B样条究竟是干啥的?白话就是给出一堆点,用样条的方式,给这些点连接起来,并保证丝滑的。 同时B样条分为准均匀和非均匀,以下为准均匀为例。 参考链接1:https://zhuanlan.zhihu.com/p/50626506https://zhuanlan.zhihu.com/p/50626506 参考链接2: https://zhuanlan.zhihu.com/p/536470972h

利用matlab bar函数绘制较为复杂的柱状图,并在图中进行适当标注

示例代码和结果如下:小疑问:如何自动选择合适的坐标位置对柱状图的数值大小进行标注?😂 clear; close all;x = 1:3;aa=[28.6321521955954 26.2453660695847 21.69102348512086.93747104431360 6.25442246899816 3.342835958564245.51365061796319 4.87