内点法[通俗易懂]

内点法[通俗易懂]内点法属于约束优化算法。约束优化算法的基本思想是:通过引入效用函数的方法将约束优化问题转换成无约束问题,再利用优化迭代过程不断地更新效用函数,以使得算法收敛。内点法(罚函数法的一种)的主要思想是:

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

文字理解

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

数学定义

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

\[\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)\)的约束最优解,否则转入下一步;
  5. \(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.net/167972.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ‘android.support.v4.content‘ that cannot be safely rewritten. for androidx

    ‘android.support.v4.content‘ that cannot be safely rewritten. for androidx

    2021年10月2日
    148
  • psutil documentation

    psutil documentation转载自https://pythonhosted.org/psutil/#psutil.STATUS_RUNNINGWarning Thisdocumentationreferstonew2.Xversionofpsutil.Instructionsonhowtoportexisting1.2.1codeare here.Old1

    2022年6月13日
    22
  • 解决height:100vh超出屏幕高度的问题

    解决height:100vh超出屏幕高度的问题min-height:calc(100vh-头部/底部的高度)

    2022年6月3日
    36
  • ASSERT_VALID_assert语句

    ASSERT_VALID_assert语句ASSERT()ASSERT()被测试它的参数,若参数为0,则中断执行并打印一段说明消息。在Release版本的程序中它不起任何作用。ASSERT()使用的时候必须保证参数表达式中不能有函数调用(译者注:ASSERT()宏在Release版本中不对表达式求值),因此对于任何有函数调用的参数表达式,应该使用宏VERIFY(),以保证表达式中的函数调用在Release版本中会被正确求值…

    2022年9月6日
    3
  • 设备树中ranges属性理解[通俗易懂]

    设备树中ranges属性理解[通俗易懂]作者彭东林pengdonglin137@163.com文章来源http://www.cnblogs.com/pengdonglin137/p/7401049.html正文一、设备树下面是我们将要实验的设备树的例子:/{#address-cells=&lt;1&gt;;#size-cells=&lt;1&g…

    2022年6月19日
    120
  • java webservice 实例

    java webservice 实例javawebservice实例 byhgwayen实验目的1.实现一个具有WebService功能的分布式对象类,能够实现求两个整数的最大值的功能。2.在另一台计算机(虚拟机)上,编写客户端程序,通过WebService技术访问远程的基于WebService的分布式对象Max,达到求两个整数的最大值的功能。一、创建并运行HelloWorldWebService.java。1.在classpath路径下新建/rs_midtest、/rs_

    2022年7月21日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号