Prolog: Flugverbindungen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Prolog: Flugverbindungen

    Wunderschönen guten Tag.



    Ich muss ein Prolog Programm mit dem PI Prolog erstellen und zwar soll es flugverbindungen anzeigen und mir sagen, ob es direktverbindungen gibt und ob man z.b. einmal irgendwo umsteigen muss oder auch zweimal.



    Keinen Plan wie ich das lösen soll.

    Antworten wären wirklich cool



    Danke schon mal.
  • Hallo, :)

    Ich pflege eigentlich keinen Umgang mit Prolog,also brauchst Du keinen Code von mir zu erwarten. ?(
    Aber zumindest beim Lösungsansatz kann ich Dir weiterhelfen. :rolleyes:

    Der Stein des Anstoßes

    Ich muss ein Prolog Programm mit dem PI Prolog erstellen und zwar soll es flugverbindungen anzeigen und mir sagen, ob es direktverbindungen gibt und ob man z.b. einmal irgendwo umsteigen muss oder auch zweimal.


    Wie sieht die Baustelle aus :?:

    Da hätten wir zum einen eine Menge von Flugverbindungen, von denen eine unbestimmte Anzahl Direktverbindungen sind.
    Dann gibt es eine Anzeige/Ansage und demzufolge auch eine Anfrage. 8)
    Nicht zu vergessen unser Baumaterial - das liebe Prolog.

    Na, da haben wir doch schon einiges zusammengetragen.

    Wie sehen die Probleme aus :?:

    Nicht alle Flugverbindungen sind Direktverbindungen - es können auch Flugverbindungen mit Zwischenstopps vorkommen.
    Du musst Prolog benutzen.

    Dann werfen wir mal die Denkmaschine an und legen los:

    1.Knackpunkt: Stellen wir uns die Flugverbindungen mal als kurze Seile vor.Die Enden sind Abflugs- und Ankunftsort, das Seil selbst
    stellt die Verbindung dar. Dann können wir die Flugverbindungen mit Zwischenstopps auch so darstellen - wir nehmen kurze Seile
    und verknoten sie. Das Ergebnis ist wieder ein Seil, die Knoten stellen die Zwischenstopps dar.

    Direktverbindungen und Verbindungen mit Zwischenstopps unterscheiden sich nur durch die Knoten.

    2:Knackpunkt: Prolog
    Dazu wäre folgendes zu erwähnen. Man kann Probleme nicht nur dadurch lösen indem man sie in kleinere Teilprobleme zerlegt und diese Teilprobleme löst. Ebenso kann man Probleme nicht nur dadurch lösen, daß man sie auf leichtere Probleme abbildet und das Lösungsschema
    des leichteren auf das eigentliche Problem anwendet. Manchmal kann man ein Problem nicht für sich allein lösen, wenn es allerdings in Gesellschaft
    anderer Probleme auftaucht kann man diese gegeneinander ausspielen. :)

    Dazu müssen wir uns die Eigenschaften von Prolog ansehen.

    Zuerst fällt einem da das logische Programmieren ein:

    negativ:- Du musst logische Operationen verwenden. :wacko:
    positiv:- die Funktionsabläufe werden mit logischen Operatoren aufgebaut :S :S

    Gibt es noch etwas? ?( Keine Idee? ?( ?(
    Na gut, ich verrate es Dir :D

    - Prolog ist eine strohdumme Sprache!! :D :cursing:

    Was heißt das?

    Prolog arbeitet nur auf einer Liste von Regeln( ich nenne das hier mal Datenbank). Alles was in der Datenbank steht ist bekannt, alles andere nicht.
    Wenn man eine Anfrage stellt, ist die Wahrscheinlichkeit eine positive Antwort zu bekommen größer je mehr disjunkte Regeln in der Datenbank sind.


    Hilft das jetzt weiter, die Größe der Datenbank ist ja nicht bekannt? :S
    Eigentlich nicht, der springende Punkt auf den ich anspiele kommt erst jetzt. 8)

    Stelle Dir doch mal das Programm als fertiges Produkt vor und wie es arbeiten würde. Die Anfrage wird doch bestimmt nicht die einzige sein, es wird mehrere und verschiedene Anfragen geben, d.h. Du kannst davon ausgehen die Anfrage muss nicht die erste gewesen sein( ebenso nicht die letzte). :thumbsup:

    Die Idee: Verwende die Anfrage dazu die Datenbank aufzubauen. Also wenn die Anfrage bearbeitet wird, sorge dafür Ergebnisse in die Datenbank einzubringen. Ich bezeichne das als additive Rekursion. :thumbup:

    Folgendes Bild ist dazu hilfreich.
    Du stehst vor einem flachen Fluss und willst hinüber. Ist der Fluss nicht zu breit kannst Du rüberspringen, wenn nicht suchst du Dir zwei große Steine und
    verwendest sie indem Du Dich auf jeweils einen stellst und den anderen dazu nutzt den nächsten Punkt auf den Du Dich stellen kannst zu bilden.

    So, jetzt fassen wir das mal zusammen.

    Oben haben wir uns die Flugverbindungen als Seile vorgestellt, das behalten wir mal im Hinterkopf und betrachten eine Direktverbindung als Atom der Größe 1.

    Der Funtionsablauf der Anfrage müsste so aussehen

    Quellcode

    1. Anfrage annehmen und in ein Atom Größe 0 umwandeln (Größe 0 ist: -1. nicht in Datenbank bzw keine Verbindung; -2. negatives Ergebnis bei Funktionsablauf)
    2. interne Anfrage: Gibt es das Atom mit Größe >0 in Datenbank
    3. bei negativer interner Anfrage versuche Atom >0 zu konstruieren
    4. gib das Ergebnis der internen Anfrage an die externe Anfrage
    5. beantworte externe Anfrage( 0 - keine Verbindung; 1 - Direktverbindung; x>1 - Verbindung mit Zwischenstopps)

    Das wärs meinerseits, jetzt bist Du dran mit coden. :rolleyes:

    Vielleicht solltest Du dir noch folgendes überlegen

    - soll Atom 0 nach Anfrage gespeichert werden? Was, wenn ja; was, wenn nein.
    (z.B. ja: Info für Statistiken)
    - was passiert, wenn Zeiten ins Spiel kommen
    - was, wenn Zwischenstopps keine Umsteigestationen sind sondern nur Zwischenlandungen

    Na denn Frohes Schaffen!

    DancingAntS :)