Ansicht von 15 Beiträgen - 1 bis 15 (von insgesamt 19)
  • Autor
    Beiträge
  • #1762
    easteregg
    Teilnehmer

    heyho folks.

    ich bin derzeit immernoch dran mein vier gewinnt auszubauen.
    allerdings hab ich keinen so richtigen ansatz für eine KI
    derzeit rechne ich einfach zufallsspiele durch bis einer gewinnt und je nach dem, wie oft der computer gegen den menschen gewonnen hat, entscheidet er, in welche spalte der den stein reinwirft.

    das funktioniert an sich ganz okay, hat aber irgendwie noch zwei entschiedene mängel.
    zum einen kann man den sehr leicht mit zwickmühlen austricksen und oftmals baut er einem den weg zum sieg direkt hin.

    also hat schonmal jemand mit ner KI gearbeitet und hat da paar nette ansätze parat?
    hier mal zum probe spielen:

    http://verfriemelt.org/vier_gewinnt.php

    easteregg

    #7033
    nasenbaer
    Teilnehmer

    Ich denk mal, eine Art Baum wär am Besten…

    http://en.wikipedia.org/wiki/Minimax

    #7035
    krey
    Teilnehmer

    Wie würdest du es denn Mathematisch lösen?

    Ich finde das Spiel extrem langsam, woran liegts?

    Quote:
    derzeit rechne ich einfach zufallsspiele durch bis einer gewinnt und je nach dem, wie oft der computer gegen den menschen gewonnen hat, entscheidet er, in welche spalte der den stein reinwirft.

    Vorwärtsoriertierte Voraussagen sind schon einmal keine schlechte Idee.

    Quote:
    aber irgendwie noch … mängel.

    Na sowas ;)

    Ansatz ist doch: Eine Reihe aus 4 Steinen
    Wie setzt man?

    1. Kannst du gewinnen? Wenn ja setze den Stein
    2. Verhindern, dass der Gegner im nächsten Zug gewinnt.
    2a. Erst versuchen alle Reihen mit 3 bzw. 2 Steinen erfassen zu lassen und diese nach Möglichkeit zu schließen.
    3. Welche Möglichkeiten gibt es noch selbst eine Reihe zu bilden? Speichere alle reihen und finde die meisten gemeinsamen felder. Dort wo du am meisten 4’rer Reihen bilden kannst setzt du.
    4. Danach kannst du noch vorrausschauend suchen, was bei PHP aber keine entscheidenden Vorteile bringen sollte, wenn du ein Programm im Hintergrund hast, dass die ganze Zeit rechnen kann (beispielsweise Java Applikation) dann kannst du dir alle möglichen nächsten 1..n Züge berechnen und dir nur die Suchen bei denen du gewinnst. Das lässt sich super in einer Baumstruktur abbilden bei der du Zweige deren Züge nicht durchlaufen werden gegwirfst und in den Zweigen an sich speicherst welcher Zug gezogen wurde und welche Gewinnmöglichkeiten dir offenstehen.

    #7036
    easteregg
    Teilnehmer

    hm wenn ich das richtig vestehe müsste ich ja aber an jeder stelle nen neuen baum davon rechnen lassen?
    ich versteh zwar wie der an sich funktioniert, aber noch nich so genau wie ich den auf 4gewinnt anwende.

    edit: ach da hat sich noch einer dazwischen geschoben :P
    dass es so langsam is liegt an der tatsache dass der 42k spielzüge wohl durchprobiert, und zum anderen daran, dass es nur nen dual p3 mit 1ghz is ;P

    #7037
    krey
    Teilnehmer

    Also, Effektiv = 100 % & Effizienz = 0 %

    „Ja, wir haben viel gemacht… aber wenig erreicht“

    #7038
    easteregg
    Teilnehmer

    rischtig :)

    ich werd morgen oder nacher mal versuchen diesen algorythmus da auf das spiel zu projezieren und daraus ne lösung zu bauen.
    mal sehen ob ich erfolg haben werde!

    #7039
    tokyopunk
    Teilnehmer

    [php]Fatal error: Maximum execution time of 30 seconds exceeded in D:webrootvier_gewinnt.php on line 168[/php]
    ^^
    so zum ende hin. bin noch mal mittels browser zurück gegangen und so sah das aus wie im anhang.

    #7044
    whitenexx
    Teilnehmer

    Gleicher Fehler auch bei mir während dem spielen.

    #7045
    easteregg
    Teilnehmer

    joar das kann durchaus passieren ;)
    vorallem wenn der server mal viel zu tun hat ;D

    #7048
    tokyopunk
    Teilnehmer
    easteregg wrote:
    joar das kann durchaus passieren ;)
    vorallem wenn der server mal viel zu tun hat ;D

    ist zur zeit also sehr rechenlastig dein algorithmus?

    ach das ist dein privatrechner – mitten im internetz.^^ deswegen…

    #7050
    easteregg
    Teilnehmer

    jojo, der kleine steht keine 20cm von mir weg ;)
    rechenlastig ist der algorithmus (wenn man das was der da macht überhaupt so schimpfen will ;)) nichtmal unbedingt, aber php ist nunmal auch nicht die schnellste sprache^^

    #7052
    krey
    Teilnehmer
    Quote:
    aber php ist nunmal auch nicht die schnellste sprache

    Glückwunsch, eine qualifizierte Äußerung! ! !

    Oh man, dann schreib doch alles in Assembler.
    C Programme sind oft nicht effizienter. (Schon mal PHP als Fast CGI genutzt?)

    Max Execution Time lässt sich umstellen.

    Ich denke mal es liegt an deinem Rechner und nicht an PHP. (Schon mal geschaut wie viel Speicher von deinem Programm benötigt wird? Wenn geswapt wird ist es klar, dass solche Geschwindigkeitseinbußen entstehen).

    Und was macht eine Sprache schnell? Die Optimierung des Bytecode den Java anlegt, (bzw. jetzt auch TCL und PERL) ?
    Oder einfach das es ein executable ist, das aber keinen code einfach nachladen kann? Dynamische Speicherverwaltung, achja das größte + von ANSI C :P

    Aber wie gesagt, man hat doch eh alle Zeit der Welt! Wieso das langsame PHP nehmen und nicht direkt Assembler genau für deinen Chipsatz?

    #7053
    easteregg
    Teilnehmer

    ich wees nich was du dich hier jetzt künstlich aufregst, es ist nunmal fakt, dass eine compilierte C anwendung deutlich schneller ist, als ne scriptsprache.
    das sind zwei veschiedene paar schuhe. und der speicherverbrauch von dem script verursacht sicherlich kein swappen.

    anderes beispiel, schonmal versucht nen bruteforcetool mit java zu schreiben?
    probiers mal mit C dagegen, nen kumpel hat jenes gemacht, wir hatten geschwindigkeitsdifferenzen von mehreren millionen vesuchen pro sekunde.

    also wenn du hier nix sinvolles zum thema beitragen kannst, geh wo anders flamen kid!

    #7054
    krey
    Teilnehmer
    Quote:
    es ist nunmal fakt, dass eine compilierte C anwendung deutlich schneller ist, als ne scriptsprache.

    Wenn du davon zu überzeugt bist, dann kompilier dir deinen Algorithmus doch als C Modul und erweitere PHP.

    Oder ist es dann wieder langsam weil es eine Scriptsprache ist :whistling:

    Mhh vieleicht hat dein Freund einfach ein effektiveres Programm geschrieben als du?

    Ein Script Interpreter ist auch nur ein „kompiliertes Programm“. Natürlich hast du den Overhead vom Scriptparsen dabei aber dementsprechend auch ganz andere Möglichkeiten.

    Quote:
    und der speicherverbrauch von dem script verursacht sicherlich kein swappen.

    Hast du nachgeschaut? :D

    Quote:
    also wenn du hier nix sinvolles zum thema beitragen kannst

    Ich korrigiere dich nur wenn du quatsch redest ❗

    Ich verstehe auch nicht wieso du dich mit solchen „langsamen Sprachen“ rumärgerst. Schreibe doch „eine compilierte C anwendung“ ?!

    Ich habe auch keine Lust hier sinnlose Glaubenskriege zu führen. Mal um bei den Fakten zu bleiben, PHP ist keine langsame Sprache. Es gibt viel komplexere OO Sprachen, die sind um ein wesentliches langsamer in dem was sie tun, aber machen das durch kluge Überlegungen wieder wett (Connection Pooling, Object & Storage Recycling, Load Balancing etc.).

    Quote:
    dass es so langsam is liegt an der tatsache dass der 42k spielzüge wohl durchprobiert, und zum anderen daran, dass es nur nen dual p3 mit 1ghz is ;P
    Quote:
    rechenlastig ist der algorithmus (wenn man das was der da macht überhaupt so schimpfen will ;)) nichtmal unbedingt, aber php ist nunmal auch nicht die schnellste sprache^^

    Schon mal daran gedacht, dass das Problem vor dem Rechner sitzt? ;)

    Ich denke eher, dass dein Algorithmus für die Tonne ist als PHP.

    #7055
    tokyopunk
    Teilnehmer

    leute. ist doch gut. guckt mal aufs thema, haltet euch dran.
    mag gut sein, dass der algorithmus da nix taugt. aber dazu ist ja auch das thema hier :D

Ansicht von 15 Beiträgen - 1 bis 15 (von insgesamt 19)
  • Du musst angemeldet sein, um auf dieses Thema antworten zu können.