condition in while loop
3 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Mudasir Ahmed
le 5 Oct 2014
Commenté : Geoff Hayes
le 6 Oct 2014
while ((ch1(1,1)~=60)&(ch1(1,2)~=40)) ||
((ch2(1,1)~=60)&(ch2(1,2)~=40)) ||
((ch3(1,1)~=60)&(ch3(1,2)~=40)) ||
((ch4(1,1)~=60)&(ch4(1,2)~=40)))
body
end
hi,
i want to run a loop until any one of the condition ch1(60,40),ch2(60,40),ch3(60,40),ch4(60,40) met. is above syntax is correct or not. i run the above line but didn't get proper response which is desired.
kindly help me. i will be highly thankful to you :) thanks in advance
4 commentaires
Geoff Hayes
le 6 Oct 2014
Mudasir - from your previous question at ga & target tracking, the (60,40) is the position of the target, the ch1, ch2, ch3, and ch4 are presumably the chromosomes of your population (of only size four?). And each chromosome has two genes (or variables). Are you trying to force a genetic algorithm to run until one of the chromosomes has converged on the target position? That won't necessarily (or even probably) happen given the small population size and the fact that the solutions may all converge prematurely to another location.
Réponse acceptée
Geoff Hayes
le 6 Oct 2014
Mudasir - you can try the following if you want to break out of the loop if any of your chromosomes obtain a certain value (or get close enough to it). It doesn't limit you to four chromosomes (which is much too small of a population size for a genetic algorithm)
numChromosomes = 42;
chromosomes = zeros(numChromosomes,2);
tol = 0.0001;
while all(sqrt((chromosomes(:,1)-60).^2 + (chromosomes(:,2)-40).^2)>tol)
% do stuff
end
The above creates an mx2 matrix of chromosomes which will (presumably) be updated by the algorithm. The condition in the while loop uses the usual distance function
all(sqrt((chromosomes(:,1)-60).^2 + (chromosomes(:,2)-40).^2)>tol)
We compute the distance for each chromosome from the target position of (60,40). We then compare each to a tolerance tol which is a small number. If all of these distances are greater than tol then we keep iterating. If at least one is less than or equal to tol, then the condition is broken and we exit the while loop.
You do have to be careful as you may become stuck in an infinite loop as your GA population (the chromosomes) may converge prematurely to another solution (position) and so will never achieve the target position (despite the mutation or any other method you invoke against your chromosomes).
0 commentaires
Plus de réponses (2)
per isakson
le 6 Oct 2014
while ((ch1(1,1)~=60)&&(ch1(1,2)~=40)) || ...
((ch2(1,1)~=60)&&(ch2(1,2)~=40)) || ...
((ch3(1,1)~=60)&&(ch3(1,2)~=40)) || ...
((ch4(1,1)~=60)&&(ch4(1,2)~=40))
body
end
0 commentaires
Mudasir Ahmed
le 6 Oct 2014
1 commentaire
Geoff Hayes
le 6 Oct 2014
Mudasir - as your answer isn't an answer to your original question (but three new questions!) then you should delete this answer and start a new thread, or continue the conversation at a previous post of yours, GAs and target tracking, so that readers of this thread do not become confused.
Voir également
Catégories
En savoir plus sur Genetic Algorithm dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!