zoukankan      html  css  js  c++  java
  • matlab : Nelder mead simplex 单纯形直接搜索算法;

    function [ param ] = NeldSearch( param )
    %NERDSEARCH 此处显示有关此函数的摘要
    %   nelder mead simplex 单纯形直接搜索算法;
        %param   r,g,b 初始三角形顶点;
    %%   
        initPts = [param.b;param.g;param.w];
        if(sum(max(initPts) - min(initPts)) < 1e-5)
            param.solve = mean(initPts);
            return;
        end
        if( ~isfield(param,'b') || ~isfield(param,'g') || ~isfield(param,'w') )
            disp('输入参数不正确');
            return;
        end
        
        %先排序;    
        fvals = [func(param.b) func(param.g) func(param.w)];
        [newSort,Index]= sort(fvals);  %默认升序;
        %确定b,g,w;
        param.b = initPts(Index(1),:);
        param.g = initPts(Index(2),:);
        param.w = initPts(Index(3),:);
        
        param.m =  (param.b + param.g)/2;
        param.r =  2 * param.m - param.w;
        
        if( func(param.r) < func(param.g) )
            param = CaseI(param);
        else
            param = CaseII(param);
        end   
        param = NeldSearch(param);            %递归;   
        disp('--END--');
    end
    
    function  param = CaseI(param)
        if(func(param.b) < func(param.r) )
            param.w = param.r;
        else
            param.e = 2 * param.r - param.m;
            if(func(param.e) <func(param.b))
                param.w =  param.e;
            else
                param.w = param.r;
            end
        end
    end
    
    
    function  param = CaseII(param)
        if( func(param.r) < func(param.w) ) 
            param.w = param.r;
        end
        param.c = (param.w + param.m)/2;
        if( func(param.c) < func(param.w) )
            param.w = param.c;
        else
            param.s = (param.b + param.w)/2;
            param.w = param.s;
            param.g =  param.m;
        end
    end
    
    function  f = func(point)
        x= point(1);
        y= point(2);
        f = x * x - 4 * x + y * y - y - x * y;
    end
    

      

    Nelder mead simplex为单纯形直接搜索算法,可以对无约束多元函数进行寻优,不过该方法找到的解为局部最优解,优点在于能够对无导多元函数进行

    优化处理;

  • 相关阅读:
    最长回文子序列---DP
    最长回文子串(暴力破解)
    两数相加
    多数元素
    MPI集群搭建
    字符串截取子串(Java substring , indexOf)
    JDK和环境配置,eclipse安装与使用
    ubantu上面 NFS服务器安装
    Django中间件的应用
    Django的url路由系统简介
  • 原文地址:https://www.cnblogs.com/yinwei-space/p/9257274.html
Copyright © 2011-2022 走看看