Navigator

  • 无约束优化原理
  • Matlab工具箱求解算法
  • 应用1:资金调用问题
  • matlab code
  • 应用2:经营最佳安排问题
  • matlab code
  • 数值迭代法求解无约束极值问题
  • 黄金分割法
  • 无约束多维极值
  • 模式搜索法
  • code
  • 单纯形搜索(Simplex)
  • Powell法
  • 最速下降法
  • 共轭梯度法
  • 拟牛顿法


无约束优化原理

求解无约束优化的方法主要有直接搜索法(search method)和梯度法(gradient method).
直接搜索法适合目标函数高度非线性,没有导数或者导数很难计算的情况,直接搜索方法包括单纯形法,Hooke-Jeeves搜索法,Pavell共轭方向法等.
梯度法在可以得到导数信息的情况下是一种更优的方法,该方法利用一阶导数和Hessian矩阵的信息,可以得到更快的收敛速度。常用的梯度法包括最速下降法,Newton法,Marquart法,共轭梯度法和拟牛顿法(Quasi-Newton method).

Matlab工具箱求解算法

  1. 大型优化算法:在提供函数梯度信息的情况下,默认使用大型优化算法,在每一个迭代步骤中使用PCG法求解大型线性系统得到近似解。
  2. 中型优化算法:fminunc函数中的参数options.LargeScale设置为off,该算法采用基于二次和三次混合插值的一维搜索算法的BFGS拟牛顿法
  3. 一维搜索算法的设置,options.LineSearchType设置为quadcubic时,采用二次和三次混合插值法,options.LineSearchType设置为cubicpoly时,将采用三次插值法

应用1:资金调用问题

source:Matlab优化算法 Page 186
pytorch求解无约束最优化问题 matlab求解无约束最优化问题_搜索表示第pytorch求解无约束最优化问题 matlab求解无约束最优化问题_搜索_02所使用的资金,总收益为pytorch求解无约束最优化问题 matlab求解无约束最优化问题_优化算法_03,目标函数为
pytorch求解无约束最优化问题 matlab求解无约束最优化问题_搜索_04
约束条件为
pytorch求解无约束最优化问题 matlab求解无约束最优化问题_matlab_05

matlab code

clear all;
clc;
A = [1.1, 1, 0, 0; 1.21, 1.1, 1, 0; 1.331, 1.21, 1.1, 1];
b = [440, 484, 532.4];
lb = [0, 0, 0, 0];
ub = [400, 1000, 1000, 1000];
x0 = [100, 100, 100, 100]; % set initial point
[x, fval] = fmincon('obj_642', x0, A, b, [], [], lb, ub);
disp(x);
disp(fval);

应用2:经营最佳安排问题

source:Matlab优化算法 Page 189

matlab code

clear all;
clc;
lb = [0, 0];
x0 = [0, 0];
[x, w] = fmincon('obj_643', x0, [], [], [], [], lb, [], 'cons');
disp(x);
disp(w);

数值迭代法求解无约束极值问题

数值迭代的基本思想是从一个初始点pytorch求解无约束最优化问题 matlab求解无约束最优化问题_pytorch求解无约束最优化问题_06出发,在可行方向pytorch求解无约束最优化问题 matlab求解无约束最优化问题_搜索_07搜索,确定最佳步长pytorch求解无约束最优化问题 matlab求解无约束最优化问题_无约束优化_08,使得函数沿着pytorch求解无约束最优化问题 matlab求解无约束最优化问题_pytorch求解无约束最优化问题_09下降最大
pytorch求解无约束最优化问题 matlab求解无约束最优化问题_matlab_10

黄金分割法

该方法适合在已知极值区间的基础上,不断缩小区间找到极值,要求目标函数为单峰,算法步骤如下:

  1. 给定区间pytorch求解无约束最优化问题 matlab求解无约束最优化问题_搜索_11pytorch求解无约束最优化问题 matlab求解无约束最优化问题_优化算法_12
  2. 计算pytorch求解无约束最优化问题 matlab求解无约束最优化问题_matlab_13
  3. 如果pytorch求解无约束最优化问题 matlab求解无约束最优化问题_无约束优化_14,则进行下一步,否则转(5)
  4. 如果pytorch求解无约束最优化问题 matlab求解无约束最优化问题_pytorch求解无约束最优化问题_15,则停止计算,输出pytorch求解无约束最优化问题 matlab求解无约束最优化问题_无约束优化_16,否则令pytorch求解无约束最优化问题 matlab求解无约束最优化问题_pytorch求解无约束最优化问题_17,转(3)
  5. 如果pytorch求解无约束最优化问题 matlab求解无约束最优化问题_pytorch求解无约束最优化问题_15,则停止计算,输出pytorch求解无约束最优化问题 matlab求解无约束最优化问题_pytorch求解无约束最优化问题_19,否则令pytorch求解无约束最优化问题 matlab求解无约束最优化问题_matlab_20,转(3)

无约束多维极值

该类问题可以使用直接法求解,不需要计算导数,只需要计算函数值。

模式搜索法

轴向移动的目标是找到有利的下降方向,而模式移动的目标是沿着有利下降方向加速移动,可以使用patternsearch函数调用。

code

clear all;
clc;
x0 = [0, 0];
x = patternsearch(@psobj, x0);
disp(x);

单纯形搜索(Simplex)

单纯形法是从一个可行解出发,不断找到可以改进目标值的基本可行解,达到最优基本可行解。

Powell法

该方法的本质是共轭方向法,Powell法将整个计算过程分解为若干阶段,在每个阶段由pytorch求解无约束最优化问题 matlab求解无约束最优化问题_pytorch求解无约束最优化问题_21次一维搜索组成,首先沿着已知的pytorch求解无约束最优化问题 matlab求解无约束最优化问题_matlab_22个方向进行搜索,找到一个最好点,然后沿着本阶段的初始点与该最好点连线方向进行搜索,定位出本阶段的最好点。根据得到的最好方向进行下一阶段的迭代。

最速下降法

pytorch求解无约束最优化问题 matlab求解无约束最优化问题_matlab_22维问题转化维一系列负梯度方向使用一维搜索方法寻优。
由方程pytorch求解无约束最优化问题 matlab求解无约束最优化问题_matlab_24,设置方向为负梯度方向
pytorch求解无约束最优化问题 matlab求解无约束最优化问题_pytorch求解无约束最优化问题_25
最速方向的迭代公式为
pytorch求解无约束最优化问题 matlab求解无约束最优化问题_无约束优化_26
在第pytorch求解无约束最优化问题 matlab求解无约束最优化问题_搜索_27次迭代初始点pytorch求解无约束最优化问题 matlab求解无约束最优化问题_matlab_28和搜索方向pytorch求解无约束最优化问题 matlab求解无约束最优化问题_matlab_29确定时,原始目标函数为关于步长pytorch求解无约束最优化问题 matlab求解无约束最优化问题_matlab_30的一维函数
pytorch求解无约束最优化问题 matlab求解无约束最优化问题_pytorch求解无约束最优化问题_31
在可导的情况下,可以得到
pytorch求解无约束最优化问题 matlab求解无约束最优化问题_matlab_32
可以发现,连续两次搜索方向互相正交,形成Z形状的搜索路径。

共轭梯度法

最速下降法在越接近极值点的区域的搜索效率越差,因此采用近似的思想对最速下降法进行改进,根据目标函数在极值点附近可以近似于一个二次函数,希望进行一次迭代达到极值点pytorch求解无约束最优化问题 matlab求解无约束最优化问题_优化算法_33
pytorch求解无约束最优化问题 matlab求解无约束最优化问题_无约束优化_34
pytorch求解无约束最优化问题 matlab求解无约束最优化问题_matlab_35进行Taylor Expansions
pytorch求解无约束最优化问题 matlab求解无约束最优化问题_pytorch求解无约束最优化问题_36
pytorch求解无约束最优化问题 matlab求解无约束最优化问题_matlab_37的梯度为
pytorch求解无约束最优化问题 matlab求解无约束最优化问题_pytorch求解无约束最优化问题_38
在极值点pytorch求解无约束最优化问题 matlab求解无约束最优化问题_优化算法_33,满足必要条件,代入得到
pytorch求解无约束最优化问题 matlab求解无约束最优化问题_pytorch求解无约束最优化问题_40
等式两侧同时乘以pytorch求解无约束最优化问题 matlab求解无约束最优化问题_无约束优化_41,可以得到
pytorch求解无约束最优化问题 matlab求解无约束最优化问题_matlab_42
向量pytorch求解无约束最优化问题 matlab求解无约束最优化问题_pytorch求解无约束最优化问题_09pytorch求解无约束最优化问题 matlab求解无约束最优化问题_优化算法_44成为pytorch求解无约束最优化问题 matlab求解无约束最优化问题_无约束优化_45的共轭方向。

拟牛顿法

拟牛顿法是利用目标函数pytorch求解无约束最优化问题 matlab求解无约束最优化问题_搜索_46和一阶导数pytorch求解无约束最优化问题 matlab求解无约束最优化问题_搜索_47的信息,构造出目标函数的曲率近似