资源简介

matlab代码////增广拉格朗日算法////精确步长、可调节函数、可调节步长等等, ALM(增广拉格朗日算法)被认为最常用的约束优化算法、运用二阶信息、拉格朗日乘子、罚项转为无约束优化

资源截图

代码片段和文件信息

function [x delta]  = BFGS_exact(f_originClambdamu)
% BFGS法确定多个变量的最优解
%

% 输入:
% x0:当前点;
% Iter_max:最大迭代次数;

% 输出:
% x:最优解;
%

Iter_max = 20; %函数参数的个数,x1x2x3...的个数
x0 = [11]; %初始值
 eps = 1e-2; %迭代容忍度
ite = 1; % 循环次数
f111 = f_origin-lambda.*C+mu.*(C)^2/2;

g111=gradient(f111);
gk = BFGS_Gradient(g111x0); % 初始梯度
H = eye(length(x0)); % 初始H阵
d = -gk*H‘; % 初始搜索方向
alpha = exact_buchang(f111x0d‘); % 初始搜索步长
while norm(gk) > eps && ite< Iter_max

x0 = x0 + alpha.*d; % 新的循环点
gkk = BFGS_Gradient(g111x0); % 新的梯度
y = gkk - gk; % 梯度差
s = alpha.*d; % 迭代点差
H = H + (1 +(y*H*y‘)/(s*y‘))*(s‘*s)/(s*y‘) - (s‘*y*H + H*y‘*s)/(s*y‘); %H阵更新
d = -gkk*H‘; % 新的搜索方向
alpha = exact_buchang(f111x0d‘); % 新的搜索步长
gk = gkk; % 更新梯度
ite = ite + 1; % 循环次数加1
end
x = x0 + alpha.*d; % 极小值
delta=BFGS_Gradient(g111x);
 
% 梯度矩阵
function g = BFGS_Gradient(g11x0)
temp = sym(‘x‘[12]);
g=(double(subs(g11tempx0)))‘;
end
 
end

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        1075  2020-04-14 22:51  第五题增广拉格朗日法\BFGS_exact.m
     文件         334  2020-04-14 22:47  第五题增广拉格朗日法\exact_buchang.m
     文件         493  2020-04-14 23:16  第五题增广拉格朗日法\main.m

评论

共有 条评论