前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >内点法[通俗易懂]

内点法[通俗易懂]

作者头像
全栈程序员站长
发布2022-09-20 15:14:18
1.3K0
发布2022-09-20 15:14:18
举报
文章被收录于专栏:全栈程序员必看

文字理解

内点法属于约束优化算法。约束优化算法的基本思想是:通过引入效用函数的方法将约束优化问题转换成无约束问题,再利用优化迭代过程不断地更新效用函数,以使得算法收敛。 内点法(罚函数法的一种)的主要思想是:在可行域的边界筑起一道很高的“围墙”,当迭代点靠近边界时,目标函数徒然增大,以示惩罚,阻止迭代点穿越边界,这样就可以将最优解“档”在可行域之内了。

数学定义

对于下面的不等式约束的优化问题:

\[\min f(x), x \in R^n \]

\[s.t \quad g_{i}(x) \leq0, i=1,2,…,m \]

利用内点法进行求解时,构造惩罚函数的一般表达式为

\[\varphi (X, r)=f(X)-r\sum_{i=1}^{m}\frac{1}{g_{i}(X)} \]

或者

\[\varphi (X, r)=f(X)-r\sum_{i=1}^{m}{\ln[-g_{i}(X)]} \]

算法步骤

  1. 取初始惩罚因子\(r^{(0)}>0\),允许误差\(\epsilon>0\);
  2. 在可行域\(D\)内选取初始点\(X^{(0)}\),令\(k=1\);
  3. 构造惩罚函数\(\varphi (X, r^{(k)})\),从\(X^{(k-1)}\)点出发用无约束优化方法求惩罚函数\(\varphi (X, r^{(k)})\)的极值点\((X^{*}, r^{(k)})\);
  4. 检查迭代终止准则:如果满足
|X^{} r{(k)}-X{} r{(k-1)}|\leq\epsilon_{1}=10{-5}-10^{-7}

或者

|\frac{\varphi (X^{} ,r^{(k)})-\varphi (X^{}, r^{(k-1)})}{\varphi (X^{*}, r{(k-1)})}|\leq\epsilon_{2}=10{-3}-10^{-4}

则停止迭代计算,并以\((X^{*}, r^{(k)})\)作为原目标函数\(f(X)\)的约束最优解,否则转入下一步;

  1. 取\(r^{(k+1)}=cr^{(k)}\),\(X^{(0)}=X^{*}r^{(k)}\),\(k=k+1\),转向步骤3。递减系数\(c=0.1-0.5\),通常取0.1。

内点惩罚函数法特点及其应用

  • 惩罚函数定义于可行域内,序列迭代点在可行域内不断趋于约束边界上的最优点(这就是称为内点法的原因)
  • 只适合求解具有不等式约束的优化问题

内点法求解案例

用内点法求下面约束优化问题的最优解,取迭代初始\(X^0 = [0, 0]^{\mathrm{T}}\),惩罚因子的初始值\(r^0 = 1\),收敛终止条件\(\|X^k – X^{k-1}\| \leq \varepsilon\),\(\varepsilon = 0.01\)

\[\min f(X) = x_1^2 + x_1^2 – x_1x_2 – 10x_1 – 4x_2 + 60 \]

\[\mathrm{s.t.}\; g(X) = x_1 + x_2 -8 \leq 0 \]

  1. 构造内惩罚函数:\(\varphi(X, r) = x_1^2 + x_1^2 – x_1x_2 – 10x_1 – 4x_2 + 60 -r\ln(x_1 + x_2 -8)\)
  2. 用解析法求内惩罚函数的极小值

\[\nabla\varphi(X, r) = [2x_1 – x_2 – 10 – \frac{r}{x_1 + x_2 – 8} \quad 2x_2 – x_1 – 4 – \frac{r}{x_1 + x_2 – 8}] \]

令\(\nabla \varphi(X, r) = 0\)得:\(\begin{align}2x_1 – x_2 – 10 – \frac{r}{x_1 + x_2 – 8} = 0 \\ 2x_2 – x_1 – 4 – \frac{r}{x_1 + x_2 – 8} = 0\end{align}\)

解得:

\(X^*_1(r) = \begin{bmatrix}\frac{13 + \sqrt{9+2r}}{2} & \frac{9 + \sqrt{9+2r}}{2}\end{bmatrix}^{\mathrm{T}}\)

\(X^*_2(r) = \begin{bmatrix}\frac{13 – \sqrt{9+2r}}{2} & \frac{9 – \sqrt{9+2r}}{2}\end{bmatrix}^{\mathrm{T}}\)

\(\because g(X^*_1(r)) > 0\)

\(\therefore\) 舍去\(X^*_1(r)\)

\(\because \varphi(X, r)\)为凸函数

\(\therefore\) 无约束优化问题的最优解为\(X^*(r) = X^*_2(r) = \begin{bmatrix}\frac{13 – \sqrt{9+2r}}{2} & \frac{9 – \sqrt{9+2r}}{2}\end{bmatrix}^{\mathrm{T}}\)

  1. 求最优解

当\(r^0 = 1\)时,\(X^*(r^0) = \begin{pmatrix}4.8417 & 2.8417\end{pmatrix}^{\mathrm{T}}\),\(\|X^*(r^0) – X^0\| = 5.6140 > \varepsilon\)

当\(r^1 = 0.1\)时,\(X^*(r^1) = \begin{pmatrix}4.9834 & 2.9834\end{pmatrix}^{\mathrm{T}}\),\(\|X^*(r^1) – X^*(r^0)\| = 0.2004 > \varepsilon\)

当\(r^2 = 0.01\)时,\(X^*(r^2) = \begin{pmatrix}4.9983 & 2.9983\end{pmatrix}^{\mathrm{T}}\),\(\|X^*(r^2) – X^*(r^1)\| = 0.0211 > \varepsilon\)

当\(r^3 = 0.01\)时,\(X^*(r^3) = \begin{pmatrix}4.9998 & 2.9998\end{pmatrix}^{\mathrm{T}}\),\(\|X^*(r^3) – X^*(r^2)\| = 0.0021 < \varepsilon\)

即\(X^*(r^3)\)为最优解

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/167972.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文字理解
  • 数学定义
  • 算法步骤
  • 内点惩罚函数法特点及其应用
  • 内点法求解案例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档