BedMaker

Fragment of a discussion from User talk:Tkiesel
Jump to navigation Jump to search

I'm not sure, I always run one challenge at a time with the max threads I'm willing to use ("-t 6" for 6 threads). That error does sound like they might be stepping on each other's toes.

Voidious21:59, 18 July 2012

Oddly enough, using the -t tag for more threads causes problems for me...

(Running using server) Result for robot named "tjk.deBroglie rev0115 (2)". Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1 at java.lang.String.substring(String.java:1949) at roboResearch.engine.Result.<init>(Result.java:31) at roboResearch.engine.BattleResults.load(BattleResults.java:42) at roboResearch.engine.BattleResults.load(BattleResults.java:24) at roboResearch.engine.BattleRunner.run(BattleRunner.java:107) at roboResearch.CLI.run(CLI.java:94) at roboResearch.CLI.<init>(CLI.java:69) at roboResearch.CLI.main(CLI.java:38)

Tkiesel22:28, 18 July 2012
 

Hmm, weird. Well, I don't know if this is the issue, but the instructions say when you use -t, you should also start the SQL DB separately and pass -S. The command to start the DB is:

java -Xmx1024M -cp hsqldb.jar org.hsqldb.Server -database.0 file:roboresearch -dbname.0 roboresearch

So I do that, then run with "-S -t 6" and it works. That "tjk.deBroglie rev0115 (2)" almost seems like you have two of that bot/version in a battle against itself, though - is that the case? Not sure if I've tried that or if it would cause issues.

Voidious23:39, 18 July 2012

Yeah, I've got the -S flag in there and have the server running in a separate terminal. Here's the whole thing:

tom@gecko ~/RoboResearch $ java -Xmx512M -cp bin:hsqldb.jar roboResearch.CLI -S -t 3 -C challenges/debroglie1.rrc -c "tjk.deBroglie rev0116" -r 35 -s 14

Challenge Specifications:

Challenge: deBroglierev108 150-57-95

Bot: tjk.deBroglie rev0116

Alias: null

Rounds: 35

Threads: 3

Type: null

Seasons: 14


(Running using server)

Result for robot named "tjk.deBroglie rev0116 (2)".

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1

at java.lang.String.substring(String.java:1949)

at roboResearch.engine.Result.<init>(Result.java:31)

at roboResearch.engine.BattleResults.load(BattleResults.java:42)

at roboResearch.engine.BattleResults.load(BattleResults.java:24)

at roboResearch.engine.BattleRunner.run(BattleRunner.java:107)

at roboResearch.CLI.run(CLI.java:94)

at roboResearch.CLI.<init>(CLI.java:69)

at roboResearch.CLI.main(CLI.java:38)

Strange. I've been using the prepackaged one linked at the wiki here. Maybe I'll get the latest one via SVN and work around the build instructions that refer to nonexistent files.

Tkiesel00:11, 19 July 2012
 

And single threaded works, or the GUI? That's so odd. I know the code base a little and it seems like that path should execute the same across all of them. Or did you figure it out?

Voidious16:52, 19 July 2012
 

Single threaded works great.. same command line with the "-t 3" omitted.

Maybe having to do with the fact that I'm using OpenJDK? Do you use the Sun/Oracle JRE/JDK ?

Tkiesel21:10, 19 July 2012
 

I'm also using OpenJDK, on Ubuntu 12.04. (And previously the Apple JVM on a Mac.) The line that's failing is trying to parse the bot name from a line that, I think, would look like "1: tkiesel.deBroglie rev0116". If you want to hack on the RoboResearch source, you may be able to get a better picture. I would wonder if it's something about the Robocode version, except that it's working in those other configurations...

Voidious21:36, 19 July 2012

Yeah.. OpenJDK on Linux Mint 13 here, which is based on Ubuntu 12.04. Much the same running environment.

Tkiesel00:11, 20 July 2012
 

It looks like you have an extra space in the bot name, the " (2)". Could that be the issue?

Skilgannon22:49, 19 July 2012

Feel free to inspect the actual command I entered; I pasted it up above.

java -Xmx512M -cp bin:hsqldb.jar roboResearch.CLI -S -t 3 -C challenges/debroglie1.rrc -c "tjk.deBroglie rev0116" -r 35 -s 14

has problems while

java -Xmx512M -cp bin:hsqldb.jar roboResearch.CLI -S -C challenges/debroglie1.rrc -c "tjk.deBroglie rev0116" -r 35 -s 14

does not.

What's odd is that the lines that declare what config will be running (before the actual battles start) seem to indicate that the bot name was read correctly. Again, as I pasted above:

Challenge: deBroglierev108 150-57-95

Bot: tjk.deBroglie rev0116

Alias: null

Rounds: 35

Threads: 3

Type: null

Seasons: 14

But then, a moment later, RoboResearch has " (2)" appended to the end of the bot name. Very odd.

Tkiesel00:08, 20 July 2012
 

I think the (2) is appended to the bot name because it was a battle with two of the same bot. But I don't understand how RoboResearch could have gotten confused enough for that to happen. I think Skilgannon is right that it's confusing the parsing going on in BattleResults.load, though I can't exactly follow how (because I'm not too familiar with the format of the output it parses).

I'd really like to modify RoboResearch to use the Robocode control API, or write a new batch battle runner that does. RoboResearch runs a battle in a fresh Robocode instance each time from a .battle file and parses the results from the output. I recently tinkered with this - starting a new JVM each time is a lot more painful when you're running 1-round battles, like I was for my perceptual gun =). And I realized it requires a separate Robocode install for each thread, or you hit concurrency exceptions reading in JARs. RoboResearch makes use of a debug property that starts Robocode with a different "working directory" so each thread can load bots from a different directory, but there's really no way to do that for separate threads using the Robocode control API. (Not that it's a big deal to have a bunch of full Robocode installs, but it would make the change to RoboResearch quite a bit more complicated.) Also, the SQL db it uses slows down a lot once you have a lot of results in there, forcing me to manually clear it from time to time. I'm sure there's a better solution.

Voidious04:43, 20 July 2012
 

Sounds like a fun project! I'm no pro developer, just a physics guy who got into programming in college, but I'd love to contribute however I could to a project like that.

Tkiesel04:51, 20 July 2012