How to fix this error : Not enough input arguments.

조회 수: 4 (최근 30일)
Abdulaziz Hassoun
Abdulaziz Hassoun 2023년 3월 7일
댓글: Abdulaziz Hassoun 2023년 3월 21일
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
  댓글 수: 1
Abdulaziz Hassoun
Abdulaziz Hassoun 2023년 3월 7일
Should i define the variables : N,M_Iter,LB,UB,Dim,fhd,Function_ID,Global_Opt ?

댓글을 달려면 로그인하십시오.

답변 (1개)

Constantino Carlos Reyes-Aldasoro
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)
Not enough input arguments.

Error in solution>test (line 3)
out = a*b*c;
function out = test(a,b,c)
out = a*b*c;
end
  댓글 수: 8
Image Analyst
Image Analyst 2023년 3월 20일
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.
Abdulaziz Hassoun
Abdulaziz Hassoun 2023년 3월 21일
Oh ok i did not know that, Thank you

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

제품


릴리스

R2022b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by