• 最优化-直接方法


    坐标轮换法

      对于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

    先反射

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

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

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

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

    自己的一点理解:

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

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

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

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

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

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

      

  • 相关阅读:
    HOJ 2139 Spiderman's workout(动态规划)
    FZU 2107 Hua Rong Dao(dfs)
    Java 第十一届 蓝桥杯 省模拟赛 计算机存储中有多少字节
    Java 第十一届 蓝桥杯 省模拟赛 计算机存储中有多少字节
    Java 第十一届 蓝桥杯 省模拟赛 计算机存储中有多少字节
    Java 第十一届 蓝桥杯 省模拟赛 合法括号序列
    Java 第十一届 蓝桥杯 省模拟赛 合法括号序列
    Java 第十一届 蓝桥杯 省模拟赛 合法括号序列
    Java 第十一届 蓝桥杯 省模拟赛 无向连通图最少包含多少条边
    Java 第十一届 蓝桥杯 省模拟赛 无向连通图最少包含多少条边
  • 原文地址:https://www.cnblogs.com/shensobaolibin/p/10201681.html
Copyright © 2020-2023  润新知