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 件)

カテゴリ

Help Center および File ExchangeCrystals についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by