当前位置:   article > 正文

MATLAB无约束优化(UOM)_调节变量 无约束匹配方法

调节变量 无约束匹配方法

MATLAB无约束优化(UOM)

一、基本思想

在这里插入图片描述

二、基本算法

1、最速下降法(共轭梯度法)

在这里插入图片描述

2、牛顿法

在这里插入图片描述

3、拟牛顿法

在这里插入图片描述

3.1 BFGS

在这里插入图片描述

3.2 DFP

在这里插入图片描述

三、MATLAB优化

1、求解优化问题的主要函数

类 型模 型基本函数名
一元函数极小 m i n F ( x ) s . t .   x 1 < x < x 2 min F(x)\\s.t.\ x1<x<x2 minFxs.t. x1<x<x2 x = f m i n b n d ( ‘ F ’ , x 1 , x 2 ) x=fminbnd(‘F’,x1,x2) x=fminbnd(F,x1,x2)
无约束极小 m i n F ( X ) min F(X) minF(X) X = f m i n u n c ( ‘ F ’ , X 0 ) X = f m i n s e a r c h ( ‘ F ’ , X 0 ) X=fminunc(‘F’,X0) \\ X=fminsearch(‘F’,X0) X=fminunc(F,X0)X=fminsearch(F,X0)
线性规划 m i n c T s . t .   A X ≤ b minc^T \\ s.t.\ AX≤b mincTs.t. AXb X = l i n p r o g ( c , A , b ) X=linprog(c,A,b) X=linprog(c,A,b)
二次规划 m i n 1 2 x T H x + c T x s . t .   A x ≤ b min\frac{1}{2}xTHx+cTx \\ s.t.\ Ax≤b min21xTHx+cTxs.t. Axb X = q u a d p r o g ( H , c , A , b ) X=quadprog(H,c,A,b) X=quadprog(H,c,A,b)
约束极小(非线性规划) m i n F ( X ) s . t . G ( X ) ≤ 0 min F(X) s.t. G(X)≤0 minF(X)s.t.G(X)0 X = f m i n c o n ( ‘ F G ’ , X 0 ) X=fmincon(‘FG’,X0) X=fmincon(FG,X0)
达到目标问题 m i n r s . t .   F ( x ) − w r ≤ g o a l min r\\s.t.\ F(x)-wr ≤ goal minrs.t. F(x)wrgoal X = f g o a l a t t a i n ( ‘ F ’ , x , g o a l , w ) X=fgoalattain(‘F’,x, goal,w) X=fgoalattain(F,x,goal,w)
极小极大问题 m i n x m a x F i ( x ) { F i ( x ) } s . t .   G ( x ) ≤ 0 min_x max_{F_i(x)}\{F_i(x)\} \\s.t.\ G(x)≤0 minxmaxFi(x){Fi(x)}s.t. G(x)0 X = f m i n i m a x ( ‘ F G ’ , x 0 ) X=fminimax(‘FG’,x0) X=fminimax(FG,x0)

2、优化函数的输入变量

  • f f f —— 规划中目标函数的线性项的系数向量,有时也用 c c c
  • f u n fun fun —— 目标函数的名称
  • H H H —— 目标函数中 X T × X X^T \times X XT×X(二次项)的系数矩阵
  • A , b A,b A,b —— 线性不等式约束 A X ≤ b AX \leq b AXb的系数矩阵和右端向量
  • $Aeq,beq $ —— 等式线性约束 A e q ⋅ X = b e q Aeq \cdot X = beq AeqX=beq的系数矩阵和右端向量
  • v l b , v u b vlb,vub vlb,vub —— X X X的下限和上限向量: v l b ≤ X ≤ v u b vlb \leq X \leq vub vlbXvub
  • X 0 X0 X0 —— 迭代初始坐标
  • $x1,x2 $ —— 函数最小化的区间
  • o p t i o n s options options —— 定义用于优化函数的参数,优化选项参数结构

3、优化函数的输出变量

  • x x x —— 由优化函数求得的值。若 e x i t f l a g > 0 exitflag>0 exitflag>0,则 x x x为解;否则, x x x不是最终解,它只是迭代停止时优化过程的值

  • f v a l fval fval —— 解 x x x处的目标函数值

  • e x i t f l a g exitflag exitflag —— 描述退出条件:

    e x i t f l a g > 0 exitflag>0 exitflag>0:表示目标函数收敛于解 x x x

    e x i t f l a g = 0 exitflag=0 exitflag=0:表示已达到函数评价或迭代的最大次数

    e x i t f l a g < 0 exitflag<0 exitflag<0:表示目标函数不收敛

  • o u t p u t output output —— 包含优化结果信息的输出结构.:

    I t e r a t i o n s Iterations Iterations:迭代次数

    A l g o r i t h m Algorithm Algorithm:所采用的算法

    F u n c C o u n t FuncCount FuncCount:函数评价次数

4、控制参数选项的设置与修改

4.1 常用参数举例如下:
  • D i s p l a y Display Display:显示水平。取值为 ′ o f f ′ 'off' off时,不显示输出;取值为 ′ i t e r ′ 'iter' iter时,显示每次迭代的信息;取值为 ′ f i n a l ′ 'final' final时,显示最终结果.默认值为 ′ f i n a l ′ 'final' final

  • M a x F u n E v a l s MaxFunEvals MaxFunEvals: 允许进行函数评价的最大次数,取值为正整数

  • M a x I t e r MaxIter MaxIter: 允许进行迭代的最大次数,取值为正整数

4.2 使用 o p t i m s e t optimset optimset函数修改、创建控制参数
  • option1 = optimset(optimfun)
    % 创建一个含有所有参数名,并与优化函数optimfun相关的默认值的选项结构
    
    • 1
    • 2
  • option2 = optimset('param1','value1','param2','value2'...)
    % 创建一个名称为option2的优化选项参数,其中指定的参数具有指定值,所有未指定的参数取默认值
    
    • 1
    • 2
  • option3 = optimset(old_options,'param1','value1','param2','value2'...)
    % 创建名称为old_options的参数的拷贝,并用指定的参数值修改oldops中相应的参数.
    
    • 1
    • 2

5、用MATLAB解决无约束优化问题

5.1 一元无约束优化问题: m i n f ( x ) / m a x f ( x ) , v l b ≤ x ≤ v u b minf(x)/maxf(x), vlb \leq x \leq vub minf(x)/maxf(x),vlbxvub
5.1.1 一般格式
[x, fval, exitflag, output] = fminbnd(fun, vlb, vub)
% 函数fminbnd的算法基于黄金分割法和二次插值法,它要求目标函数必须是连续函数,并可能只给出局部最优解
  • 1
  • 2
5.1.2 实际应用

问题0

在这里插入图片描述

function f = fun0(x)
    f = -(3-2*x)^2 * x;
  • 1
  • 2
[x, fval] = fminbnd('fun0', 0, 1.5);
xmax = x;
fmax = -fval;
  • 1
  • 2
  • 3
xmax =

    0.5000
fmax =

    2.0000
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
5.2 多元无约束优化问题: m i n F ( x ) / m a x F ( x ) minF(x)/maxF(x) minF(x)/maxF(x)
5.2.1 一般格式
[x, fval, exitflag, output] = fminunc('fun', X0, options)
% 或者[x, fval, exitflag, output] = fminsearch('fun', X0, options)
% fminsearch是用单纯形法寻优,fminunc算法见以下几点说明:
% [1] fminunc为无约束优化提供了大型优化和中型优化算法.由选项中的参数LargeScale控制:
% LargeScale=‘on' (默认值),使用大型算法;
% LargeScale=‘off' (默认值),使用中型算法.
% [2] fminunc为中型优化算法的搜索方向提供了4种算法,由选项中的参数HessUpdate控制:
% HessUpdate='bfgs'(默认值),拟牛顿法的BFGS公式;
% HessUpdate='dfp',拟牛顿法的DFP公式;
% HessUpdate='steepdesc',最速下降法。
% [3] fminunc为中型优化算法的步长一维搜索提供了两种算法,由选项中参数LineSearchType控制:
% LineSearchType=‘quadcubic’ (默认值),混合的二次和三次多项式插值;
% LineSearchType='cubicpoly',三次多项式插值;
% [4] 使用fminunc和 fminsearch可能会得到局部最优解。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
5.2.2 实际应用

问题1
在这里插入图片描述

function f = fun1(x)
f = exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);
  • 1
  • 2
x0 = [-1 1]; % x0为迭代初始坐标
x = fminunc('fun1', x0);
y = fun1(x);  
  • 1
  • 2
  • 3
x =

    0.5000   -1.0000
y =

   3.6609e-16
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

问题2

在这里插入图片描述

% [x,y] = meshgrid(-2:0.1:3, -2:0.1:3);
% % meshgrid为网格采样点函数
% z = 100*(y-x.^2).^2+(1-x).^2;
% mesh(x, y, z);
% % hold on
% % mesh为画三维的网格图的函数
% % 画出函数的三维图像
% 
% contour(x,y,z,20);
% % contour(x,y,z,levels)为绘制矩阵的等高线图的函数,20为等高线的层数
% hold on
% plot(-1.2,2,'o');
% text(-1.2,2,'start point');
% plot(1,1,'o');
% text(1,1,'solution');
% % 绘制等高线

% 使用fminsearch函数求解
x0 = [-1.2 2];
[x, fval, exitflag, output] = fminsearch('fun2',x0);

% 使用fminunc函数求解
% 使用三种算法进行求解
% LargeScale设置算法规模
% Hessupdate设置中型算法种类
% LineSearchType设置步长一维搜索的算法种类
% MaxIter: 允许进行迭代的最大次数,取值为正整数
% MaxFunEvals: 允许进行函数评价的最大次数,取值为正整数

% 使用中型算法
x0 = [-1.2 2];
oldoptions = optimset('fminunc')
options = optimset(oldoptions, 'LargeScale', 'off')

% 1.1:DFP算法
options1 = optimset(options, 'HessUpdate', 'dfp')
[x1, fval1, exitflag1, output1] = fminunc('fun2', x0, options1)
pause

% 2.1:BFGS算法
options2 = optimset(options, 'HessUpdate', 'bfgs')
[x2, fval2, exitflag2, output2] = fminunc('fun2', x0, options2)
pause

% 3.1:最速下降法
options31 = optimset(options, 'HessUpdate', 'steepdesc')
[x31, fval31, exitflag31, output31] = fminunc('fun2', x0, options31)
pause
% 3.2:最速下降法,迭代的最大次数为8000,进行函数评价的最大次数为8000
options32 = optimset(options, 'HessUpdate', 'steepdesc', 'MaxIter', 8000, 'MaxFunEvals', 8000)
[x32,fval32, exitflag32, output32] = fminunc('fun2', x0, options32)
pause
% 3.3:最速下降法,迭代的最大次数为9000,进行函数评价的最大次数为9000
options33 = optimset(options, 'HessUpdate', 'steepdesc', 'MaxIter', 9000, 'MaxFunEvals', 9000)
[x33, fval33, exitflag33, output33] = fminunc('fun2', x0, options33)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55

在这里插入图片描述
在这里插入图片描述

x =

    1.0000    1.0000
fval =

   1.9151e-10
output = 

  包含以下字段的 struct:

    iterations: 108
     funcCount: 202
     algorithm: 'Nelder-Mead simplex direct search'
       message: '优化已终止:↵ 当前的 x 满足使用 1.000000e-04 的 OPTIONS.TolX 的终止条件,↵F(X) 满足使用 1.000000e-04 的 OPTIONS.TolFun 的收敛条件↵'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
exitflag1 = 0
exitflag2 = 1
exitflag31 = 0
exitflag32 = 0
exitflag33 = 0
fval1 = 3.118857168885522
fval2 = 5.308577048854317e-10
fval31 = 0.013712025822507
fval32 = 0.006357580614852
fval33 = 0.005729363160867
x0 = [-1.200000000000000,2]
x1 = [-0.747553337321273,0.533357667606796]
x2 = [0.999977453011579,0.999954432284563]
x31 = [1.116921345974429,1.248156913152331]
x32 = [1.079607291413950,1.166002012200930]
x33 = [1.075675703374728,1.157237939825174]
% 可根据得出来的结果判断算法的特点与优缺点
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

6、实际建模

6.1 提出问题&符号说明

在这里插入图片描述

6.2 基本假设
  • 甲的价格随销量的增加而降低,同时也随着乙的销量增加而降低,两者与甲的价格均为假设为线性的关系,且前者对甲的影响比后者大,同理也可以得到乙的价格关系,则:

{ p 1 = b 1 − a 11 x 1 − a 12 x 2 ,   b 1 , a 11 , a 12 > 0 , a 11 > a 12 ; p 1 = b 1 − a 11 x 1 − a 12 x 2 ,   b 1 , a 21 , a 22 > 0 , a 22 > a 21 ;

{p1=b1a11x1a12x2, b1,a11,a12>0,a11>a12;p1=b1a11x1a12x2, b1,a21,a22>0,a22>a21;
{p1=b1a11x1a12x2, b1,a11,a12>0,a11>a12;p1=b1a11x1a12x2, b1,a21,a22>0,a22>a21;

  • 甲的成本随着销量的增加而降低,且有一个初值,假设为负指数关系,同理可以得到乙的成本关系,则:

q 1 = r 1 e − λ 1 x 1 + c 1 ,   r 1 , λ 1 , c 1 > 0 q 2 = r 2 e − λ 2 x 2 + c 2 ,   r 2 , λ 2 , c 2 > 0 q_1 = r_1e^{-\lambda_1 x_1} + c_1, \ r_1, \lambda_1, c_1>0 \\ q_2 = r_2e^{-\lambda_2 x_2} + c_2, \ r_2, \lambda_2, c_2>0 q1=r1eλ1x1+c1, r1,λ1,c1>0q2=r2eλ2x2+c2, r2,λ2,c2>0

  • 为简化模型,使得计算不太复杂,计算初始值时,假设成本不计在内。
6.3 建立模型
  • 目标函数: Z = ( p 1 − q 1 ) x 1 + ( p 2 − q 2 ) x 2 Z = (p_1 - q_1)x_1+(p_2 - q_2)x_2 Z=(p1q1)x1+(p2q2)x2

  • 根据统计数据得到待定系数;

  • 忽略成本求得 Z Z Z极点(最小值)处的 x 1 , x 2 x_1,x_2 x1,x2,作为初始值。

6.4 求解模型
function f = fun3(x)
    y1=((100-x(1)- 0.1*x(2))-(30*exp(-0.015*x(1))+20))*x(1);
    y2=((280-0.2*x(1)- 2*x(2))-(100*exp(-0.02*x(2))+30))*x(2);
    f=-(y1+y2);
  • 1
  • 2
  • 3
  • 4
x0 = [50 70];
[x, fval] = fminunc('fun3', x0);
zmax = -fun3(x);
  • 1
  • 2
  • 3
x =

   23.9025   62.4977
   
zmax =

  6.4135e+03
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
6.5 得到结论

在甲产量为23.9025,乙产量为62.4977时,最大利润为6413.5.

四、实验作业

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/856243
推荐阅读
相关标签
  

闽ICP备14008679号