第二天:非线性规划(nonlinear programming)

目录:

        一、非线性规划介绍

        二、matlab中非线性规划函数

                1.fminbnd——求解一维函数 

                2.fminsearch——求解无约束多维极值问题

                3.fminimax——求解最大最小值(多目标)问题

                4.fminunc——求解无约束多维极值问题

                5.fmincon——约束优化问题

        三、启发式算法介绍

                1.模拟退火算法(SA,Simulated Annealing)

                2.神经网络算法(NN,Neural Network)

                3.蚁群算法(ACO,Ant Clony Optimization)

一、非线性规划介绍

        线性规划的目标函数与约束条件都是线性的,如果目标函数与约束条件中包含有非线性因素存在,则这样的规划问题就被称为非线性规划问题。其实,规划问题可以简单粗暴的一分为二,不是线性就是非线性。在实际的问题中,非线性规划的比率较高,今天学习的非线性规划也仅仅作为一个简单的入门。

        非线性规划的一般数学表示形式为:

                                                                min f(X)

                                            st.                h(X)=0

                                                                g(X)>=0

与线性规划的数学形式一致

二、matlab中的内置非线性规划函数

        matlab中的内置非线性规划函数在其工具箱Optimization Toolbox中均有对应的功能,介绍函数后我们可以直接使用工具箱来进行求解。

1.fminbnd——求解一维函数

[x,fx,exitflag,output]=fminbnd(fun,lb,ub,options)

输出参量分析:

x:最小值点

fx:最小值

exitflag:输出算法停止原因

             若1,则已寻找到最优解

             若0,迭代次数超过设置的迭代次数

             若-2,则输入的lb,ub错误

output:一个struct字段,包含三项信息

              interations:迭代次数

              funcCounnt:函数赋值次数

             algorithm:使用算法

输入参量分析:

fun:输入的函数,以'fun'或@fun的形式输入

lb,ub:解的可行域

options:options是对求解过程中的迭代次数,终止容差(我理解的是解的精度),以及是否做出迭代图像的控制。options的设置要使用optimset函数

以一段具体代码来分析:

options = optimset('Display','iter');          %显示迭代过程。
options = optimset('PlotFcns',@optimplotfval); %绘制迭代图。
options = optimset('Tolx',1e-6);              %设置解的容差
options = optimset('MaxIter',1000);           %设置最大迭代次数

这里以matlab内置humps函数演示

humps图像如图 

ezplot(@humps,[0 2])

 取解的范围为[0.2 1]

clear all
clc
lb = 0.2;                                      %规定解的可行域
ub = 1;
options = optimset('Display','iter');          %显示每一步的迭代结果
options = optimset('PlotFcns',@optimplotfval); %绘制迭代图。
options = optimset('Tolx',1e-6);               %设置解的容差
format long
[x,fx,exitflag,output]=fminbnd(@humps,lb,ub,options)

运行结果:

x =

   0.637008945968909


fx =

  11.252754125696612


exitflag =

     1


output = 

  包含以下字段的 struct:

    iterations: 10
     funcCount: 11
     algorithm: 'golden section search, parabolic interpolation'
       message: '优化已终止:↵ 当前的 x 满足使用 1.000000e-06 的 OPTIONS.TolX 的终止条件↵'

由于只能求一维函数极值,因此fminbnd函数的应用(比如解一些高中数学题?)并不多,但通过对fminbnd函数的使用却能让我们学会options的设置以及明白各项输出结果所代表的意义。

2.fminsearch——求解无约束多维问题

        fminsearch是用来求解无约束条件的多维极值函数,其调用方式为:

                        [x,fx,exitflag,output]=fminsearch(fun,x0,options)

输出输入参量的意义同上,其中x0为给定初始解。

matlab代码实现

function f=fun(x)        %建立函数的.m文件
f=x(1)+x(2)^2/(4*x(1))+x(3)^2/x(2)+2/x(3);
end

clear all
clc
options = optimset('Display','iter');          %显示每一步的迭代结果
options = optimset('Tolx',1e-6);              %设置解的容差
[x,fx,exitflag,output]=fminsearch(@fun,[0.5 0.5 0.5],options)

 运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值