this two code are connected to each other when i run the first code it gives me error says: Error using GWO Too many output arguments.
1 次查看(过去 30 天)
显示 更早的评论
close all
clear all
clc
global A trn vald ;
T=100;
N=30;
lb=0;%
ub=1;
runs=30;
threshold=2;
fitfun=@AccSz; %fitness function 0.99Err+0.01*Selection Ratio
%% Problem Definition
fn={'arrhythmia','primary-tumor','australian','base_Brain_T91','hepatitis','horse-colic',...
'KrvskpEW','BreastEW','spambase','SportsArticles','WaveformEW',...
'WineEW','Zoo','CongressEW','Exactly','Exactly2','HeartEW','IonosphereEW','Lymphography'...
'M-of-n','PenglungEW','SonarEW','SpectEW','Vote'};
SD=size(fn,1);
for j=1:SD
libb=['BDD\' cell2mat(fn(j)) '.mat'];
% A=load('C:\Users\d\Downloads\archieve');
% save('featuresall.mat')
load('f')
A=featuresall;
nVar=size(featuresall,2)-1;
r=randperm(size(featuresall,1));
trn=r(1:floor(length(r)*0.8)); % split 80% train 20% test not k-fold
vald=r(floor(length(r)*0.8)+1:end);
dim=nVar;
for i=1:runs
display(['At run ', num2str(i)]);
[t_GWO(i),Nf_GWO(i),outcome_GWO(i),best_GWO(i,:),GWO_conv(i,:)]=GWO(N,T,lb,ub,dim,fitfun);
[acc_GWO(i),sensi_GWO(i),speci_GWO(i)]=Acc(best_GWO(i,:));
end
str=(strcat(char(fn{j}),'_',num2str(1)));
save(str)
end
%___________________________________________________________________%
% Grey Wolf Optimizer (GWO) source codes version 1.0 %
% %
% Developed in MATLAB R2011b(7.13) %
% %
% Author and programmer: Seyedali Mirjalili %
% %
% e-Mail: ali.mirjalili@gmail.com %
% seyedali.mirjalili@griffithuni.edu.au %
% %
% Homepage: http://www.alimirjalili.com %
% %
% Main paper: S. Mirjalili, S. M. Mirjalili, A. Lewis %
% Grey Wolf Optimizer, Advances in Engineering %
% Software , in press, %
% DOI: 10.1016/j.advengsoft.2013.12.007 %
% %
%___________________________________________________________________%
% Grey Wolf Optimizer
function[Alpha_score,Alpha_pos,Convergence_curve]=GWO(SearchAgents_no,Max_iter,lb,ub,dim,fobj)
% initialize alpha, beta, and delta_pos
Alpha_pos=zeros(1,dim);
Alpha_score=inf; %change this to -inf for maximization problems
Beta_pos=zeros(1,dim);
Beta_score=inf; %change this to -inf for maximization problems
Delta_pos=zeros(1,dim);
Delta_score=inf; %change this to -inf for maximization problems
%Initialize the positions of search agents
Positions=initialization(SearchAgents_no,dim,ub,lb);
Convergence_curve=zeros(1,Max_iter);
l=0;% Loop counter
% Main loop
while l<Max_iter
for i=1:size(Positions,1)
% Return back the search agents that go beyond the boundaries of the search space
Flag4ub=Positions(i,:)>ub;
Flag4lb=Positions(i,:)<lb;
Positions(i,:)=(Positions(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb;
% Calculate objective function for each search agent
fitness=fobj(Positions(i,:));
% Update Alpha, Beta, and Delta
if fitness<Alpha_score
Alpha_score=fitness; % Update alpha
Alpha_pos=Positions(i,:);
end
if fitness>Alpha_score && fitness<Beta_score
Beta_score=fitness; % Update beta
Beta_pos=Positions(i,:);
end
if fitness>Alpha_score && fitness>Beta_score && fitness<Delta_score
Delta_score=fitness; % Update delta
Delta_pos=Positions(i,:);
end
end
a=2-l*((2)/Max_iter); % a decreases linearly fron 2 to 0
% Update the Position of search agents including omegas
for i=1:size(Positions,1)
for j=1:size(Positions,2)
r1=rand(); % r1 is a random number in [0,1]
r2=rand(); % r2 is a random number in [0,1]
A1=2*a*r1-a; % Equation (3.3)
C1=2*r2; % Equation (3.4)
D_alpha=abs(C1*Alpha_pos(j)-Positions(i,j)); % Equation (3.5)-part 1
X1=Alpha_pos(j)-A1*D_alpha; % Equation (3.6)-part 1
r1=rand();
r2=rand();
A2=2*a*r1-a; % Equation (3.3)
C2=2*r2; % Equation (3.4)
D_beta=abs(C2*Beta_pos(j)-Positions(i,j)); % Equation (3.5)-part 2
X2=Beta_pos(j)-A2*D_beta; % Equation (3.6)-part 2
r1=rand();
r2=rand();
A3=2*a*r1-a; % Equation (3.3)
C3=2*r2; % Equation (3.4)
D_delta=abs(C3*Delta_pos(j)-Positions(i,j)); % Equation (3.5)-part 3
X3=Delta_pos(j)-A3*D_delta; % Equation (3.5)-part 3
Positions(i,j)=(X1+X2+X3)/3;% Equation (3.7)
end
end
l=l+1;
Convergence_curve(l)=Alpha_score;
end
0 个评论
回答(1 个)
Walter Roberson
2023-3-13
[t_GWO(i),Nf_GWO(i),outcome_GWO(i),best_GWO(i,:),GWO_conv(i,:)]=GWO(N,T,lb,ub,dim,fitfun);
% 1 2 3 4 5
That code requests 5 outputs from the GWO call.
function[Alpha_score,Alpha_pos,Convergence_curve]=GWO(SearchAgents_no,Max_iter,lb,ub,dim,fobj)
That GWO function can only return 3 outputs. The only one of the outputs that appears to match the outputs you expect is the convergence, which is the third output from that GWO and the 5th output that you expect.
That GWO function does not match the way you expect to be able to call GWO.
I searched for a GWO that returns at least 5 outputs, but I was not able to find such a function anywhere -- I was also not able to find any place that called GWO expecting more than 3 outputs.
4 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Problem-Based Optimization Setup 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!