最优化中的BFGS算法英文全称是什么

最优化中的BFGS算法英文全称是什么,第1张

BFGS是拟牛顿算法中构造矩阵方法的一种,这四个字母是四个人的名字的首字母合写,就好象PBE和PW91都算是GGA一样。。Broyden, Fletcher, Goldfarb和Shanno的姓氏首字母命名。

一、fmincon函数基本介绍

求解问题的标准型为

min F(X)

st

AX <= b

AeqX = beq

G(x) <= 0

Ceq(X) = 0

VLB <= X <= VUB

其中X为n维变元向量,G(x)与Ceq(X)均为非线性函数组成的向量,其它变量的含义与线性规划,二次规划中相同,用Matlab求解上述问题,基本步骤分为三步:

1 首先建立M文件funm定义目标函数F(X):

function f = fun(X);

f = F(X)

2 若约束条件中有非线性约束:G(x) <= 0 或 Ceq(x) = 0,则建立M文件nonlconm定义函数G(X)和Ceq(X);

function [G, Ceq] = nonlcon(X)

G =

Ceq =

3 建立主程序,非线性规划求解的函数时fmincon,命令的基本格式如下:

[转载]Matlab fmincon函数用法

注意:

(1)fmincon函数提供了大型优化算法和中型优化算法。默认时,若在fun函数中提供了梯度(options 参数的GradObj设置为'on'),并且只有上下界存在或只有等式约束,fmincon函数将选择大型算法,当既有等式约束又有梯度约束时,使用中型算法。

(2)fmincon函数的中型算法使用的是序列二次规划法。在每一步迭代中 求解二次规划子问题,并用BFGS法更新拉格朗日Hessian矩阵。

(3)fmincon函数可能会给出局部最优解,这与初值X0的选取有关。

二、实例

1 第一种方法,直接设置边界

主要是指直接设置A,b等参数。

例1:min f = -x1 - 2x2 + 1/2x1^2 + 1/2 x2^2

2x1 + 3x2 <= 6

x1 + 4x2 <= 5

x1, x2 >= 0

function ex131101

x0 = [1; 1];

A = [2, 3; 1, 4];

b = [6, 5];

Aeq = [];

beq = [];

VLB = [0; 0];

VUB = [];

[x, fval] = fmincon(@fun3, x0, A, b, Aeq, beq, VLB, VUB)

function f = fun3(x)

f = -x(1) - 2x(2) + (1/2)x(1)^2 + (1/2)x(2)^2;

2 第二种方法,通过函数设置边界

例2: min f(x) = exp(x1) (4x1^2 + 2x2^2 + 4x1x2 + 2x2 + 1)

x1 + x2 = 0

15 + x1 x2 - x1 - x2 <= 0

-x1x2 - 10 <= 0

function youh3

clc;

x0 = [-1, 1];

A = [];b = [];

Aeq = []; beq = [];

vlb = []; vub = [];

[x, fval] = fmincon(@fun4, x0, A, b, Aeq, beq, vlb, vub, @mycon)

function f = fun4(x);

f = exp(x(1)) (4x(1)^2 + 2x(2)^2 + 4x(1)x(2) + 2x(2) + 1);

function [g, ceq] = mycon(x)

g = [15 + x(1)x(2) - x(1) - x(2); -x(1)x(2) - 10];

ceq = [x(1) + x(2)];

3 进阶用法,增加梯度以及传递参数

这里用无约束优化函数fminunc做示例,对于fmincon方法相同,只需将边界项设为空即可。

(1)定义目标函数

function [J, grad] = costFunction(theta, X, y)

%COSTFUNCTION Compute cost and gradient for logistic regression

% J = COSTFUNCTION(theta, X, y) computes the cost of using theta as the

% parameter for logistic regression and the gradient of the cost

% wrt to the parameters

% Initialize some useful values

m = length(y); % number of training examples

% You need to return the following variables correctly

J = 0;

grad = zeros(size(theta));

% ====================== YOUR CODE HERE ======================

% Instructions: Compute the cost of a particular choice of theta

% You should set J to the cost

% Compute the partial derivatives and set grad to the partial

% derivatives of the cost wrt each parameter in theta

%

% Note: grad should have the same dimensions as theta

%

z = X theta;

hx = 1 / (1 + exp(-z));

J = 1/m sum([-y' log(hx) - (1 - y)' log(1 - hx)]);

for j = 1: length(theta)

grad(j) = 1/m sum((hx - y)' X(:,j));

end

% =============================================================

end

(2)优化求极小值

% Set options for fminunc

options = optimset('GradObj', 'on', 'MaxIter', 400);

% Run fminunc to obtain the optimal theta

% This function will return theta and the cost

[theta, cost] =

fminunc(@(t)(costFunction(t, X, y)), initial_theta, options);

% [theta, cost] =

% fminunc(@(t)(costFunction(t, X, y)), initial_theta);

% Print theta to screen

fprintf('Cost at theta found by fminunc: %fn', cost);

fprintf('theta: n');

fprintf(' %f n', theta);

MATLAB代码如下:

c=ones(1,7);

A=[0 0 0 0 1 1 2;

   0 1 2 3 0 1 0;

   6 4 2 0 4 1 1];

A=-A;

b=-100ones(3,1);

lb=zeros(1,7);

[x,fval,exitflag]=linprog(c,A,b,[],[],lb)

优化结果:

Optimization terminated

x =

  00000

  00000

  00000

 333333

 142857

  00000

 428571

fval =

 904762

exitflag =

   1

结果收敛。

1stopt代码:

Parameter x(1:7)[0,];

MinFunction x1+x2+x3+x4+x5+x6+x7;

x5+x6+2x7>=100;

x2+2x3+3x4+x6>=100;

6x1+4x2+2x3+4x5+x6+x7>=100;

优化结果:

迭代数: 94

计算用时(时:分:秒:毫秒): 00:00:01:312

计算中止原因: 达到收敛判定标准

优化算法: 准牛顿法(BFGS) + 通用全局优化法

函数表达式: x1+x2+x3+x4+x5+x6+x7

目标函数值(最小): 904789793976423

x1: 656531036168569E-22

x2: 00290946768006313

x3: 466048571470512E-16

x4: 333235799630505

x5: 14252439546946

x6: 000016543404783297

x7: 428736997767972

约束函数

 1: x5+x6+2x7-(100) = 4534588371E-6

 2: x2+2x3+3x4+x6-(100) = 0

 3: 6x1+4x2+2x3+4x5+x6+x7-(100) = 2105831783E-6

====== 计算结束 ======

两种方式下计算一致,解可信。

以上就是关于最优化中的BFGS算法英文全称是什么全部的内容,包括:最优化中的BFGS算法英文全称是什么、matlab中的fmincon函数的用法!急、求Matlab编程大神帮忙编程计算。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10140224.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存