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!