主要内容

检验梯度或雅可比矩阵的有效性

检查目标函数中的梯度或雅可比矩阵

许多求解器允许您提供计算目标函数或约束函数的一阶导数(梯度或雅可比矩阵)的函数。你可以检查由你的函数计算的导数是否与有限差分近似相匹配。这种检查可以帮助你诊断你的导数函数是否正确。

  • 如果梯度函数的一个分量小于1,“匹配”表示梯度函数与该分量的有限差分近似的绝对差小于1 e-6

  • 否则,“匹配”意味着相对差小于1 e-6

CheckGradients选项使求解器仅在一点上根据有限差分近似检查所提供的导数。如果有限差分和提供的导数不匹配,求解器就会出错。如果导数匹配1 e-6,求解器报告计算的差异,并继续迭代,而不进行进一步的派生检查。求解器在初始点的一个小的随机扰动点上检查匹配x0,被修改为在任何范围内。求解器不包括的计算CheckGradients函数计数;看到迭代和函数计数

如何检查衍生品

在MATLAB中®命令行:

  1. 设置SpecifyObjectiveGradientSpecifyConstraintGradient选项真正的使用optimoptions.确保你的目标函数或约束函数提供适当的导数。

  2. 设置CheckGradients选项真正的

中心有限差分比默认的正向有限差分更精确。若要在MATLAB命令行中使用中心有限差分,请设置FiniteDifferenceType选项“中央”使用optimoptions

例:检验目标函数和约束函数的导数

目标函数与约束函数

考虑在单元磁盘中最小化Rosenbrock函数的问题使用优化实时编辑器任务或求解器的约束非线性问题.的rosenboth函数计算目标函数及其梯度:

函数f (g H] = rosenboth f (x) = 100 * (x (2) - x (1) ^ 2) ^ 2 + (1 - x (1)) ^ 2;如果nargout > 1 g = (-400 * (x (2) - x (1) ^ 2) * x (1) 2 * (1 - x (1));200 * (x (2) - x (1) ^ 2)];如果nargout > 2 H = (1200 * (1) ^ 2 - 400 * x (2) + 2, -400 * x (1);-400 * x (1), 200);结束结束

rosenboth计算Hessian,但本例不使用Hessian。

unitdisk2函数正确计算约束函数及其梯度:

函数[c,ceq,gc,gceq] = unitdisk2(x) c = x(1)²+ x(2)²- 1;Ceq = [];如果nargout > 2 gc = [2*x(1);2*x(2)];Gceq = [];结束

unitdiskb函数错误地计算了约束函数的梯度:

函数[c ceq gc gceq] = unitdiskb(x) c = x(1)^2 + x(2)^2 - 1;Ceq = [];如果nargout > 2 gc = [x(1);x(2)];%梯度不正确:关闭因子2 gceq = [];结束

在命令行检查派生函数

  1. 设置选项以使用内点算法、目标函数和约束函数的梯度以及CheckGradients选择:

    %为再现性-CheckGradients随机扰动初始点rng(0,'twister');options = optimoptions(@fmincon,'算法','内部点',…“CheckGradients”,的确,“SpecifyObjectiveGradient”,真的,‘SpecifyConstraintGradient’,真正的);
  2. 求最小值fmincon错误用法unitdiskb约束功能:

    [x fval exitflag output] = fmincon(@rosenboth,…[1, 2 ],[],[],[],[],[],[],@ unitdiskb选项);____________________________________________________________ 导数检查目标函数导数信息:用户提供最大相对区别和有限差分衍生品= 1.84768 e - 008。非线性不等式约束导数:用户提供的导数与有限差分导数的最大相对差= 1。用户提供的约束导数元素(2,1):1.99838有限差分约束导数元素(2,1):3.99675 ____________________________________________________________使用validateFirstDerivatives的错误导数检查失败:用户提供的和正向有限差分导数在1e-006相对公差内不匹配。错误在fmincon在805 validateFirstDerivatives(funfcn,confcn,X,…

    约束函数与计算的梯度不匹配,鼓励您检查函数是否有错误。

  3. 取代unitdiskb约束函数unitdisk2然后再次运行最小化:

    [x fval exitflag output] = fmincon(@rosenboth,…[1, 2 ],[],[],[],[],[],[],@ unitdisk2选项);____________________________________________________________ 导数检查目标函数导数信息:用户提供最大相对区别和有限差分衍生品= 1.28553 e - 008。非线性不等式约束导数:用户提供的导数和有限差分导数的最大相对差= 1.46443e-008。衍生检查成功通过。____________________________________________________________ 局部最小值发现,满足约束……
Baidu
map