c't Projekte - c't-Bot und c't-Sim - Mailinglisten

c't-Bot und c't-Sim


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

AW: [ct-bot] bot_drive_area()-Frage

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