Foren » 31. BwInf

Runde 2 - Aufgabe 3

    • 6 Beiträge
    21. Januar 2013 15:24:48 CET

    Vielen Dank für die schnellen Antworten.

     

    Dass man die Ausgaben der KI wirklich nicht sehen kann finde ich sehr schade. Mit den Ausgaben könnte man doch viel besser sehen, welche Fehler die KI macht oder was verbessert werden könnte. So ist es ja fast sinnlos, überhaupt Ausgaben zu programmieren.


    Dieser Beitrag wurde am 21. Januar 2013 15:25:19 CET von Daniel G bearbeitet
    • 10 Beiträge
    23. Januar 2013 18:23:02 CET
    du kannst hinter deiner KI auf das weiße "Blatt" klicken, welches dir dann ein Debug Fenster öffnet wo die Ausgaben zu sehen sind
    • 22 Beiträge
    24. Januar 2013 16:00:24 CET
    Kann ich auch selbst etwas in die Debugausgabe eintragen?

    Das wäre nämlich eine enorme Hilfe bei der Fehlersuche...
    • 230 Beiträge
    24. Januar 2013 17:37:00 CET
    Simon - said:
    Kann ich auch selbst etwas in die Debugausgabe eintragen? Das wäre nämlich eine enorme Hilfe bei der Fehlersuche...

    Siehe http://di188.di.informatik.tu-darmstadt.de/wiki/index.php/FAQ

     

    Um Debug Ausgaben zu machen, verwenden Sie: zug.ausgabe("ausgabe")

    • 22 Beiträge
    24. Januar 2013 19:12:51 CET
    Ok, danke. So geht das Ganze doch einfacher, als bei jeder zu überprüfenden Variable eine Exception zu generieren : )
    • 38 Beiträge
    26. Januar 2013 12:11:25 CET

    Ähm, nur dass ich es richtig verstehe: Man hat keine Möglichkeit im Spiel selbst Hindernisse zu setzten, oder? Die KI kann praktisch nur nach oben/unten/links/rechts laufen, oder?

     

    Und da ich sonst nicht mit Java arbeite, wie gehe ich nun am besten mit der List für Hindernisse und Blätter um? Kann wer evtl. mal ein beispiel veröffentlichen, wie man z.b. die x/y Positionen eines Hindernisses herausfindet?

    Warum gibt es keine gute Dokumentation?


    Es wäre viel einfacher gewesen, wenn man statt Listen immer Arrays bekommen würde.


    Kann evtl. jemand mal einen kleinen Codeausschnitt posten, wie man die eigene x/y postion erhält?


    Edit:

    Wiso bekomme ich mit

    zug.ausgabe(zustand.listeKaefer().get(0)); 

    Im Debugfenster den Text:

    Spiel$Zustand$Kaefer@1ace3f9
    Spiel$Zustand$Kaefer@e784c0
    Spiel$Zustand$Kaefer@d683f3
    Spiel$Zustand$Kaefer@1862525
    Spiel$Zustand$Kaefer@17480c9
    Spiel$Zustand$Kaefer@163f0da
    Spiel$Zustand$Kaefer@724357
    Spiel$Zustand$Kaefer@119f33d
    Spiel$Zustand$Kaefer@a32803
    Spiel$Zustand$Kaefer@16a5994



    Dieser Beitrag wurde am 27. Januar 2013 11:37:24 CET von Teilnehmer Nr 12345 bearbeitet
    • 6 Beiträge
    26. Januar 2013 13:54:27 CET
    Ist es möglich eine KI, die man bereits auf den Server hochgeladen und freigegeben hat, wieder zu löschen und wenn ja wie?
    • 22 Beiträge
    29. Januar 2013 21:45:44 CET
    Mir ist keine Möglichkeit bekannt. Nicht einmal das Löschen des Accounts lässt die KIs verschwinden...
    • 8 Beiträge
    30. Januar 2013 19:16:32 CET

    @12345: auf die Liste greifst du mit meineListe.get(Index) zu. Laut der Doku unterstützt ein Hindernis die Funktionen x() und x(int x) die eine zum setzen die andere zu auslesen (das gleiche gibts auch für y)

    Frage: wäre es möglich dem Kaefer Object einfach eine Clone-Methode zu verpassen? (erzeuge Käfer und dann alle daten übergeben sieht iwi blöd aus :| )


    Dieser Beitrag wurde am 30. Januar 2013 19:18:46 CET von Fabian N bearbeitet
    • 22 Beiträge
    31. Januar 2013 13:49:11 CET

    Wieso musst du denn Käfer den Clonen? Reicht es nicht einfach die Objektreferenz zwischenzzuspeichern?

     

    @12345: Die Ausgabe erhälst du meines Erachtens nach, weil du dir die Objektreferenzen ausgeben lässt.

     

    Zugriff auf die Positionen erhälst du zum Beispiel so:

    Spiel.Zustand.Kaefer kaefer = zustand.listeKaefer().get(0);

    int x = kaefer.x();

    int y = kaefer.y();


    Dieser Beitrag wurde am 31. Januar 2013 15:45:47 CET von Simon - bearbeitet
    • 2 Beiträge
    31. Januar 2013 21:36:50 CET

    Aber es ist auch erlaubt Attribute oder Variablen in der Klasse AI zu platzieren, oder darf man sich nur auf seine Zug-Methode beschränken?

    Und bei jedem neuen Zug wird die Zug-Methode neu gestartet, richtig?


    Dieser Beitrag wurde am 1. Februar 2013 11:49:24 CET von Steffen G bearbeitet
    • 22 Beiträge
    1. Februar 2013 14:01:21 CET
    1.) Ich weiß nicht, ob es erlaubt ist. Ich habe es einfach getan : )

    2.) Ja
    • 8 Beiträge
    1. Februar 2013 15:38:47 CET
    1.) wenn es nicht erlaubt wäre, wieso hat man uns dann eine ganze klasse zur Verfügung gestellt und nicht einfach nur eine Zug-Methode deren Quelltext wir dann hätten editieren können?
    (wäre garantiert gegangen)
    • 13 Beiträge
    11. Februar 2013 13:53:36 CET

    Hallo nochmal,

     

    Ich benutze Python und speichere Daten, die ich mir zwischen den Zügen merke will, daher in globalen Variablen (Kennt jemand eine bessere Lösung?).

     

    Nun neigen meine Programme aber (in ESU) dazu, beim Anfang des Rückspiels abzustürzen, weil diese Daten anscheinend zwischen den Spielen erhalten bleiben.

     

    Was passiert eigentlich zwischen den beiden Spielen?

     

    LG Felix

    • 2 Beiträge
    12. Februar 2013 12:15:26 CET
    Hallo Felix,
    ich hab mir in python eine neue Klasse geschrieben, die sich die Daten dazwischen merkt.
    Kommt letzendlich wohl auf das gleiche raus.
    Die Daten bleiben bei mir dann nicht (zumindest nicht so, dass sie stören) erhalten.

    2 Fragen:
    a) Ist die Größe des Spielfeldes immer gleich, bzw. kann man diese abfragen
    b) Ich kann momentan keine Herausforderungen starten, wohl aber empfangen. Geht es anderen genauso?
    • 22 Beiträge
    13. Februar 2013 20:24:07 CET

    Zu a:

    Soweit ich das verstanden habe, ist die Spielfeldgröße in der Ausschreibung mit 20x20 Feldern angegeben. Insofern darf bei der Bewertung der abgegebenen Lösungen keine andere Spielfeldgröße zugrunde gelegt werden.


    Dieser Beitrag wurde am 13. Februar 2013 20:25:12 CET von Simon - bearbeitet
    • 2 Beiträge
    15. Februar 2013 16:07:38 CET
    Vielen Dank!
    In den Aufgaben selbst zu schauen, wär natürlich ne gute Idee gewesen. Naja, das nächste mal wieder :)
    • 38 Beiträge
    16. Februar 2013 11:19:22 CET
    Der Simulator stürzt bei mir zurzeit immer mit folgende Meldung ab:
    [SIMULATOR] Runden-Timeout nach 10000 verbrauchten Rechenpunkten. Noch 9873 Rechenpunkte übrig.
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 20
    at AI.zug(AI.java:141)
    at AIManager.main(AIManager.java:15)

    Ich habe eine KI in Java geschrieben.

    Kann es evtl daran liegen, dass ich eine public variable benutze, die ich über der Zug Methode definiere, damit mir der Wert über mehrere Züge erhalten bleibt?
  • 16. Februar 2013 14:31:58 CET
    Die erste Zeile weißt dich darauf hin, dass deine Programm länger als 10 Sekunden (10000 Millisekunden) für einen Zug gebraucht hat. Deswegen wird dieser eine Zug abgebrochen.
    In den darauf folgenden Zeilen kommt der richtige Fehler: In deinem Programm Zeile 141 ist ein ArrayIndexOutOfBoundsException entstanden. Du hast anscheinend versucht ein Array an der Stelle 20 aufzurufen, obwohl es nicht so groß ist.

    Bitte korrigiere mich jemand, wenn ich etwas falsches gesagt habe :)
  • 16. Februar 2013 14:34:55 CET
    Ich habe selber noch eine Frage, und zwar habe ich gerade lokal eine Simulation gestartet und mein Programm wurde mit folgendem Log-Eintrag beendet:

    javax.xml.bind.UnmarshalException
    - with linked exception:
    [org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.]
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.createUnmarshalException(AbstractUnmarshallerImpl.java:335)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.createUnmarshalException(UnmarshallerImpl.java:512)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:209)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:175)
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:157)
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:125)
    at de.tu_darmstadt.di.bwinf.core.metamodel.helper.MetaHelper.unmarshal(MetaHelper.java:85)
    at Spiel$Zustand.lesen(Spiel.java:71)
    at AIManager.main(AIManager.java:13)
    Caused by: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:198)
    at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:177)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:441)
    at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:368)
    at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1388)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:998)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:607)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:116)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:489)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:835)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1210)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:568)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:203)
    ... 6 more


    xml:
    "4"/>

    Dies scheint kein normaler Fehler zu sein, den das Programm wirft. Ist das Programm abgestürzt oder? Oder war es doch meine KI, die diesen Fehler verursacht hat?
    • 22 Beiträge
    16. Februar 2013 18:35:54 CET

    Ich zitiere an dieser Stelle einfach mal das Wiki :

     Dieser Fehler tritt auf, wenn print oder System.out.print aufgerufen wird. Ausgaben über Standard out sind zu vermeiden. Dieser Standard out Kanal ist für die Kommunikation zwischen Simulator und KI reserviert. Um Debug Ausgaben zu machen, verwenden Sie: zug.ausgabe("ausgabe") oder den Standard error Kanal.


    Dieser Beitrag wurde am 16. Februar 2013 18:39:27 CET von Simon - bearbeitet
  • 16. Februar 2013 18:51:43 CET
    Vielen Dank für die Antwort, jedoch habe ich kein Mal System.out.println benutzt ...
    • 4 Beiträge
    21. Februar 2013 16:53:50 CET
    Kann es sein, dass der Debugger Ausgaben verschluckt, die in einem Zug gemacht werden, bei dem es ein Runden-Timeout gibt? Das stellt meiner Ansicht nach ein Problem dar, da es dadurch nicht möglich ist gerade die kritischen Runden zu debuggen. Woher soll ich wissen, ob meine KI einen Fehler hat, oder ob sie einfach nur zu ineffizient ist, wenn ich keine Ausgaben machen kann?
    • 2 Beiträge
    7. März 2013 21:32:24 CET
    Ich hätte auch mal eine Frage: Wäre es möglich Tests lokal automatisch zu starten, z.B. über die Konsole? Plane nämlich ein paar Massentests, und würde vorher gerne wissen ob dies überhaupt gehen würde. Ich müsste als Rückgabe nur bekommen welche der KIs gewann.
    • 2 Beiträge
    8. März 2013 20:30:10 CET
    Darf man neben der voreingestellten Methode zug noch weitere Methoden schreiben und diese von der Methode zug aus aufrufen lassen oder muss das ganze Programm allein in der Methode zug stattfinden?