Not logged in. · Lost password · Register

Page:  previous  1  2  3 
poll
Poll: Wie sieht euer derzeitiger Code aus?
(One vote ·   5%) Code? Neee, RandomPlayer wirds richten!
(0 votes ·   0%) Wir haben bisher nur ein Konzept im Kopf...
(14 votes · 74%) Wir verzweifeln an Java + Scala
(One vote ·   5%) Erste Code-Schnipsel in Java sind bereit und getestet
(3 votes · 16%) Wir haben/erwarten keine Probleme, weil wir sowieso Scala benutzen werden
This poll has no time limit · 19 votes
Vvalter
Member since Dec 2012
119 posts
In reply to post ID 149245
+1 Jazzpirate
Wir sind jetzt soweit, dass Alpha-Beta pruning läuft und wir uns nur noch um das 5 Sekunden Limit kümmern müssen.
Unsere bisherige Idee wäre es einen eigenen Time zu starten der dann nach 4.5 Sekunden oder so uns abschießt damit wir dann ein Zwischenergebnis ausgeben.
Das kommt mir aber etwas verschwenderisch vor (man muss die Zeit dann so wählen dass möglichst groß aber klein genug um nicht ein timeout zu bekommen).
Stattdessen fände ich es ein schöneres Interface, wenn man einfach nach 5 Sekunden abgeschossen wird und dann das Game ein vorgegebenes public Attribut aus dem Agent ausliest, in dem man immer die Zwischenergebnisse speichert. Damit spart man sich den zweiten Timer und läuft nicht Gefahr zu wenig oder zu viel Zeit zu verbrauchen.
Das sollte sogar möglich sein ohne das Interface zu ändern, wenn man es nur als fallback implementiert für den Fall dass die move länger als 5 Sekunden braucht und sonst immer noch der Rückgabewert verwendet wird.
Jazzpirate
Member since Oct 2016
770 posts
klingt vernünftig; kann man machen ;)
Vvalter
Member since Dec 2012
119 posts
Ich glaube ich habe Await.result falsch verstanden. Der aktuelle Code wartet jetzt ja 5 Sekunden und frägt dann timeoutMove ab, falls die Funktion nicht terminiert. Aber die Funktion läuft dann im Hintergrund trotzdem weiter. Dass heißt, dass man nun doch auch noch einen Timer einbauen muss oder es werden im Hintergrund immer mehr Threads gestartet.
Könntest du das so ändern, dass die Funktion auch wirklich abgebrochen wird nach 5 Sekunden?
Jazzpirate
Member since Oct 2016
770 posts
Krieg ich bestimmt irgendwie hin ;-) Wär ja unsinnig wenn sonst überall zombiethreads rumeiern...
Jazzpirate
Member since Oct 2016
770 posts
In reply to post #33
Done
Tinram
Member since Nov 2013
14 posts
In reply to post ID 149245
Ich hab jetzt IntelliJ installiert, das Project mit der .sbt aufgebaut, -source 8 verwendet.
Die Test.scala läuft sauber durch.

Wie kann ich gegen die KI spielen, als menschlicher Spieler?
Jazzpirate
Member since Oct 2016
770 posts
Wie kann ich gegen die KI spielen, als menschlicher Spieler?
es gibt eine Agentenklasse HumanPlayer(name : String), die von der Konsole einliest. Bedenke aber, dass du auch als menschlicher Spieler nur 5sekunden zeit hast :D

wenn dein Agent also MyAgent heißt kannst du ein Spiel starten mit
(new Game(MyAgent, new HumanPlayer("Bla"))(#houses,#seeds)).play(false)
Tinram
Member since Nov 2013
14 posts
Quote by Jazzpirate:
(new Game(MyAgent, new HumanPlayer("Bla"))(#houses,#seeds)).play(false)
.play(true) ;)
Tinram
Member since Nov 2013
14 posts
Kann man den Timeout auch ausstellen? Es passieren bei mir sehr seltsame "Illegal Moves", die ich nur auf den Timeout zurückführen kann, wenn ich spiele...
nenas
Avatar
Member since May 2012
229 posts
Quote by Tinram:
Kann man den Timeout auch ausstellen? Es passieren bei mir sehr seltsame "Illegal Moves", die ich nur auf den Timeout zurückführen kann, wenn ich spiele...

  1. val move = try {
  2.       Await.result(Future(pl.move)(exec), 5 seconds)
  3.     } catch {
  4.       case e : java.util.concurrent.TimeoutException =>
  5.         ret = pl.pl.name + " timed out!"
  6.         exec.lastThread.getOrElse(throw new RuntimeException("Error killing thread: No thread started")).stop()
  7.         println("Killed thread!")
  8.         pl.pl.timeoutMove
  9.     }

Du kannst die Dauer, die gewartet wird, anpassen. Dann hat dein Gegner aber auch mehr Zeit. Ansonsten könntest du an der obigen Stelle überprüfen, ob player ein HumanPlayer ist, und entsprechend länger warten.
Sometimes, I guess there just aren't enough rocks.
Shadow992
Member since Jan 2014
284 posts
In reply to post #39
Quote by Tinram:
Kann man den Timeout auch ausstellen? Es passieren bei mir sehr seltsame "Illegal Moves", die ich nur auf den Timeout zurückführen kann, wenn ich spiele...

Ich weiß auch warum, das hab ich in meiner Übung auch angespeochen, bloß verpennt das weiter zu leiten an Dennis... Wird umgehend gemacht.
Jazzpirate
Member since Oct 2016
770 posts
In reply to post #39
Kann man den Timeout auch ausstellen?
Er ist jetzt bei HumanPlayer automatisch ausgeschaltet
Close Smaller – Larger + Reply to this post:
Verification code: VeriCode Please enter the word from the image into the text field below. (Type the letters only, lower case is okay.)
Smileys: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Special characters:
Page:  previous  1  2  3 
Go to forum
Datenschutz | Kontakt
Powered by the Unclassified NewsBoard software, 20150713-dev, © 2003-2011 by Yves Goergen