I’m writing an AI-testing Framework for a competition. Participants submit a Bot class which matches a given Interface. Then all the bots play a turn-based game. On every turn, I want to do the following:
For every bot B:
start a thread that runs at most N cycles and does B.getNextMove()
wait for all threads to complete
Make all moves (from each bot).
My difficulty comes in saying “at most N cycles”. I can limit all the bots by time (say half a second per turn) but this means that some can get more processor cycles than others and doesn’t permit a strict “your bot should be able to make its decision re: a turn in X time” requirement in the competition.
As stated, this is in Java. Any ideas? I’ve been looking at concurrency and locking but this doesn’t feel like the right direction. Also, it’s possible to not run the bots in Parralel and then use time for the restriction (given that the computer isn’t running anything else at the time), but this would be undesirable as it would significantly slow down the speed at which we could have results from the games.
I’d make an interface with the bot to have them do 1 iteration of their algorithm,and do a simple count.
If you need hard time/cpu limits there arn’t that many(easy) ways to manage that in java.
You can’t measure cpu cycles with java, but you can measure CPU time – which is a vast improvement over using just wall clock time.
To get the cpu time of the current thread you’d use (from the standard java.lang.management package)