condition in while loop
조회 수: 1 (최근 30일)
이전 댓글 표시
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
Geoff Hayes
2014년 10월 6일
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.
채택된 답변
Geoff Hayes
2014년 10월 6일
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
추가 답변 (2개)
per isakson
2014년 10월 6일
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
Mudasir Ahmed
2014년 10월 6일
댓글 수: 1
Geoff Hayes
2014년 10월 6일
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.
참고 항목
카테고리
Help Center 및 File Exchange에서 Genetic Algorithm에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!