zoukankan      html  css  js  c++  java
  • 最优化-直接方法

    坐标轮换法

      对于n维最优化问题

      有初始点x1   沿着n个方向(坐标轴的方向)不断做一维搜索  得到xn+1

      对于x1沿着 xn+1 - x1的方向做一维搜索得到 xn+2

      xi+1 = xi + α*di

      当xin+1满足某一终止准则时,停止算法,否则继续迭代下去

    正交程度和共轭程度

    正交程度

      对于两个方向向量u1,u2

      我们以这两个方向向量单位向量的平行四边形面积作为正交程度

      对于二维向量 δ = (x1 * y2 - y1*x2)  δ = || u1 × u2||

      对于n维向量其中的d需要是已经单位化的向量

      δ = | det(d1,d2,d3,,,,,dn) |

      det表示行列式的值

    共轭程度

      q = G1/2 * d

      q的正交程度即为d关于G的共轭程度

    正交程度和共轭程度都是越接近与1越好

    Powell直接方法

    对于n维函数f(x) 

    取初始点x1和n个正交方向 di  进行一维搜索

    得到点列xi    xi+1 = xi + α*di

    求出进行一维搜索时,函数值下降的最大的位置xm

    f(xm) - f(xm+1)最大

    记这个搜索方向为U

    求解一维搜索问题

    u = xn+1 - x1

    xn+2 = x1 + α*μ  记步长为alaph

    若 || xn+2 - x1 || < ε 终止算法

    若最后一次搜索的步长 alaph <(  (f(x1) - f(xn+2)) / u ) 1/2

    则用最后的搜索方向替换第m次的搜索方向

    具体替换方式,用前移的方式去填充空格,然后将最后的方向放在末尾

    单纯形法

    单纯形法有几个基本步骤

    对于n维函数f(x),单纯形有n+1个节点

    记函数值最大的节点为xmax

    函数值最小的节点为xmin

    反射:

      对于已有的一个单纯形

      找出单纯形的节点中函数值最大的那一个(xmax,  f(xmax))

      剩下的节点求均值得到重心u

      xmax + xnew = 2*u

      xnew即为反射之后的点,将xnew代替xmax即可得到反射之后的单纯形

      

      当然u也不是非要作为中点,xnew = u + α*(u - xmax)

    扩大:

      得到反射点之后,若f(xnew) < f(xmin)

      则说明这个方向很有可能是下降方向,那就扩大看看

      xnew2= u + γ*(xnew - u) 一般来说γ = 2

      其实就是将反射的方向扩大了一倍

      若f(xnew2) < f(xnew)

      那么用xnew2代替xnew就好

    收缩:

      考虑次大值f(x2nd)

      若f(xnew) < f(x2nd)可以进行下一步

      若f(xnew) >= f(x2nd) 那么下一步反射时会出现循环(因为f(xnew)仍是最大值,再反射的话会变成xmax)

      这个时候就要用到收缩

      找到xnew和xmax的最小值X’

      xnew3 = u + ß * (X‘  - u)

      若f(xnew3) < f(X')

      然后用xnew3替换xnew

      一般来说ß  = 1//2

      这就是一个取中点的操作嘛

      否则进行缩边

     

    缩边:

      若f(xnew3) >= f(X')

      那么就进行缩边将每个点往xmax的方向移动

      xi = xmax + ß*(xi - xmax)

    当函数的离差平方和< e时终止算法

    可以看到单纯型法就是如下几步

    取初始点x0 步长alaph

    获取n个点 xi = x0 + ei *alaph

    先反射

      若反射点的值 < 最小值则进行扩大,取扩大点和反射点的最小值来替换最大值----->结束

      若反射点是反射之后单纯形的最大值则进行收缩,就是取最大值和反射点的最小值,然后将其他点的均值和最小值作为端点,求他们的中点

      若这个中点不是替换之后单纯形的最大值  ----->结束

      否则不对最大值进行替换,反而将单纯形向最大值进行缩边   ----->结束

    自己的一点理解:

      整个算法就是尽量让单纯形向值变小的方向移动

      先取试探最大值->均值方向是不是缩小方向

      然后看均值往两端的方向是不是缩小方向

      若都不是,那么也就是说最大值点是一定程度上的最优点

      就将所有点往最大值点移动

      可以想象成一个多维空间中的超史莱姆,不断地往最优点移动哈哈哈哈哈

      

  • 相关阅读:
    记录一下周末作业
    超链接的 使用和按钮添加
    学习了网页设置上传视频
    Java-JDK安装及环境变量配置
    java-库存管理案例
    java-DateFormat
    java-正则表达式练习
    java-StringBuffer类
    java面对对象-匿名对象
    java static和final关键字
  • 原文地址:https://www.cnblogs.com/shensobaolibin/p/10201681.html
Copyright © 2011-2022 走看看