Script bricht Rekursion ab

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
miv
User
Beiträge: 3
Registriert: Dienstag 12. Juni 2007, 19:25

Script bricht Rekursion ab

Beitragvon miv » Dienstag 12. Juni 2007, 19:33

Hallo!
Ich habe ein Script geschrieben, welches bei einem einfachen Brettspiel alle Züge ausprobiert, und so eine strikt dominante Strategie findet(Spieltheorie)
Wenn ich das Script komplexer mache, bricht das Script einfach ab.
(Musste über sys setrecursionlimit erstmal die Rekursion vertiefen...)
Ich schätze, in der aktuellen Version sollte er ca.1h rechnen.

Kann mir irgendwer helfen?

Schonmal danke,
Michael
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Beitragvon CM » Dienstag 12. Juni 2007, 19:38

Hallo und willkommen im Forum!

Sag' mal: Wie soll Dir jemand helfen, wenn Du uns keinerlei Informationen gibst wo das Problem liegen könnte? Schau' mal hier: http://www.python-forum.de/topic-1240.html als Info zum besseren Fragenstellen. Oder hier: http://www.lugbz.org/documents/smart-questions_de.html

Gruß,
Christian
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: Script bricht Rekursion ab

Beitragvon gerold » Dienstag 12. Juni 2007, 19:40

miv hat geschrieben:Musste über sys setrecursionlimit erstmal die Rekursion vertiefen...[...]Kann mir irgendwer helfen?

Hallo Michael!

Willkommen im Python-Forum!

``sys.setrecursionlimit`` hast du ja schon gefunden. Hast du ein Problem? Dann beschreibe es.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
BlackJack

Beitragvon BlackJack » Dienstag 12. Juni 2007, 20:10

Das Rekursionslimit ist dazu da, dass der C-Stack nicht "überläuft". Man kann es hochsetzen, das hat aber keinen Einfluss auf den C-Stack. Wenn man das Limit also so hoch setzt, dass der C-Stack "überlaufen" kann, bricht das Programm dann einfach ab. Entweder mit einer Speicherzugriffsverletzung, oder weil der Stack irgend etwas im Datenbereich überschreibt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Dienstag 12. Juni 2007, 20:34

BlackJack hat geschrieben:Das Rekursionslimit ist dazu da, dass der C-Stack nicht "überläuft". Man kann es hochsetzen, das hat aber keinen Einfluss auf den C-Stack.

Hallo BlackJack!

Bitte werde etwas genauer. Das Rekursionslimit in Python ist 1000. Wie viel kann der C-Stack vertragen? Wie kriegt man das raus?

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
BlackJack

Beitragvon BlackJack » Dienstag 12. Juni 2007, 20:52

Solange das Limit hochsetzen und Stack "verbrauchen" bis es kracht!? :-)

Der Stack ist unter Linux normalerweise 8 MB gross.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Beitragvon Sr4l » Dienstag 12. Juni 2007, 21:48

Wenn es Probleme mit dem Stack gibt, dann schmeißt man ihn raus :-)

Mit StacklessPython ( http://www.stackless.com/ ) :-D

Also ich habe noch nie mit Stackless gearbeitet, aber genau diese Problematik und damit Vorteil von Stackless wird in dem Einsteiger Tutorial besprochen.
miv
User
Beiträge: 3
Registriert: Dienstag 12. Juni 2007, 19:25

Beitragvon miv » Dienstag 12. Juni 2007, 23:16

Das Problem ist ganz einfach erklärt:
Das Script hält einfach an.

Wenn ich denn Sys teil lösche, erhalte ich:
RuntimeError: maximum recursion depth exceeded
Aber wie gesagt, das habe ich dank Google schon gelöst

Ich arbreite mit DrPython, und da sehe ich rechts unten, wenn das Script läuft(zum Beispiel in einer Endlosschleife)
aber bei meinem Script tut sich nichst.
Es startet, probiert einige Strategien, und dann hört es auf, ohne fertig zu sein
:-(
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Beitragvon veers » Dienstag 12. Juni 2007, 23:34

Die alternative zu Stackless Python wäre das ganze Iterativ oder mit eigenem Stack zu implementieren.
miv
User
Beiträge: 3
Registriert: Dienstag 12. Juni 2007, 19:25

Beitragvon miv » Mittwoch 13. Juni 2007, 08:35

@veers
Wie kann ich einen eigenen Stack implementieren?

EDIT:
Hab das Problem jetzt Iterativ gelöst,
ist zwar imo keine schöne Lösung, aber immerhin.

DANKE,
Michael

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder