首页 > 其他分享 >MATLAB约束最优化之罚函数法、障碍函数法和SQP方法

MATLAB约束最优化之罚函数法、障碍函数法和SQP方法

时间:2022-10-31 23:22:40浏览次数:62  
标签:end searchdir 罚函数法 SQP fval MATLAB fmincon options history

1. 罚函数法

罚函数方法包括外点法和内点法。外点法又叫外罚函数法,顾名思义,迭代点再约束条件的可行域之外,既用于不等式约束又可用于等式约束。

同样地,罚函数方法又叫序列无约束最小化方法。顾名思义,罚函数方法是通过构造惩罚项来消除约束条件,从而转化为无约束最优化问题。

Matlab通过fminunc来求解无约束最优化问题。下述程序把整个程序封装到函数runfminunc里面,返回最优解xsol和最优值fval、迭代过程值history和搜索路径searchdir。

其中函数fminunc是求解无约束最优化问题的,参数@objfun是调用目标函数句柄,x0是初始值,options是优化参数,其中@fminunc是优化方法,@outfun定义了迭代过程中每一步怎么做,这里是每一步都保存当前值到结构体history中,并保存迭代中的搜索方向searchdir,Display设为iter即可,Algorithm表示用quasi-newton拟牛顿法求解。

[xsol,fval,history,searchdir] = runfminunc

function [xsol,fval,history,searchdir] = runfminunc
history.x = [];
history.fval = [];
searchdir = [];
x0 = [0, 0];
options = optimoptions(@fminunc,'OutputFcn',@outfun,...
    'Display','iter','Algorithm','quasi-newton');
[xsol,fval] = fminunc(@objfun,x0,options);

    function stop = outfun(x,optimValues,state)
        stop = false;
        
        switch state
            case 'init'
                disp('start');
            case 'iter'
                history.fval = [history.fval; optimValues.fval];
                history.x = [history.x; x];
                searchdir = [searchdir;...
                    optimValues.searchdirection'];
            case 'done'
                disp('end');
            otherwise
        end
    end

    function f = objfun(x)
        M = 5000;
        f = (x(1)-2.25)^2+(x(2)-2)^2;
        g = f+M*max(x(1)^2-x(2),0)+M*max(x(1)+x(2)-6,0)-M*min(x(1),0)-M*min(x(2),0);
    end

end

2. 障碍函数法(又叫内点法、内罚函数法)

障碍函数法又叫内点法,也是罚函数法的范畴,内点法一般只适用于 不等式约束 的优化问题。

内点法就要用fmincon方法来求解了,在MATLAB中,fmincon方法如下:

其中Algorithm字段设置为了‘interior-point’,表示通过内点法求解fmincon所定义的约束优化问题,其实fmincon的options中缺省了Algorithm字段的话,默认值就是内点法。除此之外还有‘sqp’等。

options = optimoptions(@fmincon,'OutputFcn',@outfun,... 
    'Display','iter','Algorithm','interior-point');
[xsol,fval] = fmincon(@objfun,x0,[],[],[],[],[],[],@confun,options);

完整代码如下:

其中fmincon方法的参数按顺序分别是:

目标函数、初始解、线性等式约束A和b、线性不等式约束Aeq和beq、解的范围lb和ub,这里一律设置为了空‘[]’,表示没有。

@confun是定义了非线性约束的句柄。

function [xsol,fval,history,searchdir] = interiorfmincon
 
% Set up shared variables with outfun
history.x = [];
history.fval = [];
searchdir = [];
 
% Call optimization
x0 = [0, 0];
options = optimoptions(@fmincon,'OutputFcn',@outfun,... 
    'Display','iter','Algorithm','interior-point');
[xsol,fval] = fmincon(@objfun,x0,[],[],[],[],[],[],@confun,options);

 function stop = outfun(x,optimValues,state)
     stop = false;
 
     switch state
         case 'init'
             disp('start');
         case 'iter'
           history.fval = [history.fval; optimValues.fval];
           history.x = [history.x; x];
         case 'done'
             disp('end');
         otherwise
     end
 end
 
 function f = objfun(x)
     f = (x(1)-2.25)*(x(1)-2.25) + (x(2)-2)*(x(2)-2);
 end
 
 function [c, ceq] = confun(x)
     % Nonlinear inequality constraints
     c = [x(1)*x(1)-x(2);
         x(1)+x(2) - 6];
     % Nonlinear equality constraints
     ceq = [];
 end
end

调用[xsol, fval, history, searchdir] = iteriorrunfmincon即可

3. SQP方法(即序列二次规划法)

SQP方法把约束最优化问题转换为二次规划,迭代求解。代码和内点法几乎一模一样,只有一个地方不同,如下:

options = optimoptions(@fmincon,'OutputFcn',@outfun,... 
    'Display','iter','Algorithm','sqp');
[xsol,fval] = fmincon(@objfun,x0,[],[],[],[],[],[],@confun,options);

 

标签:end,searchdir,罚函数法,SQP,fval,MATLAB,fmincon,options,history
From: https://www.cnblogs.com/zhaoke271828/p/16846253.html

相关文章

  • matlab最小二乘法数据拟合函数详解
    定义:最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与......
  • 基于龙格-库塔法Runge-Kutta的常微分方程的求解matlab仿真
    目录一、理论基础二、核心程序三、测试结果一、理论基础四阶龙格库塔法龙格库塔法的家族中的一个成员如此常用,以至于经常被称为“RK4”或者就是“龙格库塔法”。令初......
  • 基于Matlab中FDATool工具箱的滤波器设计及相关文件的生成
     招募大量matlab技术人员,有大量matlab需求订单,均为个人短期可以完成,有时间的朋友可以加我微信:nn505203,有需求也可以联系此微信。加好友备注博客园matlab技术即可。......
  • Matlab中图片保存的四种方法
    matlab的绘图和可视化能力是不用多说的,可以说在业内是家喻户晓的。Matlab提供了丰富的绘图函数,比如ez**系类的简易绘图函数,surf、mesh系类的数值绘图函数等几十个。另外其......
  • MATLAB入门实验-MATLAB实验1...MATLAB实验8
    MATLAB入门实验-MATLAB实验1...MATLAB实验8实验1MATLAB系统环境运算基础一、实验目的掌握启动和退出MATLAB的方法。掌握MATLAB操作界面的组成。掌握建立矩阵的方法......
  • Matlab实现:图像边缘提取
    1、边缘提取算法方法一:一阶微分算子Sobel算子Sobel算子检测方法对灰度渐变和噪声较多的图像处理效果较好,Sobel算子对边缘定位不是很准确,图像的边缘不止一个......
  • Matlab编程基础
    “Matlab”是“Matrix Laboratory”的缩写,中文“矩阵实验室”,是强大的数学工具。本文侧重于Matlab的编程语言侧面,讲述Matlab的基本语法,以及用Matlab语言进行程序设计。值......
  • 基于Matlab的FIR滤波器设计与实现
    一、摘要前面一篇文章介绍了通过FDATool工具箱实现滤波器的设计,见“基于Matlab中FDATool工具箱的滤波器设计及相关文件的生成”,这里通过几个例子说明采用Matlab语言设......
  • 【跳频通信】基于MATLAB的跳频通信系统仿真
    1.软件版本matlab2015a2.系统程序clc;clear;closeall;warningoff;addpath'func\'addpath'func\mfiles\'loaddata.matfs=100e6;Nfft......
  • 基于等波纹最佳逼近法的FIR数字滤波器实现matlab仿真
    目录一、理论基础二、案例背景三、MATLAB核心代码四、仿真结论分析一、理论基础 等波纹最佳逼近法,其本质是一种优化算法,该方法有效克服了基于窗函数的FIR滤波器设......