Random swapping a sequence of 20 aircraft by 2 places from initial at max, but only last few aircraft are swapping.
5 ビュー (過去 30 日間)
古いコメントを表示
Hi I am trying to swap a sequence of 20 aircraft with the condition being each aircraft can only move forward or back by 2 places. The code I came up with seems to be able to work, but each time only the final 3-4 aircraft seem to swap places while those in 1-16, stick to the initial sequence. I can't figure out why. Can anyone point out my error? Thank you in advance
clear aircraft, aircraft(1).name ='SQ001';
aircraft(1).type=1; aircraft(1).inieta= 0900;
aircraft(1).finaleta= 0900;
aircraft(1).iniseq=1; aircraft(1).finalseq=1;
%iniseq stands for initial sequence
%finalseq stands for final sequence
%CONSIDER REMOVING INISEQ, can just use the aircraft number.
aircraft(2).name='SQ002';
aircraft(2).type=2; aircraft (2).inieta=0910;
aircraft(2).finaleta= 0910;
aircraft(2).iniseq=2; aircraft(2).finalseq=2;
aircraft(3).name='SQ003';
aircraft(3).type=3; aircraft(3).inieta=0915;
aircraft(3).finaleta= 0915;
aircraft(3).iniseq=3; aircraft(3).finalseq=3;
aircraft(4).name='SQ004';
aircraft(4).type=2; aircraft(4).inieta=0920;
aircraft(4).finaleta= 0920;
aircraft(4).iniseq=4; aircraft(4).finalseq=4;
aircraft(5).name='SQ005';
aircraft(5).type=4; aircraft(5).inieta=0930;
aircraft(5).finaleta= 0930;
aircraft(5).iniseq=5; aircraft(5).finalseq=5;
aircraft(6).name='SQ006';
aircraft(6).type=2; aircraft(6).inieta=0935;
aircraft(6).finaleta= 0935;
aircraft(6).iniseq=6; aircraft(6).finalseq=6;
aircraft(7).name='SQ007';
aircraft(7).type=4; aircraft(7).inieta=0940;
aircraft(7).finaleta= 0940;
aircraft(7).iniseq=7; aircraft(7).finalseq=7;
aircraft(8).name='SQ008';
aircraft(8).type=1; aircraft(8).inieta=0945;
aircraft(8).finaleta= 0945;
aircraft(8).iniseq=8; aircraft(8).finalseq=8;
aircraft(9).name='SQ009';
aircraft(9).type=2; aircraft(9).inieta=0950;
aircraft(9).finaleta= 0950;
aircraft(9).iniseq=9; aircraft(9).finalseq=9;
aircraft(10).name='SQ010';
aircraft(10).type=4; aircraft(10).inieta=0955;
aircraft(10).finaleta= 0955;
aircraft(10).iniseq=10; aircraft(10).finalseq=10;
aircraft(11).name='SQ011';
aircraft(11).type=2; aircraft(11).inieta=1000;
aircraft(11).finaleta= 1000;
aircraft(11).iniseq=11; aircraft(11).finalseq=11;
aircraft(12).name='SQ012';
aircraft(12).type=3; aircraft(12).inieta=1005;
aircraft(12).finaleta= 1005;
aircraft(12).iniseq=12; aircraft(12).finalseq=12;
aircraft(13).name='SQ013';
aircraft(13).type=3; aircraft(13).inieta=1005;
aircraft(13).finaleta= 1005;
aircraft(13).iniseq=13; aircraft(13).finalseq=13;
aircraft(14).name='SQ014';
aircraft(14).type=2; aircraft(14).inieta=1005;
aircraft(14).finaleta= 1005;
aircraft(14).iniseq=14; aircraft(14).finalseq=14;
aircraft(15).name='SQ015';
aircraft(15).type=1; aircraft(15).inieta=1015;
aircraft(15).finaleta= 1015;
aircraft(15).iniseq=15; aircraft(15).finalseq=15;
aircraft(16).name='SQ016';
aircraft(16).type=1; aircraft(16).inieta=1025;
aircraft(16).finaleta= 1025;
aircraft(16).iniseq=16; aircraft(16).finalseq=16;
aircraft(17).name='SQ017';
aircraft(17).type=4; aircraft(17).inieta=1030;
aircraft(17).finaleta= 1030;
aircraft(17).iniseq=17; aircraft(17).finalseq=17;
aircraft(18).name='SQ018';
aircraft(18).type=3; aircraft(18).inieta=1045;
aircraft(18).finaleta= 1045;
aircraft(18).iniseq=18; aircraft(18).finalseq=18;
aircraft(19).name='SQ019';
aircraft(19).type=3; aircraft(19).inieta=1045;
aircraft(19).finaleta= 1045;
aircraft(19).iniseq=19; aircraft(19).finalseq=19;
aircraft(20).name='SQ020';
aircraft(20).type=3; aircraft(20).inieta=1050;
aircraft(20).finaleta= 1050;
aircraft(20).iniseq=20; aircraft(20).finalseq=20;
x=20; %x is the number of aircraft in the interval
noofswaps=randi(x); %r is the number of swaps you wish to take place
swapcounter=0;
while swapcounter<noofswaps
r=randi(x); %r is the aircraft which you wish to swap
if r >=3 && r <=(x-2)
dist= randi([-2,2]); %select an aircraft between -2 and 2 to swap with.
elseif r==1 %special cases for the ends 1,2,19,20
dist=randi([0,2]);
elseif r==2
dist=randi([-1,2]);
elseif r==(x-1)%if x =20, x-1=19
dist=randi([-2,1]);
else %for case r== (x-1)
dist=randi([-2,0]);
%Check if the new final sequence is within range of 2 of the
%initial sequence, if yes, we make the swap.
if ((aircraft(r+dist).finalseq<=(aircraft(r).iniseq+2))&& (aircraft(r+dist).finalseq>=(aircraft(r).iniseq-2)))
%swap the final sequences
temp=aircraft(r).finalseq; %temp is used to hold the value of aircraft(r+dist)
aircraft(r).finalseq=aircraft(r+dist).finalseq;
aircraft(r+dist).finalseq= temp;
temp=0;
swapcounter=swapcounter+1; %increase the swap count by 1
else %no swap is made if the new sequence is not valid
swapcounter=swapcounter; %do not increase the swap count
end
end
end
count=1;
while count<=20
aircraft(count)
count=count+1;
end
0 件のコメント
回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Crystals についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!