MATLAB优化问题(1)

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月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)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
5天前
|
传感器 机器学习/深度学习 算法
基于GA遗传算法的WSN网络节点覆盖优化matlab仿真
本研究应用遗传优化算法于无线传感器网络(WSN),优化节点布局与数量,以最小化节点使用而最大化网络覆盖率。MATLAB2022a环境下,算法通过选择、交叉与变异操作,逐步改进节点配置,最终输出收敛曲线展现覆盖率、节点数及适应度值变化。无线传感器网络覆盖优化问题通过数学建模,结合遗传算法,实现目标区域有效覆盖与网络寿命延长。算法设计中,采用二进制编码表示节点状态,适应度函数考量覆盖率与连通性,通过选择、交叉和变异策略迭代优化,直至满足终止条件。
|
14天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于PSO粒子群优化的CNN-GRU的时间序列回归预测matlab仿真
- **算法理论:** 利用PSO优化的CNN-GRU,结合CNN的特征提取和GRU的记忆机制,进行时间序列预测。 - **CNN:** 通过卷积捕获序列的结构信息。 - **GRU:** 简化的LSTM,处理序列依赖。 - **预测步骤:** 1. 初始化粒子群,每粒子对应一组模型参数。 2. 训练并评估CNN-GRU模型的验证集MSE。 3. 使用PSO更新参数,寻找最佳配置。 4. 迭代优化直至满足停止准则。 ```
|
10天前
|
算法
基于粒子群优化的图像融合算法matlab仿真
这是一个基于粒子群优化(PSO)的图像融合算法,旨在将彩色模糊图像与清晰灰度图像融合成彩色清晰图像。在MATLAB2022a中测试,算法通过PSO求解最优融合权值参数,经过多次迭代更新粒子速度和位置,以优化融合效果。核心代码展示了PSO的迭代过程及融合策略。最终,使用加权平均法融合图像,其中权重由PSO计算得出。该算法体现了PSO在图像融合领域的高效性和融合质量。
|
10天前
|
传感器 算法 数据安全/隐私保护
基于鲸鱼优化的DSN弱栅栏覆盖算法matlab仿真
```markdown 探索MATLAB2022a中WOA与DSN弱栅栏覆盖的创新融合,模拟鲸鱼捕食策略解决传感器部署问题。算法结合“搜索”、“包围”、“泡沫网”策略,优化节点位置以最大化复杂环境下的区域覆盖。目标函数涉及能量效率、网络寿命、激活节点数、通信质量及覆盖率。覆盖评估基于覆盖半径比例,旨在最小化未覆盖区域。 ```
|
22天前
|
机器学习/深度学习 算法 调度
Matlab|基于改进鲸鱼优化算法的微网系统能量优化管理matlab-源码
基于改进鲸鱼优化算法的微网系统能量管理源码实现,结合LSTM预测可再生能源和负荷,优化微网运行成本与固定成本。方法应用于冷热电联供微网,结果显示经济成本平均降低4.03%,提高经济效益。代码包括数据分段、LSTM网络定义及训练,最终展示了一系列运行结果图表。
|
24天前
|
传感器 监控 算法
基于虚拟力优化的无线传感器网络覆盖率matlab仿真
**摘要:** 本文探讨了基于虚拟力优化提升无线传感器网络(WSNs)覆盖率的方法。通过在MATLAB2022a中仿真,显示了优化前后网络覆盖率对比及收敛曲线。虚拟力优化算法模拟物理力,以优化传感器节点布局,防止重叠并吸引至目标区域,同时考虑墙壁碰撞。覆盖计算利用平面扫描法评估圆形和正方形传感器的覆盖范围。算法通过迭代优化网络性能,以提高WSNs的监控能力。
|
1月前
|
算法
基于GA遗传优化的混合发电系统优化配置算法matlab仿真
**摘要:** 该研究利用遗传算法(GA)对混合发电系统进行优化配置,旨在最小化风能、太阳能及电池储能的成本并提升系统性能。MATLAB 2022a用于实现这一算法。仿真结果展示了一系列图表,包括总成本随代数变化、最佳适应度随代数变化,以及不同数据的分布情况,如负荷、风速、太阳辐射、弃电、缺电和电池状态等。此外,代码示例展示了如何运用GA求解,并绘制了发电单元的功率输出和年变化。该系统原理基于GA的自然选择和遗传原理,通过染色体编码、初始种群生成、适应度函数、选择、交叉和变异操作来寻找最优容量配置,以平衡成本、效率和可靠性。
|
1月前
|
存储 算法
基于布谷鸟搜索的多目标优化matlab仿真
该程序运用布谷鸟搜索算法进行多目标优化,设置三个目标函数,生成三维优化曲面和收敛曲线。在MATLAB2022a中运行,显示了迭代过程中的优化结果图。算法基于布谷鸟的寄生繁殖和列维飞行行为,通过非支配排序和拥挤度计算处理多目标问题。迭代中,新解不断被评估、更新并加入帕累托前沿,最终输出帕累托前沿作为最优解集。
|
1月前
|
机器学习/深度学习 算法
基于鲸鱼优化的knn分类特征选择算法matlab仿真
**基于WOA的KNN特征选择算法摘要** 该研究提出了一种融合鲸鱼优化算法(WOA)与K近邻(KNN)分类器的特征选择方法,旨在提升KNN的分类精度。在MATLAB2022a中实现,WOA负责优化特征子集,通过模拟鲸鱼捕食行为的螺旋式和包围策略搜索最佳特征。KNN则用于评估特征子集的性能。算法流程包括WOA参数初始化、特征二进制编码、适应度函数定义(以分类准确率为基准)、WOA迭代搜索及最优解输出。该方法有效地结合了启发式搜索与机器学习,优化特征选择,提高分类性能。
|
29天前
|
机器学习/深度学习 存储 算法
基于SFLA算法的神经网络优化matlab仿真
**摘要:** 使用MATLAB2022a,基于SFLA算法优化神经网络,降低训练误差。程序创建12个神经元的前馈网络,训练后计算性能。SFLA算法寻找最优权重和偏置,更新网络并展示训练与测试集的预测效果,以及误差对比。SFLA融合蛙跳与遗传算法,通过迭代和局部全局搜索改善网络性能。通过调整算法参数和与其他优化算法结合,可进一步提升模型预测精度。

热门文章

最新文章