c't Projekte - c't-Bot und c't-Sim - Mailinglisten
Absender: Timo Sandmann
Datum: Do, 16.04.2009 17:15:05
In-reply-to:
<000001c9bc53$29a4e670$0200a8c0@mexpnew>
References:
<000001c9bc53$29a4e670$0200a8c0@mexpnew>
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi Frank,Irgendwie hat es die Mailingliste heute nicht so eilig, darum noch mal direkt:
Am 13.04.2009 um 18:16 schrieb Frank Menzel:
Hallo Timo,planen tut er jetzt ganz gut, wenn ich nicht vergessen habe 8 zu drückenfür Planung zum Startpunkt:-)
oh, dann fehlt da immer noch die Initialisierung, aber das sollte kein großes Problem sein.
Mit map_get_avg hat das Planen nur über befahrenes Gebiet so gut geklappt, hier ist es mir bisher nie gelungen. Was beim AVG derDurchschnittswert 20 war ist wohl bei Auswertung mit der ratio- Funktionund 95% der Felder mit Wert >0, wenn ich es richtig gesehen habe, zu restriktiv...
Ja, genau genommen sind es aber nicht 95% sondern 250 / 255 (map_get_ratio() liefert keine Prozent, sondern "Pro-255", um den ganzen 8 Bit Wertebereich auszunutzen). Der Punkt ist eigentlich folgender: Wenn man den Durchschnitt verwendet, werden leicht wichtige Informationen aus der Karte ignoriert, ein einfaches kleines Beispiel, was ich meine: Ein Feld der Planungskarte ist ja ca. so groß wie der Bot selbst. Nehmen wir jetzt mal an, die linke Hälfte des Feldes ist ein stark befahrener Weg, also weiß => mit hoher Wahrscheinlichkeit frei, sagen wir 125. Die rechte Hälfte sei nun als Hindernis recht gut bekannt, der Map-Wert ist hier beispielsweise -75. Jetzt bekommen wir als Durchschnittswert für das Planungsfeld 25 und das Planungsverhalten schließt daraus, das Feld ist frei und wurde bereits befahren. Der Bot kann dort aber nicht fahren, denn die Hälfte der benötigten Fläche ist eine Wand, die sogar in der Karte verzeichnet ist. Wie gesagt nur ein vereinfachtes Beispiel zur Verdeutlichung.
Zum Planen über befahrenes Gebiet wäre vielleicht folgender Ansatz hilfreich: Zuerst alle Hindernisse eintragen, dabei reicht ein kleiner nicht freier Bereich pro Feld für ein Hindernis (so wie es jetzt ist). Nun ein zweiter Durchlauf über alle freien Felder und mit map_get_average() prüfen wir, wie sehr die freien (!) Felder im Durchschnitt als frei bekannt sind. Ist der Durchschnitt kleiner als ein Schwellwert wie z.B. 20 oder 30, wird das Feld ebenfalls als Hindernis eingetragen, weil es nicht gut genug erforscht ist. Der Planer traut dann zwar den Hindernisse mehr (alle Felder, in denen etwas < 0 vorkommt, werden sofort als Hindernis angesehen), ich denke das schadet aber nicht, weil man dann eher auf der sicheren Seite ist. Wenn damit immer noch nicht genug Wege gefunden werden, müsste man vielleicht noch mehr Aufwand treiben. Letztlich kann der Aufrufer des Planungsverhaltens ja immer noch entscheiden, was er tut, falls kein Weg über befahrenes Gebiet gefunden wurde.
Grüße, Timo -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (Darwin) iEYEARECAAYFAknnS3kACgkQDH/BX4067fJUWgCfTHtRZyq6MwYuIcAGkyH4h4K9 p/wAoJK9h+aJURLlebc5Cc4P0K2YDaZ1 =HTdO -----END PGP SIGNATURE-----