MATLAB优化问题(1)

本文涉及的产品
网络型负载均衡 NLB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 第5章  优化问题 5.1  线性规划问题 线性规划问题是目标函数和约束条件均为线性函数的问题,MATLAB6.0解决的线性规划问题的标准形式为: min   sub.to:                                        其中f、x、b、beq、lb、ub为向量,A、Aeq为矩阵。

5章  优化问题

5.1  线性规划问题

线性规划问题是目标函数和约束条件均为线性函数的问题,MATLAB6.0解决的线性规划问题的标准形式为:

min  

sub.to:

             

                        

其中f、x、b、beq、lb、ub为向量,AAeq为矩阵。

其它形式的线性规划问题都可经过适当变换化为此标准形式。

MATLAB6.0版中,线性规划问题(Linear Programming)已用函数linprog取代了MATLAB5.x版中的lp函数。当然,由于版本的向下兼容性,一般说来,低版本中的函数在6.0版中仍可使用。

函数  linprog

格式  x = linprog(f,A,b)   %min  f ' *x   sub.to  线性规划的最优解。

x = linprog(f,A,b,Aeq,beq)   %等式约束,若没有不等式约束,则A=[ ]b=[ ]

x = linprog(f,A,b,Aeq,beq,lb,ub)   %指定x的范围,若没有等式约束 ,则Aeq=[ ]beq=[ ]

x = linprog(f,A,b,Aeq,beq,lb,ub,x0)   %设置初值x0

x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options)    % options为指定的优化参数

[x,fval] = linprog()   % 返回目标函数最优值,即fval= f ' *x

[x,lambda,exitflag] = linprog()   % lambda为解x的Lagrange乘子。

[x, lambda,fval,exitflag] = linprog()   % exitflag为终止迭代的错误条件。

[x,fval, lambda,exitflag,output] = linprog()   % output为关于优化的一些信息

说明  若exitflag>0表示函数收敛于解x,exitflag=0表示超过函数估值或迭代的最大数字,exitflag<0表示函数不收敛于解x;若lambda=lower 表示下界lb,lambda=upper表示上界ublambda=ineqlin表示不等式约束,lambda=eqlin表示等式约束,lambda中的非0元素表示对应的约束是有效约束;output=iterations表示迭代次数,output=algorithm表示使用的运算规则,output=cgiterations表示PCG迭代次数。

5-1  求下面的优化问题

min  

sub.to    

            

                     

                      

解:

>>f = [-5; -4; -6];

>>A =  [1 -1  1;3  2  4;3  2  0];

>>b = [20; 42; 30];

>>lb = zeros(3,1);

>>[x,fval,exitflag,output,lambda] = linprog(f,A,b,[],[],lb)

结果为:

x =      %最优解

    0.0000

   15.0000

    3.0000

fval =     %最优值

  -78.0000

exitflag =     %收敛

     1

output = 

      iterations: 6   %迭代次数

    cgiterations: 0

       algorithm: 'lipsol'   %所使用规则

lambda = 

    ineqlin: [3x1 double]

      eqlin: [0x1 double]

      upper: [3x1 double]

      lower: [3x1 double]

>> lambda.ineqlin

ans =

    0.0000

    1.5000

    0.5000

>> lambda.lower

ans =

    1.0000

    0.0000

    0.0000

表明:不等约束条件23以及第1个下界是有效的

5.2  foptions函数

对于优化控制,MATLAB提供了18个参数,这些参数的具体意义为:

options(1)-参数显示控制(默认值为0)。等于1时显示一些结果。

    options(2)-优化点x的精度控制(默认值为1e-4)

    options(3)-优化函数F的精度控制(默认值为1e-4)

    options(4)-违反约束的结束标准(默认值为1e-6)

    options(5)-算法选择,不常用。

    options(6)-优化程序方法选择,为0则为BFCG算法,为1则采用DFP算法。 

    options(7)-线性插值算法选择,为0则为混合插值算法,为1则采用立方插算法。

    options(8)-函数值显示 (目标—达到问题中的Lambda )

    options(9)-若需要检测用户提供的梯度,则设为1

    options(10)-函数和约束估值的数目。

    options(11)-函数梯度估值的个数。

    options(12)-约束估值的数目。

    options(13)-等约束条件的个数。

    options(14)-函数估值的最大次数(默认值是100×变量个数) 

    options(15)-用于目标 — 达到问题中的特殊目标。 

    options(16)-优化过程中变量的最小有限差分梯度值。

    options(17)- 优化过程中变量的最大有限差分梯度值。

    options(18)-步长设置 (默认为1或更小)

Foptions已经被optimset和optimget代替,详情请查函数optimset和optimget。

5.3  非线性规划问题

5.3.1  有约束的一元函数的最小值

单变量函数求最小值的标准形式为     sub.to  

MATLAB5.x中使用fmin函数求其最小值。

函数  fminbnd

格式  x = fminbnd(fun,x1,x2)   %返回自变量x在区间上函数fun取最小值时x值,fun为目标函数的表达式字符串或MATLAB自定义函数的函数柄。

x = fminbnd(fun,x1,x2,options)   % options为指定优化参数选项

[x,fval] = fminbnd()   % fval为目标函数的最小值

[x,fval,exitflag] = fminbnd()   %xitflag为终止迭代的条件

[x,fval,exitflag,output] = fminbnd()   % output为优化信息

说明  若参数exitflag>0,表示函数收敛于x,若exitflag=0,表示超过函数估计值或迭代的最大数字,exitflag<0表示函数不收敛于x;若参数output=iterations表示迭代次数,output=funccount表示函数赋值次数,output=algorithm表示所使用的算法。

5-2  计算下面函数在区间(0,1)内的最小值。

 

解:>> [x,fval,exitflag,output]=fminbnd('(x^3+cos(x)+x*log(x))/exp(x)',0,1)

x =

    0.5223

fval =

    0.3974

exitflag =

     1

output = 

    iterations: 9

     funcCount: 9

     algorithm: 'golden section search, parabolic interpolation'

5-3  在[05]上求下面函数的最小值

解:先自定义函数:在MATLAB编辑器中建立M文件为:

function f = myfun(x)

f = (x-3).^2 - 1;

保存为myfun.m,然后在命令窗口键入命令:

>> x=fminbnd(@myfun,0,5)

则结果显示为:

x =

     3

5.3.2  无约束多元函数最小值

多元函数最小值的标准形式为

其中:x为向量,如

MATLAB5.x中使用fmins求其最小值。

命令  利用函数fminsearch求无约束多元函数最小值

函数  fminsearch

格式  x = fminsearch(fun,x0)   %x0为初始点,fun为目标函数的表达式字符串或MATLAB自定义函数的函数柄。

x = fminsearch(fun,x0,options)   % optionsoptimset

[x,fval] = fminsearch()   %最优点的函数值

[x,fval,exitflag] = fminsearch()   % exitflag与单变量情形一致

[x,fval,exitflag,output] = fminsearch()  %output与单变量情形一致

注意:fminsearch采用了Nelder-Mead型简单搜寻法。

5-4  求的最小值点

解:>>X=fminsearch('2*x(1)^3+4*x(1)*x(2)^3-10*x(1)*x(2)+x(2)^2',  [0,0])

结果为

X =

    1.0016    0.8335

或在MATLAB编辑器中建立函数文件

function  f=myfun(x)

f=2*x(1)^3+4*x(1)*x(2)^3-10*x(1)*x(2)+x(2)^2;

保存为myfun.m,在命令窗口键入

>> X=fminsearch ('myfun',  [0,0]) 或 >> X=fminsearch(@myfun,  [0,0])

结果为:

X =

    1.0016    0.8335

命令  利用函数fminunc求多变量无约束函数最小值

函数  fminunc

格式  x = fminunc(fun,x0)   %返回给定初始点x0的最小函数值点

x = fminunc(fun,x0,options)   % options为指定优化参数

[x,fval] = fminunc()   %fval最优点x处的函数值

[x,fval,exitflag] = fminunc()   % exitflag为终止迭代的条件,与上同。

[x,fval,exitflag,output] = fminunc()   %output为输出优化信息

[x,fval,exitflag,output,grad] = fminunc()   % grad为函数在解x处的梯度值

[x,fval,exitflag,output,grad,hessian] = fminunc()   %目标函数在解x处的海赛(Hessian)值

注意:当函数的阶数大于2时,使用fminunc比fminsearch更有效,但当所选函数高度不连续时,使用fminsearch效果较好。

5-5  求的最小值。

>> fun='3*x(1)^2+2*x(1)*x(2)+x(2)^2';

>> x0=[1 1];

>> [x,fval,exitflag,output,grad,hessian]=fminunc(fun,x0)

结果为:

x =

  1.0e-008 *

   -0.7591    0.2665

fval =

  1.3953e-016

exitflag =

     1

output = 

       iterations: 3

        funcCount: 16

         stepsize: 1.2353

    firstorderopt: 1.6772e-007

        algorithm: 'medium-scale: Quasi-Newton line search'

grad =

  1.0e-006 *

   -0.1677

    0.0114

hessian =

    6.0000    2.0000

    2.0000    2.0000

或用下面方法:

>> fun=inline('3*x(1)^2+2*x(1)*x(2)+x(2)^2')

fun =

     Inline function:

     fun(x) = 3*x(1)^2+2*x(1)*x(2)+x(2)^2

>> x0=[1 1]

>> x=fminunc(fun,x0)

x =

  1.0e-008 *

   -0.7591    0.2665

5.3.3  有约束的多元函数最小值

非线性有约束的多元函数的标准形式为:

 

sub.to    

 

 

 

 

其中:x、b、beq、lb、ub是向量,A、Aeq为矩阵,C(x)、Ceq(x)是返回向量的函数,f(x)为目标函数,f(x)、C(x)、Ceq(x)可以是非线性函数。

MATLAB5.x中,它的求解由函数constr实现。

函数  fmincon

格式  x = fmincon(fun,x0,A,b)

x = fmincon(fun,x0,A,b,Aeq,beq)

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

[x,fval] = fmincon()

[x,fval,exitflag] = fmincon()

[x,fval,exitflag,output] = fmincon()

[x,fval,exitflag,output,lambda] = fmincon()

[x,fval,exitflag,output,lambda,grad] = fmincon()

[x,fval,exitflag,output,lambda,grad,hessian] = fmincon()

参数说明:fun为目标函数,它可用前面的方法定义;

x0为初始值;

Ab满足线性不等式约束,若没有不等式约束,则取A=[ ]b=[ ]

Aeq、beq满足等式约束,若没有,则取Aeq=[ ]beq=[ ]

lb、ub满足,若没有界,可设lb=[ ]ub=[ ]

nonlcon的作用是通过接受的向量x来计算非线性不等约束和等式约束分别在x处的估计CCeq,通过指定函数柄来使用,如:>>x = fmincon(@myfun,x0,A,b,Aeq,beq,lb,ub,@mycon),先建立非线性约束函数,并保存为mycon.m:function [C,Ceq] = mycon(x)

C = …    计算x处的非线性不等约束的函数值。

Ceq = …   计算x处的非线性等式约束的函数值。

lambdaLagrange乘子,它体现哪一个约束有效。

output输出优化信息;

grad表示目标函数在x处的梯度;

hessian表示目标函数在x处的Hessiab值。

5-6  求下面问题在初始点(01)处的最优解

min  

sub.to    

 

解:约束条件的标准形式为

sub.to  

 

先在MATLAB编辑器中建立非线性约束函数文件:

function  [c, ceq]=mycon (x)

c=(x(1)-1)^2-x(2);

ceq=[ ];      %无等式约束

然后,在命令窗口键入如下命令或建立M文件:

>>fun='x(1)^2+x(2)^2-x(1)*x(2)-2*x(1)-5*x(2)';     %目标函数

>>x0=[0 1];

>>A=[-2 3];   %线性不等式约束

>>b=6;

>>Aeq=[ ];    %无线性等式约束

>>beq=[ ];

>>lb=[ ];       %x没有下、上界

>>ub=[ ];

>>[x,fval,exitflag,output,lambda,grad,hessian]

=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,@mycon)

则结果为

x =

     3     4

fval =

   -13

exitflag =      %解收敛

     1

output = 

       iterations: 2

        funcCount: 9

         stepsize: 1

        algorithm: 'medium-scale: SQP, Quasi-Newton, line-search'

    firstorderopt: [ ]

     cgiterations: [ ]

lambda = 

         lower: [2x1 double]   %x下界有效情况,通过lambda.lower可查看。

         upper: [2x1 double]   %x上界有效情况,为0表示约束无效。

         eqlin: [0x1 double]    %线性等式约束有效情况,不为0表示约束有效。

      eqnonlin: [0x1 double]    %非线性等式约束有效情况。

       ineqlin: 2.5081e-008    %线性不等式约束有效情况。

    ineqnonlin: 6.1938e-008    %非线性不等式约束有效情况。

grad =      %目标函数在最小值点的梯度

  1.0e-006 *

   -0.1776

         0

hessian =    %目标函数在最小值点的Hessian值

    1.0000   -0.0000

   -0.0000    1.0000

5-7  求下面问题在初始点x=(10, 10, 10)处的最优解。

Min  

Sub.to  

解:约束条件的标准形式为

sub.to     

 

>> fun= '-x(1)*x(2)*x(3)';

>> x0=[10,10,10];

>> A=[-1 -2 -2;1 2 2];

>> b=[0;72];

>> [x,fval]=fmincon(fun,x0,A,b)

结果为:

x =

   24.0000   12.0000   12.0000

fval =

       -3456

5.3.4  二次规划问题

二次规划问题(quadratic programming)的标准形式为:

 

sub.to  

    

    

其中,HAAeq为矩阵,f、b、beq、lb、ub、x为向量

其它形式的二次规划问题都可转化为标准形式。

MATLAB5.x版中的qp函数已被6.0版中的函数quadprog取代。

函数  quadprog

格式  x = quadprog(H,f,A,b)   %其中H,f,A,b为标准形中的参数,x为目标函数的最小值。

x = quadprog(H,f,A,b,Aeq,beq)   %Aeq,beq满足等约束条件

x = quadprog(H,f,A,b,Aeq,beq,lb,ub)   % lb,ub分别为解x的下界与上界。

x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0)   %x0为设置的初值

x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options)   % options为指定的优化参数

[x,fval] = quadprog()   %fval为目标函数最优值

[x,fval,exitflag] = quadprog()   % exitflag与线性规划中参数意义相同

[x,fval,exitflag,output] = quadprog()   % output与线性规划中参数意义相同

[x,fval,exitflag,output,lambda] = quadprog()   % lambda与线性规划中参数意义相同

5-8  求解下面二次规划问题

 

sub.to 

 

 

 

 

解:

则,,

MATLAB中实现如下:

>>H = [1 -1; -1 2] ;

>>f = [-2; -6];

>>A = [1 1; -1 2; 2 1];

>>b = [2; 2; 3];

>>lb = zeros(2,1);

>>[x,fval,exitflag,output,lambda] = quadprog(H,f,A,b,[ ],[ ],lb)

结果为:

x =     %最优解

    0.6667

    1.3333

fval =     %最优值

   -8.2222

exitflag =    %收敛

     1

output = 

       iterations: 3

        algorithm: 'medium-scale: active-set'

    firstorderopt: [ ]

     cgiterations: [ ]

lambda = 

      lower: [2x1 double]

      upper: [2x1 double]

      eqlin: [0x1 double]

    ineqlin: [3x1 double]

>> lambda.ineqlin

ans =

    3.1111

    0.4444

         0

>> lambda.lower

ans =

     0

     0

说明  第12个约束条件有效,其余无效。

例5-9  求二次规划的最优解

max   f (x1, x2)=x1x2+3

sub.to    x1+x2-2=0

解:化成标准形式: 

 

sub.to    x1+x2=2

在Matlab中实现如下:

>>H=[0,-1;-1,0];

>>f=[0;0];

>>Aeq=[1 1];

>>b=2;

>>[x,fval,exitflag,output,lambda] = quadprog(H,f,[ ],[ ],Aeq,b)

结果为:

x =

    1.0000

    1.0000

fval =

   -1.0000

exitflag =

     1

output = 

    firstorderopt: 0

       iterations: 1

     cgiterations: 1

        algorithm: [1x58 char]

lambda = 

      eqlin: 1.0000

    ineqlin: [ ]

      lower: [ ]

      upper: [ ]

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
1月前
|
算法 数据可视化 安全
基于DWA优化算法的机器人路径规划matlab仿真
本项目基于DWA优化算法实现机器人路径规划的MATLAB仿真,适用于动态环境下的自主导航。使用MATLAB2022A版本运行,展示路径规划和预测结果。核心代码通过散点图和轨迹图可视化路径点及预测路径。DWA算法通过定义速度空间、采样候选动作并评估其优劣(目标方向性、障碍物距离、速度一致性),实时调整机器人运动参数,确保安全避障并接近目标。
148 68
|
3天前
|
算法
基于SOA海鸥优化算法的三维曲面最高点搜索matlab仿真
本程序基于海鸥优化算法(SOA)进行三维曲面最高点搜索的MATLAB仿真,输出收敛曲线和搜索结果。使用MATLAB2022A版本运行,核心代码实现种群初始化、适应度计算、交叉变异等操作。SOA模拟海鸥觅食行为,通过搜索飞行、跟随飞行和掠食飞行三种策略高效探索解空间,找到全局最优解。
|
2月前
|
机器学习/深度学习 算法
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
208 80
|
1天前
|
传感器 算法
基于GA遗传算法的多机无源定位系统GDOP优化matlab仿真
本项目基于遗传算法(GA)优化多机无源定位系统的GDOP,使用MATLAB2022A进行仿真。通过遗传算法的选择、交叉和变异操作,迭代优化传感器配置,最小化GDOP值,提高定位精度。仿真输出包括GDOP优化结果、遗传算法收敛曲线及三维空间坐标点分布图。核心程序实现了染色体编码、适应度评估、遗传操作等关键步骤,最终展示优化后的传感器布局及其性能。
|
5天前
|
传感器 算法 物联网
基于粒子群算法的网络最优节点部署优化matlab仿真
本项目基于粒子群优化(PSO)算法,实现WSN网络节点的最优部署,以最大化节点覆盖范围。使用MATLAB2022A进行开发与测试,展示了优化后的节点分布及其覆盖范围。核心代码通过定义目标函数和约束条件,利用PSO算法迭代搜索最佳节点位置,并绘制优化结果图。PSO算法灵感源于鸟群觅食行为,适用于连续和离散空间的优化问题,在通信网络、物联网等领域有广泛应用。该算法通过模拟粒子群体智慧,高效逼近最优解,提升网络性能。
|
5天前
|
机器学习/深度学习 数据采集 算法
基于GWO灰狼优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目基于MATLAB2022a,展示了时间序列预测算法的运行效果(无水印)。核心程序包含详细中文注释和操作视频。算法采用CNN-GRU-SAM网络,结合灰狼优化(GWO),通过卷积层提取局部特征、GRU处理长期依赖、自注意力机制捕捉全局特征,最终实现复杂非线性时间序列的高效预测。
|
1月前
|
机器学习/深度学习 数据采集 算法
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目基于MATLAB2022a实现时间序列预测,采用CNN-GRU-SAM网络结构。卷积层提取局部特征,GRU层处理长期依赖,自注意力机制捕捉全局特征。完整代码含中文注释和操作视频,运行效果无水印展示。算法通过数据归一化、种群初始化、适应度计算、个体更新等步骤优化网络参数,最终输出预测结果。适用于金融市场、气象预报等领域。
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
|
1月前
|
算法 JavaScript
基于遗传优化的Sugeno型模糊控制器设计matlab仿真
本课题基于遗传优化的Sugeno型模糊控制器设计,利用MATLAB2022a进行仿真。通过遗传算法优化模糊控制器的隶属函数参数,提升控制效果。系统原理结合了模糊逻辑与进化计算,旨在增强系统的稳定性、响应速度和鲁棒性。核心程序实现了遗传算法的选择、交叉、变异等步骤,优化Sugeno型模糊系统的参数,适用于工业控制领域。
|
1月前
|
算法 决策智能
基于遗传优化的货柜货物摆放优化问题求解matlab仿真
本项目采用MATLAB2022A实现基于遗传算法的货柜货物摆放优化,初始随机放置货物后通过适应度选择、交叉、变异及逆转操作迭代求解,最终输出优化后的货物分布图与目标函数变化曲线,展示进化过程中的最优解和平均解的变化趋势。该方法模仿生物进化,适用于复杂空间利用问题,有效提高货柜装载效率。
|
1月前
|
移动开发 算法 计算机视觉
基于分块贝叶斯非局部均值优化(OBNLM)的图像去噪算法matlab仿真
本项目基于分块贝叶斯非局部均值优化(OBNLM)算法实现图像去噪,使用MATLAB2022A进行仿真。通过调整块大小和窗口大小等参数,研究其对去噪效果的影响。OBNLM结合了经典NLM算法与贝叶斯统计理论,利用块匹配和概率模型优化相似块的加权融合,提高去噪效率和保真度。实验展示了不同参数设置下的去噪结果,验证了算法的有效性。

热门文章

最新文章