Absender: Frank Menzel
Datum: Mi, 18.02.2009 16:39:57
In-reply-to:
<A196DEAC-B8C5-4C0F-8D75-92F5733ADF8E@xxxxxxxxxxxxxxx>
Hi Timo, Antwort unten angefügt... Gruß, Frank -----Ursprüngliche Nachricht----- Von: ct-bot-entwickler-bounces@xxxxxxxxxxxxxxxxx [mailto:ct-bot-entwickler-bounces@xxxxxxxxxxxxxxxxx] Im Auftrag von Timo Sandmann Gesendet: Mittwoch, 18. Februar 2009 14:29 An: Entwicklung rund um den c't-bot Betreff: Re: [ct-bot] bot_drive_area()-Frage Hi Frank, Am 18.02.2009 um 12:32 schrieb Menzel, Frank IT-OO4: > Prinzipiell schon, habe aber das Problem, dass ich da irgendwie > einen Zähler mitgeben möchte. Der Sinn ist der, dass wenn eine > Strecke aktuell nicht anfahrbar ist, diese nicht verworfen sondern > mit erhöhtem Zählerwert vorn reingeschoben wird. Erst nach x- > Versuchen (z.B. Zähler der Strecke > 5) des Anfahrens wird diese > Strecke verworfen. so ganz habe ich noch nicht verstanden, was du meinst. Wenn eine Strecke nicht anfahrbar ist, setzt du einen Zähler für die Strecke auf 1 und packst sie vorne in den Stack. Jetzt geht es mit der letzten Strecke aus dem Stack weiter. Irgendwann sind dann alle Strecke aus dem Stack mit pop() geholt worden und es ist nur noch die "Zurückgestellte" mit dem Zähler == 1 dort drin. Jetzt wird diese geholt und beim Auslesen merkst du, dass der Zähler auf 1 steht. Jetzt ist die Strecke immer noch nicht anfahrbar und du erhöhst den Zähler auf 2, anschließend kommt die Strecke wieder vorne in den (jetzt leeren) Stack. Und nun? Verstehe ich das soweit erstmal richtig? Ja genau, ist aber nicht nur die eine Strecke, sondern ja möglicherweise mehrere. Um diese nicht gleich zu verwerfen und damit auch auch kompletten anderen Weg nicht mehr anfahren zu können, versuche ich auf diese Weise mehrmals diese anzufahren. Wenn der Bot woanders ist, kann es ja durchaus sein, dass von anderer Position aus der Weg dorthin nun frei ist-braucht man bei eingeschalteter Pfadplanung natürlich nicht. Wenn dies eben die letzte Strecke im Stack ist (da macht das vorn einfügen aber auch keinen Sinn), wird diese maximal 2-3 mal genommen und auf Weg dorthin frei gecheckt. Falls immer noch nicht frei eben verworfen. > Ohne Zähler ist ja nicht bekannt, wie oft ich diese Strecke schon > versucht habe anzufahren und würde Endlosschleife mit sich > bringen...Wie kann hier am besten ein Zähler mit rein? Man braucht ja einen Zähler pro Strecke, also für jeden zweiten Stack- Eintrag, richtig? Entweder bekommt jeder Stack-Eintrag ein Byte mehr, wo du beliebige Werte von 0 bis 255 speichern kannst, dann hätten wir 25 % mehr RAM-Verbrauch für jeden Stack. Oder der Stack bzw. Speicher kann unterschiedliche Datentypen speichern, Positionen (x und y), Strecken (x1, y1, x2, y2) und Strecken mit Zähler (x1, y1, x2, y2, z). Dann hätte der Stack für das Area-Verhalten zwar immer noch zusätzlich 1 Byte pro Strecke belegt (+ 12,5 % RAM), egal ob der Eintrag nun einen Zähler braucht oder nicht, alle anderen Stacks der anderen Verhalten würden aber keinen Speicherplatz verschwenden. Alternativ dazu: Das Verhalten macht selbst eine Liste auf und speichert zu interessanten Positionen des Stacks (Index im Stack- Array) einen Zähler. Auch richtig, jeder 3. Wert wäre der Zählertyp. OK wäre z.B. die y-Koordinate umsonst. Guck ich mir noch mal an... Gruß, Timo _______________________________________________ ct-bot-entwickler Mailingliste ct-bot-entwickler@xxxxxxxxxxxxxxxxx http://www.heise.de/bin/newsletter/listinfo/ct-bot-entwickler