WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Passagierzahlen aus Excel file als Liste generieren

 

Speedmaxl
Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 19.10.20
Wohnort: Wien
Version: ---
     Beitrag Verfasst am: 12.11.2021, 12:09     Titel: Passagierzahlen aus Excel file als Liste generieren
  Antworten mit Zitat      
Hallo,

Ich stehe vor folgender Aufgabe:

Ich arbeite an der Simulation eines Check-In Terminals. Aus einem Flugplan (Beispiel im Anhang) benötige ich für die Simulation eine Liste mit einzelner Ankünfte der Passagiere welche ich als source in mein Simulationsprogramm lade. Die Ankunftszeit soll dabei zufällig erstellt und im erlaubten Check-In Zeitraum (1-2h vor Abflug liegen). Ein Beispiel meines gewünschten Ergebnis ist ebenfalls im Anhang.

Dabei dachte ich an eine Art verschachtelter for Schleife:
z.B.

Code:
for i=1:"Anzahl_Zeilen_Flugplan"
       for j=1:"Anzahl Passagiere"
            "Speichern des einzelnen Passagiers in ein Array, sowie Zuweisung von:  
             Destination und einer zufälligen Ankunftszeit, welche im Bereich der zulässigen
             CheckIn Zeit liegt (1-2h vor Abflug)
       end
end


Die Importierung des Excel file hat soweit mal geklappt (Anhang), aber nun bin ich nicht so der Matlab Experte und würde mich freuen, evtl. ein paar Herangehensweisen zu erfahren.

Danke und LG

Matlap Excel Import.png
 Beschreibung:

Download
 Dateiname:  Matlap Excel Import.png
 Dateigröße:  188.37 KB
 Heruntergeladen:  196 mal
gewünschtes Ergebnis.png
 Beschreibung:

Download
 Dateiname:  gewünschtes Ergebnis.png
 Dateigröße:  8.34 KB
 Heruntergeladen:  190 mal
Auszug Flugplan.png
 Beschreibung:

Download
 Dateiname:  Auszug Flugplan.png
 Dateigröße:  34.63 KB
 Heruntergeladen:  192 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.11.2021, 15:55     Titel:
  Antworten mit Zitat      
Hallo,

stell doch bitte einen Dateiausschnitt zur Verfügung, mit dem man in MATLAB direkt arbeiten kann. Das macht es deutlich einfacher.
Sollen die Zeiten immer minutengenau sein?
Wie sollen die Gruppengrößen (Alleinreisende, Paare, Familien...) bestimmt werden?
Eine innere Schleife solltest du da m.E. nicht brauchen. Du kannst ja einen Vektor generieren.
Hast du denn selbst schon was versucht? Wenn ja, poste es bitte.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Speedmaxl
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 19.10.20
Wohnort: Wien
Version: ---
     Beitrag Verfasst am: 13.11.2021, 00:24     Titel:
  Antworten mit Zitat      
Danke für die Antwort und klar, mit Datei ist es einfacher Smile

Da ich die Simulationszeit in meinem Programm (Anylogic) auf Minutenbasis einstellen möchte, dachte ich mir, es wäre wahrscheinlich besser, die Ankunftsrate der Passagiere ebenfalls im Minutentakt zu generieren.

Bezüglich Gruppengröße, da hätte ich an eine Zufallsverteilung von 1er bis 6er Gruppen gedacht.
Bisher habe ich mich auf ein kleines Testprogramm beschränkt, um mal irgendwie die Zufallszahlen zu generieren. Nicht wirklich erfolgreich. Ist leider meine Matlab Premiere im Bereich Statistik und Zufallsverteilung...

Code:
%%% Testprogramm Ankunftsrate
mu=[100,200,300];
sigma=[10,20,15];
n=[10,20,23];

X=[];
% ZV ... Zufallsvariable für Flüge
for i = length(mu)
    ZV=normrnd(mu,sigma);
    for i = range(n)
        X=append(ZV);
    end
       X=array(X);
end
Y=sort(X);
 


Passagierzahlen.m
 Beschreibung:

Download
 Dateiname:  Passagierzahlen.m
 Dateigröße:  909 Bytes
 Heruntergeladen:  192 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.11.2021, 12:33     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
mit Datei ist es einfacher

Ich meinte eine Datendatei.

Zitat:
da hätte ich an eine Zufallsverteilung von 1er bis 6er Gruppen gedacht.

Und was für eine Verteilung? Gleichverteilung ist unrealistisch, oder?

Willst du wirklich mit Verteilungen mit verschiedenen Mittelwerten und Standardabweichung arbeiten? Wie gehen diese Informationen dann aus den Flugdaten hervor?

In dem momentanen Code sehe ich etliche Probleme hinsichtlich der for-Schleifen, Verkettung etc. Mir ist teilweise nicht mal klar, was der Code eigentlich machen soll. Meine Empfehlung wäre hier, zunächst das MATLAB Onramp durchzuarbeiten.
https://www.mathworks.com/learn/tutorials/matlab-onramp.html

Die Simulation an sich könnte ich mir übrigens auch mit Simulink und seinen Erweiterungen vorstellen. Auf Wunsch kann ich da gerne einen Kontakt bei MathWorks vermitteln. Dazu bitte per PN Name, Email und Uni / Firma mitteilen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Speedmaxl
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 19.10.20
Wohnort: Wien
Version: ---
     Beitrag Verfasst am: 14.11.2021, 00:13     Titel:
  Antworten mit Zitat      
Hallo,

Gleichverteilung macht keinen Sinn. Denke, eine Normalverteilung innerhalb der 1h CheckIn Zeit ist besser. Mein Ansatz mit Mittelwert und Standardabweichung ist dabei wirklich etwas zuviel des Guten.

Sorry für den chaotischen Code. Ich hab gestern nebenbei auch in Python herumgebastelt und das kam dann dabei heraus. Bin leider programmiertechnisch etwas eingerostet (knapp 15 Jahre Pause) und muss mich erst wieder etwas einarbeiten...

Aber denke ich mit meiner grundsätzlichen Überlegung einer verschachtelten for-Schleife zu kompliziert (siehe erster Post), oder geht es viel einfacher?

Grüße,
Paul

PS: Danke für das Angebot, ich werd mal nachfragen, ob Simulink auch zulässig ist.

Flugplan.txt
 Beschreibung:

Download
 Dateiname:  Flugplan.txt
 Dateigröße:  4.59 KB
 Heruntergeladen:  190 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.11.2021, 11:26     Titel:
  Antworten mit Zitat      
Hallo,

hier ein erster Vorschlag:
Code:
T = readtable("Flugplan.txt");
T.Zeit = duration(T.Zeit, "InputFormat","hh:mm")

PAXSimAll = [];
ZeitSimAll = [];
ToSimAll = [];
for k = 1:height(T) % für jeden Flug
    passSimFlug = 0; % Initialisierung
    maxPass = T{k, "PAX"};
    while sum(passSimFlug) < maxPass
        % 50% alleinreisend, 30% Paar, 10% 3er-Gruppe, etc.
        passSim = find(rand > cumsum([0 0.5 0.3 0.1 0.05 0.03 0.02]), 1, "last");
        passSim = min(passSim, maxPass - sum(passSimFlug));
        passSimFlug = [passSimFlug; passSim];
    end
    passSimFlug(1) = []; % Die 0 löschen
   
    % 90 Min +/- 20 Min Std.
    ZeitSimFlug = T{k,"Zeit"} - minutes(round(normrnd(90, 20, size(passSimFlug))));
    ToSimFlug = repmat(T{k, "To"}, length(passSimFlug), 1);

    PAXSimAll = [PAXSimAll; passSimFlug];
    ZeitSimAll = [ZeitSimAll; ZeitSimFlug];
    ToSimAll = [ToSimAll; ToSimFlug];
end
TSim = sortrows(table(ZeitSimAll, PAXSimAll, ToSimAll), "ZeitSimAll")


Man würde wenn nicht nur Simulink, sondern vermutlich auch Erweiterungen wie Stateflow oder SimEvents brauchen. Da kenne ich mich aber nicht so aus, würde also wenn nur den Kontakt herstellen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Speedmaxl
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 19.10.20
Wohnort: Wien
Version: ---
     Beitrag Verfasst am: 15.11.2021, 00:15     Titel:
  Antworten mit Zitat      
Hallo und vielen Dank schon mal für den ersten Vorschlag. Werde diesen gleich morgen mal ganz genau durchgehen und meld mich dann wieder (spätestens, wenn ich bzgl. Simulink Bescheid weiß…)

Grüße,
Paul
Private Nachricht senden Benutzer-Profile anzeigen
 
Speedmaxl
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 19.10.20
Wohnort: Wien
Version: ---
     Beitrag Verfasst am: 15.11.2021, 13:02     Titel:
  Antworten mit Zitat      
Hallo,
Also soweit läuft das so, wie ich es mir vorgestellt habe, danke.
Ich habe den Ausgabetable noch um den Parameter Datum ergänzt (siehe Code):

Code:
T = readtable("Flugplan.txt");
T.Zeit = duration(T.Zeit, "InputFormat","hh:mm")
D=datetime('today');
PAXSimAll = [];
ZeitSimAll = [];
ToSimAll = [];
for k = 1:height(T) % für jeden Flug
    passSimFlug = 0; % Initialisierung
    maxPass = T{k, "PAX"};
    while sum(passSimFlug) < maxPass
        % 50% alleinreisend, 30% Paar, 10% 3er-Gruppe, etc.
        passSim = find(rand > cumsum([0 0.5 0.3 0.1 0.05 0.03 0.02]), 1, "last");
        passSim = min(passSim, maxPass - sum(passSimFlug));
        passSimFlug = [passSimFlug; passSim];
    end
    passSimFlug(1) = []; % Die 0 löschen
   
    % 90 Min +/- 20 Min Std.
    ZeitSimFlug = D+(T{k,"Zeit"} - minutes(round(normrnd(90, 20, size(passSimFlug)))));
    ToSimFlug = repmat(T{k, "To"}, length(passSimFlug), 1);

    PAXSimAll = [PAXSimAll; passSimFlug];
    ZeitSimAll = [ZeitSimAll; ZeitSimFlug];
    ToSimAll = [ToSimAll; ToSimFlug];
end
TSim = sortrows(table(ZeitSimAll, PAXSimAll), "ZeitSimAll")
writetable(TSim,'ankunftszeiten_neu.xls');


Ich überlege jetzt noch an einer Alternativ-Ausgabe, wo die Passagierzahlen zu den einzeln generierten Ankunftszeiten zusammengefasst werden. Dabei müsste auch nicht zwangsweise die Destination angeführt werden. Wichtig ist nur, dass die Ankunftszeiten chronologisch sortiert und nur einmalig vorkommen..

z.B:
Zeit PAX (To)
04:35 4 (ARN, LHR)
04:36 2 (ARN)
04:37 6 (ARN, LHR)
... ... ...

Habe bereits erfolglos mit dem Befehl
Code:
experimentiert. Der sollte meiner Meinung nach hier gut passen. Oder gibt es da elegantere Methoden?

LG Paul
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.11.2021, 13:32     Titel:
  Antworten mit Zitat      
Hallo,

splitapply oder groupsummary sind anwenderfreundlichere Alternativen zu accumarray.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Speedmaxl
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 19.10.20
Wohnort: Wien
Version: ---
     Beitrag Verfasst am: 15.11.2021, 14:18     Titel:
  Antworten mit Zitat      
Super, groupsummary hat funktioniert, Danke!
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.