m0_63192263
2021-10-20 08:48
浏览 81

完成/改进附件中最速下降法的MATLAB代码,可与其他算法结合求解30维Rosenbrock函数的最优解

function [F0,x0,FE] = LineSearchDemo()

nVar = 30; % Number of variables

x0 = 2*ones(1,nVar); % DO NOT CHANGE. Initial position.

% p0 = [1;1]; % Use your own search direction instead

tol = 1e-6; % Tolerance

FEmax = 2e6; % Maximum number of function evalution

alpha = 1; % Initial step length

F0 = Rosenbrock(x0); % Intial functino value

FE = 1; % Number of function evaluations

while F0 > tol && FE < FEmax % Step if reach tolerance or exceeds maximum function eval.

g = gradient(x0,F0); % The gradient on current x

FE = FE + nVar; % Finding gradient costs nVar FE

p = -g; % Search direction

xnew = x0 + alpha*p; % Next step

Fnew = Rosenbrock(xnew); % Function value of the next step

FE = FE + 1; % Update FE

if Fnew < F0 % If better solution found

    

    

    

else

    

end

end

function y = Rosenbrock(x) % The Rosenbrock function

nVar = size(x,2);

y = sum(100.*(x(:,1:nVar-1).^2-x(:,2:nVar)).^2+(x(:,1:nVar-1)-1).^2,2);

function g = gradient(x,F0) % Find the gradient of the current point

nVar = size(x,2);

d = sqrt(eps); % A small disturbance

X = repmat(x,nVar,1) + eye(nVar)*d; % Add disturbance to each element of x

g = (Rosenbrock(X)-F0)'/d; % You may use this line to debug your code for

% efficiency, but MUST NOT when you are using the Profiler

%--------------------------------------------------------------------------

% This part is only used when you need to submit the report. For debuging,

% comment this part.

% g = zeros(1,nVar);

% for ii = 1:nVar

% g(ii) = (Rosenbrock(X(ii,:))-F0)/d;

% end

%--------------------------------------------------------------------------大体框架是这样的,哪位大神会呀,只要改几行代码即可。要求是: 完成/改进附件中最速下降法的MATLAB代码,可与其他算法结合求解30维Rosenbrock函数的最优解;

2) 允许使用线搜索以外的算法,但必须手动实现。直接调用系统内置功能将被视为不合格

3) 无论进行何种更改,每次函数计算后都必须更新FE(函数求值,目标函数的调用次数);

  • 好问题 提建议
  • 收藏

相关推荐 更多相似问题