## c't-Projekte - Mailinglisten

[Voriger (Datum)] [Nächster (Datum)] [Voriger (Thread)] [Nächster (Thread)]
[Nach Datum][Nach Thread]

### RE: [ct-bot] bot_drive_area()-Frage

Absender: Menzel, Frank IT-OO4
Datum: Mo, 16.02.2009 07:23:04
In-reply-to: <B52F8633-D5E5-40DD-8150-D845925734CE@xxxxxxxxxxxxxxx>
References: <B52F8633-D5E5-40DD-8150-D845925734CE@xxxxxxxxxxxxxxx>

    Hallo Timo,
    zu der Frage: " Dabei fällt aber auf (besonders bei langen Bahnen), dass am Ende einer
    Bahn zunächst der kurze Weg quer rüber zur nächsten Bahn überprüft
    wird und anschließend der Weg vom Ende der letzten Bahn zum
    voraussichtlichen Ende der nächsten (parallelen) Bahn, was so einen
    schrägen Bereich ergibt. Wofür ist die Überprüfung, ob dieser Weg frei
    ist? Der überprüfte Weg überdeckt zum Teil den zuletzt gefahrenen Weg
    (der eh frei gewesen sein muss) und nur zum Teil den voraussichtlichen
    neuen Weg (dessen Ende noch gar nicht bekannt ist)."

    Im Verhalten ist dazu eine kleine Programmlogik eingebaut, dass die anzufahrende nächste Bahn eben nicht angefahren wird sondern mit der darauffolgenden Bahn im Stack getauscht wird, wenn der Weg zum Start- und Endpunkt der nächsten Bahn nicht anfahrbar ist. War ein Versuch, möglichst wenig Bahnen verfallen zu lassen, wohl auch weil zu oft wegen dem ja nun beseitigten map_way_free-Fehler die Strecke eben nicht anfahrbar war.
    Im Prog heißt es dazu laut Kommentar:
    // falls Weg zu keinem Punkt frei, dann mit dem naechsten Stackweg tauschen; ist dieser auch nicht befahrbar,
    // wird dieser verworfen"
    Ich hatte dazu diverse Parcours getestet und diese Logik bringt in manchen Sinn und kommt in anderen wiederum  nicht zum tragen. Die beste Variante  (ToDo) wäre immer noch (wo ist eigentlich dazu die Doku geblieben im Ordner Documentation?), eine gerade nicht anfahrbare Strecke vorn in den Stack reinzuschieben (ist ja leider momentan noch nicht möglich :-(), und diese mit einem Zähler zu versehen. Erst wenn ein Zählerschwellwert überschritten wird nach x-Anfahrversuchen bzw. map_way_free-Versuchen wird diese verworfen.

    Man könnte die o.a. kleine Vertauschlogik nach Beseitigung des map_wa_free_Fehlers auch dahingehend ändern, auch wegen Map-Performance geschuldet, dass der 2. Punkt mittels map_way_free nur noch gecheckt wird wenn Punkt 1 nicht anfahrbar ist. Anders gesagt, wenn die kleine Strecke angefahren werden kann, braucht Punkt 2 (lange Strecke) nicht geprüft werden.

    Gruß, Frank

    -----Original Message-----
    From: ct-bot-entwickler-bounces@xxxxxxxxxxxxxxxxx [mailto:ct-bot-entwickler-bounces@xxxxxxxxxxxxxxxxx] On Behalf Of Timo Sandmann
    Sent: Sunday, February 15, 2009 7:38 PM
    To: Entwicklung rund Mailingliste c't-Bot
    Subject: [ct-bot] bot_drive_area()-Frage

    Hallo,

    inzwischen ist es auch möglich, den Bot Linien zu Debugging-Zwecken in
    die Map-Anzeige des Sim einzeichnen zu lassen. Eine
    Beispielimplementierung hierzu gibt es für die Funktionen
    map_way_free() und map_get_ratio(). Wenn DEBUG_GET_RATIO in map.c
    eingeschaltet ist, werden die von map_way_free() überprüften Bereiche
    farbig gekennzeichnet: Grün, falls der Bereich komplett frei oder rot,
    falls er mindestens teilweise belegt ist.

    Lässt man das Verhalten bot_drive_area() laufen, sieht man sehr schön,
    welche Bereiche überprüft werden und wie der Bot je nach Ergebnis von
    map_way_free() eine Entscheidung trifft, wohin er als nächstes fährt:
    http://www.heise.de/ct/projekte/machmit/ctbot/browser/galery/drive_area_way_free.mov?rev=1547&format=raw

    Dabei fällt aber auf (besonders bei langen Bahnen), dass am Ende einer
    Bahn zunächst der kurze Weg quer rüber zur nächsten Bahn überprüft
    wird und anschließend der Weg vom Ende der letzten Bahn zum
    voraussichtlichen Ende der nächsten (parallelen) Bahn, was so einen
    schrägen Bereich ergibt. Wofür ist die Überprüfung, ob dieser Weg frei
    ist? Der überprüfte Weg überdeckt zum Teil den zuletzt gefahrenen Weg
    (der eh frei gewesen sein muss) und nur zum Teil den voraussichtlichen
    neuen Weg (dessen Ende noch gar nicht bekannt ist).

    Übrigens war im Code von get_ratio() ein Bug, so dass map_way_free()
    teilweise falsche Bereiche überprüft hat. Ist jetzt jetzt korrigiert.

    Grüße,
    Timo
    _______________________________________________
    ct-bot-entwickler Mailingliste
    ct-bot-entwickler@xxxxxxxxxxxxxxxxx
    http://www.heise.de/bin/newsletter/listinfo/ct-bot-entwickler

    Confidentiality note:
    The information in this email and any attachment may contain confidential and proprietary information of Heidelberger Druckmaschinen AG and/or its affiliates and may be privileged or otherwise protected from disclosure. If you are not the intended recipient, you are hereby notified that any review, reliance or distribution by others or forwarding without express permission is strictly prohibited and may cause liability. In case you have received this message due to an error in transmission, we kindly ask you to notify the sender immediately and to delete this email and any attachment from your system.

- Antworten:
  - Re: [ct-bot] bot_drive_area()-Frage
    - From: Timo Sandmann

- Referenzen:
  - [ct-bot] bot_drive_area()-Frage
    - From: Timo Sandmann

- Voriger (Datum): [ct-bot] bot_drive_area()-Frage, Timo Sandmann
- Nächster (Datum): Re: [ct-bot] bot_drive_area()-Frage, Timo Sandmann
- Voriger (Thread): [ct-bot] bot_drive_area()-Frage, Timo Sandmann
- Nächster (Thread): Re: [ct-bot] bot_drive_area()-Frage, Timo Sandmann
- Indizes:
  - Datum
  - Thread