BedMaker
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.
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)
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.
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.
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?
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 ?
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...
You do not have permission to edit this page, for the following reasons:
You can view and copy the source of this page.
Return to Thread:User talk:Tkiesel/BedMaker/reply (22).
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.
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.
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.