Foren » 32. BwInf

Probleme mit Zufallszahlengenerator

  • 23. September 2013 20:37:21 CEST

    Hallo,

    ich bin gerade eifrig am schreiben meiner KI. Sah auch alles gut aus soweit, doch als ich die Partie gestartet habe, hat sich die KI bei der Erzeugung von Zuffahlszahlen mithilfe von

     

    Random randomizer = new Random();

    randomizer.nextInt(xxx);

     

    einfach aufgehängt und alle Rechenpunkte verbraucht. Außerdem wird mir die Exception nach ab der nächsten gar nicht mehr angezeigt, sondern nur noch, dass meine KI alle Rechenpunkte verbraucht hat. Hat hier jemand etwas ähnliches erlebt oder einen Workaround gefunden?

     

    Edit: Wichtig! Ich habe in meiner KI keine Schleife, wo sie sich aufhängen könnte. Habe  es außerdem mit ThreadLocalRandom versuch, gibt aber auch nix...

     

    Viele Grüße,

    Maxim


    Dieser Beitrag wurde am 24. September 2013 12:40:13 CEST von nicht mehr angemeldetes Mitglied bearbeitet
    • 10 Beiträge
    24. September 2013 11:29:29 CEST
    Bist du dir sicher, dass der Fehler an dieser Stelle ist?

    BTW: gibt es wirklich eine getInt()-Methode für die Random-Klasse?
    ( http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Random.html )
  • 24. September 2013 12:39:44 CEST
    Tschuldigung, habe mich beim posten verschrieben, habs in nextInt(xxx) umgeändert. Problem ist aber immer noch das gleiche :-\
    Dieser Beitrag wurde am 24. September 2013 12:40:43 CEST von nicht mehr angemeldetes Mitglied bearbeitet
    • 10 Beiträge
    24. September 2013 12:47:20 CEST
    Es muss an etwas anderem liegen... Folgender Code funktioniert bei mir einwandfrei:

    public void zug(int id, Spiel.Zustand zustand, Spiel.Zug zug) {
    Random randomizer = new Random();
    zug.ausgabe(randomizer.nextInt());
    }
    • 16 Beiträge
    24. September 2013 14:35:09 CEST

    Hallo!

    Ich habe auch das Problem, dass sich mein KI ständig aufhängt (trotz eigentlich einwandfreiem Code)... Woran kann das liegen (Zufallszahlen funktionieren bei mir auch nur manchmal...)? Sind Schleifen nicht erlaubt?

     

    LG


    Dieser Beitrag wurde am 24. September 2013 14:35:44 CEST von David Schmidt bearbeitet
  • 24. September 2013 14:54:43 CEST
    Schleifen sind schon erlaubt, aber wenn du keine Schleifen in deinem Code drinhast und keine Rekursion nutzt, dürfte eigentlich nichts passieren... Kann man eigentlich irgendwo weitere informationen sehen, warum die KI sich aufgehängt hat?
    • 16 Beiträge
    24. September 2013 16:01:38 CEST

    Direkt abstürzen tut er nicht, er gibt nur immer folgenden Fehler aus:

    [SIMULATOR] Runden-Timeout nach 1000 verbrauchten Rechenpunkten. Noch 19000 Rechenpunkte übrig.

    (und den eben für jede Runde)

    Der Code enthält nur eine if else verzweigung, die auf eine globale Variable zugreift, die ich zwingend brauche, um die zugnummer festzustellen (oder ist das auch anders möglich?) und damit die Variablen nicht jeden zug neu definiert/überschrieben werden...

     

    Woran kann es liegen?

     

    *EDIT*

    Seltsam... Kopiert man den ganzen code und fügt ihn in ein neues Projekt ein, funktioniert das ganze... Im alten tut sich aber nix..

    P.S. Ich arbeite unter Linux - Probleme mit Java 6/7??


    Dieser Beitrag wurde am 24. September 2013 16:12:40 CEST von David Schmidt bearbeitet
  • 24. September 2013 16:44:12 CEST
    Das erklärt natürlich, warum bei der Code bei DeepBlue funktioniert hat. Trotzdem muss es irgendeinen auslöser geben, denn davor ging der Code ja.... Ich benutze auch linux. Hat jemand auch mal den Code unter windows getestet? Vielleicht liegt es ja daran dass die Zufallszahlen auf jedem Betriebssystem anders generiert werden (bei linux beim lesen aus /dev/urandom, was es bei windows ja nicht gibt...)
    • 10 Beiträge
    24. September 2013 16:47:54 CEST
    ich nehme mal an, dass Java serverseitig vom Turnierserver ausgeführt wird...
    ich habe mein java im browser nicht an und trotzdem kann ich den code kompilieren und ausführen...

    ob windows oder linux sollte also egal sein...
  • 24. September 2013 17:24:38 CEST

    Es kommt ja nicht darauf an, wie dein Code kompiliert wurde, sondern der der Random-Klasse. Dieser wurde aber systemspezifisch kompiliert (stichwort 'native'), deshalb funktioniert die Klasse von System zu system anders... Ein workaround wäre vielleicht, eine eigene Random-klasse zu schreiben, aber das wäre aufwendig...

     

    Edit: Habe gerade eben KI kopiert und laufen lassen. Das Ergebnis: Zwei Runden läuft die KI problemlos, bei der dritten hängt sie sich wieder auf... Ab der nächsten Simulation geht gar nix mehr, und die KI hängt sich gleich bei der ersten runde auf...


    Dieser Beitrag wurde am 24. September 2013 18:04:54 CEST von nicht mehr angemeldetes Mitglied bearbeitet
    • 230 Beiträge
    24. September 2013 18:15:13 CEST
    Frage dann mal direkt bei den Betreuern des Turnierservers nach, die können vielleicht mal genauer reinschauen, was da los ist: Email: bwinfki@googlemail.com
  • 24. September 2013 18:19:40 CEST

    Habe mal ALLES rauskommentiert, bis der folgende Code übrig geblieben ist:

    public void zug(int id, Spiel.Zustand zustand, Spiel.Zug zug) {

      zug.ausgabe("Am anfang des zugs!");

      zug.bieten(101);

    }

     

    Hängt aber trotzdem... Muss wohl an esu liegen

     

    Edit: Habe einen Workaround gefunden: In tab KI-Implementierung auf die KI die hängt mit der rechten Maustaste klicken und im Kontextmenü "Neue Version" auswählen. Geht gut - für eine Simulation :-/ Liegt vermutlich daran, wie esu die Daten speichert und nutzt... Man sollte einen Sonderpreis an denjenigen geben, der den Bug findet & behebt. Das ist sicher nicht einfach ;-)


    Dieser Beitrag wurde am 24. September 2013 19:08:19 CEST von nicht mehr angemeldetes Mitglied bearbeitet
    • 16 Beiträge
    25. September 2013 14:09:28 CEST

    Danke dafür! Ist auf jeden fall einfacher als jedes mal nen neuen KI anzulegen... :) Der Fehler wird bei (der/die/das?? ;) ESU liegen, hatte derartiges wie gesagt auch schon öfters..


    Dieser Beitrag wurde am 25. September 2013 14:21:56 CEST von David Schmidt bearbeitet
    • 11 Beiträge
    28. September 2013 17:51:01 CEST
    Ich hab auch so ein Problem:
    Ich hab zwei KIS erstellt:
    eine komplizierte, die meine darstellt, und eine "alphasoft" KI, die einfach immer 100 unzen bietet.

    Kurioserweise hängt sich nur die einfache KI auf "alphasoft", meine funktioniert immer.

    Gibt es eine Lösung dafür?
  • 4. Oktober 2013 23:05:06 CEST

    Update: Laut diesem Post hängen sich wohl auch Python KIs beim generieren von Zufallszahlen auf... Was ist da los????

    • 48 Beiträge
    5. Oktober 2013 10:48:10 CEST
    Hi,
    wir führen eure Programme serverseitig mit Einschränkungen aus.

    Zu Java:
    Falls ihr Probleme mit Random auf dem Server (online-Platform) habt, schreibt uns bitte eine Mail.
    Falls ein Problem mit ESU auftritt ist die Frage welche Java Version ihr benutzt und welches Betriebssystem.

    Zu Python:
    Wir sind gerade dabei auf dem Server die Berechtigen zu ändern, sodass auch Python auf /dev/urandom zugreifen kann. Offline sollte es aber gehen.
    • 48 Beiträge
    7. Oktober 2013 14:28:42 CEST
    Python kann nun auch online auf /dev/urandom zugreifen.
    • 58 Beiträge
    8. Oktober 2013 14:09:36 CEST

    Oder wenn ihr Random nicht verwenden wollt, wie wärs mit:

     

    public static int generate(int min, int max){

    return (int) Math.round(Math.random()*(max-min)+min);

    }


    Dieser Beitrag wurde am 8. Oktober 2013 14:10:23 CEST von Fritz Windisch bearbeitet
    • 10 Beiträge
    8. Oktober 2013 21:14:08 CEST
    Fritz Windisch said:

    Oder wenn ihr Random nicht verwenden wollt, wie wärs mit:

    public static int generate(int min, int max){

    return (int) Math.round(Math.random()*(max-min)+min);

    }

     

    Was ist denn der Unterschied zwischen Random und random()???

    Versteh ich dich da grade iwie falsch?

    • 58 Beiträge
    9. Oktober 2013 14:32:43 CEST
    random() ist eine Methode der Klasse Math.
    Random ist eine Klasse.

    Es sind einfach 2 unterschiedliche Generatoren