Xte Schere, Sttein Papier Variante

Code-Stücke können hier veröffentlicht werden.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo.

Deine Dreiersequenzen stören uns, weil diese vollkommen willkürlich gewählt sind und keinerlei Sinn machen. Deine Erklärung für deren Notwendigkeit ist einfach falsch. Wie BlackJack bereits geschrieben hat, ist es vollkommen irrelevant, ob du k-mal zufällig aus den 27 3er-Sequenzen wählst, oder k*3-mal zufällig aus "abc". Du findest damit keine Muster oder Symmetrien.

Vielleicht solltest du dir vorher noch anschauen, wie Pseudozufallszahlengeneratoren funktionieren, bevor du dort nach Mustern suchst. Du gehst da viel zu naiv ran. Warum schreibst du dir nicht einfach eine eigene KI, welche Muster produzierst und analysierst diese dann. Da kannst du dir über das Ergebnis auch sicher sein. So eine KI könnte zum Beispiel immer den letzten Zug des Gegners wiederholen oder wählt per Zufall und nimmt dieses Element k Mal in Folge oder es wird eine feste Sequenz immer wieder abgearbeitet oder ...

Sebastian
Das Leben ist wie ein Tennisball.
BlackJack

@wwwheimer: Wir verstehen halt nicht was Du mit diesen Dreiern bezwecken willst. Keine Deiner Erklärungen ergibt für mich einen Sinn. Insbesondere ist keine bis zum Ende erklärt. Ich bleibe jedes mal mit einem „Ja und nun!?”- oder „Aber *warum*!?”-Gefühl zurück. Man kann 'aaabbbcccaaabbbccc' auch ohne ein Wörterbuch mit allen Dreiern erzeugen. Aber es bleibt auch immer noch die Frage warum es unbedingt dreier sind? Warum nicht Zweier? Oder Vierer? Oder eben Einer!

Vielleicht setzt Du Dich erst einmal mit dem Zufallszahlengenerator auseinander, den Python verwendet. Der „Mersenne Twister” wurde mit statistischen Simulationen im Hinterkopf entworfen. Es ist ziemlich unwahrscheinlich das man da einfache Muster finden wird. Aus der Doku:
help(random) hat geschrieben:General notes on the underlying Mersenne Twister core generator:
  • The period is 2**19937-1.
  • It is one of the most extensively tested generators in existence.

...
Benutzeravatar
wwwheimer
User
Beiträge: 25
Registriert: Sonntag 17. Juli 2011, 16:35

@EyDu,
auf Deine 'Warums' kann ich nur sagen, dass ich mit den vielen tollen Sprachkonstrukten
noch gar nicht vertraut bin. Tupel, Iteratoren, Generatoren, Collections.... Alles neu für
mich. Es braucht halt seine Zeit, bis ich mit den neuen Möglichkeiten was anfangen kann.

Was Du hier sagst:"Das Brüche vermieden werden sollte finde ich ehrlich gesagt
ein etwas abwegiges Argument.", ist unüberlegt.
Schau Dir mal zB mein Avatar an. Das Orginal war 81x81px groß und alle Linien waren
gleich dick. Aber ich mußte es auf die hier erlaubten 80x80px reduzieren und nun hat
dieses Bytequadrat zwei ungewollte dickere Mittellinien.
Das ist nur ein Beispiel dafür, dass Teilbarkeit besser vorher bedacht werden sollte.

@BlackJack:
Zufällig ergeben die 27 Dreier eine Sequenz aus 81 Zeichen.
Zufällig besteht das Tao Te King aus 81 Kapiteln.
Zufällig gibt es neben Links und Rechts eine Mitte!
Auch 'zufällig' habe ich schon einmal vor dem Problem gestanden, als ich mir das I Ging
vorgenommen hatte. Da wird auch jede Linie des 'Bildes' mit einem Wurf von drei Münzen
erzeugt.
Es ist wohl wahr, ich habe auch einige subjektive bzw. intuitive Gründe. Das mag irrational
sein, aber es ist so.

Grüße!
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo.

Meine ganzen Anmerkungen über deinen Code dienen natürlich dazu, dass du neue Konstrukte kennen lernst und diese anwenden kannst. Deshalb habe ich noch dazu geschrieben, was du verbessern solltest. Sonst wäre Kritik für beie Seiten etwas sinnlos ^^

Dein Argument zum Brüche vermeiden, in diesem Fall die Skalierung von Bildern, ist doch vollkommen aus dem Kontext gerissen. Natürlich macht es manchmal sinn darauf zu achten, aber eben nicht immer. Und ich sehe ich überhaupt keine Notwendigkeit auf ganze Zahlen Rücksicht zu nehmen.

Zu deinen "Argumenten" des letzten Postes bezüglich Zufälle: was hat das bitte mit diesem Problem zu tun? Du bringst hier "intuitive Gründe" oder "Intuition" ins Spiel, wo sie überhaupt nicht angebracht ist. Du solltest zumindest begründen könne, warum du so vorgehst und warum du glaubst, dass das sinnvoll ist. Immerhin haben wir dir gezeigt, dass deine Dreierreihen im moment keinen Sinn machen, da man genau so gut jede andere Länge verwenden kann. Vielleicht solltest du ein wenig Mathemathik fragen und dich nicht in Zahlenspielen verwickeln.

Sebastian
Das Leben ist wie ein Tennisball.
BlackJack

@wwwheimer: Es gibt Probleme bei denen man über Teilbarkeit nachdenken kann, aber bei Wahrscheinlichkeiten die üblicherweise durch Dezimalbrüche zwischen 0 und 1 angegeben werden, ist es schon ein wenig abwegig das vermeiden zu wollen. Wenn Du vorher tatsächlich nachgedacht hättest, statt einfach mal prophylaktisch Brüche vermeiden zu wollen, hättest Du jetzt auch ein Argument bringen können welche Vorteile das bringt oder welche Nachteile es vermeidet. Insbesondere entsteht das Problem mit dem Avatar doch nur weil dort nur mit ganzen Zahlen in einem Raster gearbeitet wird statt mit Dezimalbrüchen.

Soso, 27·3 ist also *zufällig* 81? Tao Te King!? :shock: Heiliges fliegendes Spaghettimonster. Du hast Oben und Unten vergessen. Du willst einen Mersenne Twister mit Esoterik analysieren. Na dann mal viel Spass. :roll:
Benutzeravatar
wwwheimer
User
Beiträge: 25
Registriert: Sonntag 17. Juli 2011, 16:35

@BlackJack, Du hast doch bestätigt, dass im Ergebnis sich meine aus Dreiern erzeugten
Sequenzen nicht von denen unterscheiden, die aus einzelnen Zeichen zusammengesetzt
werden. Warum machst Du, macht Ihr, daraus so ein grosses Problem? In meinen Augen
st das jetzt schon irrational: Es spielt zwar keine Rolle, wie ich die Sequenzen erzeuge,
aber ich habe sie so zu erzeugen 'wie man es macht'!

Also, Ihr könnt mich gern in eine Eso-Ecke stecken, wenn ihr nur aufhört an meiner
Dreierteilung zu nörgeln. 8)

Jetzt will ich die nächste Funktion angehen und mir einen 'Rangier-Bahnhof' für meine
Sequenzen basteln. Was sich dazu am besten eignet - Tupel, Listen, oder was sonst noch
in Frage kommt, das kann ich nicht abschätzen. Was ist dazu wohl am besten geeignet.

BlackJack, bevor ich es vergesse. Du hattest mich darauf hingewiesen, dass ich 'return
zu einer Funktion' mache. Aber einen Unterschied in der Wirkung kann ich nicht feststellen.
Ob ich return mit oder ohne Klammer schreibe, scheint keine Rolle zu spielen. Dass ich da
überhaupt Klammern benutzt habe, war ein Zufall. Vielleicht kannst Du mir dieses
Verhalten des Interpreters erklären, der ist doch sonst so pingelig. Auch dass ich der
Funktion Int- u. Str-Zeichen übergeben kann, irritiert mich.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo.

Wir haben doch nie behauptet, dass man mit den Dreiergruppen nicht alle Kombinationen erzeugen könnte. Unsere Aussage ist, dass die Gruppierung in jeweils drei Elemente unnötig ist, da sich die Schlangen genau so gut durch beliebige einzelne zufällige Werte erzeugen lassen. Du machst es also komplizierter als es ist. Das problematische daran ist, dass du nicht verstehst, oder nicht verstehen willst, dass deine Erzeugung unserer entspricht; nur komplizierter und unnötig mit den Längen als Vielfaches von 3.

Du wirst nicht deshalb in die Eso-Ecke geschoben, weil du die Dreierteilung benutzt, sondern weil du sie mit esoterisch anmutenden Argumenten "begründest". Fange doch einfach an dir selber die Wahrscheinlichkeiten zu berechnen, das sind hier ja immer nur ein paar Multiplikationen. Du kannst ja gerne an deine sinnvolle Aufteilung glauben, die Zahlen sprechen leider gegen dich. Im Prinzip erhälst du am Ende eine 3*n lange zufällige Zeichenkette und willst damit Muster in einer anderen finden. Das wird relativ schwer ;-)

Daher noch einmal mein Hinweis: rechne dir die Wahrscheinlichkeiten aus, überlege dir dann, ob deine Sequenzen noch sinnvoll sind oder nicht. Das Ergebnis haben wir dir ja bereits vorweg genommen, außer du kommst jetzt noch mit dem riesigen magischen Verfahren, welches du bisher vergessen hast zu erwähnen ^^ Am Ende wirst du das Problem mit einem wahrscheinlichkeitstheoretischem Ansatz oder stochastischem Prozess modellieren müssen, sonst wirst du keine vernünftigen Aussagen über deinen Ansatz treffen können.

Zum Thema Listen/Tupel/Dictionaries: Listen solltest du immer dann verwenden, wenn du die Liste selbst noch anpassen möchtest, also Elemente aus ihr löschen oder hinzufügen. Tupel bieten sich dann an, wenn die Anzahl der Elemente vorher bekannt und du die Sequenz nicht mehr ändern möchtest. Dictionaries brauchst du dann, wenn du einen Schlüssel und ein Wert hast, welcher duch den Schlüssel repräsentiert wird. Im Prinzip sind Listen Spezialfälle von Dictionaries.

Zum `return`: Python wirft keinen Fehler wenn du Klammern setzt, da der Ausdruck `return (x)` korrekt ist. In diesem Fall erzeugen die Klammern einen einfachen geklammerten Ausdruck, welcher sich zu `x` vereinfachen lässt. Im Prinzip wie `(42*23+1)` das selbe ist wie `42*23+1`.

Sebastian

Edit: Zu den Typen dar Parameter: du kannst sowohl Integer als auch Strings, so wie alle anderen Typen übergeben, da Python mit den Typen dynamisch umgeht. Erstmal ist alles was du an einen Namen binden kannst ein Objekt, dies kannst du auch als Parameter übergeben. Erst wenn du auf den Objekten Operationen ausführst werden Typen - und zwar sehr streng - getestet. Einfache Beispiele: `1+2`. `2.0+3.0`, `"abc"+"cde"`. Im ersten Fall benutzt du den `+`-Operator für die Addition von Integern, im zweiten Fall für die Addition von rationalen Zahlen und im dritten hängst du zwei Strings aneinander. `+` ist dabei eigentlich nichts anderes als eine Funktion, welche die Typen der Parameter testet und dann die richtige Operation auswählt.
Das Leben ist wie ein Tennisball.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ich möchte die Diskussion noch einmal voran bringen: Lassen wir mal diese 3er-Sequenzen außen vor, denn immerhin sollte nun klar sein, dass man sie so wie Du erzeugen kann, oder eben auch einfacher. Sei es drum. Aber wozu dienen sie? Wozu brauchst Du diese Sequenzen im Spiel? Diese elementare Frage habe ich noch nicht begriffen... bzw. Du noch nicht beantwortet. Irgend wann ging es mal um eine KI, dann wieder nicht... ich bin da out of sync mit Dir!
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo.

Sequenzen zu analysieren scheinen mir ein ganz vernünftiger Weg zu sein um Spielzüge des Gegners, so lange dieser sich nicht vollkommen zufällig verhält, vorauszusagen. Ich habe das einfach mal mit einigen n-Grammen versucht und die Ergebnisse sind recht brauchbar. Im Prinzip sind das natürlich nur bedingte Wahrscheinlichkeiten der vorangegangenen Züge Z1, Z2, ..., Zm für den Nächsten Zug des Gegners X. Ich hatte bisher noch nicht die Motivation dazu, darüber könnte man natürlich auch herausfinden, wie groß n sein sollte, in wie weit Züge von einander unabhängig sind, ob es sinnvoll ist mehrere n-Gramme für die Voraussagen zusammen zu werfen und eine Voraussage darüber treffen, wie groß die Wahrscheinlichkeit ist, dass der Gegner gerade einen Strategiewechsel durchgeführt hat.

Ich bin mir sicher, dass dieser Ansatz schon einmal getester wurde, er ergibt sich auch recht natürlich. Vielleicht sollte man einfach mal nach Papern oder Beiträgen dazu suchen. Wenn die Motivation wieder da ist ^^

Sebastian
Das Leben ist wie ein Tennisball.
Antworten