TASOS60 Δημοσ. 19 Δεκεμβρίου 2007 Δημοσ. 19 Δεκεμβρίου 2007 προσπαθώ να υλοποιήσω σε γλωσα matlab ενα πρόγραμμα για την προσομοίωση κίνησης τραινων (με κυψελιδωτα αυτοματα). Χρεισημοποίω κυψελίδες που μεσα μπορει να εχει ενα τραίνο. Εντοπίζει αριχκα ενα τραινο μετα βρησκει τι υπαρχει μετα το τραίνο δηλαδη τραίνο ή σταθμός τραινου και κινηταί αναλογα. Ο αλγοριθμος κινινησης ειναι λιγο μεγαλος βαζω βασικα στοχεία και παραθέτω τον κωδικα που εκανα αν νιωθει κανενας θα είναι πολυτιμη η βοηθεια του(Δεν βγαζει σωστα αποτελέσματα) >%0:κενο %1:τραινο %2:σταθμος %3:τρενο στον σταθμο %Dx:αποστση μεταξυ τραίνων %gap:αρισθμος κενων %xs:αποσταση απο τον σταθμο l=20; %κυψελιδες xc=2; %αποσταση που αρχιζει να επιβραδινει το τρενο p=[]; %πινακας τιμων t*l (20*20) v=[]; %ταχύτητα sm=1; %αποσταση ασφαλείας vmax=4; %μεγιστη ταχύτητα dn=9; %ελαχιστη αποσταση dn=(vmax^2)/2*b+sm s=0; %βοηθητιος δεικτης χρονου παραμονής τραινου a=1; %επιταχυνση b=1; %επιβράδυνση td=2; %χρονος παραμονης τρενου στον σταθμό %αρχικες συνθηκες... p(1,1)=1; p(1,2)=0; p(1,3)=1; p(1,4)=0; p(1,5)=0; p(1,6)=1; p(1,7)=0; p(1,8)=0; p(1,9)=0; p(1,10)=0; p(1,11)=1; p(1,12)=0; p(1,13)=2; p(1,14)=0; p(1,15)=1; p(1,16)=0; p(1,17)=0; p(1,18)=0; p(1,19)=1; p(1,20)=0; v(1)=3; v(2)=0; v(3)=1; v(4)=0; v(5)=0; v(6)=2; v(7)=0; v(8)=0; v(9)=0; v(10)=0; v(11)=2; v(12)=0; v(13)=0; v(14)=0; v(15)=4; v(16)=0; v(17)=0; v(18)=0; v(19)=1; v(20)=0; for t=2:l i=1; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% switch p(t-1,i) case 1 %τρενο case(1) j=i+1; check = true; while check switch p(t-1,j) %case(a) τρενο με τρενο case 1 Dx=j-i; %αποσταση μεταξυ τραινων %Step 1 acceleration: if Dx > dn v(i) = min(v(i) + a,vmax); elseif Dx < dn v(i) =max(v(i)- b,0); else v(i) = v(i); end %Step 2 slowing down: v(i) = min(v(i),Dx); %Step 3 movement: i= i + v(i); p(t,i)=1; if v(i)~=0 p(t,i-v(i))=0; end i=j; %ελεγχος στο προπορεύον τρενο check = false; %case( τραινο σταθμός case 2 xs=j-i; %Step 1 acceleration: if xs>xc v(i) = min(v(i) + a, vmax); elseif xs < xc v(i) = max(v(i) - b, 0); else v(i) = v(i); end %step 2 slowing down: v(i) = min(v(i),xs); %Step 3 movement: i = i + v(i); p(t,i-v(i))=0; check = false; if i~=j p(t,i)=1; end %den ftanei to treno ston sta8mo if i==j p(t,i)=3; end %treno ftanei ston sta8mo %case (c):δεν εχει ουτε σταθμο ουτε τρενο ειναι στα ακρα βγαινει απο το συστημα το τρενο case 0 p(t,i)=0; % v=vmax if j==20 %den yparxei allo traino check = false; i=i+vmax; p(t,i)=1; p(t,i-vmax)=0; v(i)=vmax; else check = true; end j=j+1; otherwise disp('error') end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %case(2) :το τρενο βρισκεται στον σταθμό % if p(t,i)==3 % s=s+1; % if s==td %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% case 0 p(t,i)=0; i=i+1; case 2 p(t,i)=2; i=i+1; otherwise disp('system eror'); end end ευχαριστω
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.