zoukankan      html  css  js  c++  java
  • 四种最优化方法总结

    最优化方法
    当我们准备好了一个函数表达式之后,如何求解该函数的最优值就会成为一个巨大的挑战。以下是常用的四种优化方法。

    无约束优化问题
    所谓无约束优化问题,就是指对一个函数求最优值,最优值可以出现在函数上任意一点,而我们不去限定查找最优值的范围。

    有约束优化问题
    有约束优化问题就是指给自变量的取值范围做限制,缩小优化范围,经典的约束优化算法有:

    • 内点法(interior-point)
    • 有效集法(active-set)
    • SQP算法(sqp)
    • 信赖域反射法(trust-region-reflective)

    约束,又分线性约束与非线性约束,所谓线性约束,就是指约束条件中的自变量都是1次幂的,非线性约束即有高次幂的自变量出现。

    假设如下约束优化函数和约束:


    首先把这个函数的图像在Matlab中给大家画出来:

    %%目标函数图像绘制
    x1=-1:0.05:1;
    x2=-1:0.05:1;
    [x1,x2]=meshgrid(x1,x2);
    y=-x1.*x2;
    figure(1)
    %使用mesh函数画图
    mesh(x1,x2,y);
    figure(2)
    %使用surfl画图
    % surfl(x1,x2,y);
    % figure(3)
    %使用surf函数画图
    surf(x1,x2,y);
    hold on;
    %约束区域部分位置
    [x1,x2]=meshgrid(-1:0.05:1);
    z=1-x1.^2-x2.^2;
    ind=(z>=0);
    h=scatter(x1(ind),x2(ind),'r');
    hold on;

    %% 绘制圆柱 % 上半部分 R=1;%半径 h=-1;%圆柱高度 m=1000;%分割线的条数 [x1,y1,z1]=cylinder(R,m);%创建以(0,0)为圆心,高度为[0,1],半径为R的圆柱 z1=h*z1;%高度放大h倍 mesh(x1,y1,z1)%重新绘图 % 下半部分 hold on R=1;%半径 h=1;%圆柱高度 m=1000;%分割线的条数 [x1,y1,z1]=cylinder(R,m);%创建以(0,0)为圆心,高度为[0,1],半径为R的圆柱 z1=h*z1;%高度放大h倍 mesh(x1,y1,z1)%重新绘图

    从上面第三张图中可知红色圆圈位置处有最优值,对应的最优质的大约时-0.5,下面通过优化计算查看最优值结果。

    使用Matlab实现一下四种优化算法:

    function [xsol, fval] = runfmincon
    % 初始点
    x0 = [-0.1 -0.1];
     
    % 四种优化算法,大家选一种用,这里用的是内点法
    % 'active-set', 'interior-point', 'sqp', or 'trust-region-reflective'.
    % 在优化器中选择优化算法
    options = optimset('Display', 'iter-detailed', 'Algorithm', 'interior-point', 'MaxIter', 8); % 优化器参数
    % fmincon参数解释
    % fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options);
    % fun:要优化的函数
    % x0:自变量的初始值
    % A:非等式(<)线性约束的约束矩阵A
    % b:非等式(<)线性约束的约束条件矩阵b
    % Aeq:等式约束的线性约束的约束矩阵Aeq
    % beq:等式线性约束的约束条件矩阵beq
    % lb,ub:自变量的下限和上限
    % nonlcon:非线性约束
    [xsol, fval] = fmincon(@objfun, x0, [], [], [], [], [], [], @confun, options);
     
    % 目标函数
     function f = objfun(x)
         f = - x(1) * x(2);
     end
     
    % 非线性约束
     function [c, ceq] = confun(x)
         % Nonlinear inequality constraints
         c = [x(1)^2 + x(2)^2 - 1];
         % Nonlinear equality constraints
         ceq = [];
     end
    end
    %在Matlab命令行窗口输入
    [xsol,fval] = runfmincon;
    % xsol中是最优点  fval为最优点对应的最优值
    % 迭代优化结果
    [x1,x2]=[-0.7071,-0.7071]
    f=-0.5
    我们向往远方,却忽略了此刻的美丽
  • 相关阅读:
    电脑缺少网卡驱动不能上网
    eclipse的package, folder, source folder 异同以及相互转化
    向数据库表插入查询的数据
    更换项目jdk版本
    linux安装jdk(非rpm命令)
    主机ping不同虚拟机
    如何实现VoIP中大并发应用
    简单设置几个参数让你的电脑无人可染指(只有你能用)
    aliyun阿里云Maven仓库地址——加速你的maven构建
    nodejs持续学习--必须关注4网站
  • 原文地址:https://www.cnblogs.com/zhjblogs/p/15736022.html
Copyright © 2011-2022 走看看