2016-07-23 5 views
0

Im folgenden Code wird der Wert gbest nicht mit jeder Iteration aktualisiert und zeigt Infinity als Ergebnis an. Kann mir jemand helfen, herauszufinden, warum?Wert wird nicht innerhalb der for-Schleife aktualisiert

fgbest=Inf; % Initialization of gbest 

for j=1:Popsize 

    % Generate Random Solution 
    pop(:,j)=randi([500,2000],10,1); 

    [obj]=objfn(pop,it); 

    % Evaluation 
    obj1(j,1) = obj(j,1);% 

    % Update the Personal Best 
    pbest(:,j) = pop(:,j);% pbest 
    fpbest(j,1) =obj1(j,1);% objective function 

    % Update Global Best 
    test = fgbest>fpbest(j,1); 
    if any(test) 
     gbest = pbest(:,j); 
    end 

    gbest 
end 

Antwort

0

Das liegt wahrscheinlich daran, dass Sie fgbest als Inf initialisiert haben. Solange der Wert fpbest(j,1) kleiner als Inf bleibt, wird der Wert gbest nicht aktualisiert, da die if Bedingung nicht erfüllt ist. Könnten Sie versuchen, es mit 0 oder einem anderen kleineren Wert zu initialisieren?

+0

Eigentlich ist das Ziel, den Obj-Wert unter dem maximal möglichen Wert zu halten, dh. Unendlich und später möchte ich es auf den minimal möglichen Wert aktualisieren. aber danke für deinen Kommentar :) –

+0

Es ist nicht klar, da du keine Definitionen für deine Variablen bereitstellst, aber warum brauchst du überhaupt 'any'? Ist nicht eine einzelne logische 0 oder 1 "test"? Wenn es * nicht * ist, könnte dies Ihren Fehler erklären, da 'any' sich nicht so verhält, wie Sie es für 2D-Matrizen erwarten würden. –

Verwandte Themen