How to fix this error : Not enough input arguments.
4 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Hi Everyone, i am an Egnineering student new to MATLAB Coding and working on Coding arithmetic optimization Algorathim (AOA).
I keep Having this Erorr : Not enough input arguments.
Error in AOA_new6 (line 5)
Best_P=zeros(1,Dim);
i am trying to modifi the code for global optimization.
i added the code for refrence.
it's not my work.
function [Best_FF,Best_P,Conv_curve]=AOA_new6(N,M_Iter,LB,UB,Dim,fhd,Function_ID,Global_Opt)
disp('AOA Working');
%Two variables to keep the positions and the fitness value of the best-obtained solution
Best_P=zeros(1,Dim);
Best_FF=inf;
Conv_curve=zeros(1,M_Iter);
%Initialize the positions of solution
X=initialization(N,Dim,UB,LB);
Xnew=X;
Ffun=zeros(1,size(X,1));% (fitness values)
Ffun_new=zeros(1,size(Xnew,1));% (fitness values)
MOP_Max=1;
MOP_Min=0.2;
C_Iter=1;
Alpha=5;
Mu=0.499;
for i=1:size(X,1)
%Ffun(1,i)=F_obj(X(i,:)); %Calculate the fitness values of solutions
Ffun(1,i)=feval(fhd,X(i,:)',Function_ID); %Calculate the fitness values of solutions
if Ffun(1,i)<Best_FF
Best_FF=Ffun(1,i);
Best_P=X(i,:);
end
end
while C_Iter<M_Iter+1 %Main loop
MOP=1-((C_Iter)^(1/Alpha)/(M_Iter)^(1/Alpha)); % Probability Ratio
MOA=MOP_Min+C_Iter*((MOP_Max-MOP_Min)/M_Iter); %Accelerated function
%Update the Position of solutions
for i=1:size(X,1) % if each of the UB and LB has a just value
for j=1:size(X,2)
r1=rand();
if (size(LB,2)==1)
if r1<MOA
r2=rand();
if r2>0.5
Xnew(i,j)=Best_P(1,j)/(MOP+eps)*((UB-LB)*Mu+LB);
else
Xnew(i,j)=Best_P(1,j)*MOP*((UB-LB)*Mu+LB);
end
else
r3=rand();
if r3>0.5
Xnew(i,j)=Best_P(1,j)-MOP*((UB-LB)*Mu+LB);
else
Xnew(i,j)=Best_P(1,j)+MOP*((UB-LB)*Mu+LB);
end
end
end
if (size(LB,2)~=1) % if each of the UB and LB has more than one value
r1=rand();
if r1<MOA
r2=rand();
if r2>0.5
Xnew(i,j)=Best_P(1,j)/(MOP+eps)*((UB(j)-LB(j))*Mu+LB(j));
else
Xnew(i,j)=Best_P(1,j)*MOP*((UB(j)-LB(j))*Mu+LB(j));
end
else
r3=rand();
if r3>0.5
Xnew(i,j)=Best_P(1,j)-MOP*((UB(j)-LB(j))*Mu+LB(j));
else
Xnew(i,j)=Best_P(1,j)+MOP*((UB(j)-LB(j))*Mu+LB(j));
end
end
end
end
Flag_UB=Xnew(i,:)>UB; % check if they exceed (up) the boundaries
Flag_LB=Xnew(i,:)<LB; % check if they exceed (down) the boundaries
Xnew(i,:)=(Xnew(i,:).*(~(Flag_UB+Flag_LB)))+UB.*Flag_UB+LB.*Flag_LB;
%Ffun_new(1,i)=F_obj(Xnew(i,:)); % calculate Fitness function
Ffun_new(1,i)=feval(fhd,Xnew(i,:)',Function_ID); %Calculate the fitness values of solutions
if Ffun_new(1,i)<Ffun(1,i)
X(i,:)=Xnew(i,:);
Ffun(1,i)=Ffun_new(1,i);
end
if Ffun(1,i)<Best_FF
Best_FF=Ffun(1,i);
Best_P=X(i,:);
end
end
%Update the convergence curve
Conv_curve(C_Iter)=Best_FF-Global_Opt;
%Print the best solution details after every 50 iterations
if mod(C_Iter,50)==0
display(['At iteration ', num2str(C_Iter), ' the best solution fitness is ', num2str(Best_FF-Global_Opt)]);
end
C_Iter=C_Iter+1; % incremental iteration
end
Risposte (1)
Constantino Carlos Reyes-Aldasoro
il 7 Mar 2023
Hello
Most probably you are not calling the function with all the necessary input parameters, look at this example in which there are 3 parameters required and I only pass 2.
test(2,3)
function out = test(a,b,c)
out = a*b*c;
end
8 Commenti
Image Analyst
il 20 Mar 2023
We assume you got it working because you accepted this answer. It that's not true, then unaccept it and maybe more people will answer.
Vedere anche
Categorie
Scopri di più su Logical in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!