Info

此问题已关闭。 请重新打开它进行编辑或回答。

How to avoid stepping back on random 2D walker

1 次查看(过去 30 天)
for n = 1:N .
A = randi(4);
rr=rand;
if rr < 1/4
A = 1+mod(A,4);
elseif rr < 1/2
A = 1+mod(A-2,4);
end
if A==1
y_t(n+1)=y_t(n)+1;%north
x_t(n+1)=x_t(n);
elseif A==2
y_t(n+1)=y_t(n)-1;
x_t(n+1)=x_t(n); %south
elseif A==3
x_t(n+1)=x_t(n)+1;%east
y_t(n+1)=y_t(n);
elseif A==4
x_t(n+1)=x_t(n)-1;%west
y_t(n+1)=y_t(n);
else
end
end
  1 个评论
Image Analyst
Image Analyst 2018-12-28
Please type control-a then control-i in MATLAB before pasting here to make sure your indenting is corrected.

回答(2 个)

Walter Roberson
Walter Roberson 2018-12-28
you obtained the main code from me in another question . The code I provided cannot step backwards . The code keeps the current direction number 50 percent of the time and alters the direction number by 1 otherwise . A direction number change of 2 would be needed to go backwards and the code II provided cannot change by 2.
  4 个评论
Ege Tunç
Ege Tunç 2018-12-28
oh wait now i understood north,east,south,west order is important okay step back issue is done. Ty mate!
Walter Roberson
Walter Roberson 2018-12-28
Yes, the order is important. The code maintains a current direction, X, which is maintained (50%) or turn left relative to the current direction (X-1, wrapped if necessary), or turn right (X+1, wrapped if necessary) relative to the current direction.

Image Analyst
Image Analyst 2018-12-28
What I'd probably do is to compute all your directions in advance, and then remove disallowed ones. That way you don't have to check each one in the loop.
maxNumExpectedSteps = 100; % A million, or whatever - some big number, bigger than you expect to ever need.
directions = randi(4, 1, maxNumExpectedSteps)
% Remove elements where the next direction
% would have been in a disallowed direction.
% If it's going in direction 1, don't let it go in direction 3
% So replace the pattern [1, 3] with 1
directions = strrep(directions, [1, 3], 1);
% If it's going in direction 2, don't let it go in direction 4
% So replace the pattern [2, 4] with 2
directions = strrep(directions, [2, 4], 2);
% If it's going in direction 3, don't let it go in direction 1
% So replace the pattern [3, 1] with 3
directions = strrep(directions, [3, 1], 3);
% If it's going in direction 4, don't let it go in direction 2
% So replace the pattern [4, 2] with 4
directions = strrep(directions, [4, 2], 4);
% Now you're guaranteed to never go in a disallowed direction.
Now, start your loop getting the direction (1 through 4) from the "directions" array.
for k = 1 : numSteps
thisDirection = directions(k);
if thisDirection == 1
% Code to move in direction 1.
elseif thisDirection == 2
% Code to move in direction 2.
elseif thisDirection == 3
% Code to move in direction 3.
elseif thisDirection == 4
% Code to move in direction 4.
end
end
  5 个评论
Image Analyst
Image Analyst 2019-1-6
So if the TA's don't let you use code by us, what can you do? I suppose renaming the variables is also not enough. So I guess if you don't want any code, you should state that in advance. I guess we could just alter your existing code written by you rather than giving improved algorithms.
Ege Tunç
Ege Tunç 2019-1-6
编辑:Ege Tunç 2019-1-6
well, taking some part of codes or getting some modifications are not strictly forbidden. since, my code needed some modifications and these modifications were included in your code. I have take some part of them with some modifications. however, one of the TA’s is so sensitive, I just realized this(idk why). when she sees any little similarity, she prefers to assume the whole paper might be stolen and seeks for . When I realize this, i paniced. however, codes from this topic used for modifications of some part of mine. this is my bad, sorry for that. tried to fix/readd codes that i deleted

Community Treasure Hunt

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

Start Hunting!

Translated by