Hye, i got a problem when i want to run this code where it stated not enough input arguments. can anyone help me.

function [z, out]=FeatureSelectionCost(u,nf,data)
% Read Data Elements
x=data.x;
t=data.t;
% Create Permutation uinsg Random Keys
[~, q]=sort(u);
% Selected Features
S=q(1:nf);
% Ratio of Selected Features
rf=nf/numel(q);
% Selecting Features
xs=x(S,:);
% Weights of Train and Test Errors
wTrain=0.8;
wTest=1-wTrain;
% Number of Runs
nRun=3;
EE=zeros(1,nRun);
for r=1:nRun
% Create and Train ANN
results=CreateAndTrainANN(xs,t);
% Calculate Overall Error
EE(r) = wTrain*results.TrainData.E + wTest*results.TestData.E;
end
E=mean(EE);
%if isinf(E)
% E=1e10;
%end
% Calculate Final Cost
z=E;
% Set Outputs
out.S=S;
out.nf=nf;
out.rf=rf;
out.E=E;
out.z=z;
%out.net=results.net;
%out.Data=results.Data;
%out.TrainData=results.TrainData;
%out.TestData=results.TestData;
end

 Risposta accettata

You have not provided the values to the inputs. Provide the values of u,nf,data and then call the function.

4 Commenti

i do provide the values in another file. still i cant figure the problem.
%% Problem Definition
data=LoadData();
nf=4;
CostFunction=@(u) FeatureSelectionCost(u,nf,data); % Cost Function
nVar=data.nx; % Number of Decision Variables
VarSize=[1 nVar]; % Size of Decision Variables Matrix
VarMin=0; % Lower Bound of Variables VarMax=1; % Upper Bound of Variables
%% PSO Parameters
MaxIt=20; % Maximum Number of Iterations
nPop=20; % Population Size (Swarm Size)
% w=1; % Inertia Weight % wdamp=0.99; % Inertia Weight Damping Ratio % c1=2; % Personal Learning Coefficient % c2=2; % Global Learning Coefficient
% Constriction Coefficients phi1=2.05; phi2=2.05; phi=phi1+phi2; chi=2/(phi-2+sqrt(phi^2-4*phi)); w=chi; % Inertia Weight wdamp=1; % Inertia Weight Damping Ratio c1=chi*phi1; % Personal Learning Coefficient c2=chi*phi2; % Global Learning Coefficient
% Velocity Limits VelMax=0.1*(VarMax-VarMin); VelMin=-VelMax;
%% Initialization
empty_particle.Position=[]; empty_particle.Cost=[]; empty_particle.Out=[]; empty_particle.Velocity=[]; empty_particle.Best.Position=[]; empty_particle.Best.Cost=[]; empty_particle.Best.Out=[];
particle=repmat(empty_particle,nPop,1);
BestSol.Cost=inf;
for i=1:nPop
% Initialize Position
particle(i).Position=unifrnd(VarMin,VarMax,VarSize);
% Initialize Velocity
particle(i).Velocity=zeros(VarSize);
% Evaluation
[particle(i).Cost, particle(i).Out]=CostFunction(particle(i).Position);
% Update Personal Best
particle(i).Best.Position=particle(i).Position;
particle(i).Best.Cost=particle(i).Cost;
particle(i).Best.Out=particle(i).Out;
% Update Global Best
if particle(i).Best.Cost<BestSol.Cost
BestSol=particle(i).Best;
end
end
BestCost=zeros(MaxIt,1);
%% PSO Main Loop
for it=1:MaxIt
for i=1:nPop
% Update Velocity
particle(i).Velocity = w*particle(i).Velocity ...
+c1*rand(VarSize).*(particle(i).Best.Position-particle(i).Position) ...
+c2*rand(VarSize).*(BestSol.Position-particle(i).Position);
% Apply Velocity Limits
particle(i).Velocity = max(particle(i).Velocity,VelMin);
particle(i).Velocity = min(particle(i).Velocity,VelMax);
% Update Position
particle(i).Position = particle(i).Position + particle(i).Velocity;
% Velocity Mirror Effect
IsOutside=(particle(i).Position<VarMin | particle(i).Position>VarMax);
particle(i).Velocity(IsOutside)=-particle(i).Velocity(IsOutside);
% Apply Position Limits
particle(i).Position = max(particle(i).Position,VarMin);
particle(i).Position = min(particle(i).Position,VarMax);
% Evaluation
[particle(i).Cost, particle(i).Out] = CostFunction(particle(i).Position);
% Update Personal Best
if particle(i).Cost<particle(i).Best.Cost
particle(i).Best.Position=particle(i).Position;
particle(i).Best.Cost=particle(i).Cost;
particle(i).Best.Out=particle(i).Out;
% Update Global Best
if particle(i).Best.Cost<BestSol.Cost
BestSol=particle(i).Best;
end
end
end
BestCost(it)=BestSol.Cost;
disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCost(it))]);
w=w*wdamp;
end
i just declare the value u, still didnot function. still not enough input argument
You define u,nf,data and the call the function:
[z, out]=FeatureSelectionCost(u,nf,data) ;

Accedi per commentare.

Più risposte (0)

Richiesto:

il 5 Apr 2017

Commentato:

il 5 Apr 2017

Community Treasure Hunt

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

Start Hunting!

Translated by