Endliche Automaten

Algorithmen, Sprachunabhängige Diskussionen zu Konzepten, Programmiersprachen-Design
Antworten
gizno82
Beiträge: 46
Registriert: Sa Dez 19, 2009 4:03 pm

Endliche Automaten

Beitrag von gizno82 » Mo Jan 23, 2012 7:00 pm

Hi Leute,

Sehe ich das richtig, das man mit endlichen Automaten eine Zapfsäule, viel mehr die Eingabe Möglichkeiten, die Zustände die eine Zapfsäule annehmen kann, z.b. Betriebsbereit, Außer Betrieb, leer, voll und als Ausgabe den Preis und die gezapfte Menge darstellen kann ?

Wie würde das bei einem Zapfsäulen automaten laufen ?

1. Ich fange an zu zapfen es ändert sich der Tankinhalt der Zapfsäule, Die Literanzeige ändert sich und der Preis ändert sich,
mit jedem Liter den ich mehr Zapfe.
Wie legt man jetzt die Durchflussmenge fest ? (Wie schnell der Automat seinen Zustand wechselt)
Man braucht ja irgend wie ein Zeitraster oder ?

Gruß gizno

Panke
Beiträge: 70
Registriert: So Nov 14, 2010 10:47 am

Re: Endliche Automaten

Beitrag von Panke » Mo Jan 23, 2012 8:38 pm

Mit endlichen Automaten kannst du nur Systeme mit endlichem Zustandsraum darstellen. Das heißt, dass
die Menge der Konfigurationen deiner Zapfsäule begrenzt sein muss. Eine Konfiguration könnte zum Beispiel
aus Füllstand, Preis, gezapfte Menge etc. bestehen. Sobald Zeit im Spiel ist, die der Drops dabei in der Regel
gelutscht, d.h. es gibt zu viele Zustände.

In der Regel unterscheidet man dabei zwei Formen. Kontinuierliche Zeit und diskrete Zeit.

Bei letzteren hast du noch ne Chance, wenn die Zeitspannen endlich sind.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Endliche Automaten

Beitrag von Xin » Mo Jan 23, 2012 10:54 pm

gizno82 hat geschrieben:Sehe ich das richtig, das man mit endlichen Automaten eine Zapfsäule, viel mehr die Eingabe Möglichkeiten, die Zustände die eine Zapfsäule annehmen kann, z.b. Betriebsbereit, Außer Betrieb, leer, voll und als Ausgabe den Preis und die gezapfte Menge darstellen kann ?
Automaten haben eher die Aufgabe Prozessabläufe abzubilden.

Zum Beispiel:
  • Start
  • Setze Anzeige auf Null.
  • Warten auf Kunde
  • Zapfpistole abgenommen
  • Füllen
  • Zapfpistole eingehängt
  • Warten auf Zahlung
  • Ende
Hier geht man durch die Reihe der Zustände.
Zwischen Warten auf Zahlung könnte man beispielsweise eine Alternative anbieten in der Form "wenn noch nicht Geschäftsschluss, dann springe zu "Setze Anzeige auf Null".
gizno82 hat geschrieben: 1. Ich fange an zu zapfen es ändert sich der Tankinhalt der Zapfsäule, Die Literanzeige ändert sich und der Preis ändert sich,
mit jedem Liter den ich mehr Zapfe.
Wie legt man jetzt die Durchflussmenge fest ? (Wie schnell der Automat seinen Zustand wechselt)
Man braucht ja irgend wie ein Zeitraster oder ?
Die Zeit ist nicht gerastert.

Im Prinzip kannst Du bestenfalls etwas konstruieren wie folgt. Das wäre dann eine Art "Unterautomat" für den Status "Füllen".
  • Beginne Füllung
  • Wenn Tank Voll beende Füllen und warte auf Zustand "Zapfpistole eingehängt", sonst Zeige Display
  • Zeige Display: Schreibe Abgabemenge und Preis auf Display und springe zurück zu vorherigem Zustand.
Wenn Du Zeitabhängige Daten hast, so hast Du bei Computern häufig Subsysteme, die nichts anderes tun, als abfragbar zu sein. Das kann eine PCI Karte sein, wo Dir beispielsweise die abgegebene Menge Kraftstoff übertragen wird, wann immer Du fragst oder auch die interne Uhr. Vielleicht fällt Dir auf, dass die Zapfsäulen etwa 2 mal pro Sekunde die Abgabe aktualisieren. Die Literzahl springt also entsprechend der Tankgeschwindkeit schneller oder langsamer. Auch hier ist das Programm quasi nicht im Fluss, sondern kommt etwa zweimal pro Sekunde am Zustand 'Aktualisiere Display' vorbei.

Bei 3D Grafik hast Du das Problem, dass Du nicht weißt, wie lange Du für die Berechnung eines Bildes brauchst. Damit Du bei einer Animation weißt, wie weit Du ein animiertes Objekt verschieben musst, musst Du also die interne Uhr fragen, wie spät es gerade ist. Entsprechend rechnest Du die Szene für die aktuelle Uhrzeit aus und zeichnest sie dann - egal wie lange es dauert, ob Du 1000 Bilder pro Sekunde zeichnest oder nur 20, das Objekt wird sich entsprechend der Bilderanzahl gleichmäßig über den Bildschirm bewegen. Trotzdem ist es ein deterministischer Automat, der so lange zwischen Uhrzeit abfragen und Bildzeichnen hin und her springt, bis Du auf das X oben rechts in der Fenstertitelleiste drückst. Auch hier gibt es keine gerasterte Zeit oder gerasterte Füllstände, sondern nur Wert abfragen, Reagieren, bis dieser Prozessablauf durch einen anderen Zustand ersetzt wird.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

gizno82
Beiträge: 46
Registriert: Sa Dez 19, 2009 4:03 pm

Re: Endliche Automaten

Beitrag von gizno82 » Di Jan 24, 2012 2:04 pm

Wie ist es möglich eine Klasse zu realisieren, die autark "zapft" ?
D.h. wenn man den Tankinhalt der Zapfsäule abfragt soll dieser nicht direkt Tankinhalt der Zapfsäule - Gezapfte Menge sein, sondern der Tankinhalt soll wie in der Realität innerhalb einer gewissen Zeit abnehmen.

Panke
Beiträge: 70
Registriert: So Nov 14, 2010 10:47 am

Re: Endliche Automaten

Beitrag von Panke » Di Jan 24, 2012 2:25 pm

Hängt entscheidend davon ab, was du insgesamt vor hast. Wofür brauchst du das? Soll man als Mensch der Abnahme "zugucken" können? Eventuell Zeitscheiben verwenden und in jeder Zeitscheibe, die richtige Menge abziehen.

Antworten