http://robowiki.net/w/api.php?action=feedcontributions&user=Nfwu&feedformat=atomRobowiki - User contributions [en]2024-03-29T09:47:51ZUser contributionsMediaWiki 1.34.1http://robowiki.net/w/index.php?title=Category_talk:Wikipedia_Templates&diff=6529Category talk:Wikipedia Templates2009-05-13T10:05:08Z<p>Nfwu: oops</p>
<hr />
<div>Hey all, I'm very curious. What is {{[[Template:fullurl|fullurl]]}} use for? The parser hook <nowiki>{{fullurl:}}</nowiki> is available by default. &raquo; <span style="font-size:0.9em;color:darkgreen;">[[User:Nat|Nat]] | [[User_talk:Nat|Talk]]</span> &raquo; 12:42, 12 May 2009 (UTC)<br />
:Didn't notice that that hook was avaliable when I created it... oops ^^;; -- [[User:Nfwu|Nfw]][[User Talk:Nfwu|<font color="#FF33BB">u</font>]] 10:05, 13 May 2009 (UTC)</div>Nfwuhttp://robowiki.net/w/index.php?title=User_talk:Nfwu&diff=6528User talk:Nfwu2009-05-13T10:02:50Z<p>Nfwu: </p>
<hr />
<div>Hey there Nfwu! You're an animal at migrating pages to the new wiki! Go Nfwu go! --[[User:Simonton|Simonton]] 02:42, 18 September 2008 (UTC)<br />
<br />
:Ha! I'm migrating by the guidance of [[Special:Wantedpages]]. -- [[User:Nfwu|<font color="#3B9C9C">Ketsu</font>]][[User Talk:Nfwu|<font color="#F87217">Nfwu</font>]] 08:22, 18 September 2008 (UTC)</div>Nfwuhttp://robowiki.net/w/index.php?title=Talk:RoboResearch/Development&diff=3419Talk:RoboResearch/Development2008-11-16T05:59:25Z<p>Nfwu: /* Networking Proxies */ Suggestion</p>
<hr />
<div>== Showing Results ==<br />
<br />
I have already talked with some robocoders about how they would like to see results in the RoboResearch GUI. So far the best design I've come up with (merging ideas from [[Synapse]], [[Rednaxela]], [[Voidious]] and [[Chase-san]]) would open a separate window for each challenge+challenger. It would have a table that shows live-feed results like the summary on wiki pages. That window could be expanded to show a second table underneath the first, with the scores for each season. The top table could also be expanded to include a row for each version of the challenger in the database. Whichever version is selected in the top table is the one whose seasons would be displayed in the lower table. Can I get any feedback or new ideas? --[[User:Simonton|Simonton]] 05:35, 21 September 2008 (UTC)<br />
<br />
Well, apparently everyone either liked the idea or doesn't care enough to offer alternative input. The above idea has been implemented with a slight difference: the seasons are displayed in a separate window, at a button push. This means they do not change with as you select different version - instead you can open the seasons for each version in its own window. --[[User:Simonton|Simonton]] 15:29, 1 October 2008 (UTC)<br />
<br />
I would like to add some statistics to the results windows. Firstly I would like to highlight the top score among versions in the results table (or make it italic or underlined, or whatever). But to make that more useful I'd like to calculate the standard deviation of each score, then highlight any that are "close enough" to be tied for the top score. Then I'd like to do the same thing but only within those scores you select. I do it for my own benefit, but I hope candy like this makes you want to update RoboResearch and reap the benefits of my labor :). At some point I'll make a zip file and put it on sourceforge for everyone, so you don't have to deal with SVN. --[[User:Simonton|Simonton]] 15:38, 1 October 2008 (UTC)<br />
<br />
I'd be in the former group, I didn't see anything I didn't like =) Thanks for all this work you're putting into it. If I update will I lose all the season's I've already run? I'm not that familiar with the database system you're using... -- [[User:Skilgannon|Skilgannon]] 16:47, 1 October 2008 (UTC)<br />
<br />
You will not loose any data by updating. However I have lost data when closing down my database process before, so I recommend periodic backups of the database directory (and due to the way it works, I recommend not deleting a backup until you're sure a more recent one actually has all your data). If you had any scripts that you modified from those in SVN, they may get updated or deleted (run.bat and run.cfg come to mind). Note that SVN is not as up-to-date as the features listed on the wiki; I'm currently without internet at home, so I only get to commit on the weekends. While I'm posting again let me ask, does anyone have any pointers about how to calculate which scores are "close enough to be tied". I'm sure it's not hard, but I might as well ask for pointers instead of doing the statistics research myself :). --[[User:Simonton|Simonton]] 17:26, 1 October 2008 (UTC)<br />
<br />
* The scores are "close enough to be tied" if result1 +- margin_of_error1 and result2 +- margin_of_error2 overlap. The more they overlap the closer they are to tied, tied% = overlap/(2*min(margin_of_error1, margin_of_error2))*100 -- [[User:Skilgannon|Skilgannon]] 20:06, 1 October 2008 (UTC)<br />
* Makes sense, but how does one calculate "margin_of_error"? Some percentage of a standard deviation? If so, what precentage? And what about long-learning challenges where there really isn't enough data to get a good stardard deviation (e.g. at one season s.d. is zero)? --[[User:Simonton|Simonton]] 20:34, 1 October 2008 (UTC)<br />
* Once there are enough seasons run, I believe a number proportional to the standard deviations would make sense. If we assume the scores are roughly in a [http://en.wikipedia.org/wiki/Normal_distribution normal distribution], then once there is enough data for accurate calculation of standard deviation it's not hard to state criteria like "how wide is the region in which 90% of scores are expected to fall", in which case it would be 1.64485 standard deviations (see the table of confidence intervals [http://en.wikipedia.org/wiki/Normal_distribution#Standard_deviation_and_confidence_intervals here]). One very important factor however, is that as the number of seasons increases, the "margin of error" of the AVERAGE should decrease proportionally, therefore I believe the most statistically sound thing to use for a "margin_of_error" would be, something like "1.64485 standard deviations, divided by the number of seasons", or if we want a more stringent confidence interval of 95% or something, then 1.95996 instead of 1.64485, but either way, something of that form would be most statistically sound I believe. --[[User:Rednaxela|Rednaxela]] 22:27, 1 October 2008 (UTC)<br />
* '''Update:''' Actually I'll revise that. If [http://en.wikipedia.org/wiki/Confidence_interval#Confidence_intervals_in_measurement this] is correct, we should divide by the square root of the number of seasons, rather than the number of seasons. That will give error in the average score to whatever confidence interval we specify. --[[User:Rednaxela|Rednaxela]] 23:49, 1 October 2008 (UTC)<br />
* I've done my research on confidence intervals. The simplest explanation I found is [http://www.stat.psu.edu/~resources/ClassNotes/ljs_19/index.htm here]. Basically, we can assume the actual mean (given infinite battles) will be within <tt>t * stdDev / sqrt(numBattles)</tt>, where <tt>t</tt> is taken from a [http://www.union.edu/PUBLIC/BIODEPT/t.html t table] (<tt>numBattles - 1</tt> in the rows, <tt>1 - confidenceLevel</tt> in the columns). But I'm having trouble deciding how to use this information to answer the question, "Am I 95% confident that version A scores better than version B?" I'm not convinced the answer is the same as, "Are their confidence intervals disjoint?" Does anyone have (or can anyone find) any insight? --[[User:Simonton|Simonton]] 16:45, 3 October 2008 (UTC)<br />
** Ahh yes, looks about the same as what I figured out except that the "t" values offer some further refinement. Well, if the 95% confidence intervals don't overlap, then because for each there is a 95% chance of the true value lying within the interval, the chance of the score of one being better than the other as such, would be at very least 95.0625% (I calculated this based on 95% chance of a given score being in the interval, 2.5% chance of being higher, and 2.5% chance of being lower, and summing chances of all possibilities that guarantee the score to be really be better (ones where the higher mean is in it's interval or higher, and the lower one is in it's interval or lower, hence <code>0.95*(0.95+0.025)+0.25(0.95*0.025)=0.950625</code>, and possibilities that were ambiguous I didn't include to be safe). One could calculate a more accurate probability of one score being better than another when 95% confidence intervals don't overalap, it would depend on how far apart the intervals actually are, however I can guarantee it will be at least 95.0625% in all cases where the intervals have 95% confidence. That make some sense? --[[User:Rednaxela|Rednaxela]] 17:30, 3 October 2008 (UTC)<br />
<br />
Nice work on this lately! I just got Subclipse working again here and downloaded the latest version, however am having one problem: Trying to start the gui causes the following error:<br />
<code><pre>Exception in thread "main" java.sql.SQLException: socket creation error<br />
at org.hsqldb.jdbc.Util.sqlException(Unknown Source)<br />
at org.hsqldb.jdbc.jdbcConnection.<init>(Unknown Source)<br />
at org.hsqldb.jdbcDriver.getConnection(Unknown Source)<br />
at org.hsqldb.jdbcDriver.connect(Unknown Source)<br />
at java.sql.DriverManager.getConnection(DriverManager.java:620)<br />
at java.sql.DriverManager.getConnection(DriverManager.java:200)<br />
at roboResearch.engine.Database.<init>(Database.java:65)<br />
at roboResearch.GUI.<init>(GUI.java:44)<br />
at roboResearch.GUI.main(GUI.java:25)</pre></code>--[[User:Rednaxela|Rednaxela]] 18:22, 1 October 2008 (UTC)<br />
<br />
Now how is it you compliment the latest work when you can't even use it? ;) You need to run the database in a separate process (until I update SVN this weekend). I ''think'' that's your problem. Instructions for that are in ... umm ... I think it gives you the command to run if you try executing TUI with no command line args ... or invalid args ... or something like that. --[[User:Simonton|Simonton]] 18:33, 1 October 2008 (UTC)<br />
<br />
Ah nice, it work now. By the way, one issue I just noticed, is it doesn't like if very much when you browser for a bot outside of that robocode_bots directory ;) --[[User:Rednaxela|Rednaxela]] 18:41, 1 October 2008 (UTC)<br />
<br />
== Networking Proxies ==<br />
<br />
I know how to use raw TCP/IP streams to write the proxies required to implement a networked RoboResearch, but I'm not sure that's the "best" solution. I know how to use [http://www.springframework.org/ Spring] to make remote method calls, but it does not allow callbacks for things like listeners. Does anybody know of some other technology that would be appropriate to support the kind of remote communication necessary? I think I've heard [http://java.sun.com/javase/technologies/core/basic/rmi/index.jsp RMI] can do callbacks, so that might be one possibility. [http://java.sun.com/products/jms/ JMS] might be another. I'm just not familiar enough with any of these to know their strengths and limitations. Something that supports file transfer for uploading/downloading bots would be ideal. Any thoughts/recommendations/input? --[[User:Simonton|Simonton]] 16:38, 25 September 2008 (UTC)<br />
<br />
Just an idea, perhaps for networking roboresearch you can have the server issue work units based on the computer speed (maybe user has to enter this? or possibly use some c code to detect cpu info), for instance slower computers get challenges that complete faster (i.e. those without very slow bots) and etc... --[[Starrynte]] 21:57, 15 November 2008 (UTC)<br />
<br />
:Assuming that every server has a work queue, assign new work units to the server with the shortest queue (attempt to give servers queues of similar lengths). The fastest server would tend to have the shortest queue most often so it will be given a greater amount of work. -- [[User:Nfwu|<font color="#3333BB">Nf</font>]][[User Talk:Nfwu|<font color="#FF33BB">wu</font>]] 05:59, 16 November 2008 (UTC)<br />
<br />
== Statistics ==<br />
<br />
I just had an idea for an 'automatic' mode for choosing battles, which is potentially both quicker and more accurate than just running lots of seasons. It involves running the bot that has the highest margin of error the most, and running the bots that have lower margins of errors for less seasons. Of course, several seasons will have to be run initially to determine which bots have higher margins of error. From here, after every battle the future opponents are sorted in order of margin of error (descending) and the bot at the top is run next. Thus, instead of specifying how many seasons should be run, one could specify the required margin of error. --[[User:Skilgannon|Skilgannon]] 11:58, 2 October 2008 (UTC)<br />
<br />
Sounds like a good way to do things, and would give a more accurate overall challenge score quicker, except one possible consideration is that the desired margin of error for every enemy isn't unnecessarily the same. For example, for a strong surfer, HOF scored tend to be in the 99.90+ range. For it, the necessary margin of error to tell the difference between versions, would be considerably smaller than the necessary margin of error for other bots. One thought I had, is that perhaps to set "goal" margins for each bot, should be done by comparing previous versions, looking at what the typical score difference between recent versions was. Or perhaps it would be better to only allow manual configuration of the margin of error for each bot? --[[User:Rednaxela|Rednaxela]] 13:39, 2 October 2008 (UTC)<br />
<br />
I think this is an excellent idea. As for specifying a different margin of error for each reference bot, I don't ever see myself using such a feature. For example against HoF I don't really care if I can score 99.99 instead of 99.95 - it's all the same to me. --[[User:Simonton|Simonton]] 19:17, 2 October 2008 (UTC)</div>Nfwuhttp://robowiki.net/w/index.php?title=N/Version_History&diff=3407N/Version History2008-11-04T02:29:52Z<p>Nfwu: N\Version History moved to N/Version History: Wrong slash: this is the web, not windows!</p>
<hr />
<div>N's Version History</div>Nfwuhttp://robowiki.net/w/index.php?title=N%5CVersion_History&diff=3408N\Version History2008-11-04T02:29:52Z<p>Nfwu: N\Version History moved to N/Version History: Wrong slash: this is the web, not windows!</p>
<hr />
<div>#REDIRECT [[N/Version History]]</div>Nfwuhttp://robowiki.net/w/index.php?title=Talk:GFTargetingBot&diff=3406Talk:GFTargetingBot2008-11-04T02:28:19Z<p>Nfwu: Migration</p>
<hr />
<div>I'm new to java, and my lack of understanding Java has me hung up on this key peice of code:<br />
buffer = statBuffers[distanceIndex][velocityIndex][lastVelocityIndex];<br />
from my understanding; buffer is an array of 25 (ints), each bin being a counter of times visted.<br />
And statBuffers is a 4dimesional array of size: 5(int), 5(int), 5(int),and 25(int) :<br />
private static int[][][][] statBuffers = new int[DISTANCE_INDEXES][VELOCITY_INDEXES][VELOCITY_INDEXES][BINS];<br />
so back to the problem code :<br />
buffer = statBuffers[distanceIndex][velocityIndex][lastVelocityIndex];<br />
<br />
so the above "indexes" (0-4) should retrieve the values in thoses locations in the statBuffers arrays..<br />
Am I wrong so Far ?<br />
It seems to me were assigning apples to oranges here? How does it work ? ..<br />
- Justin<br />
<br />
<code>int single[] = new int[ 5 ];</code><br />
<br><i>single</i> is "an array of integers".<br />
<br><code>int double[][] = new int[ 5 ][ 5 ];</code><br />
<br><i>double</i> is "an array of 5 arrays of 5 integers".<br />
<br />
This means that each element in double[ n ] is itself "an array of 5 integers".<br />
<br />
<br>Let's change <i>int</i> to <i>apple</i>.<br />
<br><code>apple double[][] = new apple[ 5 ][ 5 ];</code><br />
<br><i>double</i> is now "an array of 5 arrays of 5 apples."<br />
<br />
This means that every double[ n ] is a container, and each container holds 5 apples. The container is not an apple. It is 'a container of one or more apples'. You can visualize it as a paper bag if you like.<br />
<br />
<br><code>apple triple[][][] = new apple[ 5 ][ 5 ][ 5 ];</code><br />
<br><i>triple</i> is "an array of 5 arrays of 5 arrays of apples" or perhaps "5 containers of 'containers of apples'".<br />
<br />
Going back to your original question, here is the situation: <i>buffer</I> is 'an array of integers'. (I deliberately did not state the size, because <i>buffer</i> can be assigned an array of any size of the same dimensions.) <i>statBuffers</i> is 'an array of arrays of arrays of arrays of integers'. Each element in statBuffers[][][] is itself an 'array of integers', and that is why the assignment works.<br />
<br />
I hope that helped. If not, best thing is to just practice with arrays it until it sinks in. -- [[User:Pedersen|Martin]]<br />
<br />
<i>Addendum:</i> Above you mentioned "statBuffers is a 4dimesional array of size: 5(int), 5(int), 5(int),and 25(int)", and therein lies the misconception. The "5(int)" sections are not arrays of integers. They are "arrays of arrays". The integers only exist in the final array. -- [[User:Pedersen|Martin]]<br />
<br />
<br />
<br />
yes I wasn't thinking dimesionally :), in the case of GFTargengBot code: buffer ends up being the 4 dimension of statBuffer that corisponds to the first 3 dimensions..correct? <br />
-justin<br />
<br />
Correct. Also, <i>buffer</i> doesn't get its own copy of the data. It just refers to the same memory location for the data that that branch of statBuffer does. I doubt that's really relevant, but it may become relevant in some other application, and just saying "Correct." alone seemed silly. -- Martin<br />
<br />
thx Martin :) -justin<br />
<br />
----<br />
<br />
{{CreditForOldWikiArticle|oldpage=GFTargetingBot|author=[[PEZ]]}}<br />
== Old Wiki ==<br />
<br />
<br />
==== Comments, questions, feedback: ====<br />
<br />
Way cool, [[PEZ]]! It might be cool to pair this with the BasicSurfer movement and post it to the rumble, just to get a sense of a "base line" for a functioning GuessFactor gun and WaveSurfing movement. (This seems a little more polished for what it is than BasicSurfer, though...) I'm curious to hear from some other people how clear this code seems to them, as I'm already very familiar with both GuessFactorTargeting, and the [[PEZ]] style of the GF code that is found here. This should certainly be linked from a few places, including the [[GuessFactorTargeting/Tutorial]]. (I'll do some of that myself sometime soon if nobody else does.) -- [[Voidious]]<br />
<br />
Really nice! Just a quick question what is BIN_WIDTH? It seems to be <pre>maxEscapeAngle/MIDDLE_BIN</pre>, because the 0.7 is not really self explanatory (to me at least). Other than that it seems fine to me. -- [[Florent]]<br />
<br />
I think using .7 instead of a true calculation is a "[[MiniBot]]-ism", as Math.asin(8/bulletvelocity(1.9)) is about .6 in radians. -- [[Voidious]]<br />
<br />
No, it's not really minibot-ism. It's more of an approximation of the max escape angle that works for most bullet powers. But yeah, in a micro it saves spaces. I've changed the code above to include a MAX_ESCAPE_ANGLE constant. I hope that makes the code clearer. -- [[PEZ]]<br />
<br />
Hi. I see, that you don't store your Waves in an ArrayList or Vector. Instead your GFTWave class exdends Condition. Could someone explain this point to me in more detail?<br />
By the way; I'm an absolute Greenhorn (Robocode and Java) but for some days i like to read the conversation of the godnesses from Robocode-Olymp. [[Sir Drake]]<br />
<br />
An AdvancedRobot lets you add CustomEvents like that - it probably uses an ArrayList or Vector internally. Every tick, Robocode automatically runs the test() method of each CustomEvent, so this setup is just making use of that capability of the RobocodeAPI to take care of the waves stuff. This setup is particularly useful in [[CodeSize]]-restricted bots, as well, as it saves you a little bit of code. -- [[Voidious]]<br />
<br />
Hmm, it's late here, and re-reading my post, that might not have completely cleared things up for you =) It does give some links that might help clear things up, but certainly feel free to ask if it's still unclear. (This is a [[Tutorial]] type bot, after all!) Don't worry about being a Greenhorn, this site is the perfect place to be for a beginner to Robocode ;) -- [[Voidious]]<br />
<br />
In this bot I do it for clarity. Instead of adding structural code to handle the waves I just use a built-in Robocode mechanism. As long as your somewhat familiar with Robocode and its custom events then it's less blur. Note however, that if you want complete control over the execution order you might want to manage the waves list yourself. That or figure out exactly when custom events are executed in respect to the rest of your code. In this bot though I opted for as little extra code as possible. -- [[PEZ]]<br />
<br />
I have run a TargetingChallenge2K6 with GFTargetingBot 1.02, mainly to have a reflection of GresSuffurd against another simple GF-gun. The results are a bit less than I expected, although it is clearly stated that this bot is just a basic implementation without any advanced stuff. One thing is quite obvious, to hit a WaveSurfer you do need more than this. -- [[GrubbmGait]]<br />
| '''Name''' | '''Author''' | '''Gun''' | '''BFly''' | '''CC''' | '''Chk''' | '''Cig''' | '''Cya''' | '''DM''' | '''FM''' | '''Grb''' | '''RMB''' | '''Tig''' | '''Total''' | '''Comment''' <br />
| GFTargetingBot 1.02 | [[PEZ]] | GF | 88.57 | 31.62 | 41.16 | 72.73 | 28.45 | 92.84 | 77.53 | 85.38 | 84.18 | 51.91 | '''65.44''' | <br />
<br />
Indeed. In fact this bot is almost designed to '''miss''' a wavesurfer. Or, rather, any non-trivial WaveSurfer is designed to avoid it. Run a regular TargetingChallenge and you might see better performance from this bot. Is that a full TC2K6 run? If so, please pubish it on the appropriate results page. Good to have references like that. Especially if people base their bots on this code. -- [[PEZ]]<br />
<br />
Results are published. I started an old TargetingChallenge, the results will be present in an hour or three. -- [[GrubbmGait]]<br><br />
It has already finished, this gun is very comparable with Tityus's gun.<br />
| Name | Author | Type | DT | Asp | TAOW | Spar | Cig | Tron | Fhqw | HTTC | Yng | Funk | Score |<br />
| [[GFTargetingBot]] 1.02* | [[PEZ]] | GF | 77.58 | 89.67 | 99.55 | 96.57 | 70.94 | 86.40 | 91.03 | 88.77 | 95.09 | 85.15 | '''88.07''' | <br />
<br />
Just for grins, I DID pair this with BasicSurfer and the results were surprisingly good. It is BasicGFSurfer and ranks 47th in the RoboRumble as of 10-25-06. --[[Bayen]]<br />
<br />
Yah, I did a merger too, and i'm trying to get mine to beat it. -- Chase-san<br />
<br />
Okay, I'm trying to understand this code and have a couple of questions. In the GFTWave, when does the information from <code>buffer</code> get returned to <code>statBuffers</code>? It seems to me like it only takes data from <code>statBuffers</code> and never puts data back in. --[[Bayen]]<br />
<br />
The magic is in this line from setSegmentation:<br />
<pre><br />
buffer = statBuffers[distanceIndex][velocityIndex][lastVelocityIndex];<br />
</pre><br />
After this, they 1D array "buffer" is set to point to one of the final dimensions of "statBuffers", so their cells point to the exact same data. This will save you from typing "statBuffers[index1][index2][index3]" every time you are accessing that data in that tick.<br />
<br />
-- [[Voidious]]<br />
<br />
<br />
Yah I had the same question, if Voidious' excellent explination wasn't enough you get my extremely confusing one, but one that comes with a visual represnetation...<br />
<br />
<h4>Pointers 101: with visual aids</h4><br />
<pre><br />
Here we have two different statBuffers, each with what<br />
data they contain displayed respecibly below them.<br />
<br />
Main Class GFTWave<br />
+-------------+ +-------------+<br />
| statBuffers | | statBuffers |<br />
+-------------+ +-------------+<br />
| 0 | | |<br />
+-------------+ +-------------+<br />
<br />
Notice how the statBuffers in GFTWave contain nothing, thats<br />
considered a null state, or just null for short.<br />
<br />
Now when you assign the statBuffers from the main class to<br />
the statBuffers of the GFTWave your not actually copying the<br />
data, no for that you would need to clone() it.<br />
<br />
Now you have made a pointer! Congradulations.<br />
<br />
Main Class GFTWave<br />
+-------------+ +-------------+<br />
| statBuffers | | statBuffers |<br />
+-------------+ same as +-------------+<br />
| 0 | <-------- | 0 |<br />
+-------------+ this +-------------+<br />
<br />
Now any modification you make to the data in the GTFWave<br />
class will also take place in the main class aswell.<br />
<br />
So when you assign or add or multiply or do whatever else to<br />
the data in the GTFWave it also takes place in the Main class.<br />
<br />
GFTWave:statBuffers = 1;<br />
<br />
Main Class GFTWave<br />
+-------------+ +-------------+<br />
| statBuffers | actually | statBuffers |<br />
+-------------+ happens to +-------------+<br />
| 1 | <--------- | 1 |<br />
+-------------+ this +-------------+<br />
<br />
It also works in reverse. So anything you assign to the main class<br />
will also happen to the data in the other class.<br />
</pre><br />
<br />
I explained all that just so I could make the ascii graphics. -- [[Chase-san]]</div>Nfwuhttp://robowiki.net/w/index.php?title=GFTargetingBot&diff=3405GFTargetingBot2008-11-04T02:27:50Z<p>Nfwu: Migration</p>
<hr />
<div>If you were looking for the discussion between Martin and Justin, it's on the [[Talk:GFTargetingBot|talk page]].<br />
<br />
----<br />
__NOTOC__<br />
=== GFTargetingBot, by [[PEZ]] ===<br />
<br />
==== What's special about it? ====<br />
It's a simple StatisticalTargeting bot using GuessFactors, if not literal so the general idea. My goal is that people who want to start out with StatisticalTargeting can do so with this bot without having to figure it all out first. This bot is quite competetive out-of-the-box, but with just some little work it can be made to kick ass.<br />
<br />
It features:<br />
* [[Wave]]s, to collect the data<br />
* [[VisitCountStats]], accumulating data into simple int arrays<br />
* [[Segmentation]] (really simple, just to show how it can be done)<br />
It lacks:<br />
* [[EnergyManagement]]<br />
* Advanced [[Segmentation]]<br />
* Gun alignment nitty-gritty.<br />
* [[RollingAverage]]s<br />
* [[DataSaving]]<br />
* Anything advanced really.<br />
<br />
==== Great, I want to try it. Where can I download it? ====<br />
http://www.robocoderepository.com/BotDetail.jsp?id=2913<br />
* Note: It would be good to update this bot on the repository with MAX_DISTANCE = 1000 or calculated based on battle field width and height. I've updated it in the code on this page. -- [[Voidious]]<br />
<br />
==== How competitive is it? ====<br />
Quite so for something this simple<br />
<br />
==== How does it [[Movement|move]]? ====<br />
Random, fluid, orbit movement. Almost verbatim [[Aristocles]] movement. (Minus MusashiTrick)<br />
<br />
==== How does it fire? ====<br />
A GuessFactorTargeting gun segmented on distance, velocity, last-scan-velocity. <br />
<br />
==== How does it [[DodgingBullets|dodge bullets]]? ====<br />
It tries to create a flat MovementProfile.<br />
<br />
==== How does the [[Melee|melee]] strategy differ from [[OneOnOne|one-on-one]] strategy? ====<br />
This bot doesn't know about [[Melee]] battles.<br />
<br />
==== What does it save between rounds and matches? ===<br />
The visit counts are saved between rounds. Nothing is saved between matches.<br />
<br />
==== Where did you get the name? ====<br />
Duh... It's a GuessFactorTargeting tutorial bot.<br />
<br />
==== Can I use your code? ====<br />
Sure. That's the whole idea. It's included in the jar. Use it as you see fit. Of course if I do not mind credits. And here's the code for version 1.0 (meaning it might not always be up to date.):<br />
<pre><br />
package wiki.tutorial;<br />
import robocode.*;<br />
import robocode.util.Utils;<br />
import java.awt.Color;<br />
import java.awt.geom.*;<br />
<br />
// GFTargetingBot, by PEZ. A simple GuessFactorTargeting bot for tutorial purposes.<br />
// Use the code as you see fit. Of course if I do not mind credits.<br />
<br />
public class GFTargetingBot extends AdvancedRobot {<br />
private static final double BULLET_POWER = 1.9;<br />
<br />
private static double lateralDirection;<br />
private static double lastEnemyVelocity;<br />
private static GFTMovement movement;<br />
<br />
public GFTargetingBot() {<br />
movement = new GFTMovement(this); <br />
}<br />
<br />
public void run() {<br />
setColors(Color.BLUE, Color.BLACK, Color.YELLOW);<br />
lateralDirection = 1;<br />
lastEnemyVelocity = 0;<br />
setAdjustRadarForGunTurn(true);<br />
setAdjustGunForRobotTurn(true);<br />
do {<br />
turnRadarRightRadians(Double.POSITIVE_INFINITY); <br />
} while (true);<br />
}<br />
<br />
public void onScannedRobot(ScannedRobotEvent e) {<br />
double enemyAbsoluteBearing = getHeadingRadians() + e.getBearingRadians();<br />
double enemyDistance = e.getDistance();<br />
double enemyVelocity = e.getVelocity();<br />
if (enemyVelocity != 0) {<br />
lateralDirection = GFTUtils.sign(enemyVelocity * Math.sin(e.getHeadingRadians() - enemyAbsoluteBearing));<br />
}<br />
GFTWave wave = new GFTWave(this);<br />
wave.gunLocation = new Point2D.Double(getX(), getY());<br />
GFTWave.targetLocation = GFTUtils.project(wave.gunLocation, enemyAbsoluteBearing, enemyDistance);<br />
wave.lateralDirection = lateralDirection;<br />
wave.bulletPower = BULLET_POWER;<br />
wave.setSegmentations(enemyDistance, enemyVelocity, lastEnemyVelocity);<br />
lastEnemyVelocity = enemyVelocity;<br />
wave.bearing = enemyAbsoluteBearing;<br />
setTurnGunRightRadians(Utils.normalRelativeAngle(enemyAbsoluteBearing - getGunHeadingRadians() + wave.mostVisitedBearingOffset()));<br />
setFire(wave.bulletPower);<br />
if (getEnergy() >= BULLET_POWER) {<br />
addCustomEvent(wave);<br />
}<br />
movement.onScannedRobot(e);<br />
setTurnRadarRightRadians(Utils.normalRelativeAngle(enemyAbsoluteBearing - getRadarHeadingRadians()) * 2);<br />
}<br />
}<br />
<br />
class GFTWave extends Condition {<br />
static Point2D targetLocation;<br />
<br />
double bulletPower;<br />
Point2D gunLocation;<br />
double bearing;<br />
double lateralDirection;<br />
<br />
private static final double MAX_DISTANCE = 1000;<br />
private static final int DISTANCE_INDEXES = 5;<br />
private static final int VELOCITY_INDEXES = 5;<br />
private static final int BINS = 25;<br />
private static final int MIDDLE_BIN = (BINS - 1) / 2;<br />
private static final double MAX_ESCAPE_ANGLE = 0.7;<br />
private static final double BIN_WIDTH = MAX_ESCAPE_ANGLE / (double)MIDDLE_BIN;<br />
<br />
private static int[][][][] statBuffers = new int[DISTANCE_INDEXES][VELOCITY_INDEXES][VELOCITY_INDEXES][BINS];<br />
<br />
private int[] buffer;<br />
private AdvancedRobot robot;<br />
private double distanceTraveled;<br />
<br />
GFTWave(AdvancedRobot _robot) {<br />
this.robot = _robot;<br />
}<br />
<br />
public boolean test() {<br />
advance();<br />
if (hasArrived()) {<br />
buffer[currentBin()]++;<br />
robot.removeCustomEvent(this);<br />
}<br />
return false;<br />
}<br />
<br />
double mostVisitedBearingOffset() {<br />
return (lateralDirection * BIN_WIDTH) * (mostVisitedBin() - MIDDLE_BIN);<br />
}<br />
<br />
void setSegmentations(double distance, double velocity, double lastVelocity) {<br />
int distanceIndex = (int)(distance / (MAX_DISTANCE / DISTANCE_INDEXES));<br />
int velocityIndex = (int)Math.abs(velocity / 2);<br />
int lastVelocityIndex = (int)Math.abs(lastVelocity / 2);<br />
buffer = statBuffers[distanceIndex][velocityIndex][lastVelocityIndex];<br />
}<br />
<br />
private void advance() {<br />
distanceTraveled += GFTUtils.bulletVelocity(bulletPower);<br />
}<br />
<br />
private boolean hasArrived() {<br />
return distanceTraveled > gunLocation.distance(targetLocation) - 18;<br />
}<br />
<br />
private int currentBin() {<br />
int bin = (int)Math.round(((Utils.normalRelativeAngle(GFTUtils.absoluteBearing(gunLocation, targetLocation) - bearing)) /<br />
(lateralDirection * BIN_WIDTH)) + MIDDLE_BIN);<br />
return GFTUtils.minMax(bin, 0, BINS - 1);<br />
}<br />
<br />
private int mostVisitedBin() {<br />
int mostVisited = MIDDLE_BIN;<br />
for (int i = 0; i < BINS; i++) {<br />
if (buffer[i] > buffer[mostVisited]) {<br />
mostVisited = i;<br />
}<br />
}<br />
return mostVisited;<br />
} <br />
}<br />
<br />
class GFTUtils {<br />
static double bulletVelocity(double power) {<br />
return 20 - 3 * power;<br />
}<br />
<br />
static Point2D project(Point2D sourceLocation, double angle, double length) {<br />
return new Point2D.Double(sourceLocation.getX() + Math.sin(angle) * length,<br />
sourceLocation.getY() + Math.cos(angle) * length);<br />
}<br />
<br />
static double absoluteBearing(Point2D source, Point2D target) {<br />
return Math.atan2(target.getX() - source.getX(), target.getY() - source.getY());<br />
}<br />
<br />
static int sign(double v) {<br />
return v < 0 ? -1 : 1;<br />
}<br />
<br />
static int minMax(int v, int min, int max) {<br />
return Math.max(min, Math.min(max, v));<br />
}<br />
}<br />
<br />
class GFTMovement {<br />
private static final double BATTLE_FIELD_WIDTH = 800;<br />
private static final double BATTLE_FIELD_HEIGHT = 600;<br />
private static final double WALL_MARGIN = 18;<br />
private static final double MAX_TRIES = 125;<br />
private static final double REVERSE_TUNER = 0.421075;<br />
private static final double DEFAULT_EVASION = 1.2;<br />
private static final double WALL_BOUNCE_TUNER = 0.699484;<br />
<br />
private AdvancedRobot robot;<br />
private Rectangle2D fieldRectangle = new Rectangle2D.Double(WALL_MARGIN, WALL_MARGIN,<br />
BATTLE_FIELD_WIDTH - WALL_MARGIN * 2, BATTLE_FIELD_HEIGHT - WALL_MARGIN * 2);<br />
private double enemyFirePower = 3;<br />
private double direction = 0.4;<br />
<br />
GFTMovement(AdvancedRobot _robot) {<br />
this.robot = _robot;<br />
}<br />
<br />
public void onScannedRobot(ScannedRobotEvent e) {<br />
double enemyAbsoluteBearing = robot.getHeadingRadians() + e.getBearingRadians();<br />
double enemyDistance = e.getDistance();<br />
Point2D robotLocation = new Point2D.Double(robot.getX(), robot.getY());<br />
Point2D enemyLocation = GFTUtils.project(robotLocation, enemyAbsoluteBearing, enemyDistance);<br />
Point2D robotDestination;<br />
double tries = 0;<br />
while (!fieldRectangle.contains(robotDestination = GFTUtils.project(enemyLocation, enemyAbsoluteBearing + Math.PI + direction,<br />
enemyDistance * (DEFAULT_EVASION - tries / 100.0))) && tries < MAX_TRIES) {<br />
tries++;<br />
}<br />
if ((Math.random() < (GFTUtils.bulletVelocity(enemyFirePower) / REVERSE_TUNER) / enemyDistance ||<br />
tries > (enemyDistance / GFTUtils.bulletVelocity(enemyFirePower) / WALL_BOUNCE_TUNER))) {<br />
direction = -direction;<br />
}<br />
// Jamougha's cool way<br />
double angle = GFTUtils.absoluteBearing(robotLocation, robotDestination) - robot.getHeadingRadians();<br />
robot.setAhead(Math.cos(angle) * 100);<br />
robot.setTurnRightRadians(Math.tan(angle));<br />
}<br />
}<br />
</pre><br />
<br />
==== What's next for your robot? ====<br />
* I must document the code to make this tutorial thing to really work. You're more than welcome to help in this.<br />
<br />
==== What other robot(s) is it based on? ====<br />
[[Aristocles]] - both gun and movement<br />
<br />
<br />
[[Category:Source Code]] [[Category:Bots]]</div>Nfwuhttp://robowiki.net/w/index.php?title=Talk:GFTargetingBot&diff=3404Talk:GFTargetingBot2008-11-04T02:25:26Z<p>Nfwu: Moved</p>
<hr />
<div>I'm new to java, and my lack of understanding Java has me hung up on this key peice of code:<br />
buffer = statBuffers[distanceIndex][velocityIndex][lastVelocityIndex];<br />
from my understanding; buffer is an array of 25 (ints), each bin being a counter of times visted.<br />
And statBuffers is a 4dimesional array of size: 5(int), 5(int), 5(int),and 25(int) :<br />
private static int[][][][] statBuffers = new int[DISTANCE_INDEXES][VELOCITY_INDEXES][VELOCITY_INDEXES][BINS];<br />
so back to the problem code :<br />
buffer = statBuffers[distanceIndex][velocityIndex][lastVelocityIndex];<br />
<br />
so the above "indexes" (0-4) should retrieve the values in thoses locations in the statBuffers arrays..<br />
Am I wrong so Far ?<br />
It seems to me were assigning apples to oranges here? How does it work ? ..<br />
- Justin<br />
<br />
<code>int single[] = new int[ 5 ];</code><br />
<br><i>single</i> is "an array of integers".<br />
<br><code>int double[][] = new int[ 5 ][ 5 ];</code><br />
<br><i>double</i> is "an array of 5 arrays of 5 integers".<br />
<br />
This means that each element in double[ n ] is itself "an array of 5 integers".<br />
<br />
<br>Let's change <i>int</i> to <i>apple</i>.<br />
<br><code>apple double[][] = new apple[ 5 ][ 5 ];</code><br />
<br><i>double</i> is now "an array of 5 arrays of 5 apples."<br />
<br />
This means that every double[ n ] is a container, and each container holds 5 apples. The container is not an apple. It is 'a container of one or more apples'. You can visualize it as a paper bag if you like.<br />
<br />
<br><code>apple triple[][][] = new apple[ 5 ][ 5 ][ 5 ];</code><br />
<br><i>triple</i> is "an array of 5 arrays of 5 arrays of apples" or perhaps "5 containers of 'containers of apples'".<br />
<br />
Going back to your original question, here is the situation: <i>buffer</I> is 'an array of integers'. (I deliberately did not state the size, because <i>buffer</i> can be assigned an array of any size of the same dimensions.) <i>statBuffers</i> is 'an array of arrays of arrays of arrays of integers'. Each element in statBuffers[][][] is itself an 'array of integers', and that is why the assignment works.<br />
<br />
I hope that helped. If not, best thing is to just practice with arrays it until it sinks in. -- [[User:Pedersen|Martin]]<br />
<br />
<i>Addendum:</i> Above you mentioned "statBuffers is a 4dimesional array of size: 5(int), 5(int), 5(int),and 25(int)", and therein lies the misconception. The "5(int)" sections are not arrays of integers. They are "arrays of arrays". The integers only exist in the final array. -- [[User:Pedersen|Martin]]<br />
<br />
<br />
<br />
yes I wasn't thinking dimesionally :), in the case of GFTargengBot code: buffer ends up being the 4 dimension of statBuffer that corisponds to the first 3 dimensions..correct? <br />
-justin<br />
<br />
Correct. Also, <i>buffer</i> doesn't get its own copy of the data. It just refers to the same memory location for the data that that branch of statBuffer does. I doubt that's really relevant, but it may become relevant in some other application, and just saying "Correct." alone seemed silly. -- Martin<br />
<br />
thx Martin :) -justin<br />
<br />
----<br />
<br />
{{CreditForOldWikiArticle|oldpage=GFTargetingBot}}<br />
== Old Wiki ==<br />
<br />
To be migrated...</div>Nfwuhttp://robowiki.net/w/index.php?title=GFTargetingBot&diff=3403GFTargetingBot2008-11-04T02:24:35Z<p>Nfwu: Move to talk page</p>
<hr />
<div>If you were looking for the discussion between Martin and Justin, it's on the [[Talk:GFTargetingBot|talk page]].<br />
<br />
----<br />
<br />
Article migration from old wiki required.</div>Nfwuhttp://robowiki.net/w/index.php?title=Archived_talk:RoboRumble/StartingWithRoboRumbleOld&diff=3401Archived talk:RoboRumble/StartingWithRoboRumbleOld2008-11-01T00:59:18Z<p>Nfwu: Added talkarchive</p>
<hr />
<div>{{Talkarchvie|Talk:RoboRumble/Starting_With_RoboRumble}}<br />
{{CreditForOldWikiArticle|oldpage=RoboRumble/StartingWithRoboRumbleOld}}<br />
<br />
<b>To collaborate with RR@H</b><br />
<br />
If you entered a bot into the competition, you could consider to collaborate running the competition by using your computer to execute battles and upload results (similar to Seti@home project). The process is fully automated, so there is no pain on doing it.<br />
<br />
<b>NOTE:</b> With Robocode versions 1.4 and up, the steps below are not necessary any more, as it should work right 'out-of-the-box'. Just the grabbing of a reasonable up-to-date set of bots is recommended, so there is no need to access the RobocodeRepository for > 500 bots.<br />
<br />
<b>NOTE:</b> The steps below are valid for Robocode version 1.0.6 up to 1.1.3. It is strongly advised not to use newer versions of Robocode for RR@Home (yet). As soon as a successfully tested newer version is available, this page will be updated.<br />
<br />
# Download the latest version of the client from http://www.geocities.com/albert_pv/RoboRumbeAtHome.html (or http://pezius.com/albert_pv/RoboRumbeAtHome.html)<br />
# Install it by unzipping it into c:\ (if robocode is installed in the root directory c:\robocode) or into the directory c:\directory where Robocode is installed (c:\directory\robocode).<br />
# Please read the /TemporaryServerUp page, otherwise the rankings will be messed up!<br />
# Edit "roborumble.txt" file and change the USER to your nick.<br />
# Edit "roborumble.bat" file to contain "java '''<nowiki>-Dsun.io.useCanonCaches=false</nowiki>''' -Xmx256M etc." to enable reading from/writing to disk.<br />
# Download Christian Schnell's codesize utility from http://user.cs.tu-berlin.de/~lulli/codesize/<br />
# Just put the codesize.jar in the .\robocode directory. Now you're able to run battles (and upload results) for every WeightClass.<br />
# Start the client using roborumble.bat or roborumble.sh (depending on the OS).<br />
# Run it as much time as you can. The more you run it, the more you contribute. It is fully automated, so you don't have to care at all.<br />
# If you find problems, refer to RoboRumble related pages, or post your issue and we will try to solve it.<br />
# If you feel comfortable with java/programs install, consider replicating robocode into a different folder and then installing RoboRumble@home in the new directory. It will avoid unexpected strange interactions between your development environment and the "productive" environment.<br />
# If you want to run the client using a GUI interface, you can download an add-on from http://www.geocities.com/kuuranca/guidownload.html.<br />
----<br />
To get a reasonably up-to-date set of robots for the rumble to start with, grab the following zip file and move the 300 jars inside it to your rr@H robots directory:<br />
* http://robowiki.net/robocode/rrath_participants.zip<br />
* http://www.krillrfiles.com/robocode/rrath_participants.zip<br />
And get the 180 updates since 20041017:<br />
* http://home.versatel.nl/gheijenk/robocode/things/rrath_upd1_20060808.zip<br />
* http://home.versatel.nl/gheijenk/robocode/things/rrath_upd2_20060808.zip<br />
* http://home.versatel.nl/gheijenk/robocode/things/rrath_upd3_20060808.zip<br />
The 70 updates till 20061220:<br />
* http://home.versatel.nl/gheijenk/robocode/things/rrath_upd_20061220.zip<br />
The 122 updates till 20070929:<br />
* http://home.versatel.nl/gheijenk/robocode/things/rrath_upd_20070929.zip<br />
<br />
Anyone with a reasonably stable connection to the net and some bandwidth to spare, please mirror that file and add the URL to the list.<br />
<br />
-- [[PEZ]]<br />
<br />
Ive collected them all together, and added the bundle Krabb posted. I can host them on best efforts, but it's only around 40k upstream. And it definitley wont be there if Im playing Battlefield ;P - updated 6/07<br />
<br />
http://tsmwiki.com/robocode/allbots.zip<br />
<br />
If anyone can actually roll up a definitive (or as close as upto the current date) collection of bots into a bundle, I'll glady host that best-effforts.<br />
<br />
-- [[YellowAlienBaby]]<br />
<br />
<br />
I forgot how to set a proxy to RoboRumble, i have a proxy then i can visit robowiki very fast, but when i start RoboRumble Client, it cannot use that proxy, i can hardly download the participants list. Do some one know that please tell me, Thanx very much.;[ -- [[iiley]]<br />
<br />
<pre><br />
..\java -DproxySet=true -DproxyHost=xx.xx.xx.xx -DproxyPort=yyy -cp etc. <br />
</pre>succes --[[Loki]]<br />
<br />
Thank you very much, [[Loki]], you are my Christ! ;] -- [[iiley]]<br />
<br />
<br />
----<br />
<br />
Summary: RR@home - Firewall / Proxy problem<br />
<br />
Hi,<br />
I'm trying zu run RR@work :)<br />
but I'm not able to overcome the port redirection. Is there a chance to connect to "http://rumble.pulsaronline.com/..." without the redirection to 8080 ??<br />
Any hints or suggestion are welcome! Is there a chance to participate without an direct online connection, maybe like Up/Down loads manually ??<br />
-- [[bjd]]<br />
<br />
Well funny you'r talking about this. I have the same situation here. I got a proxy that requests a username/password for external connections. I don't have a clue how to get passed it. (well i do but that doesn't function ;-) ).<br />
normally you could use proxyname=username:password@proxyname but that does not work somehow<br />
<enhancement :><br />
I got the following output from the prompt<br />
<br />
--start screen dump--<br />
<pre><br />
D:\roborumble\robocode\robots>java -DproxySet=true -DproxyHost="<deleted username>:<deleted password>@<deleted proxy ip address" -DproxyPort=8080 -cp .;../robocode.jar;../codesize.jar; roborumble.RoboRumbleAtHome ./roborumble/roborumble.txt<br />
Iteration number 0<br />
Downloading participants list ...<br />
Unable to retrieve participants list<br />
java.net.ConnectException: Connection timed out: connect<br />
Downloading missing bots ...<br />
Participants file not found ... Aborting<br />
java.io.FileNotFoundException: .\roborumble\files\particip1v1.txt (The system cannot find the file specified)<br />
Battles input file not found ... Aborting<br />
java.io.FileNotFoundException: .\roborumble\files\particip1v1.txt (The system cannot find the file specified)<br />
Downloading rating files ...<br />
Unable to ratings for roborumble<br />
java.net.ConnectException: Connection timed out: connect<br />
Unable to ratings for minirumble<br />
java.net.ConnectException: Connection timed out: connect<br />
Unable to ratings for microrumble<br />
java.net.ConnectException: Connection timed out: connect<br />
Unable to ratings for nanorumble<br />
java.net.ConnectException: Connection timed out: connect<br />
Preparing battles list ... Using smart battles is false<br />
Participants file not found ... Aborting<br />
java.io.FileNotFoundException: .\roborumble\files\particip1v1.txt (The system cannot find the file specified)<br />
Uloading results ...<br />
Can't open result file for upload<br />
Updating number of battles fought ...<br />
Can't open # battles file ... Aborting # battles update<br />
</pre><br />
--end of dump--<br />
<br />
--[[leb]]<br />
<br />
No progress yet on the port issue that some are having with port 8080 I'm afraid. It is in the works though. -- [[Pulsar]]<br />
<br />
Update on the port issue: No date set yet but it is now at least planned for that server to be reinstalled and in that process the port will be changed to port 80 (default web). -- [[Pulsar]]<br />
<br />
Should that numbered list up there include that the .bat file should contain the "usesCanonCaches" option? I'm pretty new to Robocode, and I just found out about this option on the [http://robowiki.net/cgi-bin/robowiki?JRE_1.4.2_SecurityException_Bug JRE_1.4.2_SecurityException_Bug] page today, but it's basically dumb luck I found this info before running more than a handful of RR@Home matches... The example roborumble.bat given there is:<br />
<pre><br />
cd robots<br />
:run<br />
java -Dsun.io.useCanonCaches=false -Xmx256M -cp .;../robocode.jar;../codesize.jar; roborumble.RoboRumbleAtHome ./roborumble/roborumble.txt<br />
goto run<br />
</pre><br />
-- [[Voidious]]<br />
<br />
List adapted, thanks for the notice. (but it is allowed to change it yourself too) --[[GrubbmGait]]<br />
<br />
----<br />
I can't run RR@home at the office (although i was able to run it up to four months ago). I have no problems with our proxy server as i can download the missing bots. I get the following messages:<br />
<pre><br />
Iteration number 0<br />
Downloading participants list ...<br />
Downloading missing bots ...<br />
Downloading ...bvh.fry.Freya 0.44<br />
Downloaded bvh.fry.Freya 0.44 into ./bvh.fry.Freya_0.44.jar<br />
Downloading ...kinsen.CircleAvoider 1.0<br />
Unable to download kinsen.CircleAvoider 1.0 from site.<br />
Could not download bot kinsen.CircleAvoider_1.0.jar<br />
Downloading ...pedersen.Ugluk 0.4.4<br />
Downloaded pedersen.Ugluk 0.4.4 into ./pedersen.Ugluk_0.4.4.jar<br />
Ignoring kinsen.CircleAvoider_1.0.jar: .\kinsen.CircleAvoider_1.0.jar (The syste<br />
m cannot find the file specified)<br />
Ignoring kinsen.CircleAvoider_1.0.jar: .\kinsen.CircleAvoider_1.0.jar (The syste<br />
m cannot find the file specified)<br />
</pre><b>Battles input file not found ... Aborting<br />
java.lang.StringIndexOutOfBoundsException: String index out of range: -1</b><pre><br />
Downloading rating files ...<br />
Unable to ratings for meleerumble<br />
java.io.IOException: </pre><b>Server returned HTTP response code: 504</b><pre> for URL: http://rum<br />
ble.pulsaronline.com:8080/rumble/servlet/RatingsFile?version=1&game=meleerumble<br />
Unable to ratings for minimeleerumble<br />
java.io.IOException: Server returned HTTP response code: 504 for URL: http://rum<br />
ble.pulsaronline.com:8080/rumble/servlet/RatingsFile?version=1&game=minimeleerum<br />
ble</pre><br />
does anyone recognises the "Battles input file not found" message? And is the HTTP-error 504 caused because the address of the "http://rumble.pulsaronline.com" is changed? thanks --[[Loki]]<br />
<br />
The HTTP-error is indeed caused by you using the old adress, please fix it. I have run the meleerumble last weekend and I also got the "Battles input file not found" message, but everything went fine including priority battles. --[[GrubbmGait]]<br />
* ok, it's working now with "http://rumble.pulsaronline.com" instead of the "http://rumble.pulsaronline.com:8080". I did not find any comfirmation on these pages that the anounced change in portnumber was applied. --[[Loki]]<br />
<br />
I've was running both Roborumble and Meleerumble last night without major problems. I would occasionally get thread exceptions with SerenityFire 11's matches so I modified the script to only process 10 battles at a time instead of 25. I've had issues with bots breaking threads or running out of memory or whatnot in the past, and the entire batch is scrapped when that happens. -- [[Martin Alan Pedersen]]<br />
<br />
I'm sorry if it wasn't clear enough, but the updates and information about a half a days downtime was posted. The Changes needed were/are listed here: [[RoboRumble/TemporaryServerUp]] -- [[Pulsar]]<br />
<br />
2005/16/11<br />
# Is it possible to run 1v1, meele and team rumble at the same time on one PC from the same rr@home dir ?<br />
# Is it possible to run 1v1 in several tasks at the same time on one PC from the same rr@home dir ? -- [[BJD]]<br />
<br />
No on both questions, but if you copy it to another dir it will work. -- [[Pulsar]]<br />
<br />
<br />
---<br />
<br />
I suggest changing the title of the RoboRumble command window to a different title by using this batch file instead:<br />
<pre><br />
@echo off<br />
title RoboRumble@Home Client - Version 0.9<br />
echo === RoboRumble@home ===<br />
echo The ultimate collaborative effort to have a live, up-to-date ranking of bots. <br />
echo It uses the power of available robocoder's computers to distribute the effort<br />
echo of running battles and building the rankings.<br />
echo Website: http://www.robowiki.net/cgi-bin/robowiki?RoboRumble<br />
echo.<br />
cd robots<br />
:run<br />
echo Loading RR@H...<br />
java -Xmx256M -cp .;../robocode.jar;../codesize.jar; roborumble.RoboRumbleAtHome ./roborumble/roborumble.txt<br />
goto run<br />
</pre><br />
<br />
Batch Commands Used:<br />
<pre><br />
@echo off - turns of the printing of batch commands before executing them.<br />
echo - printing data on the screen<br />
title - changes the title of the cmd window<br />
</pre><br />
-- [[nfwu]]<br />
<br />
I am trying to set this up but it can not get past downloading the robots. Is there anything I can do? -- [[Kinsen]]<br />
<br />
Yep, [[Voidious]] came up with a solution. Download [http://www.dijitari.com/void/robocode/roborumble_norepository.zip roborumble_norepository.zip] and replace the old roborumble files with the ones in there. The server will simply overlook robots that it can't download -- [[Kev]]<br />
<br />
* More specifically, it will just auto-fail to download any of the bots stored on the RobocodeRepository. Assuming you are only missing the very latest bots posted, you can at least still run battles for all the ones you have, and hopefully somebody else will run what's missing. Good luck. -- [[Voidious]]<br />
** You can always download missing bots manually (if the repository is up) and put them in the 'robots' directory. Someone with enough webspace (I haven't, I tried) could zip the current 428 bots and make them available. -- [[GrubbmGait]]<br />
<br />
I have managed to get almost all of the robots downloaded but I am getting this message once it is through trying to download the robots:<br />
<pre><br />
Downloading rating files ...<br />
Unable to ratings for roborumble<br />
java.io.FileNotFoundException: http://rumble.robowiki.net/servlet/RatingsFile?ve<br />
rsion=1&game=roborumble<br />
Unable to ratings for minirumble<br />
java.io.FileNotFoundException: http://rumble.robowiki.net/servlet/RatingsFile?ve<br />
rsion=1&game=minirumble<br />
Unable to ratings for microrumble<br />
java.io.FileNotFoundException: http://rumble.robowiki.net/servlet/RatingsFile?ve<br />
rsion=1&game=microrumble<br />
Unable to ratings for nanorumble<br />
java.io.FileNotFoundException: http://rumble.robowiki.net/servlet/RatingsFile?ve<br />
rsion=1&game=nanorumble<br />
</pre><br />
-- [[Kinsen]]<br />
<br />
I have this for the ratings, hope it helps. -- [[GrubbmGait]]<br />
<pre><br />
RATINGS.URL=http://rumble.fervir.com/rumble/RatingsFile<br />
<br />
RATINGS.GENERAL=./roborumble/temp/ratings_roborumble.txt<br />
RATINGS.MINIBOTS=./roborumble/temp/ratings_minirumble.txt<br />
RATINGS.MICROBOTS=./roborumble/temp/ratings_microrumble.txt<br />
RATINGS.NANOBOTS=./roborumble/temp/ratings_nanorumble.txt<br />
</pre><br />
<br />
Thanks, it seems to be working. I'll see if everything else works also. (It appears that I can post here again) -- [[Kinsen]]<br />
<br />
I have a problem with the melee client. I occaisionally get this error:<br><br />
<pre><br />
Exception in thread "Application Thread" java.lang.ArrayIndexOutOfBoundsException: 9 >= 9<br />
at java.util.Vector.elementAt(Unknown Source)<br />
at robocode.battle.BattleResultsTableModel.getValueAt(Unknown Source)<br />
at roborumble.battlesengine.BattlesRunner.runMeleeBattles(BattlesRunner.java:180)<br />
at roborumble.RoboRumbleAtHome.main(RoboRumbleAtHome.java:89)<br />
</pre><br />
Help? -- [[Kinsen]]<br />
<br />
<pre><br />
Exception in thread "main" java.lang.NoClassDefFoundError: robocode/util/Utils<br />
at roborumble.netengine.BotsDownload.downloadBot(BotsDownload.java:217)<br />
at roborumble.netengine.BotsDownload.downloadMissingBots(BotsDownload.ja<br />
va:157)<br />
at roborumble.RoboRumbleAtHome.main(RoboRumbleAtHome.java:49)<br />
</pre><br />
That's what i get when i run any batch file -Starrynte<br />
<br />
Could you paste the contents of the batch file and say what directory you're running it from? My old DOS batch files have been edited, and I am no longer using Windows, so I don't have a great reference... If it helps, here is my roborumble.bat, which I'd run from my roborumble directory (with robocode.jar in it):<br />
<pre><br />
cd robots<br />
:run<br />
java -Xmx256M -Dsun.io.useCanonCaches=false -cp .;../robocode.jar;../codesize.jar; roborumble.RoboRumbleAtHome ./roborumble/roborumble.txt<br />
goto run<br />
</pre><br />
-- [[Voidious]]<br />
<br />
@Kinsen - that is a common occurance on my system. I think it has something to do with the robots.database file getting screwy, but I don't really know. It is annoying, but something I've just come to live with.<br><br />
@Starrynte - I'd guess that you are missing the robocode.jar file. With a directory structure like "C:\roborumble\robots\roborumble" you should have robocode.jar under the first roborumble directory and <nowiki>RoboRumbleAtHome.class</nowiki> under the second roborumble directory.<br><br />
@Voidious - looks like you are missing the cannon caches argument.<br><br />
-- Martin<br />
<br />
Good catch, I've edited the command above. I must've overwritten it at some point, I know I used to have that in there and I certainly have it in my current script... -- [[Voidious]]<br />
<br />
I am having trouble downloading the bots. Here is how far it gets, and then it just stops:<br />
<pre><br />
C:\robocode>cd robots<br />
<br />
C:\robocode\robots>java -Dsun.io.useCanonCaches=false -Xmx256M -cp .;../robocode<br />
.jar;../codesize.jar; roborumble.RoboRumbleAtHome ./roborumble/roborumble.txt<br />
Iteration number 0<br />
Downloading participants list ...<br />
Downloading missing bots ...<br />
Downloading ...bvh.fry.Freya 0.81<br />
Unable to download bvh.fry.Freya 0.81 from site.<br />
Could not download bot bvh.fry.Freya_0.81.jar<br />
Downloading ...chase.Velshea 0.3.4<br />
Downloaded chase.Velshea 0.3.4 into ./chase.Velshea_0.3.4.jar<br />
Downloading ...dft.Krazy 1.5<br />
Downloaded dft.Krazy 1.5 into ./dft.Krazy_1.5.jar<br />
Downloading ...DM.Capriite 3.7.2<br />
Downloaded DM.Capriite 3.7.2 into ./DM.Capriite_3.7.2.jar<br />
Downloading ...DM.Chicken 4.0<br />
Downloaded DM.Chicken 4.0 into ./DM.Chicken_4.0.jar<br />
Downloading ...DM.Mijit .3<br />
Downloaded DM.Mijit .3 into ./DM.Mijit_.3.jar<br />
Downloading ...ds.OoV4 0.3b<br />
Downloaded ds.OoV4 0.3b into ./ds.OoV4_0.3b.jar<br />
Downloading ...dukie.Ambassador 1.0<br />
Downloaded dukie.Ambassador 1.0 into ./dukie.Ambassador_1.0.jar<br />
Downloading ...dummy.mini.Parakeet 2.40<br />
Downloaded dummy.mini.Parakeet 2.40 into ./dummy.mini.Parakeet_2.40.jar<br />
Downloading ...dz.GalbaMicro 0.11<br />
Downloaded dz.GalbaMicro 0.11 into ./dz.GalbaMicro_0.11.jar<br />
Downloading ...dz.GalbaMini 0.12<br />
Downloaded dz.GalbaMini 0.12 into ./dz.GalbaMini_0.12.jar<br />
Downloading ...dz.MostlyHarmlessNano 2.1<br />
Downloaded dz.MostlyHarmlessNano 2.1 into ./dz.MostlyHarmlessNano_2.1.jar<br />
Downloading ...florent.FloatingTadpole 1.2.6<br />
Downloaded florent.FloatingTadpole 1.2.6 into ./florent.FloatingTadpole_1.2.6.ja<br />
r<br />
Downloading ...florent.small.LittleAngel 1.8<br />
Downloaded florent.small.LittleAngel 1.8 into ./florent.small.LittleAngel_1.8.ja<br />
r<br />
Downloading ...germ.TheMind .2<br />
Downloaded germ.TheMind .2 into ./germ.TheMind_.2.jar<br />
Downloading ...gh.GresSuffurd 0.1.5<br />
Downloaded gh.GresSuffurd 0.1.5 into ./gh.GresSuffurd_0.1.5.jar<br />
Downloading ...gh.GrubbmGrb 1.2.4<br />
Downloaded gh.GrubbmGrb 1.2.4 into ./gh.GrubbmGrb_1.2.4.jar<br />
Downloading ...gh.GrypRepetyf 0.13<br />
Downloaded gh.GrypRepetyf 0.13 into ./gh.GrypRepetyf_0.13.jar<br />
Downloading ...gh.micro.GrubbmThree 0.9<br />
Unable to download gh.micro.GrubbmThree 0.9 from site.<br />
Could not download bot gh.micro.GrubbmThree_0.9.jar<br />
Downloading ...gh.mini.GrubbmOne 1.0<br />
Unable to download gh.mini.GrubbmOne 1.0 from site.<br />
Could not download bot gh.mini.GrubbmOne_1.0.jar<br />
Downloading ...gh.nano.Grofvuil 0.2<br />
Unable to download gh.nano.Grofvuil 0.2 from site.<br />
Could not download bot gh.nano.Grofvuil_0.2.jar<br />
Downloading ...gimp.GimpBot 0.1<br />
Unable to download gimp.GimpBot 0.1 from site.<br />
Could not download bot gimp.GimpBot_0.1.jar<br />
Downloading ...gio.RealGioBot 1.0<br />
Unable to download gio.RealGioBot 1.0 from site.<br />
Could not download bot gio.RealGioBot_1.0.jar<br />
Downloading ...homerbots.h1 1.0<br />
Unable to download homerbots.h1 1.0 from site.<br />
Could not download bot homerbots.h1_1.0.jar<br />
Downloading ...jaw.Mouse 0.11<br />
Unable to download jaw.Mouse 0.11 from site.<br />
Could not download bot jaw.Mouse_0.11.jar<br />
Downloading ...jaw.KarenCain 0.11<br />
Unable to download jaw.KarenCain 0.11 from site.<br />
Could not download bot jaw.KarenCain_0.11.jar<br />
Downloading ...jaybot.adv.bots.JayBot 2.0<br />
Unable to download jaybot.adv.bots.JayBot 2.0 from site.<br />
Could not download bot jaybot.adv.bots.JayBot_2.0.jar<br />
Downloading ...jaybot.bots.Oddball 4.0<br />
Unable to download jaybot.bots.Oddball 4.0 from site.<br />
Could not download bot jaybot.bots.Oddball_4.0.jar<br />
Downloading ...jcs.AutoBot 4.2.1<br />
Unable to download jcs.AutoBot 4.2.1 from site.<br />
Could not download bot jcs.AutoBot_4.2.1.jar<br />
Downloading ...jcs.Decepticon 2.5.3<br />
Unable to download jcs.Decepticon 2.5.3 from site.<br />
Could not download bot jcs.Decepticon_2.5.3.jar<br />
Downloading ...jcs.Megatron 1.2<br />
Unable to download jcs.Megatron 1.2 from site.<br />
Could not download bot jcs.Megatron_1.2.jar<br />
Downloading ...jcs.Seth 1.8<br />
Unable to download jcs.Seth 1.8 from site.<br />
Could not download bot jcs.Seth_1.8.jar<br />
Downloading ...jekl.DarkHallow .90.9<br />
Unable to download jekl.DarkHallow .90.9 from site.<br />
Could not download bot jekl.DarkHallow_.90.9.jar<br />
Downloading ...jje.BagPuss 1.2<br />
Unable to download jje.BagPuss 1.2 from site.<br />
Could not download bot jje.BagPuss_1.2.jar<br />
Downloading ...jp.Perpy 16.0<br />
Unable to download jp.Perpy 16.0 from site.<br />
Could not download bot jp.Perpy_16.0.jar<br />
Downloading ...jp.SineWall 1.0<br />
Unable to download jp.SineWall 1.0 from site.<br />
Could not download bot jp.SineWall_1.0.jar<br />
Downloading ...kanishk.Fr0z3n 1.1<br />
Unable to download kanishk.Fr0z3n 1.1 from site.<br />
Could not download bot kanishk.Fr0z3n_1.1.jar<br />
Downloading ...kawigi.micro.Shiz 1.1<br />
Unable to download kawigi.micro.Shiz 1.1 from site.<br />
Could not download bot kawigi.micro.Shiz_1.1.jar<br />
Downloading ...kawigi.sbf.FloodHT 0.9.2<br />
Unable to download kawigi.sbf.FloodHT 0.9.2 from site.<br />
Could not download bot kawigi.sbf.FloodHT_0.9.2.jar<br />
Downloading ...kc.micro.Thorn 1.1<br />
Downloaded kc.micro.Thorn 1.1 into ./kc.micro.Thorn_1.1.jar<br />
Downloading ...kc.mini.Vyper 0.22<br />
Downloaded kc.mini.Vyper 0.22 into ./kc.mini.Vyper_0.22.jar<br />
Downloading ...kc.nano.Splinter 1.1<br />
Downloaded kc.nano.Splinter 1.1 into ./kc.nano.Splinter_1.1.jar<br />
Downloading ...kc.serpent.WaveSerpent 1.101<br />
Downloaded kc.serpent.WaveSerpent 1.101 into ./kc.serpent.WaveSerpent_1.101.jar<br />
Downloading ...kid.Gladiator .7.1<br />
Downloaded kid.Gladiator .7.1 into ./kid.Gladiator_.7.1.jar<br />
Downloading ...kinsen.melee.Angsaichmophobia 1.8c<br />
Downloaded kinsen.melee.Angsaichmophobia 1.8c into ./kinsen.melee.Angsaichmophob<br />
ia_1.8c.jar<br />
Downloading ...kinsen.nano.Hoplomachy 1.6<br />
Downloaded kinsen.nano.Hoplomachy 1.6 into ./kinsen.nano.Hoplomachy_1.6.jar<br />
Downloading ...Krabb.doboh.DoBoh 1.3<br />
Unable to download Krabb.doboh.DoBoh 1.3 from site.<br />
Could not download bot Krabb.doboh.DoBoh_1.3.jar<br />
Downloading ...Krabb.fe4r.Fe4r 0.4<br />
Unable to download Krabb.fe4r.Fe4r 0.4 from site.<br />
Could not download bot Krabb.fe4r.Fe4r_0.4.jar<br />
Downloading ...Krabb.krabby.Krabby 1.22<br />
Unable to download Krabb.krabby.Krabby 1.22 from site.<br />
Could not download bot Krabb.krabby.Krabby_1.22.jar<br />
Downloading ...Krabb.krabby2.Krabby2 1.9o<br />
Downloaded Krabb.krabby2.Krabby2 1.9o into ./Krabb.krabby2.Krabby2_1.9o.jar<br />
Downloading ...Krabb.sliNk.Slartibartfass 0.5<br />
Downloaded Krabb.sliNk.Slartibartfass 0.5 into ./Krabb.sliNk.Slartibartfass_0.5.<br />
jar<br />
Downloading ...krillr.mini.JointStrike 2.0.0<br />
Downloaded krillr.mini.JointStrike 2.0.0 into ./krillr.mini.JointStrike_2.0.0.ja<br />
r<br />
Downloading ...krillr.mega.Psyche 0.0.3<br />
Downloaded krillr.mega.Psyche 0.0.3 into ./krillr.mega.Psyche_0.0.3.jar<br />
Downloading ...leb.ShootAnArrow 0.1<br />
Unable to download leb.ShootAnArrow 0.1 from site.<br />
Could not download bot leb.ShootAnArrow_0.1.jar<br />
Downloading ...lorneswork.Predator 1.0<br />
Unable to download lorneswork.Predator 1.0 from site.<br />
Could not download bot lorneswork.Predator_1.0.jar<br />
Downloading ...lrem.micro.MoggFanatic 0.2<br />
Unable to download lrem.micro.MoggFanatic 0.2 from site.<br />
Could not download bot lrem.micro.MoggFanatic_0.2.jar<br />
Downloading ...lrem.micro.FalseProphet Alpha<br />
Unable to download lrem.micro.FalseProphet Alpha from site.<br />
Could not download bot lrem.micro.FalseProphet_Alpha.jar<br />
Downloading ...lrem.quickhack.QuickHack 1.0<br />
Unable to download lrem.quickhack.QuickHack 1.0 from site.<br />
Could not download bot lrem.quickhack.QuickHack_1.0.jar<br />
Downloading ...lunchie.Lunchbox 0.93<br />
Unable to download lunchie.Lunchbox 0.93 from site.<br />
Could not download bot lunchie.Lunchbox_0.93.jar<br />
Downloading ...marksteam.Phoenix 1.0<br />
Unable to download marksteam.Phoenix 1.0 from site.<br />
Could not download bot marksteam.Phoenix_1.0.jar<br />
Downloading ...matt.advanced.Katana 1.0<br />
Unable to download matt.advanced.Katana 1.0 from site.<br />
Could not download bot matt.advanced.Katana_1.0.jar<br />
Downloading ...matt.BlueMind 0.8.00<br />
Unable to download matt.BlueMind 0.8.00 from site.<br />
Could not download bot matt.BlueMind_0.8.00.jar<br />
Downloading ...matt.UnderDark4 0.4.00<br />
Unable to download matt.UnderDark4 0.4.00 from site.<br />
Could not download bot matt.UnderDark4_0.4.00.jar<br />
Downloading ...mbro.BelajarBot 0.0.3<br />
Unable to download mbro.BelajarBot 0.0.3 from site.<br />
Could not download bot mbro.BelajarBot_0.0.3.jar<br />
Downloading ...mbro.Detektor3 0.1.1<br />
Unable to download mbro.Detektor3 0.1.1 from site.<br />
Could not download bot mbro.Detektor3_0.1.1.jar<br />
Downloading ...mn.WarMachine 1.1<br />
Unable to download mn.WarMachine 1.1 from site.<br />
Could not download bot mn.WarMachine_1.1.jar<br />
Downloading ...mnt.AHEB 0.6a<br />
Unable to download mnt.AHEB 0.6a from site.<br />
Could not download bot mnt.AHEB_0.6a.jar<br />
Downloading ...mnt.SurferBot 0.2.5<br />
</pre><br />
Then it gives up on me and sits like that and won't do anything else. --[[Bayen]]<br />
<br />
Looks like the repository is down or very very slow... -- [[Voidious]]<br />
<br />
Hmmm.. I finally got it to get a bit further:<br />
<pre><br />
<br />
C:\robocode>cd robots<br />
<br />
C:\robocode\robots>java -Dsun.io.useCanonCaches=false -Xmx256M -cp .;../robocode<br />
.jar;../codesize.jar; roborumble.RoboRumbleAtHome ./roborumble/roborumble.txt<br />
Iteration number 0<br />
Downloading participants list ...<br />
Downloading missing bots ...<br />
Downloading ...bvh.fry.Freya 0.81<br />
Unable to download bvh.fry.Freya 0.81 from site.<br />
Could not download bot bvh.fry.Freya_0.81.jar<br />
Downloading ...mrm.MightyMoose .2<br />
Unable to download mrm.MightyMoose .2 from site.<br />
Could not download bot mrm.MightyMoose_.2.jar<br />
Downloading ...winamp32.micro.MicroMacro 1.0<br />
Unable to download winamp32.micro.MicroMacro 1.0 from site.<br />
Could not download bot winamp32.micro.MicroMacro_1.0.jar<br />
Ignoring bvh.fry.Freya_0.81.jar: .\bvh.fry.Freya_0.81.jar (The system cannot fin<br />
d the file specified)<br />
Ignoring bvh.fry.Freya_0.81.jar: .\bvh.fry.Freya_0.81.jar (The system cannot fin<br />
d the file specified)<br />
Ignoring mrm.MightyMoose_.2.jar: .\mrm.MightyMoose_.2.jar (The system cannot fin<br />
d the file specified)<br />
Ignoring mrm.MightyMoose_.2.jar: .\mrm.MightyMoose_.2.jar (The system cannot fin<br />
d the file specified)<br />
Ignoring winamp32.micro.MicroMacro_1.0.jar: .\winamp32.micro.MicroMacro_1.0.jar<br />
(The system cannot find the file specified)<br />
Ignoring winamp32.micro.MicroMacro_1.0.jar: .\winamp32.micro.MicroMacro_1.0.jar<br />
(The system cannot find the file specified)<br />
Downloading rating files ...<br />
Removing old participants from server ...<br />
Preparing battles list ... Using smart battles is true<br />
Prioritary battles file not found ...<br />
Executing battles ...<br />
Fighting battle 0 ... davidalves.Phoenix 0.84,rz.SmallDevil 1.502<br />
</pre><br />
Then it stops again. Just sits there. It's been like this for about 10 minutes. Is it supposed to take this long? --[[Bayen]]<br />
<br />
Try just starting Robocode from the directory where you're running the RoboRumble. (By the way, it's best if you have separate directories for the RoboRumble and your dev environment, in case you, for example, edit Shadow's .properties file to benchmark against it.) After you install a new bot, Robocode needs to extract it and add it to the database. Doing this for 1 bot doesn't take long, but for hundreds it might take a while. By starting Robocode manually, you'll at least see that it's doing stuff. -- [[Voidious]]<br />
<br />
I tried using the newest version of robocode but it doesn't work although previous versions do:<br />
<pre><br />
Fighting battle 0 ... voidious.Dookious 1.43,fnc.bandit.Bandit 5.2.0<br />
Exception in thread "Application Thread" java.lang.NumberFormatException: For in<br />
put string: "voidious.Dookious 1.43"<br />
at java.lang.NumberFormatException.forInputString(Unknown Source)<br />
at java.lang.Integer.parseInt(Unknown Source)<br />
at java.lang.Integer.parseInt(Unknown Source)<br />
at roborumble.battlesen<br />
</pre><br />
-- [[Kinsen]]<br />
<br />
I get the same error as Kinsen, anyone got a fix? -- [[Bal]]<br />
<br />
Error:<br />
<pre><br />
C:\...\robocode\robots>java -Dsun.io.useCanonCaches=false -Xmx256M -<br />
cp .;../robocode.jar;../codesize.jar; roborumble.RoboRumbleAtHome ./roborumble/r<br />
oborumble.txt<br />
Iteration number 0<br />
Downloading participants list ...<br />
Downloading missing bots ...<br />
Downloading ...abc.Shadow 3.66d<br />
Exception in thread "main" java.lang.NoClassDefFoundError: robocode/util/Utils<br />
at roborumble.netengine.BotsDownload.downloadBot(BotsDownload.java:217)<br />
at roborumble.netengine.BotsDownload.downloadMissingBots(BotsDownload.ja<br />
va:157)<br />
at roborumble.RoboRumbleAtHome.main(RoboRumbleAtHome.java:48)<br />
<br />
C:\...\robocode\robots>goto run<br />
<br />
C:\...\robocode\robots>java -Dsun.io.useCanonCaches=false -Xmx256M -<br />
cp .;../robocode.jar;../codesize.jar; roborumble.RoboRumbleAtHome ./roborumble/r<br />
oborumble.txt<br />
Iteration number 0<br />
Downloading participants list ...<br />
Downloading missing bots ...<br />
Downloading ...abc.Shadow 3.66d<br />
Exception in thread "main" java.lang.NoClassDefFoundError: robocode/util/Utils<br />
at roborumble.netengine.BotsDownload.downloadBot(BotsDownload.java:217)<br />
at roborumble.netengine.BotsDownload.downloadMissingBots(BotsDownload.ja<br />
va:157)<br />
at roborumble.RoboRumbleAtHome.main(RoboRumbleAtHome.java:48)<br />
<br />
C:\...\robocode\robots>goto run<br />
<br />
C:\...\robocode\robots>java -Dsun.io.useCanonCaches=false -Xmx256M -<br />
cp .;../robocode.jar;../codesize.jar; roborumble.RoboRumbleAtHome ./roborumble/r<br />
oborumble.txt<br />
Iteration number 0<br />
Downloading participants list ...<br />
Terminate batch job (Y/N)?<br />
</pre><br />
<br />
Here are where the folders are located:<br><br />
C:\...\...\Robocode1.2.1Beta\...<br><br />
C:\...\...\robocode\roborumble.bat<br><br />
C:\...\...\robocode\codesize.jar<br><br />
and so on<br><br />
Does anyone know what the problem is? --[[Starrynte]]<br />
<br />
Aha! I put robocode.jar in the \robocode directory and it works now!!!!! (I saw your solution, Martin).<br />
And, for the NumberFormatException, is it only with Dookious or is it with all the bots? --[[Starrynte]]<br />
<br />
Tron takes forever to download. Wait, robocoderepository is down. --[[Starrynte]]<br />
<br />
You can download all the robots in a zip, the link is at the top of the page. -- [[Kinsen]]<br />
<br />
I've waited over 1 hour to download the participants list. My internet isn't slow. Does anyone know what the problem is? --[[Starrynte]]<br />
*repository is still down, i'll see if I can zip an extra update of bots. -- [[GrubbmGait]]<br />
<br />
<br />
What's wrong if after fighting battle 0, I receive the following exception:<br />
<pre>Exception in thread "Application Thread" java.lang.NumberFormatException: For input string: "brainfade.melee.Dusk 0.44"<br />
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)<br />
at java.lang.Integer.parseInt(Integer.java:447)<br />
at java.lang.Integer.parseInt(Integer.java:497)<br />
at roborumble.battlesengine.BattlesRunner.runMeleeBattles(BattlesRunner.java:182)<br />
at roborumble.RoboRumbleAtHome.main(RoboRumbleAtHome.java:89)</pre><br />
-- [[marijnk]]<br />
<br />
Any more info, like java version, robocode version would be handy. Is the bot present in the robots-directory, can you select it and run battles with it by hand, that sort of stuff. -- [[GrubbmGait]]<br />
*java version: 1.5.0_06, robocode version 1.2.2 beta, this exception happens with any battle I try, but running battles by hand works just fine. I've already used the roborumble.txt file from the /TemporaryServerUp page... -- [[marijnk]]<br />
*It is the same problem I posted a little while ago. Somehow, the newer versions of robocode (1.2.*) don't seem to work with the client so I installed 1.1.3 for the rumble in a separate folder and run whichever version I want for my development. But I don't think the 1.1.3 installer is on SourceForge anymore. -- [[Kinsen]]<br />
**It doesn't work with 1.2.2 either (same problem as above). I guess all the newer versions of robocode don't work --[[Starrynte]]<br />
* I use 1.1.3 for my RR@Home clients, too. I uploaded the installer if you want to grab it: [http://www.dijitari.com/void/robocode/robocode-setup-1.1.3.jar robocode-setup-1.1.3.jar] -- [[Voidious]]<br />
**I have versions 1.1.2Beta,1.1.2,1.1.3Beta, 1.1.4Beta, 1.1.5, 1.2Beta, 1.2.1Beta, and 1.2.2. (I know!!! I didn't feel like deleting them). I use 1.2.2 for battles other than roborumble, but I will use 1.1.5 for roborumble. Here is a link for the 1.1.5 version: [http://www.freewebs.com/biay/robocode-setup-1.1.5.jar robocode-setup-1.1.5.jar] --[[Starrynte]]<br />
----<br />
Could the properties files of the uploaded client be corrected?<br />
<br />
I had to experiement with the RESULTSURL and RATINGS.URL parameters before I got it working when I re-installed the client.<br />
<br />
-- [[Nfwu]]<br />
<br />
*On the /TemporaryServerUp page are links to a page with a correct roborumble.txt file. But that does not seem to be the problem of [[marijnk]]. -- [[GrubbmGait]]<br />
----<br />
I get a out of memory exception when running the teamrumble.<br />
<pre><br />
Exception in thread "Battle Thread" java.lang.OutOfMemoryError: Java heap space<br />
</pre><br />
Also, where should i put the codesize.jar file? My directory is:<br><br />
C:\...\...\robocode\roborumble.bat<br><br />
C:\...\...\robocode\codesize.jar<br><br />
C:\...\...\robocode\robocode.jar<br><br />
--[[Starrynte]]<br />
<br />
In meleerumble, DoctorWho and JointStrike are the only ones i can't download.<br />
<pre><br />
Downloading ...krillr.DoctorWho 0.1.1<br />
Unable to download krillr.DoctorWho 0.1.1 from site.<br />
Could not download bot krillr.DoctorWho_0.1.1.jar<br />
Downloading ...krillr.mini.JointStrike 2.0.0<br />
Unable to download krillr.mini.JointStrike 2.0.0 from site.<br />
Could not download bot krillr.mini.JointStrike_2.0.0.jar<br />
</pre><br />
--[[Starrynte]]<br />
<br />
Removed DoctorWho from meleerumble, it was just a non-meleebot derived from Dookious. JointStrike is a valid, acceptable performing meleebot, I don't know why it is not available anymore. If you need it, you can copy the .jar from your one-on-one client or extract it from the latest zip mentioned at the top of this page. -- [[GrubbmGait]]<br />
<br />
In meleerumble, everything was going fine, and then all of a sudden I get an<br />
<pre><br />
Exception in thread "Application Thread" java.lang.ArrayIndexOutOfBoundsExceptio<br />
n: 9 >= 9<br />
at java.util.Vector.elementAt(Vector.java:432)<br />
at robocode.battle.BattleResultsTableModel.getValueAt(Unknown Source)<br />
at roborumble.battlesengine.BattlesRunner.runMeleeBattles(BattlesRunner.<br />
java:180)<br />
at roborumble.RoboRumbleAtHome.main(RoboRumbleAtHome.java:89)<br />
</pre><br />
--[[Starrynte]]<br />
<br />
Does Robocode 1.2.5 Beta work with roborumble? (just curious, that way i can update to support newer bots, i'm using version 1.1.5 right now) --[[Starrynte]]<br />
<br />
I currently use 1.2.5 Beta for own development, but still use 1.1.2 for roborumble. On [[Robocode/OldNews]] it is strongly advised not to use 1.1.5, as it is full of bugs. I did not find any problems yet with 1.2.5 Beta and am planning to try 1.2.5 as roborumble client as soon as it is released. I think every version does work as roborumble client (and RoboLeague for that matter), just choose a version that is reliable (no bugs in engine) and fire up your client! -- [[GrubbmGait]]<br />
<br />
I will do everything I possible can to make sure that the comming Robocode 1.2.6 (and Beta) will be able to run with RoboRumble@Home. --[[Fnl]]<br />
<br />
Not sure if you saw, but I posted something on [[RoboRumble/ParticipantsChat]] about this. It's not that 1.2.5A wouldn't work with RR@Home, it's just that the RR@Home client directly access some things you've refactored. It's completely reasonable and understandable that you would refactor things, so I say we just update the RoboRumble client code for the new versions. It really isn't that much work. -- [[Voidious]]<br />
<br />
Currently, it being build into Robocode with the comming version 1.3. ;-) --[[Fnl]]<br />
<br />
Is 1.3 going to become the lastest RR@home client -- [[Gorded]]<br />
<br />
I hope so! I would like to see how WeeklongObsession and WeeksOnEnd perform when they are on a level playing field! (n/m if you don't know what I'm talking about) --[[Simonton]]<br />
<br />
I will test 1.3 for RR@Home for one-on-one, melee and teams this weekend, the good results of 1.3_Beta2 during normal usage does give good hope. -- [[GrubbmGait]]<br />
<br />
Well, I was going to "start with roborumble" using an old version, to kick of some melee battles (now that I entered a melee bot, I'd love to see it perform). BUT, I don't see a link anywhere to an old, compatible version of robocode. So I guess I'll just sit tight until either the latest version is fully functional, or if it's going to be a while, maybe someone out there could zip up their rumble directory (minus the .robotcache & such) and make it available (instead of following the instructions & comments throughout these pages)? -- [[Simonton]]<br />
<br />
On SourceForge (http://sourceforge.net/project/showfiles.php?group_id=37202&package_id=29609) you can also download older versions like 1.0.7 and 1.1.3. -- [[GrubbmGait]]<br />
<br />
Ah, I was just coming back to say I found it. Thank you! However, I think I'm going to give up for a while. I got everything downloaded, unzipped, set up, etc, but it's taking FOREVER to populate the .robotcache directory. Spending all night in the lab ends right ... about ... here. -- [[Simonton]]<br />
<br />
I don't know what makes it take so long on some Windows machines. It used to take like 45 minutes on my XP install for a few hundred bots. I was amazed when it took only a couple minutes on my new MacBook; then I was amazed it took only a few minutes on that former Windows box, running Linux; then GrubbmGait said it only took a few minutes on his Windows PC. Hmmf! -- [[Voidious]]<br />
* Yep, around eight minutes on P3 1GHz with XP. I have done it quite often the last weeks ;-) . I do keep my 'robots'-directory rather clean, only 530 bots present there. -- [[GrubbmGait]]<br />
<br />
Is there any good way to get multiple instances of RoboRumble running on different machines from a shared directory, or do you pretty much have to have 2 separate copies of .robotcache? -- [[Simonton]]<br />
<br />
Yeah, you definitely want separate copies. They will also step on each other's toes with the RoboRumble temp files, so they'll get into a weird loop where they keep re-uploading battles and never erasing them. (Some of us have done this out of ignorance / by accident.) -- [[Voidious]]<br />
<br />
That's sad. There a lot of machines in this lab that are unused. And I have an application I used for some research that harnesses them all. -- [[Simonton]]<br />
<br />
It would be interesting to see a lab full of systems doing roborumble. --[[Chase-san]]<br />
<br />
Does anyone know if there's anything special I have to do to run the rumble remotely? Observe:<br />
Exception in thread "Application Thread" java.awt.HeadlessException:<br />
No X11 DISPLAY variable was set, but this program performed an operation which requires it.<br />
at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:159)<br />
at java.awt.Window.<init>(Window.java:317)<br />
at java.awt.Frame.<init>(Frame.java:419)<br />
at java.awt.Frame.<init>(Frame.java:384)<br />
at javax.swing.JFrame.<init>(JFrame.java:150)<br />
at robocode.dialog.RobocodeFrame.<init>(RobocodeFrame.java:118)<br />
at robocode.manager.WindowManager.getRobocodeFrame(WindowManager.java:55)<br />
at robocode.manager.BattleManager.startNewBattle(BattleManager.java:205)<br />
at robocode.manager.BattleManager.startNewBattle(BattleManager.java:131)<br />
at roborumble.battlesengine.RobocodeEngineAtHome.runBattle(RobocodeEngineAtHome.java:97)<br />
at roborumble.battlesengine.BattlesRunner.runMeleeBattles(BattlesRunner.java:171)<br />
at roborumble.RoboRumbleAtHome.main(RoboRumbleAtHome.java:89)<br />
Apparently robocode tries to create a "RobocodeFrame" even when being controlled by the rumble? Is there any way to stop that? Thanks, -- [[Simonton]]<br />
<br />
Hmm... I have run it remotely, and I remember having an issue with that, but I'm trying to think how I solved it. I might have connected with something that had X11 forwarding, like Unix's "ssh -Y", X-Win on Windows, or X11 on a Mac. Or maybe there's some type of -nodisplay argument you can pass to Java? -- [[Voidious]]<br />
<br />
Hmm ... the "ssh -Y" got me closer than "ssh -X" was. That probably is how you did it. Now is the problem that I'm sitting behind a firewall that won't forward X requests to my machine, and whose settings I can't change. It's wierd to me that robocode is creating a JFrame that it doesn't even plan to display. I guess RobocodeFrame must do something necessary even if it's not going to be visible. -- [[Simonton]]<br />
<br />
Well, I think I just found one and tried it, and it still didn't work. It still cites my router as denying the thing. *sigh* -- [[Simonton]]<br />
<br />
I don't think the RobocodeFrame is needed for RoboRumble, when the GUI is not active. However, the robocode.control.RobocodeEngine might expect the RobocodeFrame to be ready, if setVisible(true) is suddenly called. With Robocode itself, you just add the -nodisplay options to the batch file. Then the GUI is completely disabled and newer invoked. But this is not the case for RoboRumble yet. I will look into this issue when I get time for it. ;-) --[[Fnl]]<br />
<br />
I just had a look into Robocode 1.3 (including the new RoboRumble). Here the RobocodeFrame is not invoked. --[[Fnl]]<br />
<br />
Wow, there's so many great improvements in 1.3! -- [[Simonton]]<br />
<br />
Hey Yellow: I just zipped up a copy of all the bots I have in my rumble directory (which has all but some of the newest 1v1 bots). How do I get it to you? (It's 28MB, so I can't just email it) -- [[Simonton]]<br />
<br />
Hey. 28MB? Hmm, I got the ones posted by PEZ and rolled in the ones posted by Krabb and I get 49MB rar'd! Although I have seen lots of versions of various bot's in that package, so I'm thinking either you've got rid off the versions not needed - or in PEZ's downloads and Krabb's together I have a lot of bots that arent in the rumble?<br />
<br />
I'm working atm, I'll look into making a temp area on a machine for you to upload to when I get home, unless you have anywhere that can host it until I download it from there?<br />
[[YellowAlienBaby]]<br />
<br />
Mine is contaminated with old versions, sorry :P --[[Krabb]]<br />
<br />
Hehe. 28 is a lot smaller than 49 :). I set it to "maximum compression", but still each jar is only compressed like 4-9%. You must have a lot of duplicate versions (or maybe just duplicates versions of some very mega bots). -- [[Simonton]]<br />
<br />
* <nowiki>*looks around suspiciously*</nowiki> -- [[Voidious]]<br />
<br />
* You can probably get rid of the duplicates using Martin's nice tool: [[RumbleCacheTool]] -- [[Kinsen]]<br />
<br />
Ok. Not ideal, but you can post it as an attachment (link to the left of the 'More Actions' box) on this page for now;<br />
* http://tsmwiki.com/tsmwiki/MatthewWarren<br />
I'll grab it when it appears and put it up for d/load.<br />
<br />
* There you go, sir. -- [[Simonton]]<br />
<br />
Ok I see it. Another wait until I can access the machine from the other side. Should be available this evening sometime :)<br />
-- [[YellowAlienBaby]]<br />
<br />
Thats posted. I've edited the link up near the top of this page and here's another one http://tsmwiki.com/robocode/allbots.zip<br />
<br />
The versions that you have to use, 1.0.6 through 1.1.3... I don't see them on sourceforge, are they still available? Are new RR@Home agents being accepted? --[[BenHorner]]<br />
<br />
The new versions of Robocode come with the roborumble already integrated. No need to download an old version. =) -- [[Skilgannon]]<br />
<br />
We need to seriously update this page. Like archive it and start over with a simple: download the bots here, put your name in the config file and double-click the .bat. I can do this, but probably not until Monday night. -- [[Simonton]]<br />
<br />
----<br />
<br />
I tried to get RR@H running just now... it downloaded a ton of bots, but then on some it said it couldn't, on some it said it was ignoring it because the files didn't exist, and then finally it errored out. Here are some samples of the failed download messages:<br />
<pre><br />
Trying to download Krabb.krabby2.Krabby2 1.9o<br />
Could not find Krabb.krabby2.Krabby2 1.9o from http://designnj.de/robocode/Krabb.krabby2.Krabby2_1.9o.jar<br />
Could not download Krabb.krabby2.Krabby2_1.9o.jar<br />
<br />
Ignoring Krabb.krabby2.Krabby2_1.9o.jar: ./robots/Krabb.krabby2.Krabby2_1.9o.jar (No such file or directory)<br />
</pre><br />
Here is the error out part:<br />
<pre><br />
Downloading rating files ...<br />
Removing old participants from server ...<br />
Preparing battles list ... Using smart battles is true<br />
Prioritary battles file not found ... <br />
Executing battles ...<br />
Fighting battle 0 ... gio.RealGioBot 1.0,ch.rhj.rbc.RHJ1 1.0<br />
Exception in thread "gio.RealGioBot 1.0" JavaAWT: Assertion failure: Java exception thrown<br />
JavaAWT: File src/macosx/native/apple/awt/util/AWTException.m; Line 40<br />
JavaAWT: Assertion failure: _javaException<br />
JavaAWT: File src/macosx/native/apple/awt/util/AWTException.m; Line 48<br />
JavaAWT: Assertion failure: _javaException != ((void *)0)<br />
JavaAWT: File src/macosx/native/apple/awt/util/AWTException.m; Line 148<br />
Exception in thread "gio.RealGioBot 1.0" JavaAWT: Assertion failure: Java exception thrown<br />
JavaAWT: File src/macosx/native/apple/awt/util/AWTException.m; Line 40<br />
JavaAWT: Assertion failure: _javaException<br />
JavaAWT: File src/macosx/native/apple/awt/util/AWTException.m; Line 48<br />
2007-09-23 20:31:03.734 java[24110] *** Uncaught exception: <AwtException> See Java exception object<br />
./roborumble.sh: line 2: 24110 Trace/BPT trap java -Xmx256M -Dsun.io.useCanonCaches=false -cp libs/robocode.jar:libs/codesize.jar:libs/roborumble.jar roborumble.RoboRumbleAtHome ./roborumble/roborumble.txt<br />
</pre><br />
If anyone knows what this means, or knows how to fix it, please let me know... I used the script roborumble.sh to kick this off. I'm on a Mac if that explains anything...<br />
<br />
--[[BenHorner]]<br />
<br />
I am on a Mac and I have gotten some similar errors in the past, but it has been fixed since Robocode 1.3.5. We never did really figure out what was causing it, but it went away. I have no problems with 1.4 but I haven't tested 1.4.4 or 1.4.5 yet; I'll do that now. What versions of Robocode and Java are you using? -- [[Voidious]]<br />
<br />
Ha, edit conflict. Look what I was going to write:<br />
<br />
<blockquote><br />
I can tell you what the first part means, that says that those bot JARs don't exist on the host site. Chances are the author deleted them or the domain name doesn't exist anymore. As a result, RoboRumble can't download them and is ignoring those bots. As for the second part, being on a Mac explains a lot from what I have heard. Wait for Voidious to come along. =) -- [[AaronR]]<br />
</blockquote><br />
<br />
=D -- [[AaronR]]<br />
<br />
Heh :P Apple does their own version of the JVM, so there are some differences, as seen here, though I can't really figure out what those errors mean. It's a little odd that anything is happening with AWT in the RoboRumble, but I still can't quite troubleshoot it as of now. For what it's worth, I am getting these same errors with RoboRumble 1.4.4, so it's nothing with your config. I am using 1.4 for the RoboRumble and it works fine. One of us should submit a bug report over at SourceForge about this... I probably won't get to it tonight, but I will tomorrow if you haven't yet. -- [[Voidious]]<br />
<br />
My problems after pasting robocode.jar and codesize.jar everywhere :)<br />
<pre><br />
C:\robocode\robots>java -Dsun.io.useCanonCaches=false -Xmx256M -cp .;..\robocode<br />
.jar;..\codesize.jar; roborumble.RoboRumbleAtHome .\roborumble\roborumble.txt<br />
Iteration number 0<br />
Downloading participants list ...<br />
Downloading missing bots ...<br />
Downloading ...AIR.iRobot 1.0<br />
Unable to download AIR.iRobot 1.0 from site.<br />
Could not download bot AIR.iRobot_1.0.jar<br />
Downloading ...altglass.Cruiser 2007-01-29<br />
Exception in thread "main" java.lang.NoSuchMethodError: robocode.util.Utils.copy<br />
(Ljava/io/File;Ljava/io/File;)Z<br />
at roborumble.netengine.BotsDownload.downloadBot(BotsDownload.java:217)<br />
at roborumble.netengine.BotsDownload.downloadMissingBots(BotsDownload.ja<br />
va:157)<br />
at roborumble.RoboRumbleAtHome.main(RoboRumbleAtHome.java:49)<br />
<br />
C:\robocode\robots>goto run<br />
</pre><br />
repeat forever on same bot.<br />
<br />
--[[Miked0801]]<br />
<br />
Hey, have you downloaded a recent version of Robocode? The RoboRumble is integrated, so it should be relatively simple - just run roborumble.bat or roborumble.sh. =) Not that there aren't issues sometimes, but the above sounds like something else, I'm not really sure. Links and updates are on the [[Robocode/News]] page. -- [[Voidious]]<br />
<br />
Put a new 'update-zip' ready for download, see near the top of the page. I have a complete zip without any 'obsolete' versions ready for one-on-one (570 entrants), but it is 14Mb and I don't have that freeon my webspace. -- [[GrubbmGait]]<br />
<br />
[[Category:Discussions]]</div>Nfwuhttp://robowiki.net/w/index.php?title=Template:Talkarchive&diff=3400Template:Talkarchive2008-11-01T00:58:20Z<p>Nfwu: Modified Wikipedia Template</p>
<hr />
<div>{{Notice|text=<br />
<table><br />
<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><br />
<td>[[Image:{{{icon|filing cabinet.png}}}|70px|Archive]]</td><br />
<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><br />
<td>This is an '''archive''' of past discussions. '''Do not edit the contents of this page.''' If you wish to start a new discussion or revive an old one, please do so on the [[{{{1|Talk:{{FULLPAGENAME}}}}}|current talk page]].<!-- Template:Talkarchive --></td><br />
<td>&nbsp;&nbsp;&nbsp;&nbsp;</td><br />
</table><br />
}}<includeonly>__NOEDITSECTION__</includeonly><noinclude>[[Category:Wikipedia Templates]]</noinclude></div>Nfwuhttp://robowiki.net/w/index.php?title=File:Filing_cabinet.png&diff=3399File:Filing cabinet.png2008-11-01T00:51:01Z<p>Nfwu: Public domain image by wikipedia:User:Mholland. Converted from SVG to PNG.</p>
<hr />
<div>Public domain image by [[wikipedia:User:Mholland]]. Converted from SVG to PNG.</div>Nfwuhttp://robowiki.net/w/index.php?title=Archived_talk:RoboRumble/StartingWithRoboRumbleOld&diff=3398Archived talk:RoboRumble/StartingWithRoboRumbleOld2008-11-01T00:48:22Z<p>Nfwu: Migration</p>
<hr />
<div>{{CreditForOldWikiArticle|oldpage=RoboRumble/StartingWithRoboRumbleOld}}<br />
<br />
<b>To collaborate with RR@H</b><br />
<br />
If you entered a bot into the competition, you could consider to collaborate running the competition by using your computer to execute battles and upload results (similar to Seti@home project). The process is fully automated, so there is no pain on doing it.<br />
<br />
<b>NOTE:</b> With Robocode versions 1.4 and up, the steps below are not necessary any more, as it should work right 'out-of-the-box'. Just the grabbing of a reasonable up-to-date set of bots is recommended, so there is no need to access the RobocodeRepository for > 500 bots.<br />
<br />
<b>NOTE:</b> The steps below are valid for Robocode version 1.0.6 up to 1.1.3. It is strongly advised not to use newer versions of Robocode for RR@Home (yet). As soon as a successfully tested newer version is available, this page will be updated.<br />
<br />
# Download the latest version of the client from http://www.geocities.com/albert_pv/RoboRumbeAtHome.html (or http://pezius.com/albert_pv/RoboRumbeAtHome.html)<br />
# Install it by unzipping it into c:\ (if robocode is installed in the root directory c:\robocode) or into the directory c:\directory where Robocode is installed (c:\directory\robocode).<br />
# Please read the /TemporaryServerUp page, otherwise the rankings will be messed up!<br />
# Edit "roborumble.txt" file and change the USER to your nick.<br />
# Edit "roborumble.bat" file to contain "java '''<nowiki>-Dsun.io.useCanonCaches=false</nowiki>''' -Xmx256M etc." to enable reading from/writing to disk.<br />
# Download Christian Schnell's codesize utility from http://user.cs.tu-berlin.de/~lulli/codesize/<br />
# Just put the codesize.jar in the .\robocode directory. Now you're able to run battles (and upload results) for every WeightClass.<br />
# Start the client using roborumble.bat or roborumble.sh (depending on the OS).<br />
# Run it as much time as you can. The more you run it, the more you contribute. It is fully automated, so you don't have to care at all.<br />
# If you find problems, refer to RoboRumble related pages, or post your issue and we will try to solve it.<br />
# If you feel comfortable with java/programs install, consider replicating robocode into a different folder and then installing RoboRumble@home in the new directory. It will avoid unexpected strange interactions between your development environment and the "productive" environment.<br />
# If you want to run the client using a GUI interface, you can download an add-on from http://www.geocities.com/kuuranca/guidownload.html.<br />
----<br />
To get a reasonably up-to-date set of robots for the rumble to start with, grab the following zip file and move the 300 jars inside it to your rr@H robots directory:<br />
* http://robowiki.net/robocode/rrath_participants.zip<br />
* http://www.krillrfiles.com/robocode/rrath_participants.zip<br />
And get the 180 updates since 20041017:<br />
* http://home.versatel.nl/gheijenk/robocode/things/rrath_upd1_20060808.zip<br />
* http://home.versatel.nl/gheijenk/robocode/things/rrath_upd2_20060808.zip<br />
* http://home.versatel.nl/gheijenk/robocode/things/rrath_upd3_20060808.zip<br />
The 70 updates till 20061220:<br />
* http://home.versatel.nl/gheijenk/robocode/things/rrath_upd_20061220.zip<br />
The 122 updates till 20070929:<br />
* http://home.versatel.nl/gheijenk/robocode/things/rrath_upd_20070929.zip<br />
<br />
Anyone with a reasonably stable connection to the net and some bandwidth to spare, please mirror that file and add the URL to the list.<br />
<br />
-- [[PEZ]]<br />
<br />
Ive collected them all together, and added the bundle Krabb posted. I can host them on best efforts, but it's only around 40k upstream. And it definitley wont be there if Im playing Battlefield ;P - updated 6/07<br />
<br />
http://tsmwiki.com/robocode/allbots.zip<br />
<br />
If anyone can actually roll up a definitive (or as close as upto the current date) collection of bots into a bundle, I'll glady host that best-effforts.<br />
<br />
-- [[YellowAlienBaby]]<br />
<br />
<br />
I forgot how to set a proxy to RoboRumble, i have a proxy then i can visit robowiki very fast, but when i start RoboRumble Client, it cannot use that proxy, i can hardly download the participants list. Do some one know that please tell me, Thanx very much.;[ -- [[iiley]]<br />
<br />
<pre><br />
..\java -DproxySet=true -DproxyHost=xx.xx.xx.xx -DproxyPort=yyy -cp etc. <br />
</pre>succes --[[Loki]]<br />
<br />
Thank you very much, [[Loki]], you are my Christ! ;] -- [[iiley]]<br />
<br />
<br />
----<br />
<br />
Summary: RR@home - Firewall / Proxy problem<br />
<br />
Hi,<br />
I'm trying zu run RR@work :)<br />
but I'm not able to overcome the port redirection. Is there a chance to connect to "http://rumble.pulsaronline.com/..." without the redirection to 8080 ??<br />
Any hints or suggestion are welcome! Is there a chance to participate without an direct online connection, maybe like Up/Down loads manually ??<br />
-- [[bjd]]<br />
<br />
Well funny you'r talking about this. I have the same situation here. I got a proxy that requests a username/password for external connections. I don't have a clue how to get passed it. (well i do but that doesn't function ;-) ).<br />
normally you could use proxyname=username:password@proxyname but that does not work somehow<br />
<enhancement :><br />
I got the following output from the prompt<br />
<br />
--start screen dump--<br />
<pre><br />
D:\roborumble\robocode\robots>java -DproxySet=true -DproxyHost="<deleted username>:<deleted password>@<deleted proxy ip address" -DproxyPort=8080 -cp .;../robocode.jar;../codesize.jar; roborumble.RoboRumbleAtHome ./roborumble/roborumble.txt<br />
Iteration number 0<br />
Downloading participants list ...<br />
Unable to retrieve participants list<br />
java.net.ConnectException: Connection timed out: connect<br />
Downloading missing bots ...<br />
Participants file not found ... Aborting<br />
java.io.FileNotFoundException: .\roborumble\files\particip1v1.txt (The system cannot find the file specified)<br />
Battles input file not found ... Aborting<br />
java.io.FileNotFoundException: .\roborumble\files\particip1v1.txt (The system cannot find the file specified)<br />
Downloading rating files ...<br />
Unable to ratings for roborumble<br />
java.net.ConnectException: Connection timed out: connect<br />
Unable to ratings for minirumble<br />
java.net.ConnectException: Connection timed out: connect<br />
Unable to ratings for microrumble<br />
java.net.ConnectException: Connection timed out: connect<br />
Unable to ratings for nanorumble<br />
java.net.ConnectException: Connection timed out: connect<br />
Preparing battles list ... Using smart battles is false<br />
Participants file not found ... Aborting<br />
java.io.FileNotFoundException: .\roborumble\files\particip1v1.txt (The system cannot find the file specified)<br />
Uloading results ...<br />
Can't open result file for upload<br />
Updating number of battles fought ...<br />
Can't open # battles file ... Aborting # battles update<br />
</pre><br />
--end of dump--<br />
<br />
--[[leb]]<br />
<br />
No progress yet on the port issue that some are having with port 8080 I'm afraid. It is in the works though. -- [[Pulsar]]<br />
<br />
Update on the port issue: No date set yet but it is now at least planned for that server to be reinstalled and in that process the port will be changed to port 80 (default web). -- [[Pulsar]]<br />
<br />
Should that numbered list up there include that the .bat file should contain the "usesCanonCaches" option? I'm pretty new to Robocode, and I just found out about this option on the [http://robowiki.net/cgi-bin/robowiki?JRE_1.4.2_SecurityException_Bug JRE_1.4.2_SecurityException_Bug] page today, but it's basically dumb luck I found this info before running more than a handful of RR@Home matches... The example roborumble.bat given there is:<br />
<pre><br />
cd robots<br />
:run<br />
java -Dsun.io.useCanonCaches=false -Xmx256M -cp .;../robocode.jar;../codesize.jar; roborumble.RoboRumbleAtHome ./roborumble/roborumble.txt<br />
goto run<br />
</pre><br />
-- [[Voidious]]<br />
<br />
List adapted, thanks for the notice. (but it is allowed to change it yourself too) --[[GrubbmGait]]<br />
<br />
----<br />
I can't run RR@home at the office (although i was able to run it up to four months ago). I have no problems with our proxy server as i can download the missing bots. I get the following messages:<br />
<pre><br />
Iteration number 0<br />
Downloading participants list ...<br />
Downloading missing bots ...<br />
Downloading ...bvh.fry.Freya 0.44<br />
Downloaded bvh.fry.Freya 0.44 into ./bvh.fry.Freya_0.44.jar<br />
Downloading ...kinsen.CircleAvoider 1.0<br />
Unable to download kinsen.CircleAvoider 1.0 from site.<br />
Could not download bot kinsen.CircleAvoider_1.0.jar<br />
Downloading ...pedersen.Ugluk 0.4.4<br />
Downloaded pedersen.Ugluk 0.4.4 into ./pedersen.Ugluk_0.4.4.jar<br />
Ignoring kinsen.CircleAvoider_1.0.jar: .\kinsen.CircleAvoider_1.0.jar (The syste<br />
m cannot find the file specified)<br />
Ignoring kinsen.CircleAvoider_1.0.jar: .\kinsen.CircleAvoider_1.0.jar (The syste<br />
m cannot find the file specified)<br />
</pre><b>Battles input file not found ... Aborting<br />
java.lang.StringIndexOutOfBoundsException: String index out of range: -1</b><pre><br />
Downloading rating files ...<br />
Unable to ratings for meleerumble<br />
java.io.IOException: </pre><b>Server returned HTTP response code: 504</b><pre> for URL: http://rum<br />
ble.pulsaronline.com:8080/rumble/servlet/RatingsFile?version=1&game=meleerumble<br />
Unable to ratings for minimeleerumble<br />
java.io.IOException: Server returned HTTP response code: 504 for URL: http://rum<br />
ble.pulsaronline.com:8080/rumble/servlet/RatingsFile?version=1&game=minimeleerum<br />
ble</pre><br />
does anyone recognises the "Battles input file not found" message? And is the HTTP-error 504 caused because the address of the "http://rumble.pulsaronline.com" is changed? thanks --[[Loki]]<br />
<br />
The HTTP-error is indeed caused by you using the old adress, please fix it. I have run the meleerumble last weekend and I also got the "Battles input file not found" message, but everything went fine including priority battles. --[[GrubbmGait]]<br />
* ok, it's working now with "http://rumble.pulsaronline.com" instead of the "http://rumble.pulsaronline.com:8080". I did not find any comfirmation on these pages that the anounced change in portnumber was applied. --[[Loki]]<br />
<br />
I've was running both Roborumble and Meleerumble last night without major problems. I would occasionally get thread exceptions with SerenityFire 11's matches so I modified the script to only process 10 battles at a time instead of 25. I've had issues with bots breaking threads or running out of memory or whatnot in the past, and the entire batch is scrapped when that happens. -- [[Martin Alan Pedersen]]<br />
<br />
I'm sorry if it wasn't clear enough, but the updates and information about a half a days downtime was posted. The Changes needed were/are listed here: [[RoboRumble/TemporaryServerUp]] -- [[Pulsar]]<br />
<br />
2005/16/11<br />
# Is it possible to run 1v1, meele and team rumble at the same time on one PC from the same rr@home dir ?<br />
# Is it possible to run 1v1 in several tasks at the same time on one PC from the same rr@home dir ? -- [[BJD]]<br />
<br />
No on both questions, but if you copy it to another dir it will work. -- [[Pulsar]]<br />
<br />
<br />
---<br />
<br />
I suggest changing the title of the RoboRumble command window to a different title by using this batch file instead:<br />
<pre><br />
@echo off<br />
title RoboRumble@Home Client - Version 0.9<br />
echo === RoboRumble@home ===<br />
echo The ultimate collaborative effort to have a live, up-to-date ranking of bots. <br />
echo It uses the power of available robocoder's computers to distribute the effort<br />
echo of running battles and building the rankings.<br />
echo Website: http://www.robowiki.net/cgi-bin/robowiki?RoboRumble<br />
echo.<br />
cd robots<br />
:run<br />
echo Loading RR@H...<br />
java -Xmx256M -cp .;../robocode.jar;../codesize.jar; roborumble.RoboRumbleAtHome ./roborumble/roborumble.txt<br />
goto run<br />
</pre><br />
<br />
Batch Commands Used:<br />
<pre><br />
@echo off - turns of the printing of batch commands before executing them.<br />
echo - printing data on the screen<br />
title - changes the title of the cmd window<br />
</pre><br />
-- [[nfwu]]<br />
<br />
I am trying to set this up but it can not get past downloading the robots. Is there anything I can do? -- [[Kinsen]]<br />
<br />
Yep, [[Voidious]] came up with a solution. Download [http://www.dijitari.com/void/robocode/roborumble_norepository.zip roborumble_norepository.zip] and replace the old roborumble files with the ones in there. The server will simply overlook robots that it can't download -- [[Kev]]<br />
<br />
* More specifically, it will just auto-fail to download any of the bots stored on the RobocodeRepository. Assuming you are only missing the very latest bots posted, you can at least still run battles for all the ones you have, and hopefully somebody else will run what's missing. Good luck. -- [[Voidious]]<br />
** You can always download missing bots manually (if the repository is up) and put them in the 'robots' directory. Someone with enough webspace (I haven't, I tried) could zip the current 428 bots and make them available. -- [[GrubbmGait]]<br />
<br />
I have managed to get almost all of the robots downloaded but I am getting this message once it is through trying to download the robots:<br />
<pre><br />
Downloading rating files ...<br />
Unable to ratings for roborumble<br />
java.io.FileNotFoundException: http://rumble.robowiki.net/servlet/RatingsFile?ve<br />
rsion=1&game=roborumble<br />
Unable to ratings for minirumble<br />
java.io.FileNotFoundException: http://rumble.robowiki.net/servlet/RatingsFile?ve<br />
rsion=1&game=minirumble<br />
Unable to ratings for microrumble<br />
java.io.FileNotFoundException: http://rumble.robowiki.net/servlet/RatingsFile?ve<br />
rsion=1&game=microrumble<br />
Unable to ratings for nanorumble<br />
java.io.FileNotFoundException: http://rumble.robowiki.net/servlet/RatingsFile?ve<br />
rsion=1&game=nanorumble<br />
</pre><br />
-- [[Kinsen]]<br />
<br />
I have this for the ratings, hope it helps. -- [[GrubbmGait]]<br />
<pre><br />
RATINGS.URL=http://rumble.fervir.com/rumble/RatingsFile<br />
<br />
RATINGS.GENERAL=./roborumble/temp/ratings_roborumble.txt<br />
RATINGS.MINIBOTS=./roborumble/temp/ratings_minirumble.txt<br />
RATINGS.MICROBOTS=./roborumble/temp/ratings_microrumble.txt<br />
RATINGS.NANOBOTS=./roborumble/temp/ratings_nanorumble.txt<br />
</pre><br />
<br />
Thanks, it seems to be working. I'll see if everything else works also. (It appears that I can post here again) -- [[Kinsen]]<br />
<br />
I have a problem with the melee client. I occaisionally get this error:<br><br />
<pre><br />
Exception in thread "Application Thread" java.lang.ArrayIndexOutOfBoundsException: 9 >= 9<br />
at java.util.Vector.elementAt(Unknown Source)<br />
at robocode.battle.BattleResultsTableModel.getValueAt(Unknown Source)<br />
at roborumble.battlesengine.BattlesRunner.runMeleeBattles(BattlesRunner.java:180)<br />
at roborumble.RoboRumbleAtHome.main(RoboRumbleAtHome.java:89)<br />
</pre><br />
Help? -- [[Kinsen]]<br />
<br />
<pre><br />
Exception in thread "main" java.lang.NoClassDefFoundError: robocode/util/Utils<br />
at roborumble.netengine.BotsDownload.downloadBot(BotsDownload.java:217)<br />
at roborumble.netengine.BotsDownload.downloadMissingBots(BotsDownload.ja<br />
va:157)<br />
at roborumble.RoboRumbleAtHome.main(RoboRumbleAtHome.java:49)<br />
</pre><br />
That's what i get when i run any batch file -Starrynte<br />
<br />
Could you paste the contents of the batch file and say what directory you're running it from? My old DOS batch files have been edited, and I am no longer using Windows, so I don't have a great reference... If it helps, here is my roborumble.bat, which I'd run from my roborumble directory (with robocode.jar in it):<br />
<pre><br />
cd robots<br />
:run<br />
java -Xmx256M -Dsun.io.useCanonCaches=false -cp .;../robocode.jar;../codesize.jar; roborumble.RoboRumbleAtHome ./roborumble/roborumble.txt<br />
goto run<br />
</pre><br />
-- [[Voidious]]<br />
<br />
@Kinsen - that is a common occurance on my system. I think it has something to do with the robots.database file getting screwy, but I don't really know. It is annoying, but something I've just come to live with.<br><br />
@Starrynte - I'd guess that you are missing the robocode.jar file. With a directory structure like "C:\roborumble\robots\roborumble" you should have robocode.jar under the first roborumble directory and <nowiki>RoboRumbleAtHome.class</nowiki> under the second roborumble directory.<br><br />
@Voidious - looks like you are missing the cannon caches argument.<br><br />
-- Martin<br />
<br />
Good catch, I've edited the command above. I must've overwritten it at some point, I know I used to have that in there and I certainly have it in my current script... -- [[Voidious]]<br />
<br />
I am having trouble downloading the bots. Here is how far it gets, and then it just stops:<br />
<pre><br />
C:\robocode>cd robots<br />
<br />
C:\robocode\robots>java -Dsun.io.useCanonCaches=false -Xmx256M -cp .;../robocode<br />
.jar;../codesize.jar; roborumble.RoboRumbleAtHome ./roborumble/roborumble.txt<br />
Iteration number 0<br />
Downloading participants list ...<br />
Downloading missing bots ...<br />
Downloading ...bvh.fry.Freya 0.81<br />
Unable to download bvh.fry.Freya 0.81 from site.<br />
Could not download bot bvh.fry.Freya_0.81.jar<br />
Downloading ...chase.Velshea 0.3.4<br />
Downloaded chase.Velshea 0.3.4 into ./chase.Velshea_0.3.4.jar<br />
Downloading ...dft.Krazy 1.5<br />
Downloaded dft.Krazy 1.5 into ./dft.Krazy_1.5.jar<br />
Downloading ...DM.Capriite 3.7.2<br />
Downloaded DM.Capriite 3.7.2 into ./DM.Capriite_3.7.2.jar<br />
Downloading ...DM.Chicken 4.0<br />
Downloaded DM.Chicken 4.0 into ./DM.Chicken_4.0.jar<br />
Downloading ...DM.Mijit .3<br />
Downloaded DM.Mijit .3 into ./DM.Mijit_.3.jar<br />
Downloading ...ds.OoV4 0.3b<br />
Downloaded ds.OoV4 0.3b into ./ds.OoV4_0.3b.jar<br />
Downloading ...dukie.Ambassador 1.0<br />
Downloaded dukie.Ambassador 1.0 into ./dukie.Ambassador_1.0.jar<br />
Downloading ...dummy.mini.Parakeet 2.40<br />
Downloaded dummy.mini.Parakeet 2.40 into ./dummy.mini.Parakeet_2.40.jar<br />
Downloading ...dz.GalbaMicro 0.11<br />
Downloaded dz.GalbaMicro 0.11 into ./dz.GalbaMicro_0.11.jar<br />
Downloading ...dz.GalbaMini 0.12<br />
Downloaded dz.GalbaMini 0.12 into ./dz.GalbaMini_0.12.jar<br />
Downloading ...dz.MostlyHarmlessNano 2.1<br />
Downloaded dz.MostlyHarmlessNano 2.1 into ./dz.MostlyHarmlessNano_2.1.jar<br />
Downloading ...florent.FloatingTadpole 1.2.6<br />
Downloaded florent.FloatingTadpole 1.2.6 into ./florent.FloatingTadpole_1.2.6.ja<br />
r<br />
Downloading ...florent.small.LittleAngel 1.8<br />
Downloaded florent.small.LittleAngel 1.8 into ./florent.small.LittleAngel_1.8.ja<br />
r<br />
Downloading ...germ.TheMind .2<br />
Downloaded germ.TheMind .2 into ./germ.TheMind_.2.jar<br />
Downloading ...gh.GresSuffurd 0.1.5<br />
Downloaded gh.GresSuffurd 0.1.5 into ./gh.GresSuffurd_0.1.5.jar<br />
Downloading ...gh.GrubbmGrb 1.2.4<br />
Downloaded gh.GrubbmGrb 1.2.4 into ./gh.GrubbmGrb_1.2.4.jar<br />
Downloading ...gh.GrypRepetyf 0.13<br />
Downloaded gh.GrypRepetyf 0.13 into ./gh.GrypRepetyf_0.13.jar<br />
Downloading ...gh.micro.GrubbmThree 0.9<br />
Unable to download gh.micro.GrubbmThree 0.9 from site.<br />
Could not download bot gh.micro.GrubbmThree_0.9.jar<br />
Downloading ...gh.mini.GrubbmOne 1.0<br />
Unable to download gh.mini.GrubbmOne 1.0 from site.<br />
Could not download bot gh.mini.GrubbmOne_1.0.jar<br />
Downloading ...gh.nano.Grofvuil 0.2<br />
Unable to download gh.nano.Grofvuil 0.2 from site.<br />
Could not download bot gh.nano.Grofvuil_0.2.jar<br />
Downloading ...gimp.GimpBot 0.1<br />
Unable to download gimp.GimpBot 0.1 from site.<br />
Could not download bot gimp.GimpBot_0.1.jar<br />
Downloading ...gio.RealGioBot 1.0<br />
Unable to download gio.RealGioBot 1.0 from site.<br />
Could not download bot gio.RealGioBot_1.0.jar<br />
Downloading ...homerbots.h1 1.0<br />
Unable to download homerbots.h1 1.0 from site.<br />
Could not download bot homerbots.h1_1.0.jar<br />
Downloading ...jaw.Mouse 0.11<br />
Unable to download jaw.Mouse 0.11 from site.<br />
Could not download bot jaw.Mouse_0.11.jar<br />
Downloading ...jaw.KarenCain 0.11<br />
Unable to download jaw.KarenCain 0.11 from site.<br />
Could not download bot jaw.KarenCain_0.11.jar<br />
Downloading ...jaybot.adv.bots.JayBot 2.0<br />
Unable to download jaybot.adv.bots.JayBot 2.0 from site.<br />
Could not download bot jaybot.adv.bots.JayBot_2.0.jar<br />
Downloading ...jaybot.bots.Oddball 4.0<br />
Unable to download jaybot.bots.Oddball 4.0 from site.<br />
Could not download bot jaybot.bots.Oddball_4.0.jar<br />
Downloading ...jcs.AutoBot 4.2.1<br />
Unable to download jcs.AutoBot 4.2.1 from site.<br />
Could not download bot jcs.AutoBot_4.2.1.jar<br />
Downloading ...jcs.Decepticon 2.5.3<br />
Unable to download jcs.Decepticon 2.5.3 from site.<br />
Could not download bot jcs.Decepticon_2.5.3.jar<br />
Downloading ...jcs.Megatron 1.2<br />
Unable to download jcs.Megatron 1.2 from site.<br />
Could not download bot jcs.Megatron_1.2.jar<br />
Downloading ...jcs.Seth 1.8<br />
Unable to download jcs.Seth 1.8 from site.<br />
Could not download bot jcs.Seth_1.8.jar<br />
Downloading ...jekl.DarkHallow .90.9<br />
Unable to download jekl.DarkHallow .90.9 from site.<br />
Could not download bot jekl.DarkHallow_.90.9.jar<br />
Downloading ...jje.BagPuss 1.2<br />
Unable to download jje.BagPuss 1.2 from site.<br />
Could not download bot jje.BagPuss_1.2.jar<br />
Downloading ...jp.Perpy 16.0<br />
Unable to download jp.Perpy 16.0 from site.<br />
Could not download bot jp.Perpy_16.0.jar<br />
Downloading ...jp.SineWall 1.0<br />
Unable to download jp.SineWall 1.0 from site.<br />
Could not download bot jp.SineWall_1.0.jar<br />
Downloading ...kanishk.Fr0z3n 1.1<br />
Unable to download kanishk.Fr0z3n 1.1 from site.<br />
Could not download bot kanishk.Fr0z3n_1.1.jar<br />
Downloading ...kawigi.micro.Shiz 1.1<br />
Unable to download kawigi.micro.Shiz 1.1 from site.<br />
Could not download bot kawigi.micro.Shiz_1.1.jar<br />
Downloading ...kawigi.sbf.FloodHT 0.9.2<br />
Unable to download kawigi.sbf.FloodHT 0.9.2 from site.<br />
Could not download bot kawigi.sbf.FloodHT_0.9.2.jar<br />
Downloading ...kc.micro.Thorn 1.1<br />
Downloaded kc.micro.Thorn 1.1 into ./kc.micro.Thorn_1.1.jar<br />
Downloading ...kc.mini.Vyper 0.22<br />
Downloaded kc.mini.Vyper 0.22 into ./kc.mini.Vyper_0.22.jar<br />
Downloading ...kc.nano.Splinter 1.1<br />
Downloaded kc.nano.Splinter 1.1 into ./kc.nano.Splinter_1.1.jar<br />
Downloading ...kc.serpent.WaveSerpent 1.101<br />
Downloaded kc.serpent.WaveSerpent 1.101 into ./kc.serpent.WaveSerpent_1.101.jar<br />
Downloading ...kid.Gladiator .7.1<br />
Downloaded kid.Gladiator .7.1 into ./kid.Gladiator_.7.1.jar<br />
Downloading ...kinsen.melee.Angsaichmophobia 1.8c<br />
Downloaded kinsen.melee.Angsaichmophobia 1.8c into ./kinsen.melee.Angsaichmophob<br />
ia_1.8c.jar<br />
Downloading ...kinsen.nano.Hoplomachy 1.6<br />
Downloaded kinsen.nano.Hoplomachy 1.6 into ./kinsen.nano.Hoplomachy_1.6.jar<br />
Downloading ...Krabb.doboh.DoBoh 1.3<br />
Unable to download Krabb.doboh.DoBoh 1.3 from site.<br />
Could not download bot Krabb.doboh.DoBoh_1.3.jar<br />
Downloading ...Krabb.fe4r.Fe4r 0.4<br />
Unable to download Krabb.fe4r.Fe4r 0.4 from site.<br />
Could not download bot Krabb.fe4r.Fe4r_0.4.jar<br />
Downloading ...Krabb.krabby.Krabby 1.22<br />
Unable to download Krabb.krabby.Krabby 1.22 from site.<br />
Could not download bot Krabb.krabby.Krabby_1.22.jar<br />
Downloading ...Krabb.krabby2.Krabby2 1.9o<br />
Downloaded Krabb.krabby2.Krabby2 1.9o into ./Krabb.krabby2.Krabby2_1.9o.jar<br />
Downloading ...Krabb.sliNk.Slartibartfass 0.5<br />
Downloaded Krabb.sliNk.Slartibartfass 0.5 into ./Krabb.sliNk.Slartibartfass_0.5.<br />
jar<br />
Downloading ...krillr.mini.JointStrike 2.0.0<br />
Downloaded krillr.mini.JointStrike 2.0.0 into ./krillr.mini.JointStrike_2.0.0.ja<br />
r<br />
Downloading ...krillr.mega.Psyche 0.0.3<br />
Downloaded krillr.mega.Psyche 0.0.3 into ./krillr.mega.Psyche_0.0.3.jar<br />
Downloading ...leb.ShootAnArrow 0.1<br />
Unable to download leb.ShootAnArrow 0.1 from site.<br />
Could not download bot leb.ShootAnArrow_0.1.jar<br />
Downloading ...lorneswork.Predator 1.0<br />
Unable to download lorneswork.Predator 1.0 from site.<br />
Could not download bot lorneswork.Predator_1.0.jar<br />
Downloading ...lrem.micro.MoggFanatic 0.2<br />
Unable to download lrem.micro.MoggFanatic 0.2 from site.<br />
Could not download bot lrem.micro.MoggFanatic_0.2.jar<br />
Downloading ...lrem.micro.FalseProphet Alpha<br />
Unable to download lrem.micro.FalseProphet Alpha from site.<br />
Could not download bot lrem.micro.FalseProphet_Alpha.jar<br />
Downloading ...lrem.quickhack.QuickHack 1.0<br />
Unable to download lrem.quickhack.QuickHack 1.0 from site.<br />
Could not download bot lrem.quickhack.QuickHack_1.0.jar<br />
Downloading ...lunchie.Lunchbox 0.93<br />
Unable to download lunchie.Lunchbox 0.93 from site.<br />
Could not download bot lunchie.Lunchbox_0.93.jar<br />
Downloading ...marksteam.Phoenix 1.0<br />
Unable to download marksteam.Phoenix 1.0 from site.<br />
Could not download bot marksteam.Phoenix_1.0.jar<br />
Downloading ...matt.advanced.Katana 1.0<br />
Unable to download matt.advanced.Katana 1.0 from site.<br />
Could not download bot matt.advanced.Katana_1.0.jar<br />
Downloading ...matt.BlueMind 0.8.00<br />
Unable to download matt.BlueMind 0.8.00 from site.<br />
Could not download bot matt.BlueMind_0.8.00.jar<br />
Downloading ...matt.UnderDark4 0.4.00<br />
Unable to download matt.UnderDark4 0.4.00 from site.<br />
Could not download bot matt.UnderDark4_0.4.00.jar<br />
Downloading ...mbro.BelajarBot 0.0.3<br />
Unable to download mbro.BelajarBot 0.0.3 from site.<br />
Could not download bot mbro.BelajarBot_0.0.3.jar<br />
Downloading ...mbro.Detektor3 0.1.1<br />
Unable to download mbro.Detektor3 0.1.1 from site.<br />
Could not download bot mbro.Detektor3_0.1.1.jar<br />
Downloading ...mn.WarMachine 1.1<br />
Unable to download mn.WarMachine 1.1 from site.<br />
Could not download bot mn.WarMachine_1.1.jar<br />
Downloading ...mnt.AHEB 0.6a<br />
Unable to download mnt.AHEB 0.6a from site.<br />
Could not download bot mnt.AHEB_0.6a.jar<br />
Downloading ...mnt.SurferBot 0.2.5<br />
</pre><br />
Then it gives up on me and sits like that and won't do anything else. --[[Bayen]]<br />
<br />
Looks like the repository is down or very very slow... -- [[Voidious]]<br />
<br />
Hmmm.. I finally got it to get a bit further:<br />
<pre><br />
<br />
C:\robocode>cd robots<br />
<br />
C:\robocode\robots>java -Dsun.io.useCanonCaches=false -Xmx256M -cp .;../robocode<br />
.jar;../codesize.jar; roborumble.RoboRumbleAtHome ./roborumble/roborumble.txt<br />
Iteration number 0<br />
Downloading participants list ...<br />
Downloading missing bots ...<br />
Downloading ...bvh.fry.Freya 0.81<br />
Unable to download bvh.fry.Freya 0.81 from site.<br />
Could not download bot bvh.fry.Freya_0.81.jar<br />
Downloading ...mrm.MightyMoose .2<br />
Unable to download mrm.MightyMoose .2 from site.<br />
Could not download bot mrm.MightyMoose_.2.jar<br />
Downloading ...winamp32.micro.MicroMacro 1.0<br />
Unable to download winamp32.micro.MicroMacro 1.0 from site.<br />
Could not download bot winamp32.micro.MicroMacro_1.0.jar<br />
Ignoring bvh.fry.Freya_0.81.jar: .\bvh.fry.Freya_0.81.jar (The system cannot fin<br />
d the file specified)<br />
Ignoring bvh.fry.Freya_0.81.jar: .\bvh.fry.Freya_0.81.jar (The system cannot fin<br />
d the file specified)<br />
Ignoring mrm.MightyMoose_.2.jar: .\mrm.MightyMoose_.2.jar (The system cannot fin<br />
d the file specified)<br />
Ignoring mrm.MightyMoose_.2.jar: .\mrm.MightyMoose_.2.jar (The system cannot fin<br />
d the file specified)<br />
Ignoring winamp32.micro.MicroMacro_1.0.jar: .\winamp32.micro.MicroMacro_1.0.jar<br />
(The system cannot find the file specified)<br />
Ignoring winamp32.micro.MicroMacro_1.0.jar: .\winamp32.micro.MicroMacro_1.0.jar<br />
(The system cannot find the file specified)<br />
Downloading rating files ...<br />
Removing old participants from server ...<br />
Preparing battles list ... Using smart battles is true<br />
Prioritary battles file not found ...<br />
Executing battles ...<br />
Fighting battle 0 ... davidalves.Phoenix 0.84,rz.SmallDevil 1.502<br />
</pre><br />
Then it stops again. Just sits there. It's been like this for about 10 minutes. Is it supposed to take this long? --[[Bayen]]<br />
<br />
Try just starting Robocode from the directory where you're running the RoboRumble. (By the way, it's best if you have separate directories for the RoboRumble and your dev environment, in case you, for example, edit Shadow's .properties file to benchmark against it.) After you install a new bot, Robocode needs to extract it and add it to the database. Doing this for 1 bot doesn't take long, but for hundreds it might take a while. By starting Robocode manually, you'll at least see that it's doing stuff. -- [[Voidious]]<br />
<br />
I tried using the newest version of robocode but it doesn't work although previous versions do:<br />
<pre><br />
Fighting battle 0 ... voidious.Dookious 1.43,fnc.bandit.Bandit 5.2.0<br />
Exception in thread "Application Thread" java.lang.NumberFormatException: For in<br />
put string: "voidious.Dookious 1.43"<br />
at java.lang.NumberFormatException.forInputString(Unknown Source)<br />
at java.lang.Integer.parseInt(Unknown Source)<br />
at java.lang.Integer.parseInt(Unknown Source)<br />
at roborumble.battlesen<br />
</pre><br />
-- [[Kinsen]]<br />
<br />
I get the same error as Kinsen, anyone got a fix? -- [[Bal]]<br />
<br />
Error:<br />
<pre><br />
C:\...\robocode\robots>java -Dsun.io.useCanonCaches=false -Xmx256M -<br />
cp .;../robocode.jar;../codesize.jar; roborumble.RoboRumbleAtHome ./roborumble/r<br />
oborumble.txt<br />
Iteration number 0<br />
Downloading participants list ...<br />
Downloading missing bots ...<br />
Downloading ...abc.Shadow 3.66d<br />
Exception in thread "main" java.lang.NoClassDefFoundError: robocode/util/Utils<br />
at roborumble.netengine.BotsDownload.downloadBot(BotsDownload.java:217)<br />
at roborumble.netengine.BotsDownload.downloadMissingBots(BotsDownload.ja<br />
va:157)<br />
at roborumble.RoboRumbleAtHome.main(RoboRumbleAtHome.java:48)<br />
<br />
C:\...\robocode\robots>goto run<br />
<br />
C:\...\robocode\robots>java -Dsun.io.useCanonCaches=false -Xmx256M -<br />
cp .;../robocode.jar;../codesize.jar; roborumble.RoboRumbleAtHome ./roborumble/r<br />
oborumble.txt<br />
Iteration number 0<br />
Downloading participants list ...<br />
Downloading missing bots ...<br />
Downloading ...abc.Shadow 3.66d<br />
Exception in thread "main" java.lang.NoClassDefFoundError: robocode/util/Utils<br />
at roborumble.netengine.BotsDownload.downloadBot(BotsDownload.java:217)<br />
at roborumble.netengine.BotsDownload.downloadMissingBots(BotsDownload.ja<br />
va:157)<br />
at roborumble.RoboRumbleAtHome.main(RoboRumbleAtHome.java:48)<br />
<br />
C:\...\robocode\robots>goto run<br />
<br />
C:\...\robocode\robots>java -Dsun.io.useCanonCaches=false -Xmx256M -<br />
cp .;../robocode.jar;../codesize.jar; roborumble.RoboRumbleAtHome ./roborumble/r<br />
oborumble.txt<br />
Iteration number 0<br />
Downloading participants list ...<br />
Terminate batch job (Y/N)?<br />
</pre><br />
<br />
Here are where the folders are located:<br><br />
C:\...\...\Robocode1.2.1Beta\...<br><br />
C:\...\...\robocode\roborumble.bat<br><br />
C:\...\...\robocode\codesize.jar<br><br />
and so on<br><br />
Does anyone know what the problem is? --[[Starrynte]]<br />
<br />
Aha! I put robocode.jar in the \robocode directory and it works now!!!!! (I saw your solution, Martin).<br />
And, for the NumberFormatException, is it only with Dookious or is it with all the bots? --[[Starrynte]]<br />
<br />
Tron takes forever to download. Wait, robocoderepository is down. --[[Starrynte]]<br />
<br />
You can download all the robots in a zip, the link is at the top of the page. -- [[Kinsen]]<br />
<br />
I've waited over 1 hour to download the participants list. My internet isn't slow. Does anyone know what the problem is? --[[Starrynte]]<br />
*repository is still down, i'll see if I can zip an extra update of bots. -- [[GrubbmGait]]<br />
<br />
<br />
What's wrong if after fighting battle 0, I receive the following exception:<br />
<pre>Exception in thread "Application Thread" java.lang.NumberFormatException: For input string: "brainfade.melee.Dusk 0.44"<br />
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)<br />
at java.lang.Integer.parseInt(Integer.java:447)<br />
at java.lang.Integer.parseInt(Integer.java:497)<br />
at roborumble.battlesengine.BattlesRunner.runMeleeBattles(BattlesRunner.java:182)<br />
at roborumble.RoboRumbleAtHome.main(RoboRumbleAtHome.java:89)</pre><br />
-- [[marijnk]]<br />
<br />
Any more info, like java version, robocode version would be handy. Is the bot present in the robots-directory, can you select it and run battles with it by hand, that sort of stuff. -- [[GrubbmGait]]<br />
*java version: 1.5.0_06, robocode version 1.2.2 beta, this exception happens with any battle I try, but running battles by hand works just fine. I've already used the roborumble.txt file from the /TemporaryServerUp page... -- [[marijnk]]<br />
*It is the same problem I posted a little while ago. Somehow, the newer versions of robocode (1.2.*) don't seem to work with the client so I installed 1.1.3 for the rumble in a separate folder and run whichever version I want for my development. But I don't think the 1.1.3 installer is on SourceForge anymore. -- [[Kinsen]]<br />
**It doesn't work with 1.2.2 either (same problem as above). I guess all the newer versions of robocode don't work --[[Starrynte]]<br />
* I use 1.1.3 for my RR@Home clients, too. I uploaded the installer if you want to grab it: [http://www.dijitari.com/void/robocode/robocode-setup-1.1.3.jar robocode-setup-1.1.3.jar] -- [[Voidious]]<br />
**I have versions 1.1.2Beta,1.1.2,1.1.3Beta, 1.1.4Beta, 1.1.5, 1.2Beta, 1.2.1Beta, and 1.2.2. (I know!!! I didn't feel like deleting them). I use 1.2.2 for battles other than roborumble, but I will use 1.1.5 for roborumble. Here is a link for the 1.1.5 version: [http://www.freewebs.com/biay/robocode-setup-1.1.5.jar robocode-setup-1.1.5.jar] --[[Starrynte]]<br />
----<br />
Could the properties files of the uploaded client be corrected?<br />
<br />
I had to experiement with the RESULTSURL and RATINGS.URL parameters before I got it working when I re-installed the client.<br />
<br />
-- [[Nfwu]]<br />
<br />
*On the /TemporaryServerUp page are links to a page with a correct roborumble.txt file. But that does not seem to be the problem of [[marijnk]]. -- [[GrubbmGait]]<br />
----<br />
I get a out of memory exception when running the teamrumble.<br />
<pre><br />
Exception in thread "Battle Thread" java.lang.OutOfMemoryError: Java heap space<br />
</pre><br />
Also, where should i put the codesize.jar file? My directory is:<br><br />
C:\...\...\robocode\roborumble.bat<br><br />
C:\...\...\robocode\codesize.jar<br><br />
C:\...\...\robocode\robocode.jar<br><br />
--[[Starrynte]]<br />
<br />
In meleerumble, DoctorWho and JointStrike are the only ones i can't download.<br />
<pre><br />
Downloading ...krillr.DoctorWho 0.1.1<br />
Unable to download krillr.DoctorWho 0.1.1 from site.<br />
Could not download bot krillr.DoctorWho_0.1.1.jar<br />
Downloading ...krillr.mini.JointStrike 2.0.0<br />
Unable to download krillr.mini.JointStrike 2.0.0 from site.<br />
Could not download bot krillr.mini.JointStrike_2.0.0.jar<br />
</pre><br />
--[[Starrynte]]<br />
<br />
Removed DoctorWho from meleerumble, it was just a non-meleebot derived from Dookious. JointStrike is a valid, acceptable performing meleebot, I don't know why it is not available anymore. If you need it, you can copy the .jar from your one-on-one client or extract it from the latest zip mentioned at the top of this page. -- [[GrubbmGait]]<br />
<br />
In meleerumble, everything was going fine, and then all of a sudden I get an<br />
<pre><br />
Exception in thread "Application Thread" java.lang.ArrayIndexOutOfBoundsExceptio<br />
n: 9 >= 9<br />
at java.util.Vector.elementAt(Vector.java:432)<br />
at robocode.battle.BattleResultsTableModel.getValueAt(Unknown Source)<br />
at roborumble.battlesengine.BattlesRunner.runMeleeBattles(BattlesRunner.<br />
java:180)<br />
at roborumble.RoboRumbleAtHome.main(RoboRumbleAtHome.java:89)<br />
</pre><br />
--[[Starrynte]]<br />
<br />
Does Robocode 1.2.5 Beta work with roborumble? (just curious, that way i can update to support newer bots, i'm using version 1.1.5 right now) --[[Starrynte]]<br />
<br />
I currently use 1.2.5 Beta for own development, but still use 1.1.2 for roborumble. On [[Robocode/OldNews]] it is strongly advised not to use 1.1.5, as it is full of bugs. I did not find any problems yet with 1.2.5 Beta and am planning to try 1.2.5 as roborumble client as soon as it is released. I think every version does work as roborumble client (and RoboLeague for that matter), just choose a version that is reliable (no bugs in engine) and fire up your client! -- [[GrubbmGait]]<br />
<br />
I will do everything I possible can to make sure that the comming Robocode 1.2.6 (and Beta) will be able to run with RoboRumble@Home. --[[Fnl]]<br />
<br />
Not sure if you saw, but I posted something on [[RoboRumble/ParticipantsChat]] about this. It's not that 1.2.5A wouldn't work with RR@Home, it's just that the RR@Home client directly access some things you've refactored. It's completely reasonable and understandable that you would refactor things, so I say we just update the RoboRumble client code for the new versions. It really isn't that much work. -- [[Voidious]]<br />
<br />
Currently, it being build into Robocode with the comming version 1.3. ;-) --[[Fnl]]<br />
<br />
Is 1.3 going to become the lastest RR@home client -- [[Gorded]]<br />
<br />
I hope so! I would like to see how WeeklongObsession and WeeksOnEnd perform when they are on a level playing field! (n/m if you don't know what I'm talking about) --[[Simonton]]<br />
<br />
I will test 1.3 for RR@Home for one-on-one, melee and teams this weekend, the good results of 1.3_Beta2 during normal usage does give good hope. -- [[GrubbmGait]]<br />
<br />
Well, I was going to "start with roborumble" using an old version, to kick of some melee battles (now that I entered a melee bot, I'd love to see it perform). BUT, I don't see a link anywhere to an old, compatible version of robocode. So I guess I'll just sit tight until either the latest version is fully functional, or if it's going to be a while, maybe someone out there could zip up their rumble directory (minus the .robotcache & such) and make it available (instead of following the instructions & comments throughout these pages)? -- [[Simonton]]<br />
<br />
On SourceForge (http://sourceforge.net/project/showfiles.php?group_id=37202&package_id=29609) you can also download older versions like 1.0.7 and 1.1.3. -- [[GrubbmGait]]<br />
<br />
Ah, I was just coming back to say I found it. Thank you! However, I think I'm going to give up for a while. I got everything downloaded, unzipped, set up, etc, but it's taking FOREVER to populate the .robotcache directory. Spending all night in the lab ends right ... about ... here. -- [[Simonton]]<br />
<br />
I don't know what makes it take so long on some Windows machines. It used to take like 45 minutes on my XP install for a few hundred bots. I was amazed when it took only a couple minutes on my new MacBook; then I was amazed it took only a few minutes on that former Windows box, running Linux; then GrubbmGait said it only took a few minutes on his Windows PC. Hmmf! -- [[Voidious]]<br />
* Yep, around eight minutes on P3 1GHz with XP. I have done it quite often the last weeks ;-) . I do keep my 'robots'-directory rather clean, only 530 bots present there. -- [[GrubbmGait]]<br />
<br />
Is there any good way to get multiple instances of RoboRumble running on different machines from a shared directory, or do you pretty much have to have 2 separate copies of .robotcache? -- [[Simonton]]<br />
<br />
Yeah, you definitely want separate copies. They will also step on each other's toes with the RoboRumble temp files, so they'll get into a weird loop where they keep re-uploading battles and never erasing them. (Some of us have done this out of ignorance / by accident.) -- [[Voidious]]<br />
<br />
That's sad. There a lot of machines in this lab that are unused. And I have an application I used for some research that harnesses them all. -- [[Simonton]]<br />
<br />
It would be interesting to see a lab full of systems doing roborumble. --[[Chase-san]]<br />
<br />
Does anyone know if there's anything special I have to do to run the rumble remotely? Observe:<br />
Exception in thread "Application Thread" java.awt.HeadlessException:<br />
No X11 DISPLAY variable was set, but this program performed an operation which requires it.<br />
at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:159)<br />
at java.awt.Window.<init>(Window.java:317)<br />
at java.awt.Frame.<init>(Frame.java:419)<br />
at java.awt.Frame.<init>(Frame.java:384)<br />
at javax.swing.JFrame.<init>(JFrame.java:150)<br />
at robocode.dialog.RobocodeFrame.<init>(RobocodeFrame.java:118)<br />
at robocode.manager.WindowManager.getRobocodeFrame(WindowManager.java:55)<br />
at robocode.manager.BattleManager.startNewBattle(BattleManager.java:205)<br />
at robocode.manager.BattleManager.startNewBattle(BattleManager.java:131)<br />
at roborumble.battlesengine.RobocodeEngineAtHome.runBattle(RobocodeEngineAtHome.java:97)<br />
at roborumble.battlesengine.BattlesRunner.runMeleeBattles(BattlesRunner.java:171)<br />
at roborumble.RoboRumbleAtHome.main(RoboRumbleAtHome.java:89)<br />
Apparently robocode tries to create a "RobocodeFrame" even when being controlled by the rumble? Is there any way to stop that? Thanks, -- [[Simonton]]<br />
<br />
Hmm... I have run it remotely, and I remember having an issue with that, but I'm trying to think how I solved it. I might have connected with something that had X11 forwarding, like Unix's "ssh -Y", X-Win on Windows, or X11 on a Mac. Or maybe there's some type of -nodisplay argument you can pass to Java? -- [[Voidious]]<br />
<br />
Hmm ... the "ssh -Y" got me closer than "ssh -X" was. That probably is how you did it. Now is the problem that I'm sitting behind a firewall that won't forward X requests to my machine, and whose settings I can't change. It's wierd to me that robocode is creating a JFrame that it doesn't even plan to display. I guess RobocodeFrame must do something necessary even if it's not going to be visible. -- [[Simonton]]<br />
<br />
Well, I think I just found one and tried it, and it still didn't work. It still cites my router as denying the thing. *sigh* -- [[Simonton]]<br />
<br />
I don't think the RobocodeFrame is needed for RoboRumble, when the GUI is not active. However, the robocode.control.RobocodeEngine might expect the RobocodeFrame to be ready, if setVisible(true) is suddenly called. With Robocode itself, you just add the -nodisplay options to the batch file. Then the GUI is completely disabled and newer invoked. But this is not the case for RoboRumble yet. I will look into this issue when I get time for it. ;-) --[[Fnl]]<br />
<br />
I just had a look into Robocode 1.3 (including the new RoboRumble). Here the RobocodeFrame is not invoked. --[[Fnl]]<br />
<br />
Wow, there's so many great improvements in 1.3! -- [[Simonton]]<br />
<br />
Hey Yellow: I just zipped up a copy of all the bots I have in my rumble directory (which has all but some of the newest 1v1 bots). How do I get it to you? (It's 28MB, so I can't just email it) -- [[Simonton]]<br />
<br />
Hey. 28MB? Hmm, I got the ones posted by PEZ and rolled in the ones posted by Krabb and I get 49MB rar'd! Although I have seen lots of versions of various bot's in that package, so I'm thinking either you've got rid off the versions not needed - or in PEZ's downloads and Krabb's together I have a lot of bots that arent in the rumble?<br />
<br />
I'm working atm, I'll look into making a temp area on a machine for you to upload to when I get home, unless you have anywhere that can host it until I download it from there?<br />
[[YellowAlienBaby]]<br />
<br />
Mine is contaminated with old versions, sorry :P --[[Krabb]]<br />
<br />
Hehe. 28 is a lot smaller than 49 :). I set it to "maximum compression", but still each jar is only compressed like 4-9%. You must have a lot of duplicate versions (or maybe just duplicates versions of some very mega bots). -- [[Simonton]]<br />
<br />
* <nowiki>*looks around suspiciously*</nowiki> -- [[Voidious]]<br />
<br />
* You can probably get rid of the duplicates using Martin's nice tool: [[RumbleCacheTool]] -- [[Kinsen]]<br />
<br />
Ok. Not ideal, but you can post it as an attachment (link to the left of the 'More Actions' box) on this page for now;<br />
* http://tsmwiki.com/tsmwiki/MatthewWarren<br />
I'll grab it when it appears and put it up for d/load.<br />
<br />
* There you go, sir. -- [[Simonton]]<br />
<br />
Ok I see it. Another wait until I can access the machine from the other side. Should be available this evening sometime :)<br />
-- [[YellowAlienBaby]]<br />
<br />
Thats posted. I've edited the link up near the top of this page and here's another one http://tsmwiki.com/robocode/allbots.zip<br />
<br />
The versions that you have to use, 1.0.6 through 1.1.3... I don't see them on sourceforge, are they still available? Are new RR@Home agents being accepted? --[[BenHorner]]<br />
<br />
The new versions of Robocode come with the roborumble already integrated. No need to download an old version. =) -- [[Skilgannon]]<br />
<br />
We need to seriously update this page. Like archive it and start over with a simple: download the bots here, put your name in the config file and double-click the .bat. I can do this, but probably not until Monday night. -- [[Simonton]]<br />
<br />
----<br />
<br />
I tried to get RR@H running just now... it downloaded a ton of bots, but then on some it said it couldn't, on some it said it was ignoring it because the files didn't exist, and then finally it errored out. Here are some samples of the failed download messages:<br />
<pre><br />
Trying to download Krabb.krabby2.Krabby2 1.9o<br />
Could not find Krabb.krabby2.Krabby2 1.9o from http://designnj.de/robocode/Krabb.krabby2.Krabby2_1.9o.jar<br />
Could not download Krabb.krabby2.Krabby2_1.9o.jar<br />
<br />
Ignoring Krabb.krabby2.Krabby2_1.9o.jar: ./robots/Krabb.krabby2.Krabby2_1.9o.jar (No such file or directory)<br />
</pre><br />
Here is the error out part:<br />
<pre><br />
Downloading rating files ...<br />
Removing old participants from server ...<br />
Preparing battles list ... Using smart battles is true<br />
Prioritary battles file not found ... <br />
Executing battles ...<br />
Fighting battle 0 ... gio.RealGioBot 1.0,ch.rhj.rbc.RHJ1 1.0<br />
Exception in thread "gio.RealGioBot 1.0" JavaAWT: Assertion failure: Java exception thrown<br />
JavaAWT: File src/macosx/native/apple/awt/util/AWTException.m; Line 40<br />
JavaAWT: Assertion failure: _javaException<br />
JavaAWT: File src/macosx/native/apple/awt/util/AWTException.m; Line 48<br />
JavaAWT: Assertion failure: _javaException != ((void *)0)<br />
JavaAWT: File src/macosx/native/apple/awt/util/AWTException.m; Line 148<br />
Exception in thread "gio.RealGioBot 1.0" JavaAWT: Assertion failure: Java exception thrown<br />
JavaAWT: File src/macosx/native/apple/awt/util/AWTException.m; Line 40<br />
JavaAWT: Assertion failure: _javaException<br />
JavaAWT: File src/macosx/native/apple/awt/util/AWTException.m; Line 48<br />
2007-09-23 20:31:03.734 java[24110] *** Uncaught exception: <AwtException> See Java exception object<br />
./roborumble.sh: line 2: 24110 Trace/BPT trap java -Xmx256M -Dsun.io.useCanonCaches=false -cp libs/robocode.jar:libs/codesize.jar:libs/roborumble.jar roborumble.RoboRumbleAtHome ./roborumble/roborumble.txt<br />
</pre><br />
If anyone knows what this means, or knows how to fix it, please let me know... I used the script roborumble.sh to kick this off. I'm on a Mac if that explains anything...<br />
<br />
--[[BenHorner]]<br />
<br />
I am on a Mac and I have gotten some similar errors in the past, but it has been fixed since Robocode 1.3.5. We never did really figure out what was causing it, but it went away. I have no problems with 1.4 but I haven't tested 1.4.4 or 1.4.5 yet; I'll do that now. What versions of Robocode and Java are you using? -- [[Voidious]]<br />
<br />
Ha, edit conflict. Look what I was going to write:<br />
<br />
<blockquote><br />
I can tell you what the first part means, that says that those bot JARs don't exist on the host site. Chances are the author deleted them or the domain name doesn't exist anymore. As a result, RoboRumble can't download them and is ignoring those bots. As for the second part, being on a Mac explains a lot from what I have heard. Wait for Voidious to come along. =) -- [[AaronR]]<br />
</blockquote><br />
<br />
=D -- [[AaronR]]<br />
<br />
Heh :P Apple does their own version of the JVM, so there are some differences, as seen here, though I can't really figure out what those errors mean. It's a little odd that anything is happening with AWT in the RoboRumble, but I still can't quite troubleshoot it as of now. For what it's worth, I am getting these same errors with RoboRumble 1.4.4, so it's nothing with your config. I am using 1.4 for the RoboRumble and it works fine. One of us should submit a bug report over at SourceForge about this... I probably won't get to it tonight, but I will tomorrow if you haven't yet. -- [[Voidious]]<br />
<br />
My problems after pasting robocode.jar and codesize.jar everywhere :)<br />
<pre><br />
C:\robocode\robots>java -Dsun.io.useCanonCaches=false -Xmx256M -cp .;..\robocode<br />
.jar;..\codesize.jar; roborumble.RoboRumbleAtHome .\roborumble\roborumble.txt<br />
Iteration number 0<br />
Downloading participants list ...<br />
Downloading missing bots ...<br />
Downloading ...AIR.iRobot 1.0<br />
Unable to download AIR.iRobot 1.0 from site.<br />
Could not download bot AIR.iRobot_1.0.jar<br />
Downloading ...altglass.Cruiser 2007-01-29<br />
Exception in thread "main" java.lang.NoSuchMethodError: robocode.util.Utils.copy<br />
(Ljava/io/File;Ljava/io/File;)Z<br />
at roborumble.netengine.BotsDownload.downloadBot(BotsDownload.java:217)<br />
at roborumble.netengine.BotsDownload.downloadMissingBots(BotsDownload.ja<br />
va:157)<br />
at roborumble.RoboRumbleAtHome.main(RoboRumbleAtHome.java:49)<br />
<br />
C:\robocode\robots>goto run<br />
</pre><br />
repeat forever on same bot.<br />
<br />
--[[Miked0801]]<br />
<br />
Hey, have you downloaded a recent version of Robocode? The RoboRumble is integrated, so it should be relatively simple - just run roborumble.bat or roborumble.sh. =) Not that there aren't issues sometimes, but the above sounds like something else, I'm not really sure. Links and updates are on the [[Robocode/News]] page. -- [[Voidious]]<br />
<br />
Put a new 'update-zip' ready for download, see near the top of the page. I have a complete zip without any 'obsolete' versions ready for one-on-one (570 entrants), but it is 14Mb and I don't have that freeon my webspace. -- [[GrubbmGait]]<br />
<br />
[[Category:Discussions]]</div>Nfwuhttp://robowiki.net/w/index.php?title=Talk:RoboRumble/Contributing_to_RoboRumble&diff=3397Talk:RoboRumble/Contributing to RoboRumble2008-11-01T00:47:10Z<p>Nfwu: Migration</p>
<hr />
<div>{{CreditForOldWikiArticle|oldpage=RoboRumble/StartingWithRoboRumble}}<br />
<br />
<br />
== Old Wiki ==<br />
----<br />
I presume all older issues are not valid anymore, otherwise you can find them on [[RoboRumble/StartingWithRoboRumbleOld|/StartingWithRoboRumbleOld]] or put them here below again.<br />
----<br />
<br />
Sweet. Much easier now thanks. How can I control how many battles are run at once? Or should I just setup a for loop in a batch file for that? --[[Miked0801]]<br />
* Halfway the file "roborumble.txt" you'll find "NUMBATTLES=xx", there you fill in the number of battles fought before uploading results and quitting robocode. In the batch-file I have made an infinitive loop so my client can run unattended all night. -- [[GrubbmGait]]<br />
* (Edit conflict) There are .txt files for each type of rumble - roborumble.txt, meleerumble.txt, and teamrumble.txt - in the 'roborumble' directory. The "NUMBATTLES" controls how many are run before uploading, "BATTLESPERBOT" is the minimum number of battles a bot needs before it stops getting priority, and "USER" is just to identify yourself in the logs and such. I have mine with "ITERATE=NOT" and I do use a shell script that loops to keep it running. -- [[Voidious]]<br />
<br />
this bash script will be good for unix "roborumbler". Run forever battles, it catch standard and error stream and put it to a file in the directory ./log/tempNUMBER_OF_BATTLE.txt (the script have to be in the roborumble directory). For Linux: save it to a file in the roborumble directory, right click and set the file executable, create a directory called "log", then run the script from shell:<br />
<pre><br />
#!/bin/bash<br />
<br />
echo # new line<br />
count=0<br />
while [ "$var1" != "fine" ] # forever<br />
do<br />
let "count=count+1"<br />
echo "battle n: " $count<br />
sh roborumble.sh &> ./log/temp$count.txt<br />
echo<br />
done <br />
<br />
exit 0<br />
</pre><br />
<br />
p.s.: it's very useful for catch error, someone can traslate the script in windows's dos?<br />
[[Asdasd]]<br />
<br />
Wow - is 256MB still the default for the rumble? Why not at least 512, if robocode's default itself is 512? -- [[Simonton]]<br />
<br />
I'm not sure - maybe because the GUI takes a lot of memory? -- [[Skilgannon]]<br />
<br />
Ehh, the GUI shouldn't, not compared to many adaptive bots (particularly log targeting). Personally I always set 512MB in the rumble, and the only time I've had an out of memory problem with 512MB was when some particularly memory-heavy team (can't remember which one) was going. Personally I'd support defaulting to 512MB, at least for teams/melee, if [[Fnl]] is listening :-) -- [[Rednaxela]]<br />
<br />
Can someone please zip a new update, i've unzipped the archives above and still get a ton of "Ignoring xxx..." message because they weren't download...thank you! (or even better someone start a new repository and put the zipped bots there...) --[[Starrynte]]</div>Nfwuhttp://robowiki.net/w/index.php?title=RoboRumble/Contributing_to_RoboRumble&diff=3396RoboRumble/Contributing to RoboRumble2008-11-01T00:45:05Z<p>Nfwu: Migration</p>
<hr />
<div>{{:RoboRumble/Navigation}}<br />
<br />
<b>To collaborate with RR@H</b><br />
<br />
If you entered a bot into the competition, you could consider to collaborate running the competition by using your computer to execute battles and upload results (similar to Seti@home project). The process is fully automated, so there is no pain on doing it.<br />
<br />
# Make a separate installation of Robocode in a different directory (like c:\robohome), so running the client will not influence your own development and vice versa. <b>Please only use versions 1.5.4 or 1.6.0, as they are proven stable.</b><br />
# Edit "roborumble\roborumble.txt" file and change the Put_Your_Name_Here to your nick.<br />
# Extract all the zip-files below into the "robots" directory<br />
# Start the client using roborumble.bat or roborumble.sh (depending on the OS). The first time it can take more than 15 minutes before all jar-files are examined!<br />
#* Or, on your first time you can start robocode with robocode.bat or robocode.sh (depending on OS), wait for the robocode database to be updated, then close robocode and run roborumble.bat/roborumble.sh normally.<br />
# Run it as much time as you can. The more you run it, the more you contribute. It is fully automated, so you don't have to care at all.<br />
# If you find problems, refer to RoboRumble related pages, or post your issue and we will try to solve it.<br />
----<br />
To get a reasonably up-to-date set of robots for the rumble to start with, grab the following zip file and move the 300 jars inside it to your RR@H robots directory:<br />
* http://robowiki.net/robocode/rrath_participants.zip<br />
* http://www.krillrfiles.com/robocode/rrath_participants.zip<br />
And get the 308 updates since 20041017 till 20070929:<br />
* http://home.versatel.nl/gheijenk/robocode/things/rrath_add_20070929.zip<br />
And get the 117 updates since 20070929 till 20080711:<br />
* http://home.versatel.nl/gheijenk/robocode/things/rrath_add_20080711.zip<br />
<br />
The same for the meleerumble:<br />
* http://home.versatel.nl/gheijenk/robocode/things/ParticipantsMelee_20080726.zip<br />
<br />
And also for the teamrumble:<br />
* http://home.versatel.nl/gheijenk/robocode/things/ParticipantsTeam_20080726.zip<br />
<br />
----<br />
Issues on starting off with RoboRumble can be discussed on the [[Talk:RoboRumble/Starting With RoboRumble|talk page]].<br><br />
Old issues are archived at [[RoboRumble/StartingWithRoboRumbleOld]].<br />
----<br />
__NOTOC__<br />
<br />
== Useful options in roborumble.txt ==<br />
* "'''USER'''": Your name/handle, used for identification of your roborumble client.<br />
* "'''BATTLESPERBOT'''" is the minimum number of battles a bot needs before it stops getting priority.<br />
* "'''NUMBATTLES'''", the number of battles fought on each run of roborumble.<br />
** If you want the roborumble client to run battles indefinitely, use one of the following scripts.<br />
<br />
== Batch script for Windows users ==<br />
<pre><br />
@echo off<br />
title RoboRumble@Home Client<br />
:run<br />
java -Xmx512M -Dsun.io.useCanonCaches=false -cp libs/robocode.jar;libs/codesize.jar;libs/cachecleaner.jar robocode.Robocode 2>> ./log.txt<br />
echo ---<br />
goto run<br />
</pre><br />
Appends stderr output only to log.txt.<br />
<br />
<br />
== Bash script for *nix users ==<br />
This bash script will be good for unix "roborumbler". Run forever battles, it catch standard and error stream and put it to a file in the directory ./log/tempNUMBER_OF_BATTLE.txt (the script have to be in the roborumble directory). For Linux: save it to a file in the roborumble directory, right click and set the file executable, create a directory called "log", then run the script from shell:<br />
<pre><br />
#!/bin/bash<br />
<br />
echo # new line<br />
count=0<br />
while [ "$var1" != "fine" ] # forever<br />
do<br />
let "count=count+1"<br />
echo "battle n: " $count<br />
sh roborumble.sh &> ./log/temp$count.txt<br />
echo<br />
done <br />
<br />
exit 0<br />
</pre></div>Nfwuhttp://robowiki.net/w/index.php?title=FuturePosition&diff=3395FuturePosition2008-10-31T13:12:01Z<p>Nfwu: Migrating page</p>
<hr />
<div>{{CreditForOldWikiArticle|oldpage=FuturePostion|author=[[Albert]]}}<br />
<br />
Code is by [[Albert]].<br />
<br />
The parameters are like follows:<br />
* steps - number of ticks you want to predict.<br />
* b - is your robot. Just use "this".<br />
* maxVel and maxTurnRate - the maximum velocity and turn rate allowed. Use them only if you have used setMaxVelocity() or setMaxTurnRate() <br />
----<br />
<pre><br />
package apv;<br />
<br />
import java.awt.geom.Point2D;<br />
import java.util.Vector;<br />
import robocode.util.*;<br />
import robocode.*;<br />
<br />
public class MovSim {<br />
<br />
private double systemMaxTurnRate = Math.toRadians(10.0);<br />
private double systemMaxVelocity = 8.0;<br />
private double maxBraking = 2.0;<br />
private double maxAcceleration = 1.0;<br />
<br />
<br />
public double defaultMaxTurnRate = 10.0;<br />
public double defaultMaxVelocity = 8.0;<br />
<br />
<br />
public MovSim() {};<br />
<br />
<br />
public MovSimStat[] futurePos(int steps, AdvancedRobot b) { return futurePos(steps, b, defaultMaxVelocity, defaultMaxTurnRate); }<br />
<br />
public MovSimStat[] futurePos(int steps, AdvancedRobot b, double maxVel, double maxTurnRate) {<br />
return futurePos(steps, b.getX(), b.getY(), b.getVelocity(), maxVel, b.getHeadingRadians(), b.getDistanceRemaining(), b.getTurnRemainingRadians(), maxTurnRate, b.getBattleFieldWidth(), b.getBattleFieldHeight());<br />
}<br />
<br />
<br />
private MovSimStat[] futurePos(int steps, double x, double y, double velocity, double maxVelocity, double heading, double distanceRemaining, double angleToTurn, double maxTurnRate, double battleFieldW, double battleFieldH) {<br />
//maxTurnRate in degrees<br />
MovSimStat[] pos = new MovSimStat[steps];<br />
double acceleration = 0;<br />
boolean slowingDown = false;<br />
double moveDirection;<br />
<br />
maxTurnRate = Math.toRadians(maxTurnRate);<br />
if (distanceRemaining == 0) moveDirection = 0; else if (distanceRemaining < 0.0) moveDirection = -1; else moveDirection = 1;<br />
<br />
//heading, accel, velocity, distance<br />
for (int i=0; i<steps; i++) {<br />
//heading<br />
double lastHeading = heading;<br />
double turnRate = Math.min(maxTurnRate, ((0.4 + 0.6 * (1.0 - (Math.abs(velocity) / systemMaxVelocity))) * systemMaxTurnRate));<br />
if (angleToTurn > 0.0) {<br />
if (angleToTurn < turnRate) { heading += angleToTurn; angleToTurn = 0.0; } <br />
else { heading += turnRate; angleToTurn -= turnRate; }<br />
} else if (angleToTurn < 0.0) {<br />
if (angleToTurn > -turnRate) { heading += angleToTurn; angleToTurn = 0.0; } <br />
else { heading -= turnRate; angleToTurn += turnRate; }<br />
}<br />
heading = Utils.normalAbsoluteAngle(heading);<br />
//movement<br />
if (distanceRemaining != 0.0 || velocity != 0.0) { <br />
//lastX = x; lastY = y;<br />
if (!slowingDown && moveDirection == 0) {<br />
slowingDown = true;<br />
if (velocity > 0.0) moveDirection = 1;<br />
else if (velocity < 0.0) moveDirection = -1;<br />
else moveDirection = 0;<br />
}<br />
double desiredDistanceRemaining = distanceRemaining;<br />
if (slowingDown) {<br />
if (moveDirection == 1 && distanceRemaining < 0.0) desiredDistanceRemaining = 0.0;<br />
else if (moveDirection == -1 && distanceRemaining > 1.0) desiredDistanceRemaining = 0.0;<br />
}<br />
double slowDownVelocity = (double) (int) (maxBraking / 2.0 * ((Math.sqrt(4.0 * Math.abs(desiredDistanceRemaining)+ 1.0)) - 1.0));<br />
if (moveDirection == -1) slowDownVelocity = -slowDownVelocity;<br />
if (!slowingDown) {<br />
if (moveDirection == 1) {<br />
if (velocity < 0.0) acceleration = maxBraking;<br />
else acceleration = maxAcceleration;<br />
if (velocity + acceleration > slowDownVelocity) slowingDown = true;<br />
} else if (moveDirection == -1) {<br />
if (velocity > 0.0) acceleration = -maxBraking;<br />
else acceleration = -maxAcceleration;<br />
if (velocity + acceleration < slowDownVelocity) slowingDown = true;<br />
}<br />
}<br />
if (slowingDown) {<br />
if (distanceRemaining != 0.0 && Math.abs(velocity) <= maxBraking && Math.abs(distanceRemaining) <= maxBraking) slowDownVelocity = distanceRemaining;<br />
double perfectAccel = slowDownVelocity - velocity;<br />
if (perfectAccel > maxBraking) perfectAccel = maxBraking;<br />
else if (perfectAccel < -maxBraking) perfectAccel = -maxBraking;<br />
acceleration = perfectAccel;<br />
}<br />
if (velocity > maxVelocity || velocity < -maxVelocity) acceleration = 0.0;<br />
velocity += acceleration;<br />
if (velocity > maxVelocity) velocity -= Math.min(maxBraking, velocity - maxVelocity);<br />
if (velocity < -maxVelocity) velocity += Math.min(maxBraking, -velocity - maxVelocity);<br />
double dx = velocity * Math.sin(heading); double dy = velocity * Math.cos(heading);<br />
x += dx; y += dy;<br />
//boolean updateBounds = false;<br />
//if (dx != 0.0 || dy != 0.0) updateBounds = true;<br />
if (slowingDown && velocity == 0.0) { distanceRemaining = 0.0; moveDirection = 0; slowingDown = false; acceleration = 0.0; }<br />
//if (updateBounds) updateBoundingBox();<br />
distanceRemaining -= velocity;<br />
if (x<18 || y<18 || x>battleFieldW-18 || y>battleFieldH-18) {<br />
distanceRemaining = 0;<br />
angleToTurn = 0;<br />
velocity = 0;<br />
moveDirection = 0;<br />
x = Math.max(18,Math.min(battleFieldW-18,x));<br />
y = Math.max(18,Math.min(battleFieldH-18,y));<br />
}<br />
}<br />
//add position<br />
pos[i] = new MovSimStat(x,y,velocity,heading,Utils.normalRelativeAngle(heading-lastHeading));<br />
}<br />
return pos; <br />
}<br />
<br />
}<br />
</pre><br />
----<br />
<pre>package apv;<br />
<br />
public class MovSimStat {<br />
public double x;<br />
public double y;<br />
public double v;<br />
public double h;<br />
public double w;<br />
<br />
<br />
public MovSimStat(double x, double y, double v, double h, double w) {<br />
this.x = x; this.y = y; this.v = v; this.h = h; this.w = w; <br />
}<br />
<br />
<br />
<br />
}<br />
</pre><br />
<br />
----<br />
Way cool. I have seen a discussion about this somewhere else, but no solution. Yet, could you enlighten us about when this could be useful? AntiMirrorTargeting comes to mind, is that correct? -- [[PEZ]]<br />
<br />
I'm experimenting with two ideas that need it: first one is DodgingBullets (coded a prototype that makes FloodMicro to score 0.3 hits in average per round), second one is to build a SandBoxFlattener with pattern repetition avoidance. Right now, none of them works as expected :-( Anyway, I think there can be lots of uses for it, and it's this kind of basic routine that speeds up development (Robocode is much funnier if you can test your ideas without spending much time programming). Also, another use that comes to my mind is to avoid collitions between team mates in a team competition -- [[Albert]]<br />
<br />
<br />
----<br />
<br />
Wow. I'm impressed; this code seems to handle wall collisions and everything. Back when I had the good old SineSweep, I had a class similar to this, but it didn't do wall collisions and IIRC it didn't do acceleration properly. Nonetheless, since it rarely changed acceleration, it could predict it's future position with like 99.9999999% accuracy, and before shooting it's gun it always checked to make sure it was within a millionth of a degree of where it predicted it should be; any less accurate would risk missing the bullet interception. This plus it's mathematical algorithm for intersecting the bullet trails at their midpoints made for an extremely complicated robot framework because the gunning and movement were so integrated. I can't wait for summer so I can start rebuilding it... -- [[Vuen]]<br />
<br />
I know I need to use this, but I am trying to figure where and how, it figures where I am going to be according to my set turn and ahead? -- [[AvihooI]]<br />
<br />
If using a targeting method that tries to predict where the opponent will be in order to hit him with a bullet, you need to simulate their predicted movement within the constraints of the Robocode engine. Similarly if you are trying to predict where your movement will take you so that you don't run into walls, robots, or anticipated bullet trajectories, you will need the same tool. I don't use this code, but I made my own version, and I use it for the prediction I described. -- Martin<br />
<br />
Yep, what he said. I only use it for WaveSurfing, predicting several movement options and finding exactly where I'd be when the bullet hits me (if it would hit me). The simple way to use it is, like you said, to use setAhead, setBack, and/or setTurnXXX, and then call _instanceOfMoveSim.futurePos(steps, _robot); that returns an array of MovSimStat objects, indexed zero (next tick) to steps-1 (steps ticks in future). Here's a pretty simple code snippet that is a good example:<br />
<pre><br />
public static double nextY(AdvancedRobot robot) {<br />
if (moveSimulator == null) {<br />
moveSimulator = new MovSim();<br />
}<br />
<br />
MovSimStat[] next = moveSimulator.futurePos(1, robot);<br />
<br />
return next[0].y;<br />
}<br />
</pre><br />
When you do setXXX a second time, it overwrites whatever you did the first time. I also made that last method "public", and interact with it directly, because there are certain things I recalculate each tick (like WallSmoothing and distancing). Beware that the heading and turn rate (w) are in radians. -- [[Voidious]]<br />
<br />
Ok, it seems that this allows me to create some sort of continuous movement by checking where I am going to be, and adjust my movement if I don't like it.<br />
Now that I think about it, it's much more logical this way because I can't be mistaken about my movement, I'd just keep checking it until I am satisfied, ohh and just for the record, I prefer to use Radians in any case. -- [[AvihooI]]<br />
<br />
Really, really handy. Thanks for putting in all the extra work so the rest of us don't have to. For the record, I hate java coding standards. Line breaks and aligned parenthesis make everything so much easier to read. What's with the fear of whitespace these days? Oh well, I guess that's just me. Again, very nice work. --[[Speal]]<br />
<br />
Nice code, I just ran a test of it on a surfer I have in the works (not seraphim who is still running a badly written version of my own(which may explain its ranking)), but i'm sure I got something wrong. I'm attempting to use it on a go-To surfer type deal, so I am directly calling the last method. I have a question, for the distanceRemaining, what would be the value to put there? I am currently using 100. Also how do you get it to correctly map a oribit, I use the angleToEnemy+Math.PI/2 and angleToEnemy-Math.PI/2 for both the heading and angleToTurn (I tried others but it didn't work as well as this has so far) for each direction. --[[Chase-san]]<br />
<br />
Well, one thing noteworthy about this code is that you can just pass it an AdvancedRobot and have it predict the position based on the commands currently given to the robot with the setXXX methods. The "distance remaining" would be the distance the robot still has to travel until it has completed its movements and comes to a stop; it should be negative if you're moving backwards and positive if you're not. The heading is your current heading, and the "amount to turn" would be (angle you want to move at - your current heading), all in radians. In the current [[Dookious]], you could look at my usage in <nowiki>/voidious/utils/DUtils.java</nowiki>, it should be relatively clear and is definitely correct. -- [[Voidious]]<br />
<br />
Yah, I noticed when I got home that I had that exact file up, I was searching through your code looking for how dookious used MovSim, I had to break off my saerch for it early for class. However, I wanted to know the best distanceREmaining for prediction multiple turns into the future, as so I can get the positions leading up to when the closest wave would hit. --[[Chase-san]]<br />
<br />
I just use 1000 or -1000, it would tick 125+ ticks to go that far and it doesn't matter how big it is. -- [[Voidious]]<br />
<br />
Well, I made a version of this that has built in smoothing (via Voidious' method), however it seems to not work for the left side(which may be due to shortcuts I took in simplifing the method, but I doupt this). But at any rate, now I need to tell the bot how to orbit with a combination of TurnAngle and the maxTurnAngle. --[[Chase-san]]<br />
<br />
[[Category:Discussions]][[Category:Code Snippets]]</div>Nfwuhttp://robowiki.net/w/index.php?title=WaveSurfing/PrecisePrediction&diff=3394WaveSurfing/PrecisePrediction2008-10-31T13:07:25Z<p>Nfwu: How silly of me</p>
<hr />
<div>#REDIRECT [[Wave_Surfing/Precise_Prediction]]<br />
<br />
[[Category:CamelCase redirect]]</div>Nfwuhttp://robowiki.net/w/index.php?title=WaveSurfing/PrecisePrediction&diff=3393WaveSurfing/PrecisePrediction2008-10-31T13:07:13Z<p>Nfwu: CamelCase redirect</p>
<hr />
<div>#REDIRECT [[WaveSurfing/PrecisePrediction]]<br />
<br />
[[Category:CamelCase redirect]]</div>Nfwuhttp://robowiki.net/w/index.php?title=Category:CamelCase_redirect&diff=3392Category:CamelCase redirect2008-10-31T13:06:55Z<p>Nfwu: Just so that I don't see red links.</p>
<hr />
<div>Redirects that are from the CamelCase title to the actual page.</div>Nfwuhttp://robowiki.net/w/index.php?title=Talk:Precise_Prediction&diff=3390Talk:Precise Prediction2008-10-31T13:05:29Z<p>Nfwu: Talk:Precise Prediction moved to Talk:Wave Surfing/Precise Prediction: heh</p>
<hr />
<div>{{CreditForOldWikiArticle|oldpage=WaveSurfing/PrecisePrediction|author=[[PEZ]]}}<br />
<br />
==Old Wiki==<br />
<br />
A technique used by I think all expert wave surfers. Using Robocode physics to precisely predict your bots position when the surfed wave hits gives you the richest information possible. Then it's up to the descision mechanism to move accordingly. Look at the pages FuturePosition and [[Apollon]] for ways to implement this. Also try [[PPP]] and check its source code for an implementation of the [[Apollon]] published code. PPP also has RobocodeGLV014 debug output code which might make it easier to experiment with this. -- [[PEZ]]<br />
<br />
==== Bots using: ====<br />
* [[Aleph]]<br />
* [[Apollon]] ([[MiniBot]])<br />
* [[Ascendant]]<br />
* BasicSurfer<br />
* CassiusClay<br />
* [[Chalk]]<br />
* [[Cyanide]]<br />
* [[Crusader]]<br />
* [[DarkHallow]]<br />
* [[Dookious]]<br />
* [[Engineer]]<br />
* RaikoMX<br />
* [[Komarious]] ([[MiniBot]])<br />
* [[Krabby2]]<br />
* [[Okami]]<br />
* [[Pear]]<br />
* [[Phoenix]]<br />
* [[PowerHouse]]<br />
* [[PPP]] - The name is short for Precise Prediction Pugilist<br />
* [[PulsarMax]]<br />
* [[Shadow]]<br />
* [[Strength]]<br />
* [[Toad]]<br />
* [[SilverSurfer]]<br />
* [[WaveSerpent]]<br />
* [[YALT]]<br />
<p><br />
----<br />
==== Comments anyone? ====<br />
<br />
You are right about Shadow, PEZ. In it's first WaveSurfing versions (2.31) it didn't acount for wallSmoothing, though. -- [[ABC]]<br />
<br />
Added a few bots, but I'm sure plenty are still missing. I'm just guessing about [[Ascendant]]... hehe. =) -- [[Voidious]]</div>Nfwuhttp://robowiki.net/w/index.php?title=Precise_Prediction&diff=3388Precise Prediction2008-10-31T13:05:28Z<p>Nfwu: Precise Prediction moved to Wave Surfing/Precise Prediction: heh</p>
<hr />
<div>{{stub}}<br />
<br />
A technique used by I think all expert wave surfers. Using RoboCode physics to precisely predict your bots position when the surfed wave hits gives you the richest information possible. Then it's up to the decision mechanism to move accordingly. Look at the pages [[FuturePosition]] and [[Apollon]] for ways to implement this. Also try [[PPP]] and check its source code for an implementation of the [[Apollon]] published code.<br />
<br />
[[Category:Movement]]</div>Nfwuhttp://robowiki.net/w/index.php?title=Precise_Prediction&diff=3387Precise Prediction2008-10-31T13:05:14Z<p>Nfwu: Migrating page</p>
<hr />
<div>{{stub}}<br />
<br />
A technique used by I think all expert wave surfers. Using RoboCode physics to precisely predict your bots position when the surfed wave hits gives you the richest information possible. Then it's up to the decision mechanism to move accordingly. Look at the pages [[FuturePosition]] and [[Apollon]] for ways to implement this. Also try [[PPP]] and check its source code for an implementation of the [[Apollon]] published code.<br />
<br />
[[Category:Movement]]</div>Nfwuhttp://robowiki.net/w/index.php?title=Talk:Precise_Prediction&diff=3386Talk:Precise Prediction2008-10-31T13:03:49Z<p>Nfwu: Transfer</p>
<hr />
<div>{{CreditForOldWikiArticle|oldpage=WaveSurfing/PrecisePrediction|author=[[PEZ]]}}<br />
<br />
==Old Wiki==<br />
<br />
A technique used by I think all expert wave surfers. Using Robocode physics to precisely predict your bots position when the surfed wave hits gives you the richest information possible. Then it's up to the descision mechanism to move accordingly. Look at the pages FuturePosition and [[Apollon]] for ways to implement this. Also try [[PPP]] and check its source code for an implementation of the [[Apollon]] published code. PPP also has RobocodeGLV014 debug output code which might make it easier to experiment with this. -- [[PEZ]]<br />
<br />
==== Bots using: ====<br />
* [[Aleph]]<br />
* [[Apollon]] ([[MiniBot]])<br />
* [[Ascendant]]<br />
* BasicSurfer<br />
* CassiusClay<br />
* [[Chalk]]<br />
* [[Cyanide]]<br />
* [[Crusader]]<br />
* [[DarkHallow]]<br />
* [[Dookious]]<br />
* [[Engineer]]<br />
* RaikoMX<br />
* [[Komarious]] ([[MiniBot]])<br />
* [[Krabby2]]<br />
* [[Okami]]<br />
* [[Pear]]<br />
* [[Phoenix]]<br />
* [[PowerHouse]]<br />
* [[PPP]] - The name is short for Precise Prediction Pugilist<br />
* [[PulsarMax]]<br />
* [[Shadow]]<br />
* [[Strength]]<br />
* [[Toad]]<br />
* [[SilverSurfer]]<br />
* [[WaveSerpent]]<br />
* [[YALT]]<br />
<p><br />
----<br />
==== Comments anyone? ====<br />
<br />
You are right about Shadow, PEZ. In it's first WaveSurfing versions (2.31) it didn't acount for wallSmoothing, though. -- [[ABC]]<br />
<br />
Added a few bots, but I'm sure plenty are still missing. I'm just guessing about [[Ascendant]]... hehe. =) -- [[Voidious]]</div>Nfwuhttp://robowiki.net/w/index.php?title=Saving&diff=3385Saving2008-10-31T12:55:53Z<p>Nfwu: /* Other */ - correcting grammar and link</p>
<hr />
<div>== How ==<br />
=== Static Variables ===<br />
The easiest way to save data between rounds is to make your variables static. There is no need to save data to a file and retrieve it. You usually store the enemy information you collected in previous rounds (if you need it later) or information stored in files that you need to read only once.<br />
<br />
Note: Multiple instances of the same bot on the field do not result them in sharing static variables, even though they are of the same class. This is because each robot is created by separate ClassLoaders, so that they do not share static variables.<br />
<br />
=== Serialization ===<br />
Serializable means that a class can be converted into an array of bytes which can then be written to disk, sent over a network, etc. For a class to be Serializable it must:<br />
* have no member variables which hold non-serializable classes, and <br />
* implement the Serializable interface. <br />
<br />
The only real problem you can run into is if you have an object with a lot of references to other objects: when you serialize it, you''ll also be serializing and all of those objects, any objects that they have references to, etc. You can use the transient keyword to indicate that a member variables aren't part of the persistant object, but remember to manually initialize transient variables after initialization.<br />
<br />
''See Also: [[Compressed Serialization]]''<br />
<br />
==== Location of data directory ====<br />
If it's from a .jar file you put in the robots dir, it will be in something like Robocode/.robotcache/jarname/package/botname.data. If it's a dev version you're working on, it will be in robots/package/botname.data.<br />
<br />
=== Other ===<br />
If you have your data in simple, primitive type arrays you can store and retrieve that data as shown in: [[Writing Arrays To File]]<br />
<br />
If you are having problems saving data, look here: [[SecurityException Bug]]<br />
<br />
== What ==<br />
This depends heavily on what aiming methods and movement system you are using.<br />
<br />
== Size ==<br />
Reduce unnecessary data by writing only the fields you absolutely need Serializing Enemy objects works, but if you find yourself running out of space, you can do better. You don't need to store things like last position, heading, velocity, etc. which are probably in your enemy class.<br />
<br />
Also, Object Streams consume a lot of space; use Data Streams instead. Take a look inside a file written using ObjectOutputStream. If I remember correctly, each field is identified by its name and type, as well as the field's value. The signatures of the object's methods might also be written to the file. On the other hand, these files should compress very well with Zip Streams. ''See: [[Compressed Serialization]]''<br />
<br />
If you still need to reduce the file size, try cramming larger fields into smaller ones where possible (ie: double into int). Sure, you will lose some precision, but if file size is a real issue for you, you have to be willing to make some sacrifices.<br />
<br />
{{Saving Navbox}}<br />
[[Category:Data Saving]]</div>Nfwuhttp://robowiki.net/w/index.php?title=Bot_categories&diff=3384Bot categories2008-10-30T23:31:44Z<p>Nfwu: </p>
<hr />
<div>Bots are often categorized by their various characteristics when it comes to [[competitions]]:<br />
<br />
==Battle Preference==<br />
=== Number of opponents ===<br />
* [[OneOnOne]] [[:Category:1-vs-1_Bots|(category)]]: Bots that fight face to face, only two bots in the arena.<br />
* [[Melee]] [[:Category:Melee_Bots|(category)]]: Bots capable of facing multiple enemies. More than two bots in the arena.<br />
* Overall: Bots suited for both [[OneOnOne]] and [[Melee]] fights.<br />
* [[Teams]]: Bots designed to work as a group.<br />
=== [[Robocode/Scoring|Scoring]] ===<br />
* [[Survivalists]]: Bots focused on being the last one alive, bullet damage not required. <br />
* [[FemtoBot]]: Basically rating = score / [[CodeSize]]. Bigger bots have to score more to be competitive.<br />
* [[RamBots]]: Bots designed to fight at extremely close range, augmenting their score with [[Ramming Movement|ram damage]].<br />
=== Other ===<br />
* [[JustForFun]]: Bots developed for amusement rather than battle.<br />
* [[TechDemos]]: Bots built to show a special feature, and not intended for real battle. <br />
<br />
==Size==<br />
===[[Weight Class]]===<br />
measured in [[CodeSize]].<br />
* NanoBots [[NanoBots|(category)]]: codesize < 250<br />
* MicroBots [[MicroBots|(category)]]: codesize < 750<br />
* MiniBots [[MiniBots|(category)]]: codesize < 1500<br />
* MegaBots [[MegaBots|(category)]]: codesize >= 1500 <br />
===Lines of code===<br />
* HaikuBots [[HaikuBots|(category)]]: 4 lines<br />
* [[SonnetBots]]: 14 lines<br />
<br />
==General Design==<br />
* [[MultiMode]]: Bots with multiple ways of doing things. Not specifically used in competitions. <br />
* [[PerceptualBots]]: Bots that do not store any information in-between turns<br />
===Extends/Implements===<br />
* Extends [[JuniorRobot]]: Useful for teaching purposes.<br />
* Extends [[Robot]] [[:Category:Extends Robot Bots|(category)]]: Basic bots, with blocking methods only.<br />
* Extends [[AdvancedRobot]] [[:Category:Extends AdvancedRobot Bots|(category)]]: Includes non-blocking methods.<br />
* Extends [[TeamRobot]] [[:Category:Extends TeamRobot Bots|(category)]]: These types of bots are usually used in Teams.<br />
* Implements [[Droid]]: No radar, more energy.<br />
<br />
==Combinations==<br />
* [[HaikuTeams]]<br />
<br />
__NOTOC__</div>Nfwuhttp://robowiki.net/w/index.php?title=Bot_categories&diff=3383Bot categories2008-10-30T23:30:15Z<p>Nfwu: /* Lines of code */ Editing line for HaikuBots</p>
<hr />
<div>Bots are often categorized by their various characteristics when it comes to [[competitions]]:<br />
<br />
==Battle Preference==<br />
=== Number of opponents ===<br />
* [[OneOnOne]] [[:Category:1-vs-1_Bots|(category)]]: Bots that fight face to face, only two bots in the arena.<br />
* [[Melee]] [[:Category:Melee_Bots|(category)]]: Bots capable of facing multiple enemies. More than two bots in the arena.<br />
* Overall: Bots suited for both [[OneOnOne]] and [[Melee]] fights.<br />
* [[Teams]]: Bots designed to work as a group.<br />
=== [[Robocode/Scoring|Scoring]] ===<br />
* [[Survivalists]]: Bots focused on being the last one alive, bullet damage not required. <br />
* [[FemtoBot]]: Basically rating = score / [[CodeSize]]. Bigger bots have to score more to be competitive.<br />
* [[RamBots]]: Bots designed to fight at extremely close range, augmenting their score with [[Ramming Movement|ram damage]].<br />
=== Other ===<br />
* [[JustForFun]]: Bots developed for amusement rather than battle.<br />
* [[TechDemos]]: Bots built to show a special feature, and not intended for real battle. <br />
<br />
==[[Weight Class]]==<br />
measured in [[CodeSize]].<br />
* NanoBots [[NanoBots|(category)]]: codesize < 250<br />
* MicroBots [[MicroBots|(category)]]: codesize < 750<br />
* MiniBots [[MiniBots|(category)]]: codesize < 1500<br />
* MegaBots [[MegaBots|(category)]]: codesize >= 1500 <br />
<br />
==Lines of code==<br />
* HaikuBots [[HaikuBots|(category)]]: 4 lines<br />
* [[SonnetBots]]: 14 lines<br />
<br />
==General Design==<br />
* [[MultiMode]]: Bots with multiple ways of doing things. Not specifically used in competitions. <br />
* [[PerceptualBots]]: Bots that do not store any information in-between turns<br />
===Extends/Implements===<br />
* Extends [[JuniorRobot]]: Useful for teaching purposes.<br />
* Extends [[Robot]] [[:Category:Extends Robot Bots|(category)]]: Basic bots, with blocking methods only.<br />
* Extends [[AdvancedRobot]] [[:Category:Extends AdvancedRobot Bots|(category)]]: Includes non-blocking methods.<br />
* Extends [[TeamRobot]] [[:Category:Extends TeamRobot Bots|(category)]]: These types of bots are usually used in Teams.<br />
* Implements [[Droid]]: No radar, more energy.<br />
<br />
==Combinations==<br />
* [[HaikuTeams]]<br />
<br />
__NOTOC__</div>Nfwuhttp://robowiki.net/w/index.php?title=Bot_categories&diff=3382Bot categories2008-10-30T23:27:27Z<p>Nfwu: I don't think this page exists</p>
<hr />
<div>Bots are often categorized by their various characteristics when it comes to [[competitions]]:<br />
<br />
==Battle Preference==<br />
=== Number of opponents ===<br />
* [[OneOnOne]] [[:Category:1-vs-1_Bots|(category)]]: Bots that fight face to face, only two bots in the arena.<br />
* [[Melee]] [[:Category:Melee_Bots|(category)]]: Bots capable of facing multiple enemies. More than two bots in the arena.<br />
* Overall: Bots suited for both [[OneOnOne]] and [[Melee]] fights.<br />
* [[Teams]]: Bots designed to work as a group.<br />
=== [[Robocode/Scoring|Scoring]] ===<br />
* [[Survivalists]]: Bots focused on being the last one alive, bullet damage not required. <br />
* [[FemtoBot]]: Basically rating = score / [[CodeSize]]. Bigger bots have to score more to be competitive.<br />
* [[RamBots]]: Bots designed to fight at extremely close range, augmenting their score with [[Ramming Movement|ram damage]].<br />
=== Other ===<br />
* [[JustForFun]]: Bots developed for amusement rather than battle.<br />
* [[TechDemos]]: Bots built to show a special feature, and not intended for real battle. <br />
<br />
==[[Weight Class]]==<br />
measured in [[CodeSize]].<br />
* NanoBots [[NanoBots|(category)]]: codesize < 250<br />
* MicroBots [[MicroBots|(category)]]: codesize < 750<br />
* MiniBots [[MiniBots|(category)]]: codesize < 1500<br />
* MegaBots [[MegaBots|(category)]]: codesize >= 1500 <br />
<br />
==Lines of code==<br />
* [[HaikuBots]]: 4 lines<br />
* [[SonnetBots]]: 14 lines<br />
<br />
==General Design==<br />
* [[MultiMode]]: Bots with multiple ways of doing things. Not specifically used in competitions. <br />
* [[PerceptualBots]]: Bots that do not store any information in-between turns<br />
===Extends/Implements===<br />
* Extends [[JuniorRobot]]: Useful for teaching purposes.<br />
* Extends [[Robot]] [[:Category:Extends Robot Bots|(category)]]: Basic bots, with blocking methods only.<br />
* Extends [[AdvancedRobot]] [[:Category:Extends AdvancedRobot Bots|(category)]]: Includes non-blocking methods.<br />
* Extends [[TeamRobot]] [[:Category:Extends TeamRobot Bots|(category)]]: These types of bots are usually used in Teams.<br />
* Implements [[Droid]]: No radar, more energy.<br />
<br />
==Combinations==<br />
* [[HaikuTeams]]<br />
<br />
__NOTOC__</div>Nfwuhttp://robowiki.net/w/index.php?title=CodeSize&diff=3381CodeSize2008-10-30T23:26:36Z<p>Nfwu: CamelCase redirect</p>
<hr />
<div>#REDIRECT [[Code_Size]]<br />
<br />
[[Category:CamelCase_redirect]]</div>Nfwuhttp://robowiki.net/w/index.php?title=SuperNode&diff=3220SuperNode2008-10-07T12:46:24Z<p>Nfwu: adding Category:Terminology</p>
<hr />
<div>{{stub}}<br />
<br />
In [[GuessFactorTargeting]], a SuperNode is a bin that carries far more data than most bins do. For example, even though Bee has 12500 bins, 95% of BeeWT's hits are done by only 450 Supernodes! <br />
<br />
== See Also ==<br />
* [[WikiTargeting]]<br />
<br />
{{Saving Navbox}}<br />
[[Category:Data Saving]][[Category:Terminology]]</div>Nfwuhttp://robowiki.net/w/index.php?title=Template:Infobox_Robot&diff=3219Template:Infobox Robot2008-10-07T12:37:50Z<p>Nfwu: Typos</p>
<hr />
<div>{| style="text-align: justify; font-size: 70%; float: right; clear: right; border: 1px solid #aaa; width:{{{box_width|20em}}}; margin: 0em 0em 0.5em 0.5em;" cellspacing="5"<br />
|-<br />
|colspan="2" style="padding: 0; text-align:center; font-size: larger; background-color:{{{bgcolour|#c0c0c0}}}; color:#000000;" | '''{{{name|{{PAGENAME}}}}}'''<br />
|-<br />
{{If|test={{{altimage|}}}|then=<br />
{{!}} colspan="2" style="vertical-align: top; text-align: center;" {{!}}{{{altimage<includeonly>|</includeonly>}}} }}<br />
|-<br />
{{If|test={{{image|}}}|then=<br />
{{!}} colspan="2" style="text-align:center;" {{!}}[[Image:{{{image}}}{{{imagesize|{{!}}200px{{!}} }}} ]]<br/>{{{caption<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| colspan="2" style="text-align:center;" |[[Image:{{{image}}}{{{imagesize | {{!}}200px{{!}} }}} ]]<br/>{{{caption<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{author|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''[[Bot_authors|Author(s)]]'''{{!}}{{!}} {{{author<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''[[Bot_authors|Author(s)]]''' || {{{author<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{extends|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''Extends'''{{!}}{{!}} {{{extends<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''Extends''' || {{{extends<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{targeting|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''[[Targeting]]'''{{!}}{{!}} {{{targeting<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''[[Targeting]]''' || {{{targeting<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{movement|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''[[Movement]]'''{{!}}{{!}} {{{movement<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''[[Movement]]''' || {{{movement<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{released|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''Released'''{{!}}{{!}} {{{released<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''Released''' || {{{released<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{best_rating|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''Best&nbsp;Rating'''{{!}}{{!}} {{{best_rating<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''Best Rating''' || {{{best_rating<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{rating|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''Current&nbsp;Rating'''{{!}}{{!}} {{{rating<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''Current Rating''' || {{{rating<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{current_version|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''Current&nbsp;Version'''{{!}}{{!}} {{{current_version<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''Current Version''' || {{{current_version<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{codesize|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''[[Code Size|Code&nbsp;Size]]'''{{!}}{{!}} {{{codesize<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''[[Code Size]]''' || {{{codesize<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{license|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''[[Licenses|Code&nbsp;License]]'''{{!}}{{!}} {{{license<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''[[Licenses|License]]''' || {{{license<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{download_link|}}}|then=<br />
{{!}} colspan="2" style="font-size: larger; text-align: center;" {{!}}'''[{{{download_link<includeonly>|</includeonly>}}} Download]''' }}<br />
<noinclude><br />
|-<br />
| colspan="2" style="font-size: larger; text-align: center;" |'''[{{{download_link<includeonly>|</includeonly>}}} Download]'''<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{source_link|}}}|then=<br />
{{!}} colspan="2" style="font-size: larger; text-align: center;" {{!}}'''[{{{source_link<includeonly>|</includeonly>}}} Source]''' }}<br />
<noinclude><br />
|-<br />
| colspan="2" style="font-size: larger; text-align: center;" |'''[{{{source_link<includeonly>|</includeonly>}}} Source]'''<br />
</noinclude><br />
{{If|test={{{no_categories|}}}|then={{!}} colspan="2" style="text-align: center;" {{!}} ''This is an example!'' }}<br />
|}<!-- --Categorizers--<br />
--><includeonly><!--<br />
-->{{if|test={{{no_categories|}}}|then= |else=<!--<br />
-->{{ifeq|{{{isOneOnOne|}}}|true|[[Category:1-vs-1 Bots]]}}<!--<br />
-->{{ifeq|{{{isMelee|}}}|true|[[Category:Melee Bots]]}}<!--<br />
-->{{ifeq|{{{isOpenSource|}}}|true|[[Category:Open Source Bots]]}}<!--<br />
-->{{ifeq|{{{isOneOnOne|}}}|yes|[[Category:1-vs-1 Bots]]}}<!--<br />
-->{{ifeq|{{{isMelee|}}}|yes|[[Category:Melee Bots]]}}<!--<br />
-->{{ifeq|{{{isOpenSource|}}}|yes|[[Category:Open Source Bots]]}}<!--<br />
-->{{ifeq|{{{isOneOnOne|}}}|1|[[Category:1-vs-1 Bots]]}}<!--<br />
-->{{ifeq|{{{isMelee|}}}|1|[[Category:Melee Bots]]}}<!--<br />
-->{{ifeq|{{{isOpenSource|}}}|1|[[Category:Open Source Bots]]|}}<!--<br />
-->{{ifeq|{{{extends|}}}|AdvancedRobot|[[Category:Extends AdvancedRobot Bots]]}}<!--<br />
-->{{ifeq|{{{extends|}}}|Advanced Robot|[[Category:Extends AdvancedRobot Bots]]}}<!--<br />
-->{{ifeq|{{{extends|}}}|[[AdvancedRobot]]|[[Category:Extends AdvancedRobot Bots]]}}<!--<br />
-->{{ifeq|{{{extends|}}}|Robot|[[Category:Extends Robot Bots]]}}<!--<br />
-->{{ifeq|{{{extends|}}}|[[Robot]]|[[Category:Extends Robot Bots]]}}<!--<br />
-->{{ifeq|{{{extends|}}}|TeamRobot|[[Category:Extends TeamRobot Bots]]}}<!--<br />
-->{{ifeq|{{{extends|}}}|Team Robot|[[Category:Extends TeamRobot Bots]]}}<!--<br />
-->{{ifeq|{{{extends|}}}|[[TeamRobot]]|[[Category:Extends TeamRobot Bots]]}}<!--<br />
-->[[Category:Bots]]<!--<br />
-->}}<!--<br />
--></includeonly><!--<br />
--><noinclude><br />
<br />
<br />
<br />
<br style="clear:both" /><br />
<div style="padding: 0px 5px 0px 5px; border: 1px solid #aaa; margin-bottom: 1ex; background-color: #EFE"><br />
<div style="line-height: 0px; font-size: 140%; border-bottom: 1px solid black; padding: 0 0 0 0; margin-bottom: 0 0 0 0;"><br />
'''Documentation'''<br />
</div><br />
=== Usage ===<br />
The infobox may be added by pasting the template as shown below into an article. None of the Parameters are required as of yet.<br />
<br />
<div style="width:250px; background:#dddddd; border:1px solid black; padding:0.5em 1em 0.5em 1em;"><br />
<pre>{{Infobox Robot<br />
| bgcolour = <br />
| name = <br />
| altimage = <br />
| image = <br />
| imagesize = <br />
| caption = <br />
| author = <br />
| extends = <br />
| targeting = <br />
| movement = <br />
| released = <br />
| best_rating = <br />
| rating = <br />
| current_version = <br />
| codesize =<br />
| license = <br />
| download_link = <br />
| source_link = <br />
| isOneOnOne = true/false<br />
| isMelee = true/false<br />
| isOpenSource = true/false<br />
}}</pre><br />
</div><br />
<br />
=== Parameters ===<br />
{| style="font-size: 80%; border-collapse: collapse; border-left: 10px solid white; border-right: 10px solid white; outline: 1px solid #aaa; margin-bottom: 5px;"<br />
|-<br />
| style="width: 18%" | bgcolor || The background coloring, omit for default color<br />
|-<br />
|| name || The name of the robot, omit for page name<br />
|-<br />
|| altimage || generally not used, only here temporarily for offsite image linking, optional<br />
|-<br />
|| image || an image, logo or snapshot of the robot, optional<br />
|-<br />
|| imagesize* || In the form "Npx", resizes the image to a width of N pixels; default is 200px, optional<br />
|-<br />
|| caption* || A caption discribing the image, optional<br />
|-<br />
|| author || the creator(s) of the robot, e.g. PEZ, Voidious, Chase-san, etc. optional<br />
|-<br />
|| extends || what this bot extends, be it AdvancedRobot, Robot, or TeamRobot, optional<br />
|-<br />
|| targeting || The type of targeting the bot uses, optional<br />
|-<br />
|| movement || The type of movement the bot uses, optional<br />
|-<br />
|| released || The date the bot was originally released, optional<br />
|-<br />
|| best_rating || The best rating the bot has obtained in the rumble, optional<br />
|-<br />
|| rating || The current rating the bot has in the rumble, optional<br />
|-<br />
|| current_version || The current version of the robot, optional<br />
|-<br />
|| license || The license this robot's source is under, optional<br />
|-<br />
|| download_link || the absolute link to your robots jar, optional<br />
|-<br />
|| source_link || the absolute link to the source of your robot, optional<br />
|-<br />
| colspan="2" style="font-size: 80%" | * Only used if the {{{image}}} parameter is used.<br />
|}<br />
</div><br />
<br />
{{Infobox Robot<br />
| name = Dookious<br />
| author = Voidious<br />
| extends = AdvancedRobot<br />
| targeting = GuessFactorTargeting<br />
| movement = WaveSurfing<br />
| released = 2006<br />
| best_rating = 1.571 / 2131 (#1)<br />
| current_version = 1.58<br />
| license = [[RWPCL]]<br />
| download_link = http://www.dijitari.com/void/robocode/voidious.Dookious_1.58.jar<br />
| no_categories = true<br />
}}<br />
<br />
<br />
== Other Notes ==<br />
Since I cannot access the common.css stuff, I put the style info right into the table T_T. [[MediaWiki:Common.css]]<br />
</noinclude></div>Nfwuhttp://robowiki.net/w/index.php?title=Template:Infobox_Robot&diff=3218Template:Infobox Robot2008-10-07T12:36:27Z<p>Nfwu: </p>
<hr />
<div>{| style="text-align: justify; font-size: 70%; float: right; clear: right; border: 1px solid #aaa; width:{{{box_width|20em}}}; margin: 0em 0em 0.5em 0.5em;" cellspacing="5"<br />
|-<br />
|colspan="2" style="padding: 0; text-align:center; font-size: larger; background-color:{{{bgcolour|#c0c0c0}}}; color:#000000;" | '''{{{name|{{PAGENAME}}}}}'''<br />
|-<br />
{{If|test={{{altimage|}}}|then=<br />
{{!}} colspan="2" style="vertical-align: top; text-align: center;" {{!}}{{{altimage<includeonly>|</includeonly>}}} }}<br />
|-<br />
{{If|test={{{image|}}}|then=<br />
{{!}} colspan="2" style="text-align:center;" {{!}}[[Image:{{{image}}}{{{imagesize|{{!}}200px{{!}} }}} ]]<br/>{{{caption<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| colspan="2" style="text-align:center;" |[[Image:{{{image}}}{{{imagesize | {{!}}200px{{!}} }}} ]]<br/>{{{caption<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{author|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''[[Bot_authors|Author(s)]]'''{{!}}{{!}} {{{author<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''[[Bot_authors|Author(s)]]''' || {{{author<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{extends|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''Extends'''{{!}}{{!}} {{{extends<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''Extends''' || {{{extends<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{targeting|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''[[Targeting]]'''{{!}}{{!}} {{{targeting<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''[[Targeting]]''' || {{{targeting<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{movement|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''[[Movement]]'''{{!}}{{!}} {{{movement<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''[[Movement]]''' || {{{movement<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{released|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''Released'''{{!}}{{!}} {{{released<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''Released''' || {{{released<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{best_rating|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''Best&nbsp;Rating'''{{!}}{{!}} {{{best_rating<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''Best Rating''' || {{{best_rating<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{rating|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''Current&nbsp;Rating'''{{!}}{{!}} {{{rating<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''Current Rating''' || {{{rating<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{current_version|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''Current&nbsp;Version'''{{!}}{{!}} {{{current_version<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''Current Version''' || {{{current_version<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{codesize|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''[[Code Size|Code&nbsp;Size]]'''{{!}}{{!}} {{{codesize<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''[[Code Size]]''' || {{{codesize<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{license|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''[[Licenses|Code&nbsp;License]]'''{{!}}{{!}} {{{license<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''[[Licenses|License]]''' || {{{license<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{download_link|}}}|then=<br />
{{!}} colspan="2" style="font-size: larger; text-align: center;" {{!}}'''[{{{download_link<includeonly>|</includeonly>}}} Download]''' }}<br />
<noinclude><br />
|-<br />
| colspan="2" style="font-size: larger; text-align: center;" |'''[{{{download_link<includeonly>|</includeonly>}}} Download]'''<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{source_link|}}}|then=<br />
{{!}} colspan="2" style="font-size: larger; text-align: center;" {{!}}'''[{{{source_link<includeonly>|</includeonly>}}} Source]''' }}<br />
<noinclude><br />
|-<br />
| colspan="2" style="font-size: larger; text-align: center;" |'''[{{{source_link<includeonly>|</includeonly>}}} Source]'''<br />
</noinclude><br />
<br />
{{If|test={{{no_categories|}}}|then=<br />
{{!}} colspan="2" style="text-align: center;" {{!}} ''This is an example!'' }}<br />
<noinclude><br />
|-<br />
| colspan="2" style="text-align: center;" | ''This is an example!''<br />
</noinclude><br />
<br />
|}<!-- --Categorizers--<br />
--><includeonly><!--<br />
-->{{if|test={{{no_categories|}}}|then= |else=<!--<br />
-->{{ifeq|{{{isOneOnOne|}}}|true|[[Category:1-vs-1 Bots]]}}<!--<br />
-->{{ifeq|{{{isMelee|}}}|true|[[Category:Melee Bots]]}}<!--<br />
-->{{ifeq|{{{isOpenSource|}}}|true|[[Category:Open Source Bots]]}}<!--<br />
-->{{ifeq|{{{isOneOnOne|}}}|yes|[[Category:1-vs-1 Bots]]}}<!--<br />
-->{{ifeq|{{{isMelee|}}}|yes|[[Category:Melee Bots]]}}<!--<br />
-->{{ifeq|{{{isOpenSource|}}}|yes|[[Category:Open Source Bots]]}}<!--<br />
-->{{ifeq|{{{isOneOnOne|}}}|1|[[Category:1-vs-1 Bots]]}}<!--<br />
-->{{ifeq|{{{isMelee|}}}|1|[[Category:Melee Bots]]}}<!--<br />
-->{{ifeq|{{{isOpenSource|}}}|1|[[Category:Open Source Bots]]|}}<!--<br />
-->{{ifeq|{{{extends|}}}|AdvancedRobot|[[Category:Extends AdvancedRobot Bots]]}}<!--<br />
-->{{ifeq|{{{extends|}}}|Advanced Robot|[[Category:Extends AdvancedRobot Bots]]}}<!--<br />
-->{{ifeq|{{{extends|}}}|[[AdvancedRobot]]|[[Category:Extends AdvancedRobot Bots]]}}<!--<br />
-->{{ifeq|{{{extends|}}}|Robot|[[Category:Extends Robot Bots]]}}<!--<br />
-->{{ifeq|{{{extends|}}}|[[Robot]]|[[Category:Extends Robot Bots]]}}<!--<br />
-->{{ifeq|{{{extends|}}}|TeamRobot|[[Category:Extends TeamRobot Bots]]}}<!--<br />
-->{{ifeq|{{{extends|}}}|Team Robot|[[Category:Extends TeamRobot Bots]]}}<!--<br />
-->{{ifeq|{{{extends|}}}|[[TeamRobot]]|[[Category:Extends TeamRobot Bots]]}}<!--<br />
-->[[Category:Bots]]<!--<br />
-->}}<!--<br />
--></includeonly><!--<br />
--><noinclude><br />
<br />
<br />
<br />
<br style="clear:both" /><br />
<div style="padding: 0px 5px 0px 5px; border: 1px solid #aaa; margin-bottom: 1ex; background-color: #EFE"><br />
<div style="line-height: 0px; font-size: 140%; border-bottom: 1px solid black; padding: 0 0 0 0; margin-bottom: 0 0 0 0;"><br />
'''Documentation'''<br />
</div><br />
=== Usage ===<br />
The infobox may be added by pasting the template as shown below into an article. None of the Parameters are required as of yet.<br />
<br />
<div style="width:250px; background:#dddddd; border:1px solid black; padding:0.5em 1em 0.5em 1em;"><br />
<pre>{{Infobox Robot<br />
| bgcolour = <br />
| name = <br />
| altimage = <br />
| image = <br />
| imagesize = <br />
| caption = <br />
| author = <br />
| extends = <br />
| targeting = <br />
| movement = <br />
| released = <br />
| best_rating = <br />
| rating = <br />
| current_version = <br />
| codesize =<br />
| license = <br />
| download_link = <br />
| source_link = <br />
| isOneOnOne = true/false<br />
| isMelee = true/false<br />
| isOpenSource = true/false<br />
}}</pre><br />
</div><br />
<br />
=== Parameters ===<br />
{| style="font-size: 80%; border-collapse: collapse; border-left: 10px solid white; border-right: 10px solid white; outline: 1px solid #aaa; margin-bottom: 5px;"<br />
|-<br />
| style="width: 18%" | bgcolor || The background coloring, omit for default color<br />
|-<br />
|| name || The name of the robot, omit for page name<br />
|-<br />
|| altimage || generally not used, only here temporarily for offsite image linking, optional<br />
|-<br />
|| image || an image, logo or snapshot of the robot, optional<br />
|-<br />
|| imagesize* || In the form "Npx", resizes the image to a width of N pixels; default is 200px, optional<br />
|-<br />
|| caption* || A caption discribing the image, optional<br />
|-<br />
|| author || the creator(s) of the robot, e.g. PEZ, Voidious, Chase-san, etc. optional<br />
|-<br />
|| extends || what this bot extends, be it AdvancedRobot, Robot, or TeamRobot, optional<br />
|-<br />
|| targeting || The type of targeting the bot uses, optional<br />
|-<br />
|| movement || The type of movement the bot uses, optional<br />
|-<br />
|| released || The date the bot was originally released, optional<br />
|-<br />
|| best_rating || The best rating the bot has obtained in the rumble, optional<br />
|-<br />
|| rating || The current rating the bot has in the rumble, optional<br />
|-<br />
|| current_version || The current version of the robot, optional<br />
|-<br />
|| license || The license this robot's source is under, optional<br />
|-<br />
|| download_link || the absolute link to your robots jar, optional<br />
|-<br />
|| source_link || the absolute link to the source of your robot, optional<br />
|-<br />
| colspan="2" style="font-size: 80%" | * Only used if the {{{image}}} parameter is used.<br />
|}<br />
</div><br />
<br />
{{Infobox Robot<br />
| name = Dookious<br />
| author = Voidious<br />
| extends = AdvancedRobot<br />
| targeting = GuessFactorTargeting<br />
| movement = WaveSurfing<br />
| released = 2006<br />
| best_rating = 1.571 / 2131 (#1)<br />
| current_version = 1.58<br />
| license = [[RWPCL]]<br />
| download_link = http://www.dijitari.com/void/robocode/voidious.Dookious_1.58.jar<br />
| no_categories = true<br />
}}<br />
<br />
<br />
== Other Notes ==<br />
Since I cannot access the common.css stuff, I put the style info right into the table T_T. [[MediaWiki:Common.css]]<br />
</noinclude></div>Nfwuhttp://robowiki.net/w/index.php?title=Template:Infobox_Robot&diff=3217Template:Infobox Robot2008-10-07T12:31:32Z<p>Nfwu: Correcting problem of Template:Infobox Robot appearing in :Category:Bots</p>
<hr />
<div>{| style="text-align: justify; font-size: 70%; float: right; clear: right; border: 1px solid #aaa; width:{{{box_width|20em}}}; margin: 0em 0em 0.5em 0.5em;" cellspacing="5"<br />
|-<br />
|colspan="2" style="padding: 0; text-align:center; font-size: larger; background-color:{{{bgcolour|#c0c0c0}}}; color:#000000;" | '''{{{name|{{PAGENAME}}}}}'''<br />
|-<br />
{{If|test={{{altimage|}}}|then=<br />
{{!}} colspan="2" style="vertical-align: top; text-align: center;" {{!}}{{{altimage<includeonly>|</includeonly>}}} }}<br />
|-<br />
{{If|test={{{image|}}}|then=<br />
{{!}} colspan="2" style="text-align:center;" {{!}}[[Image:{{{image}}}{{{imagesize|{{!}}200px{{!}} }}} ]]<br/>{{{caption<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| colspan="2" style="text-align:center;" |[[Image:{{{image}}}{{{imagesize | {{!}}200px{{!}} }}} ]]<br/>{{{caption<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{author|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''[[Bot_authors|Author(s)]]'''{{!}}{{!}} {{{author<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''[[Bot_authors|Author(s)]]''' || {{{author<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{extends|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''Extends'''{{!}}{{!}} {{{extends<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''Extends''' || {{{extends<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{targeting|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''[[Targeting]]'''{{!}}{{!}} {{{targeting<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''[[Targeting]]''' || {{{targeting<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{movement|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''[[Movement]]'''{{!}}{{!}} {{{movement<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''[[Movement]]''' || {{{movement<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{released|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''Released'''{{!}}{{!}} {{{released<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''Released''' || {{{released<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{best_rating|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''Best&nbsp;Rating'''{{!}}{{!}} {{{best_rating<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''Best Rating''' || {{{best_rating<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{rating|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''Current&nbsp;Rating'''{{!}}{{!}} {{{rating<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''Current Rating''' || {{{rating<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{current_version|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''Current&nbsp;Version'''{{!}}{{!}} {{{current_version<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''Current Version''' || {{{current_version<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{codesize|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''[[Code Size|Code&nbsp;Size]]'''{{!}}{{!}} {{{codesize<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''[[Code Size]]''' || {{{codesize<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{license|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''[[Licenses|Code&nbsp;License]]'''{{!}}{{!}} {{{license<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''[[Licenses|License]]''' || {{{license<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{download_link|}}}|then=<br />
{{!}} colspan="2" style="font-size: larger; text-align: center;" {{!}}'''[{{{download_link<includeonly>|</includeonly>}}} Download]''' }}<br />
<noinclude><br />
|-<br />
| colspan="2" style="font-size: larger; text-align: center;" |'''[{{{download_link<includeonly>|</includeonly>}}} Download]'''<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{source_link|}}}|then=<br />
{{!}} colspan="2" style="font-size: larger; text-align: center;" {{!}}'''[{{{source_link<includeonly>|</includeonly>}}} Source]''' }}<br />
<noinclude><br />
|-<br />
| colspan="2" style="font-size: larger; text-align: center;" |'''[{{{source_link<includeonly>|</includeonly>}}} Source]'''<br />
</noinclude><br />
<br />
{{If|test={{{no_categories|}}}|then=<br />
{{!}} colspan="2" style="font-size: larger; text-align: center;" {{!}}'''[{{{source_link<includeonly>|</includeonly>}}} Source]''' }}<br />
<noinclude><br />
|-<br />
| colspan="2" style="font-size: larger; text-align: center;" | ''This is an example!''<br />
</noinclude><br />
<br />
|}<!-- --Categorizers--<br />
--><includeonly><!--<br />
-->{{if|test={{{no_categories|}}}|then= |else=<!--<br />
-->{{ifeq|{{{isOneOnOne|}}}|true|[[Category:1-vs-1 Bots]]}}<!--<br />
-->{{ifeq|{{{isMelee|}}}|true|[[Category:Melee Bots]]}}<!--<br />
-->{{ifeq|{{{isOpenSource|}}}|true|[[Category:Open Source Bots]]}}<!--<br />
-->{{ifeq|{{{isOneOnOne|}}}|yes|[[Category:1-vs-1 Bots]]}}<!--<br />
-->{{ifeq|{{{isMelee|}}}|yes|[[Category:Melee Bots]]}}<!--<br />
-->{{ifeq|{{{isOpenSource|}}}|yes|[[Category:Open Source Bots]]}}<!--<br />
-->{{ifeq|{{{isOneOnOne|}}}|1|[[Category:1-vs-1 Bots]]}}<!--<br />
-->{{ifeq|{{{isMelee|}}}|1|[[Category:Melee Bots]]}}<!--<br />
-->{{ifeq|{{{isOpenSource|}}}|1|[[Category:Open Source Bots]]|}}<!--<br />
-->{{ifeq|{{{extends|}}}|AdvancedRobot|[[Category:Extends AdvancedRobot Bots]]}}<!--<br />
-->{{ifeq|{{{extends|}}}|Advanced Robot|[[Category:Extends AdvancedRobot Bots]]}}<!--<br />
-->{{ifeq|{{{extends|}}}|[[AdvancedRobot]]|[[Category:Extends AdvancedRobot Bots]]}}<!--<br />
-->{{ifeq|{{{extends|}}}|Robot|[[Category:Extends Robot Bots]]}}<!--<br />
-->{{ifeq|{{{extends|}}}|[[Robot]]|[[Category:Extends Robot Bots]]}}<!--<br />
-->{{ifeq|{{{extends|}}}|TeamRobot|[[Category:Extends TeamRobot Bots]]}}<!--<br />
-->{{ifeq|{{{extends|}}}|Team Robot|[[Category:Extends TeamRobot Bots]]}}<!--<br />
-->{{ifeq|{{{extends|}}}|[[TeamRobot]]|[[Category:Extends TeamRobot Bots]]}}<!--<br />
-->[[Category:Bots]]<!--<br />
-->}}}<!--<br />
--></includeonly><!--<br />
--><noinclude><br />
<br />
<br />
<br />
<br style="clear:both" /><br />
<div style="padding: 0px 5px 0px 5px; border: 1px solid #aaa; margin-bottom: 1ex; background-color: #EFE"><br />
<div style="line-height: 0px; font-size: 140%; border-bottom: 1px solid black; padding: 0 0 0 0; margin-bottom: 0 0 0 0;"><br />
'''Documentation'''<br />
</div><br />
=== Usage ===<br />
The infobox may be added by pasting the template as shown below into an article. None of the Parameters are required as of yet.<br />
<br />
<div style="width:250px; background:#dddddd; border:1px solid black; padding:0.5em 1em 0.5em 1em;"><br />
<pre>{{Infobox Robot<br />
| bgcolour = <br />
| name = <br />
| altimage = <br />
| image = <br />
| imagesize = <br />
| caption = <br />
| author = <br />
| extends = <br />
| targeting = <br />
| movement = <br />
| released = <br />
| best_rating = <br />
| rating = <br />
| current_version = <br />
| codesize =<br />
| license = <br />
| download_link = <br />
| source_link = <br />
| isOneOnOne = true/false<br />
| isMelee = true/false<br />
| isOpenSource = true/false<br />
}}</pre><br />
</div><br />
<br />
=== Parameters ===<br />
{| style="font-size: 80%; border-collapse: collapse; border-left: 10px solid white; border-right: 10px solid white; outline: 1px solid #aaa; margin-bottom: 5px;"<br />
|-<br />
| style="width: 18%" | bgcolor || The background coloring, omit for default color<br />
|-<br />
|| name || The name of the robot, omit for page name<br />
|-<br />
|| altimage || generally not used, only here temporarily for offsite image linking, optional<br />
|-<br />
|| image || an image, logo or snapshot of the robot, optional<br />
|-<br />
|| imagesize* || In the form "Npx", resizes the image to a width of N pixels; default is 200px, optional<br />
|-<br />
|| caption* || A caption discribing the image, optional<br />
|-<br />
|| author || the creator(s) of the robot, e.g. PEZ, Voidious, Chase-san, etc. optional<br />
|-<br />
|| extends || what this bot extends, be it AdvancedRobot, Robot, or TeamRobot, optional<br />
|-<br />
|| targeting || The type of targeting the bot uses, optional<br />
|-<br />
|| movement || The type of movement the bot uses, optional<br />
|-<br />
|| released || The date the bot was originally released, optional<br />
|-<br />
|| best_rating || The best rating the bot has obtained in the rumble, optional<br />
|-<br />
|| rating || The current rating the bot has in the rumble, optional<br />
|-<br />
|| current_version || The current version of the robot, optional<br />
|-<br />
|| license || The license this robot's source is under, optional<br />
|-<br />
|| download_link || the absolute link to your robots jar, optional<br />
|-<br />
|| source_link || the absolute link to the source of your robot, optional<br />
|-<br />
| colspan="2" style="font-size: 80%" | * Only used if the {{{image}}} parameter is used.<br />
|}<br />
</div><br />
<br />
{{Infobox Robot<br />
| name = Dookious<br />
| author = Voidious<br />
| extends = AdvancedRobot<br />
| targeting = GuessFactorTargeting<br />
| movement = WaveSurfing<br />
| released = 2006<br />
| best_rating = 1.571 / 2131 (#1)<br />
| current_version = 1.58<br />
| license = [[RWPCL]]<br />
| download_link = http://www.dijitari.com/void/robocode/voidious.Dookious_1.58.jar<br />
| no_categories = true<br />
}}<br />
<br />
<br />
== Other Notes ==<br />
Since I cannot access the common.css stuff, I put the style info right into the table T_T. [[MediaWiki:Common.css]]<br />
</noinclude></div>Nfwuhttp://robowiki.net/w/index.php?title=Talk:SuperNode&diff=3197Talk:SuperNode2008-10-03T12:51:39Z<p>Nfwu: Migrating page</p>
<hr />
<div>{{CreditForOldWikiArticle|oldpage=SuperNode}}<br />
<br />
In GuessFactorTargeting, a SuperNode is a bin that carries far more data than most bins do. For example, even though [[CassiusClay/Bee|Bee]] has 12500 bins, 95% of BeeWT's hits are done by only 450 [[SuperNode|Supernodes!]]<br />
Read the WikiTargeting page for more information.<br />
<br />
----<br />
<br />
[[Dookious]] 0.98 and later use a WikiTargeting inspired form of data saving for the high segmented buffer in the Main Gun. I'm not sure how BeeWT decided on what nodes to save, but I currently save any bin with 2 or more weighted visits (non-firing waves = 0.2, firing waves = 1). That works pretty well for 35-round matches - I've never seen it lower than 80-something % of total visits. At the end of the match, it prints data on what it's saving to the console, for anyone that's curious about this stuff. Here's a match vs [[Aristocles]]:<br />
<br />
<pre><br />
Main GF Gun:<br />
Saving data for 264 of 562 visited bins, of 13500 total, <br />
accounting for 95.93% of total (weighted) visits.<br />
</pre><br />
<br />
(It might be more clear to say "visited segments"...)<br />
<br />
-- [[Voidious]]</div>Nfwuhttp://robowiki.net/w/index.php?title=SuperNode&diff=3196SuperNode2008-10-03T12:50:18Z<p>Nfwu: Migrating (Can 0xB33F)</p>
<hr />
<div>{{stub}}<br />
<br />
In [[GuessFactorTargeting]], a SuperNode is a bin that carries far more data than most bins do. For example, even though Bee has 12500 bins, 95% of BeeWT's hits are done by only 450 Supernodes! <br />
<br />
== See Also ==<br />
* [[WikiTargeting]]<br />
<br />
{{Saving Navbox}}<br />
[[Category:Data Saving]]</div>Nfwuhttp://robowiki.net/w/index.php?title=GuessFactor_Targeting_(traditional)&diff=3195GuessFactor Targeting (traditional)2008-10-03T12:40:27Z<p>Nfwu: /* See also */ - SuperNode</p>
<hr />
<div>A form of [[statistical targeting]] that combines [[GuessFactors]], [[segmentation]], and [[Visit Count Stats]]. It is one of the most popular and successful methods of [[Targeting]] in all of Robocode.<br />
<br />
== Early description of the method ==<br />
<br />
[[Paul Evans]] and [[David Alves]] were the first [[bot authors]] to implement some forms of GuessFactor Targeting, though their first systems did not yet use [[segmentation]]. The following description by David (from 2003) and the paper by Paul that he mentions were what first brought GuessFactor Targeting to the rest of the Robocode community:<br />
<blockquote><br />
My targeting is similar to the [[SandboxLump]] / [[SandboxDT]] method. Here's how it works.<br />
:* Calculate how far forward the other bot could go if it suddenly went top speed forwards for as long as it would take my bullet to reach the other bot. Call this Point A.<br />
:* Calculate how far backward the other bot could go if it suddenly went top speed backwards for as long as it would take my bullet to reach the other bot. Call this Point B.<br />
<br />
Now take a guess between -1 and 1 at where the bot is going to be. -1 would mean going straight back and ending up at B, 1 means going straight forward and ending up at A. 0 means sitting still. I just keep track of how well different numbers work and fire with the best one. You can find a better description (with code!) at [[http://www.aqre94.dsl.pipex.com/robocode/guessfactor.shtml this url]]. However notice that the algorithm that Lump uses (the bit where he says he uses the bot's current acceleration) is a bad idea, because it won't hit bots that sit still for a long time and then suddenly hit the gas. He fixed this when he came out with DT. (And I fixed it in [[Duelist]]! :-D) However, pretty much any targeting method will work well enough as long as it isn't simple linear or circular targeting, because some bots (like [[Fermat]]) will guess where you would fire if you used circular and dodge accordingly.<br />
<br />
Good bots for testing targeting are:<br />
:* [[Wolverine]]: A superb dodger, though it's very old.<br />
:* [[JollyNinja]]: Open source! Stays as far from you as possible most of the time.<br />
<br />
Also try the [[Nano bots]] - they're almost all open source and have some cool ideas.<br />
</blockquote><br />
<br />
== Evolution and refinement ==<br />
<br />
While the same fundamental principles have applied since its creation, several key factors have helped GuessFactor Targeting become increasingly powerful and popular over the years:<br />
<br />
* Perhaps the most important was the addition of [[segmentation]], which allows separate sets of statistics to be collected for different firing situations. Things like proximity to walls, current velocity, and distance from the firing bot have a large impact on what GuessFactor will hit the target, so segmenting your stats on these attributes helps a lot.<br />
* [[Kawigi]], through his [[open source]] bot [[FloodMini]] and the [[GuessFactor Targeting Tutorial]] that he authored, showed many people how to implement GuessFactor Targeting.<br />
* There have been many incremental improvements to GuessFactor Targeting guns by a variety of authors, including: refining what attributes make the best segments, using Virtual Guns systems with multiple GuessFactor Targeting guns, using multiple Visit Count Stats buffers (and summing the values or switching between them), and using [[Maximum Escape Angle/Precise|precise maximum escape angles]] in GuessFactor calculations.<br />
<br />
== See also ==<br />
<br />
* [[GuessFactor Targeting Tutorial]] - A tutorial written by [[User:Kawigi]] that walks you through creating a basic GuessFactor Targeting gun.<br />
* [[GFTargetingBot]] - A tutorial-style bot by [[PEZ]] that implements a basic GuessFactor Targeting gun.<br />
* [[Waves]]<br />
* [[Segmentation]]<br />
* [[Visit Count Stats]]<br />
* [[WikiTargeting]] / [[SuperNode]]<br />
<br />
{{Targeting Navbox}}<br />
[[Category:Advanced Targeting Strategies]]<br />
[[Category:Statistical Targeting]]</div>Nfwuhttp://robowiki.net/w/index.php?title=Writing_Arrays_To_File&diff=3194Writing Arrays To File2008-10-03T12:16:45Z<p>Nfwu: Migrating page</p>
<hr />
<div>''Page on Old Wiki: [http://robowiki.net/cgi-bin/robowiki?WritingArraysToFile WritingArraysToFile]''<br />
<br />
The simple type of [[GuessFactorTargeting]] in my [[TityusMega]] bot uses a multidimensional integer array to store the "most visited" count of each factor. Much like [[Fhqwhgads]], but unlike Fhqwhgads I save the data using a variant of [[Kawigi]]'s [[Compressed Serialization]]. Like so:<br />
<pre><br />
private static int[][][][] aimFactors;<br />
.<br />
.<br />
.<br />
void restoreFactors() {<br />
try {<br />
ZipInputStream zipin = new ZipInputStream(new<br />
FileInputStream(getDataFile(enemyName + ".zip")));<br />
zipin.getNextEntry();<br />
ObjectInputStream in = new ObjectInputStream(zipin);<br />
aimFactors = (int[][][][])in.readObject();<br />
in.close();<br />
}<br />
catch (IOException e) {<br />
System.out.println("Ah! A new aquaintance. I'll be watching you " + enemyName + ".");<br />
aimFactors = new int[ACCEL_SEGMENTS][DISTANCE_SEGMENTS][POWER_SEGMENTS][AIM_FACTORS];<br />
}<br />
catch (Exception e) {<br />
e.printStackTrace();<br />
}<br />
}<br />
<br />
void saveFactors() {<br />
try {<br />
ZipOutputStream zipout = new ZipOutputStream(new RobocodeFileOutputStream(getDataFile(enemyName + ".zip")));<br />
zipout.putNextEntry(new ZipEntry(enemyName));<br />
ObjectOutputStream out = new ObjectOutputStream(zipout);<br />
out.writeObject(aimFactors);<br />
out.flush();<br />
zipout.closeEntry();<br />
out.close();<br />
}<br />
catch (IOException e) {<br />
System.out.println("Error saving factors:" + e);<br />
}<br />
}<br />
</pre><br />
As i understand very little of Java's I/O model I just hacked on the serialization code until it compiled. It works. But if someone with more understanding sees a danger here, please feel free to improve the code. -- [[PEZ]]<br />
<br />
Looks to me like it should work. This is similar to what [[FloodMini]] does, actually (except I use the GZIP streams instead of the Zip streams). [[FloodHT]] does it a little more efficiently by making a series of nested loops and using out.writeInt() and out.readInt(). -- [[Kawigi]]<br />
<br />
I considered this too, but firstly I don't need it yet (my files are 1.7k per opponent at the moment, after 10k rounds) and secondly I would have to rewrite the save/restore functions each time I changed my mind about the segmentation. And I change my mind often. =) -- [[PEZ]]<br />
<br />
I am wondering how about the compressibility between GZIP and ZIP,are those same?or one is better? -- [[iiley]]<br />
<br />
I will try this, but my bet is that if there is a difference it will be small. To solve your storage size problems you probably need to look elsewhere. Maybe you can e-mail me details on how you store things internally and externally today and I can help you ponder on a solution? -- [[PEZ]]<br />
<br />
My guess is that Zip compression does better if you set it to. With the zip libraries, you can specify compression methods to be optimized for speed or smallest compression as well. -- [[Kawigi]]<br />
<br />
Add [[Visit Count Stats#Limit_File_Size|VisitCountStats/LimitFileSize]] to this and you have really small files on disk. -- [[PEZ]]<br />
<br />
What do I have to import to get this to work? It seems java.io isn't enough, and I can't see anything else in the API... -- [[Tango]]<br />
<br />
Scratch that - found it! -- [[Tango]]<br />
<br />
Also consider looking at [[Tityus]] save/restore functions. They are more straightforward and [[CodeSize]] friendly. Using gzip files like [[SandboxMini]]. -- [[PEZ]]<br />
<br />
I guess you could save even more space if you don't create a file per opponent but a file that contains a hashtable with the data of all opponents. --[[deathcon]]<br />
<br />
That's what DT does, I think (at least, it only has one file in it's data directory). I expect it is smaller, but also much slower, as you have to load the whole file each time. -- [[Tango]]<br />
<br />
It's incredibly slow actually. In fact if you run a DT with a full data quota file in [[RoboLeague]] you'll see that RL writes out a warning message in the beginning of each battle. Something like "[[SandboxDT]] hasn't started after 600ms. Giving up."<br />
<br />
Anyway, no need to write a hash table if you use regular zip files at least. They can contain several file entries. Probably quite easily glued on the above code. -- [[PEZ]]<br />
<br />
But you don't have to read our hash table each round. Reading it the first round and saving every single round works good and is not too slow.Using regular zip files my stats get sometimes crashed. --[[deathcon]] <br />
:: I was assuming you were only loading in the first round. If you load all the data you have on every bot every round, you are going to have an extremely [[SlowBot]]. -- [[Tango]]<br />
<br />
I think DT is slow on startup because it is creating new statistics structures on all the opponents in is file. I can probably restrict most of this, save time and reduce the memory hit. -- [[Paul]]<br />
<br />
Why, it could be good to have if an enemy should just spontaneously appear on the battle field in mid battle. =) -- [[PEZ]]<br />
<br />
Now *there's* an idea for a mod. Quite easy to do, too. Just put the enemy outside the field until a random time, when it appears. You have 1 challenger, and a team of magically appearing bots. -- [[Tango]]<br />
<br />
Hmmm... there seems to be no getDataFile() so it won't compile. Do I need to import it? Or do I need to write it? --[[Bayen]]<br />
<br />
It's defined in the [[RobocodeAPI]] for [[AdvancedRobot]], so you need a reference to your main tank class, and call MyTank.getDataFile(). -- [[Voidious]]<br />
<br />
Hmm,in the guessfactors, if you keep saving/restoring the factors without 'lowering' them, won't the counts eventually get like so high...is there a range for integers? And if you were to proportionally 'lower' them, how would you do it with so many segments? --[[Starrynte]]<br />
<br />
Theoretically, yes. But if I remember right, the maximum an integer can hold is in the range of 2000000000, so I don't think we'll reach it very quickly. =) If it did, that bin would shift to the minimum possible number, screwing up your results BIGTIME. So a very valid worry. Good thing we aren't using arrays of shorts to store our data. -- [[Skilgannon]]<br />
<br />
If you use [[RollingAverage]] for your stats, as many of us do, you always have a value between 0 and 1. As for having lots of segments, it doesn't really matter if each segment is in the same scale, just that all [[GuessFactors]] in a given segment are in the same scale, so you could surely just divide all the GFs in a segment when they got too big, if you needed to. -- [[Voidious]]<br />
* Ok, using [[RollingAverage]] now...*discovers that there's a limit to amount of data in data file* --[[Starrynte]]<br />
* =) ... I'd also look at [[WikiTargeting]] / [[SuperNodes]] if you're going to be saving gun data. The basic idea is to just save the GuessFactor data for the most visited nodes. For instance, you might have 20,000 segments in your gun, but find that 95% of the time the enemy spends in just 300 of those segments. So saving the best GF for those 300 segments gives you a LOT of info about the enemy in very little space. [[Dookious]] and [[Phoenix]] use data saving in their guns based on this idea. -- [[Voidious]]<br />
<br />
Quick question, does the code above delete the old saved data before saving the new data? And if it doesn't, how? --[[Starrynte]]<br />
<br />
I am ''pretty'' sure the above code would create a new file, overwriting any previous file for that bot (with the same name). But I'm not entirely sure on that. There is a <code>delete()</code> method in the File class, though, so you could do this to be sure: <code>getDataFile(enemyName + ".zip").delete()</code>. Note that this method will use a LOT of data for each bot, so you will not be able to save nearly as many opponents as with [[WikiTargeting]] -- [[Voidious]]<br />
<br />
Actually I have been giving the save problem some thought for such things, and if you make an thread to do the work (like pear I think does), you could save it in something like a peak (save the peaks in the data) file. Then rebuild that data into the buffers as a type of lossy saving, but also have a degradation clause, giving the average amount of drop between peeks. Otherwise just save the peeks and valleys and just do a straight degradation between them. I know [[Dookious]] saves the most visited bins, but i'm not sure how. --[[Chase-san]]<br />
<br />
* Dooki just saves which GF bin was the most visited for each [[SuperNode]]. This means (I just checked) I can save a segment in 3 bytes for very small data files. When it restores, it uses a [[BinSmoothing]] across the other bins and gives all this data a weight of 5 (as if it saw this GF for 5 firing waves). I like your idea, but I think just saving most visited is the best use of your space. In movement, saving multiple peaks seems much more worth it, though. Just my opinion, of course - I think [[David Alves]] is also more keen on saving all the segment's data instead of just the top visited GF. -- [[Voidious]]<br />
<br />
{{Saving Navbox}}<br />
[[Category:Data Saving]]<br />
[[Category:Discussions]]</div>Nfwuhttp://robowiki.net/w/index.php?title=Rednaxela&diff=3188Rednaxela2008-10-02T09:05:36Z<p>Nfwu: Spelling</p>
<hr />
<div>#REDIRECT [[User:Rednaxela]]</div>Nfwuhttp://robowiki.net/w/index.php?title=Connavar&diff=3164Connavar2008-10-01T02:32:50Z<p>Nfwu: Infobox</p>
<hr />
<div>[[/VersionHistory]]<br />
<br />
{{Infobox Robot<br />
| author = [[Skilgannon]]<br />
| extends = [[AdvancedRobot]]<br />
| targeting = [[GuessFactorTargeting]]<br />
| movement = [[Stop And Go]] & [[Random Movement]]<br />
| current_version = 0.1.2<br />
| codesize =<br />
| download_link = http://minifly.rchomepage.com/robocode/<br />
| isOneOnOne = true<br />
| isMelee = false<br />
| isOpenSource = true<br />
}} __NOTOC__<br />
==== Author ====<br />
[[Skilgannon]]<br />
<br />
==== Extends ====<br />
<br />
[[AdvancedRobot]]<br />
<br />
==== Description ====<br />
<br />
After getting sick of Waylander's poor PL score, I decided to write a [[Guess Factor]] gun. It's been sitting around gathering dust for a while now, and didn't take much work to improve after my recent [[Dynamic Clustering]] experience.<br />
<br />
==== What's special about it? ====<br />
<br />
Waylander's movement, which I attribute to its success<br />
<br />
==== Great, I want to try it. Where can I download it? ====<br />
<br />
[http://minifly.rchomepage.com/robocode/ Download Directory]<br />
<br />
==== How competitive is it? ====<br />
<br />
0.1.1 was second, 0.1.2 has a major bug I think....<br />
<br />
==== How does it [[Movement|move]]? ====<br />
<br />
[[Stop And Go]], which switches to [[Random Movement]] if it loses in the first 3 rounds.<br />
<br />
==== How does it fire? ====<br />
A simple GF gun, with segments roughly based on [[Aristocles]]<br />
<br />
==== How does it [[DodgingBullets|dodge bullets]]? ====<br />
It does [[Stop And Go]] to fool [[Head-On Targeting]], [[Linear Targeting]] and [[Circular Targeting]]. If it loses in the first 3 rounds it switches to [[Random Movement]], in an attempt to fool all the GF bots and pattern matchers out there.<br />
<br />
==== What does it save between rounds and matches? ====<br />
Between rounds it saves the VCS array and whether to use StopAndGo, between matches nothing, due to codesize restaints.<br />
<br />
==== Where did you get the name? ====<br />
According to David Gemmel, Connavar was the king of the Rigante. He was also known as Demonblade because of his skill with the sword.<br />
<br />
==== Can I use your code? ====<br />
Under the following terms:<br />
*Your bot MUST be OpenSource.<br />
*You give credit in your code, and in any documentation of your bot.<br />
*Pleeaase don't just take my bot, tweak it and release it under another name. Rather tell me about the changes, and I'll give you credit. =)<br />
<br />
==== What's next for your robot? ====<br />
Variable firepower, using last direction for waves if velocity is 0<br />
<br />
==== Does it have any [[WhiteWhale]]s? ====<br />
[[WeekendObsession]] - it doesn't seem to trip the flattener for some reason<br />
==== What other robot(s) is it based on? ====<br />
[[Waylander]] - oh yeah, the gun was originally based off of [[Falcon]]<br />
<br />
[[Category:Bots|Connavar]]<br />
[[Category:1-vs-1 Bots|Connavar]]<br />
[[Category:Open Source Bots|Connavar]]<br />
[[Category:MicroBots|Connavar]]</div>Nfwuhttp://robowiki.net/w/index.php?title=Template:Infobox_Robot&diff=3163Template:Infobox Robot2008-10-01T02:25:40Z<p>Nfwu: </p>
<hr />
<div>{| style="text-align: justify; font-size: 70%; float: right; clear: right; border: 1px solid #aaa; width:{{{box_width|20em}}}; margin: 0em 0em 0.5em 0.5em;" cellspacing="5"<br />
|-<br />
|colspan="2" style="padding: 0; text-align:center; font-size: larger; background-color:{{{bgcolour|#c0c0c0}}}; color:#000000;" | '''{{{name|{{PAGENAME}}}}}'''<br />
|-<br />
{{If|test={{{altimage|}}}|then=<br />
{{!}} colspan="2" style="vertical-align: top; text-align: center;" {{!}}{{{altimage<includeonly>|</includeonly>}}} }}<br />
|-<br />
{{If|test={{{image|}}}|then=<br />
{{!}} colspan="2" style="text-align:center;" {{!}}[[Image:{{{image}}}{{{imagesize|{{!}}200px{{!}} }}} ]]<br/>{{{caption<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| colspan="2" style="text-align:center;" |[[Image:{{{image}}}{{{imagesize | {{!}}200px{{!}} }}} ]]<br/>{{{caption<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{author|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''[[Bot_authors|Author(s)]]'''{{!}}{{!}} {{{author<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''[[Bot_authors|Author(s)]]''' || {{{author<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{extends|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''Extends'''{{!}}{{!}} {{{extends<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''Extends''' || {{{extends<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{targeting|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''[[Targeting]]'''{{!}}{{!}} {{{targeting<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''[[Targeting]]''' || {{{targeting<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{movement|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''[[Movement]]'''{{!}}{{!}} {{{movement<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''[[Movement]]''' || {{{movement<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{released|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''Released'''{{!}}{{!}} {{{released<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''Released''' || {{{released<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{best_rating|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''Best&nbsp;Rating'''{{!}}{{!}} {{{best_rating<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''Best Rating''' || {{{best_rating<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{rating|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''Current&nbsp;Rating'''{{!}}{{!}} {{{rating<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''Current Rating''' || {{{rating<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{current_version|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''Current&nbsp;Version'''{{!}}{{!}} {{{current_version<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''Current Version''' || {{{current_version<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{codesize|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''[[Code Size|Code&nbsp;Size]]'''{{!}}{{!}} {{{codesize<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''[[Code Size]]''' || {{{codesize<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{license|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''[[Licenses|Code&nbsp;License]]'''{{!}}{{!}} {{{license<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''[[Licenses|License]]''' || {{{license<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{download_link|}}}|then=<br />
{{!}} colspan="2" style="font-size: larger; text-align: center;" {{!}}'''[{{{download_link<includeonly>|</includeonly>}}} Download]''' }}<br />
<noinclude><br />
|-<br />
| colspan="2" style="font-size: larger; text-align: center;" |'''[{{{download_link<includeonly>|</includeonly>}}} Download]'''<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{source_link|}}}|then=<br />
{{!}} colspan="2" style="font-size: larger; text-align: center;" {{!}}'''[{{{source_link<includeonly>|</includeonly>}}} Source]''' }}<br />
<noinclude><br />
|-<br />
| colspan="2" style="font-size: larger; text-align: center;" |'''[{{{source_link<includeonly>|</includeonly>}}} Source]'''<br />
</noinclude><br />
|}<!-- --Categorizers--<br />
--><includeonly><!--<br />
-->{{ifeq|{{{isOneOnOne|}}}|true|[[Category:1-vs-1 Bots]]}}<!--<br />
-->{{ifeq|{{{isMelee|}}}|true|[[Category:Melee Bots]]}}<!--<br />
-->{{ifeq|{{{isOpenSource|}}}|true|[[Category:Open Source Bots]]}}<!--<br />
-->{{ifeq|{{{isOneOnOne|}}}|yes|[[Category:1-vs-1 Bots]]}}<!--<br />
-->{{ifeq|{{{isMelee|}}}|yes|[[Category:Melee Bots]]}}<!--<br />
-->{{ifeq|{{{isOpenSource|}}}|yes|[[Category:Open Source Bots]]}}<!--<br />
-->{{ifeq|{{{isOneOnOne|}}}|1|[[Category:1-vs-1 Bots]]}}<!--<br />
-->{{ifeq|{{{isMelee|}}}|1|[[Category:Melee Bots]]}}<!--<br />
-->{{ifeq|{{{isOpenSource|}}}|1|[[Category:Open Source Bots]]|}}<!--<br />
-->{{ifeq|{{{extends|}}}|AdvancedRobot|[[Category:Extends AdvancedRobot Bots]]}}<!--<br />
-->{{ifeq|{{{extends|}}}|Advanced Robot|[[Category:Extends AdvancedRobot Bots]]}}<!--<br />
-->{{ifeq|{{{extends|}}}|[[AdvancedRobot]]|[[Category:Extends AdvancedRobot Bots]]}}<!--<br />
-->{{ifeq|{{{extends|}}}|Robot|[[Category:Extends Robot Bots]]}}<!--<br />
-->{{ifeq|{{{extends|}}}|[[Robot]]|[[Category:Extends Robot Bots]]}}<!--<br />
-->{{ifeq|{{{extends|}}}|TeamRobot|[[Category:Extends TeamRobot Bots]]}}<!--<br />
-->{{ifeq|{{{extends|}}}|Team Robot|[[Category:Extends TeamRobot Bots]]}}<!--<br />
-->{{ifeq|{{{extends|}}}|[[TeamRobot]]|[[Category:Extends TeamRobot Bots]]}}<!--<br />
-->[[Category:Bots]]<!--<br />
--></includeonly><!--<br />
--><noinclude><br />
<br />
<br />
<br />
<br style="clear:both" /><br />
<div style="padding: 0px 5px 0px 5px; border: 1px solid #aaa; margin-bottom: 1ex; background-color: #EFE"><br />
<div style="line-height: 0px; font-size: 140%; border-bottom: 1px solid black; padding: 0 0 0 0; margin-bottom: 0 0 0 0;"><br />
'''Documentation'''<br />
</div><br />
=== Usage ===<br />
The infobox may be added by pasting the template as shown below into an article. None of the Parameters are required as of yet.<br />
<br />
<div style="width:250px; background:#dddddd; border:1px solid black; padding:0.5em 1em 0.5em 1em;"><br />
<pre>{{Infobox Robot<br />
| bgcolour = <br />
| name = <br />
| altimage = <br />
| image = <br />
| imagesize = <br />
| caption = <br />
| author = <br />
| extends = <br />
| targeting = <br />
| movement = <br />
| released = <br />
| best_rating = <br />
| rating = <br />
| current_version = <br />
| codesize =<br />
| license = <br />
| download_link = <br />
| source_link = <br />
| isOneOnOne = true/false<br />
| isMelee = true/false<br />
| isOpenSource = true/false<br />
}}</pre><br />
</div><br />
<br />
=== Parameters ===<br />
{| style="font-size: 80%; border-collapse: collapse; border-left: 10px solid white; border-right: 10px solid white; outline: 1px solid #aaa; margin-bottom: 5px;"<br />
|-<br />
| style="width: 18%" | bgcolor || The background coloring, omit for default color<br />
|-<br />
|| name || The name of the robot, omit for page name<br />
|-<br />
|| altimage || generally not used, only here temporarily for offsite image linking, optional<br />
|-<br />
|| image || an image, logo or snapshot of the robot, optional<br />
|-<br />
|| imagesize* || In the form "Npx", resizes the image to a width of N pixels; default is 200px, optional<br />
|-<br />
|| caption* || A caption discribing the image, optional<br />
|-<br />
|| author || the creator(s) of the robot, e.g. PEZ, Voidious, Chase-san, etc. optional<br />
|-<br />
|| extends || what this bot extends, be it AdvancedRobot, Robot, or TeamRobot, optional<br />
|-<br />
|| targeting || The type of targeting the bot uses, optional<br />
|-<br />
|| movement || The type of movement the bot uses, optional<br />
|-<br />
|| released || The date the bot was originally released, optional<br />
|-<br />
|| best_rating || The best rating the bot has obtained in the rumble, optional<br />
|-<br />
|| rating || The current rating the bot has in the rumble, optional<br />
|-<br />
|| current_version || The current version of the robot, optional<br />
|-<br />
|| license || The license this robot's source is under, optional<br />
|-<br />
|| download_link || the absolute link to your robots jar, optional<br />
|-<br />
|| source_link || the absolute link to the source of your robot, optional<br />
|-<br />
| colspan="2" style="font-size: 80%" | * Only used if the {{{image}}} parameter is used.<br />
|}<br />
</div><br />
<br />
{{Infobox Robot<br />
| name = Dookious<br />
| author = Voidious<br />
| extends = AdvancedRobot<br />
| targeting = GuessFactorTargeting<br />
| movement = WaveSurfing<br />
| released = 2006<br />
| best_rating = 1.571 / 2131 (#1)<br />
| current_version = 1.58<br />
| license = [[RWPCL]]<br />
| download_link = http://www.dijitari.com/void/robocode/voidious.Dookious_1.58.jar<br />
}}<br />
<br />
<br />
== Other Notes ==<br />
Since I cannot access the common.css stuff, I put the style info right into the table T_T. [[MediaWiki:Common.css]]<br />
</noinclude></div>Nfwuhttp://robowiki.net/w/index.php?title=Template:Infobox_Robot&diff=3162Template:Infobox Robot2008-10-01T02:22:40Z<p>Nfwu: Typos</p>
<hr />
<div>{| style="text-align: justify; font-size: 70%; float: right; clear: right; border: 1px solid #aaa; width:{{{box_width|20em}}}; margin: 0em 0em 0.5em 0.5em;" cellspacing="5"<br />
|-<br />
|colspan="2" style="padding: 0; text-align:center; font-size: larger; background-color:{{{bgcolour|#c0c0c0}}}; color:#000000;" | '''{{{name|{{PAGENAME}}}}}'''<br />
|-<br />
{{If|test={{{altimage|}}}|then=<br />
{{!}} colspan="2" style="vertical-align: top; text-align: center;" {{!}}{{{altimage<includeonly>|</includeonly>}}} }}<br />
|-<br />
{{If|test={{{image|}}}|then=<br />
{{!}} colspan="2" style="text-align:center;" {{!}}[[Image:{{{image}}}{{{imagesize|{{!}}200px{{!}} }}} ]]<br/>{{{caption<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| colspan="2" style="text-align:center;" |[[Image:{{{image}}}{{{imagesize | {{!}}200px{{!}} }}} ]]<br/>{{{caption<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{author|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''[[Bot_authors|Author(s)]]'''{{!}}{{!}} {{{author<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''[[Bot_authors|Author(s)]]''' || {{{author<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{extends|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''Extends'''{{!}}{{!}} {{{extends<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''Extends''' || {{{extends<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{targeting|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''[[Targeting]]'''{{!}}{{!}} {{{targeting<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''[[Targeting]]''' || {{{targeting<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{movement|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''[[Movement]]'''{{!}}{{!}} {{{movement<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''[[Movement]]''' || {{{movement<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{released|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''Released'''{{!}}{{!}} {{{released<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''Released''' || {{{released<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{best_rating|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''Best&nbsp;Rating'''{{!}}{{!}} {{{best_rating<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''Best Rating''' || {{{best_rating<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{rating|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''Current&nbsp;Rating'''{{!}}{{!}} {{{rating<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''Current Rating''' || {{{rating<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{current_version|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''Current&nbsp;Version'''{{!}}{{!}} {{{current_version<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''Current Version''' || {{{current_version<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{codesize|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''[[Code Size|Code&nbsp;Size]]'''{{!}}{{!}} {{{codesize<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''[[Code Size]]''' || {{{codesize<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{license|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''[[Licenses|Code&nbsp;License]]'''{{!}}{{!}} {{{license<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''[[Licenses|License]]''' || {{{license<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{download_link|}}}|then=<br />
{{!}} colspan="2" style="font-size: larger; text-align: center;" {{!}}'''[{{{download_link<includeonly>|</includeonly>}}} Download]''' }}<br />
<noinclude><br />
|-<br />
| colspan="2" style="font-size: larger; text-align: center;" |'''[{{{download_link<includeonly>|</includeonly>}}} Download]'''<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{source_link|}}}|then=<br />
{{!}} colspan="2" style="font-size: larger; text-align: center;" {{!}}'''[{{{source_link<includeonly>|</includeonly>}}} Source]''' }}<br />
<noinclude><br />
|-<br />
| colspan="2" style="font-size: larger; text-align: center;" |'''[{{{source_link<includeonly>|</includeonly>}}} Source]'''<br />
</noinclude><br />
|}<!--<br />
-->{{ifeq|{{{isOneOnOne|}}}|true|[[Category:1-vs-1 Bots]]}}<!--<br />
-->{{ifeq|{{{isMelee|}}}|true|[[Category:Melee Bots]]}}<!--<br />
-->{{ifeq|{{{isOpenSource|}}}|true|[[Category:Open Source Bots]]}}<!--<br />
-->{{ifeq|{{{isOneOnOne|}}}|yes|[[Category:1-vs-1 Bots]]}}<!--<br />
-->{{ifeq|{{{isMelee|}}}|yes|[[Category:Melee Bots]]}}<!--<br />
-->{{ifeq|{{{isOpenSource|}}}|yes|[[Category:Open Source Bots]]}}<!--<br />
-->{{ifeq|{{{isOneOnOne|}}}|1|[[Category:1-vs-1 Bots]]}}<!--<br />
-->{{ifeq|{{{isMelee|}}}|1|[[Category:Melee Bots]]}}<!--<br />
-->{{ifeq|{{{isOpenSource|}}}|1|[[Category:Open Source Bots]]|}}<!--<br />
-->{{ifeq|{{{extends|}}}|AdvancedRobot|[[Category:Extends AdvancedRobot Bots]]}}<!--<br />
-->{{ifeq|{{{extends|}}}|Advanced Robot|[[Category:Extends AdvancedRobot Bots]]}}<!--<br />
-->{{ifeq|{{{extends|}}}|[[AdvancedRobot]]|[[Category:Extends AdvancedRobot Bots]]}}<!--<br />
-->{{ifeq|{{{extends|}}}|Robot|[[Category:Extends Robot Bots]]}}<!--<br />
-->{{ifeq|{{{extends|}}}|[[Robot]]|[[Category:Extends Robot Bots]]}}<!--<br />
-->{{ifeq|{{{extends|}}}|TeamRobot|[[Category:Extends TeamRobot Bots]]}}<!--<br />
-->{{ifeq|{{{extends|}}}|Team Robot|[[Category:Extends TeamRobot Bots]]}}<!--<br />
-->{{ifeq|{{{extends|}}}|[[TeamRobot]]|[[Category:Extends TeamRobot Bots]]}}<!--<br />
--><noinclude><br />
<br />
<br />
<br />
<br style="clear:both" /><br />
<div style="padding: 0px 5px 0px 5px; border: 1px solid #aaa; margin-bottom: 1ex; background-color: #EFE"><br />
<div style="line-height: 0px; font-size: 140%; border-bottom: 1px solid black; padding: 0 0 0 0; margin-bottom: 0 0 0 0;"><br />
'''Documentation'''<br />
</div><br />
=== Usage ===<br />
The infobox may be added by pasting the template as shown below into an article. None of the Parameters are required as of yet.<br />
<br />
<div style="width:250px; background:#dddddd; border:1px solid black; padding:0.5em 1em 0.5em 1em;"><br />
<pre>{{Infobox Robot<br />
| bgcolour = <br />
| name = <br />
| altimage = <br />
| image = <br />
| imagesize = <br />
| caption = <br />
| author = <br />
| extends = <br />
| targeting = <br />
| movement = <br />
| released = <br />
| best_rating = <br />
| rating = <br />
| current_version = <br />
| codesize =<br />
| license = <br />
| download_link = <br />
| source_link = <br />
| isOneOnOne = true/false<br />
| isMelee = true/false<br />
| isOpenSource = true/false<br />
}}</pre><br />
</div><br />
<br />
=== Parameters ===<br />
{| style="font-size: 80%; border-collapse: collapse; border-left: 10px solid white; border-right: 10px solid white; outline: 1px solid #aaa; margin-bottom: 5px;"<br />
|-<br />
| style="width: 18%" | bgcolor || The background coloring, omit for default color<br />
|-<br />
|| name || The name of the robot, omit for page name<br />
|-<br />
|| altimage || generally not used, only here temporarily for offsite image linking, optional<br />
|-<br />
|| image || an image, logo or snapshot of the robot, optional<br />
|-<br />
|| imagesize* || In the form "Npx", resizes the image to a width of N pixels; default is 200px, optional<br />
|-<br />
|| caption* || A caption discribing the image, optional<br />
|-<br />
|| author || the creator(s) of the robot, e.g. PEZ, Voidious, Chase-san, etc. optional<br />
|-<br />
|| extends || what this bot extends, be it AdvancedRobot, Robot, or TeamRobot, optional<br />
|-<br />
|| targeting || The type of targeting the bot uses, optional<br />
|-<br />
|| movement || The type of movement the bot uses, optional<br />
|-<br />
|| released || The date the bot was originally released, optional<br />
|-<br />
|| best_rating || The best rating the bot has obtained in the rumble, optional<br />
|-<br />
|| rating || The current rating the bot has in the rumble, optional<br />
|-<br />
|| current_version || The current version of the robot, optional<br />
|-<br />
|| license || The license this robot's source is under, optional<br />
|-<br />
|| download_link || the absolute link to your robots jar, optional<br />
|-<br />
|| source_link || the absolute link to the source of your robot, optional<br />
|-<br />
| colspan="2" style="font-size: 80%" | * Only used if the {{{image}}} parameter is used.<br />
|}<br />
</div><br />
<br />
{{Infobox Robot<br />
| name = Dookious<br />
| author = Voidious<br />
| extends = AdvancedRobot<br />
| targeting = GuessFactorTargeting<br />
| movement = WaveSurfing<br />
| released = 2006<br />
| best_rating = 1.571 / 2131 (#1)<br />
| current_version = 1.58<br />
| license = [[RWPCL]]<br />
| download_link = http://www.dijitari.com/void/robocode/voidious.Dookious_1.58.jar<br />
}}<br />
<br />
<br />
== Other Notes ==<br />
Since I cannot access the common.css stuff, I put the style info right into the table T_T. [[MediaWiki:Common.css]]<br />
</noinclude></div>Nfwuhttp://robowiki.net/w/index.php?title=Template:Infobox_Robot&diff=3161Template:Infobox Robot2008-10-01T02:19:13Z<p>Nfwu: Adding codesize, generic categorizers... codesize auto-categorization will only be possible with {{#expr:}}</p>
<hr />
<div>{| style="text-align: justify; font-size: 70%; float: right; clear: right; border: 1px solid #aaa; width:{{{box_width|20em}}}; margin: 0em 0em 0.5em 0.5em;" cellspacing="5"<br />
|-<br />
|colspan="2" style="padding: 0; text-align:center; font-size: larger; background-color:{{{bgcolour|#c0c0c0}}}; color:#000000;" | '''{{{name|{{PAGENAME}}}}}'''<br />
|-<br />
{{If|test={{{altimage|}}}|then=<br />
{{!}} colspan="2" style="vertical-align: top; text-align: center;" {{!}}{{{altimage<includeonly>|</includeonly>}}} }}<br />
|-<br />
{{If|test={{{image|}}}|then=<br />
{{!}} colspan="2" style="text-align:center;" {{!}}[[Image:{{{image}}}{{{imagesize|{{!}}200px{{!}} }}} ]]<br/>{{{caption<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| colspan="2" style="text-align:center;" |[[Image:{{{image}}}{{{imagesize | {{!}}200px{{!}} }}} ]]<br/>{{{caption<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{author|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''[[Bot_authors|Author(s)]]'''{{!}}{{!}} {{{author<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''[[Bot_authors|Author(s)]]''' || {{{author<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{extends|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''Extends'''{{!}}{{!}} {{{extends<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''Extends''' || {{{extends<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{targeting|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''[[Targeting]]'''{{!}}{{!}} {{{targeting<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''[[Targeting]]''' || {{{targeting<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{movement|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''[[Movement]]'''{{!}}{{!}} {{{movement<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''[[Movement]]''' || {{{movement<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{released|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''Released'''{{!}}{{!}} {{{released<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''Released''' || {{{released<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{best_rating|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''Best&nbsp;Rating'''{{!}}{{!}} {{{best_rating<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''Best Rating''' || {{{best_rating<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{rating|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''Current&nbsp;Rating'''{{!}}{{!}} {{{rating<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''Current Rating''' || {{{rating<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{current_version|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''Current&nbsp;Version'''{{!}}{{!}} {{{current_version<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''Current Version''' || {{{current_version<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{codesize|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''[[Code Size|Code&nbsp;Size]]'''{{!}}{{!}} {{{codesize<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''[[Code Size]]''' || {{{codesize<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{license|}}}|then=<br />
{{!}} style="vertical-align: top; text-align: right;" {{!}}'''[[Licenses|Code&nbsp;License]]'''{{!}}{{!}} {{{license<includeonly>|</includeonly>}}} }}<br />
<noinclude><br />
|-<br />
| style="text-align: right;" | '''[[Licenses|License]]''' || {{{license<includeonly>|</includeonly>}}}<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{download_link|}}}|then=<br />
{{!}} colspan="2" style="font-size: larger; text-align: center;" {{!}}'''[{{{download_link<includeonly>|</includeonly>}}} Download]''' }}<br />
<noinclude><br />
|-<br />
| colspan="2" style="font-size: larger; text-align: center;" |'''[{{{download_link<includeonly>|</includeonly>}}} Download]'''<br />
</noinclude><br />
|-<br />
<br />
{{If|test={{{source_link|}}}|then=<br />
{{!}} colspan="2" style="font-size: larger; text-align: center;" {{!}}'''[{{{source_link<includeonly>|</includeonly>}}} Source]''' }}<br />
<noinclude><br />
|-<br />
| colspan="2" style="font-size: larger; text-align: center;" |'''[{{{source_link<includeonly>|</includeonly>}}} Source]'''<br />
</noinclude><br />
|}<!--<br />
-->{{ifeq|{{{isOneOnOne|}}}|true|[[Category:1-vs-1 Bots]]|}}<!--<br />
-->{{ifeq|{{{isMelee|}}}|true|[[Category:Melee Bots]]|}}<!--<br />
-->{{ifeq|{{{isOpenSource|}}}|true|[[Category:Open Source Bots]]|}}<!--<br />
-->{{ifeq|{{{isOneOnOne|}}}|yes|[[Category:1-vs-1 Bots]]|}}<!--<br />
-->{{ifeq|{{{isMelee|}}}|yes|[[Category:Melee Bots]]|}}<!--<br />
-->{{ifeq|{{{isOpenSource|}}}|yes|[[Category:Open Source Bots]]|}}<!--<br />
-->{{ifeq|{{{isOneOnOne|}}}|1|[[Category:1-vs-1 Bots]]|}}<!--<br />
-->{{ifeq|{{{isMelee|}}}|1|[[Category:Melee Bots]]|}}<!--<br />
-->{{ifeq|{{{isOpenSource|}}}|1|[[Category:Open Source Bots]]|}}<!--<br />
-->{{ifeq|{{{extends|}}}|AdvancedRobot|then=[[Category:Extends AdvancedRobot Bots]]}}<!--<br />
-->{{ifeq|{{{extends|}}}|Advanced Robot|then=[[Category:Extends AdvancedRobot Bots]]}}<!--<br />
-->{{ifeq|{{{extends|}}}|[[AdvancedRobot]]|then=[[Category:Extends AdvancedRobot Bots]]}}<!--<br />
-->{{ifeq|{{{extends|}}}|Robot|then=[[Category:Extends Robot Bots]]}}<!--<br />
-->{{ifeq|{{{extends|}}}|[[Robot]]|then=[[Category:Extends Robot Bots]]}}<!--<br />
-->{{ifeq|{{{extends|}}}|TeamRobot|then=[[Category:Extends TeamRobot Bots]]}}<!--<br />
-->{{ifeq|{{{extends|}}}|Team Robot|then=[[Category:Extends TeamRobot Bots]]}}<!--<br />
-->{{ifeq|{{{extends|}}}|[[TeamRobot]]|then=[[Category:Extends TeamRobot Bots]]}}<!--<br />
--><noinclude><br />
<br />
<br />
<br />
<br style="clear:both" /><br />
<div style="padding: 0px 5px 0px 5px; border: 1px solid #aaa; margin-bottom: 1ex; background-color: #EFE"><br />
<div style="line-height: 0px; font-size: 140%; border-bottom: 1px solid black; padding: 0 0 0 0; margin-bottom: 0 0 0 0;"><br />
'''Documentation'''<br />
</div><br />
=== Usage ===<br />
The infobox may be added by pasting the template as shown below into an article. None of the Parameters are required as of yet.<br />
<br />
<div style="width:250px; background:#dddddd; border:1px solid black; padding:0.5em 1em 0.5em 1em;"><br />
<pre>{{Infobox Robot<br />
| bgcolour = <br />
| name = <br />
| altimage = <br />
| image = <br />
| imagesize = <br />
| caption = <br />
| author = <br />
| extends = <br />
| targeting = <br />
| movement = <br />
| released = <br />
| best_rating = <br />
| rating = <br />
| current_version = <br />
| codesize =<br />
| license = <br />
| download_link = <br />
| source_link = <br />
| isOneOnOne = true/false<br />
| isMelee = true/false<br />
| isOpenSource = true/false<br />
}}</pre><br />
</div><br />
<br />
=== Parameters ===<br />
{| style="font-size: 80%; border-collapse: collapse; border-left: 10px solid white; border-right: 10px solid white; outline: 1px solid #aaa; margin-bottom: 5px;"<br />
|-<br />
| style="width: 18%" | bgcolor || The background coloring, omit for default color<br />
|-<br />
|| name || The name of the robot, omit for page name<br />
|-<br />
|| altimage || generally not used, only here temporarily for offsite image linking, optional<br />
|-<br />
|| image || an image, logo or snapshot of the robot, optional<br />
|-<br />
|| imagesize* || In the form "Npx", resizes the image to a width of N pixels; default is 200px, optional<br />
|-<br />
|| caption* || A caption discribing the image, optional<br />
|-<br />
|| author || the creator(s) of the robot, e.g. PEZ, Voidious, Chase-san, etc. optional<br />
|-<br />
|| extends || what this bot extends, be it AdvancedRobot, Robot, or TeamRobot, optional<br />
|-<br />
|| targeting || The type of targeting the bot uses, optional<br />
|-<br />
|| movement || The type of movement the bot uses, optional<br />
|-<br />
|| released || The date the bot was originally released, optional<br />
|-<br />
|| best_rating || The best rating the bot has obtained in the rumble, optional<br />
|-<br />
|| rating || The current rating the bot has in the rumble, optional<br />
|-<br />
|| current_version || The current version of the robot, optional<br />
|-<br />
|| license || The license this robot's source is under, optional<br />
|-<br />
|| download_link || the absolute link to your robots jar, optional<br />
|-<br />
|| source_link || the absolute link to the source of your robot, optional<br />
|-<br />
| colspan="2" style="font-size: 80%" | * Only used if the {{{image}}} parameter is used.<br />
|}<br />
</div><br />
<br />
{{Infobox Robot<br />
| name = Dookious<br />
| author = Voidious<br />
| extends = AdvancedRobot<br />
| targeting = GuessFactorTargeting<br />
| movement = WaveSurfing<br />
| released = 2006<br />
| best_rating = 1.571 / 2131 (#1)<br />
| current_version = 1.58<br />
| license = [[RWPCL]]<br />
| download_link = http://www.dijitari.com/void/robocode/voidious.Dookious_1.58.jar<br />
}}<br />
<br />
<br />
== Other Notes ==<br />
Since I cannot access the common.css stuff, I put the style info right into the table T_T. [[MediaWiki:Common.css]]<br />
</noinclude></div>Nfwuhttp://robowiki.net/w/index.php?title=Paul&diff=3160Paul2008-10-01T02:05:01Z<p>Nfwu: Redirecting to Paul Evans</p>
<hr />
<div>#REDIRECT [[Paul_Evans]]</div>Nfwuhttp://robowiki.net/w/index.php?title=SecurityException_Bug&diff=3159SecurityException Bug2008-10-01T02:04:27Z<p>Nfwu: New page: This page was created in order to organize the info about this bug, since it's all spread around this site. You can find people talking about it in:<br> RoboRumble/ReportedProblems<br>...</p>
<hr />
<div>This page was created in order to organize the info about this bug, since it's all spread around this site.<br />
You can find people talking about it in:<br><br />
[[RoboRumble/ReportedProblems]]<br><br />
[[Talk:Compressed Serialization]]<br><br />
[[MSWindows]]<br><br />
<br />
----<br />
<br />
<b>The Bug:</b><br> <br />
Under JRE 1.4.2.x, Any bot trying to access data from the disk "gains" <b>eventually</b> a SecurityException that disables the bot even if it's (the Exception) caugth. <br />
<br />
----<br />
<br />
<b>It's a Bug?</b><br><br />
Since it was working and now ain't no more...<br />
<br />
----<br />
<br />
<b>So what do we do?</b><br><br />
<br />
There is a possible solution posted at [[MSWindows]] page:<br />
<br />
There is a work around that has been posted for the file saving issue that applies to at least JDK 1.4.2_02. Install and chage the batch scripts that start any Robocode instance by adding <code>"-Dsun.io.useCanonCaches=false" (ie: java -Dsun.io.useCanonCaches=false -Xmx256M -jar robocode.jar)</code>. I have tested file savings with Roboleague, Robocode, and RR@H and they all seem to work (no Exceptions reported so far). -- [[Sparafucil3]] (i think...)<br />
<br />
Now if we could figure out that old Serialization problem Paul had on the RR, we'd be set (think this would do it?) -- [[Kawigi]]<br />
<br />
Robocode was reporting it as a "Security Exception" because as far as it was concerned you were trying to write a file outside of it's sand box. If you follow the link on the [[RobocodeRepository]] regarding this you will find that whats happening is that the JVM is having a hard time providing the correct file name (I specifically think it is having a hard time with mixed case words). Your bot then tries to write to a file that Robocode does not know about so it raises a security exception. If Paul was serializing to disk then I would be that this is the same issue he was having too. -- [[Sparafucil3|jim]]<br />
<br />
No - the serialization problem I had/have was communicating between bots in a team - I could serialize to file ok. but in order to send messages between bots reliably I had to covert a byte array to a string to send the message (and reverse the operation when recieving). I think it was a hi/low byte probelm but there is a workaround. -- [[Paul Evans]]<br />
<br />
Yeah, so if it's purely a matter of file I/O, it probably doesn't help, because I think team messages just get serialized and deserialized through piped I/O streams. -- [[Kawigi]]<br />
<br />
I forgot to mention that with [[RoboLeague]] I needed to modify the <code>launcher.properties</code> file. I changed the line <code>user.cmdline=</code> to <code>user.cmdline=-Dsun.io.useCanonCaches=false</code>. I think this file specifies properties to the launch of the robocode engine that it uses. Sorry about that. Also, RR@H still managed to freeze last night but it was after 50 iterations, which is 4 times more than I have ever managed to run before. -- [[Sparafucil3|jim]]<br />
<br />
----<br />
<br />
I modified my batch file as explained above, I'm using java 1.4.1, and I *still* get this bug. Help! Is there anything else I can do as a person who runs the RR@H client to stop this? Is there anything I can do as a bot author to prevent this bug from affecting their ratings? --[[David Alves]]<br />
<br />
Did you modify the batch script that starts RR@H too? I have not had this problem except with bots that get downloaded by the RR@H client after it has been running. I think I have read elsewhere that this is an issue that Albert is aware of but can not fix. The only solution at this time is to restart. If the batch script were modified to restart if java stops a System.exit() could be added if anything is downloaded and then you should not see this anymore. -- [[jim]]<br />
<br />
As a recent data saving bot author I took the extra effort to minimise the effect of this bug by only loading/saving files in the first and last round. For a very long time I ran the RR@H client without the bug workaround because I used java 1.3 in my main testing computer and wasn't aware of the implications of this bug. Anyway, the playing field is even, until there is a defenitive solution you'll have to weight the pros and cons of data saving. -- [[ABC]]<br />
<br />
ABC, if I load data at the end of round one after I've already won or lost, will that affect my score? --[[David Alves]<br />
<br />
No, it won't. You will get disabled but your score will not be affected. One of Shadow's latest versions did save at the end of every round. It may affect your opponent's score tough, because any bullet still in the air is a potential kill for him. -- [[ABC]]<br />
<br />
----<br />
<br />
if you are silly (like me) and copy/paste the above fix, then don't forget to get rid of the ? generated by the Wiki engine :D ...... --[[Vic]]<br />
<br />
Anyone who finds [[Vic]]'s remark peculiar should know that I have removed the questionmark he's talking about. =) -- [[PEZ]]<br />
<br />
There goes my joke ;-) --[[Vic]]<br />
<br />
----<br />
<br />
Where do I add this fix for the RR client? In roborumble.bat? --[[Vic]]<br />
<br />
Yep. Just add <nowiki>"-Dsun.io.useCanonCaches=false"</nowiki> in any of yours .bat... Here is my roborumble.bat:<br />
<pre><br />
cd robots<br />
:run<br />
java -Dsun.io.useCanonCaches=false -Xmx256M -cp .;../robocode.jar;../codesize.jar; roborumble.RoboRumbleAtHome ./roborumble/roborumble.txt<br />
goto run<br />
</pre><br />
It would be a good idea if the clients already had this... -- [[Axe]]<br />
<br />
Ok, thanx. --[[Vic]]<br />
<br />
Does this happen in 1.5? --[[David Alves]]<br />
<br />
Good question. don´t know... -- [[Axe]]<br />
<br />
Downloaded and tested JRE 1.5 here. The result is even worst with it. It seems to happen 100% (10/10). So, the bots accessing files are getting disabled at least one round in JRE 1.5...<br><br />
The <nowiki>"-Dsun.io.useCanonCaches=false"</nowiki> works fine and correct that issue also for 1.5. <B>@ALL: PLEASE UPDATE YOUR ROBORUMBLE.BAT FILES TO INCLUDE THE <nowiki>"-Dsun.io.useCanonCaches=false"</nowiki>.</b> -- [[Axe]]<br />
<br />
Tested a lil better here, and it isn't 100%, but only eventually that it happens with JRE 1.5.<br><br />
But happens.<br><br />
Since i have no control in foreign´s .bat configuration, I have implemented a radical solution: a pull-the-pin-and-swallow-the-grenade strategy, idea inspired by [[Jonathan]] (credits to him). If [[SS]] is disabled trying to read data in the first round, it will activate a self-destruction mechanism, and self-disable in all other rounds also. I'm counting on the server rejecting those 100% scoring that the enemies will get in this match.<br><br />
So, if [[SS]] is getting disabled in your client, please update your roborumble.bat file as above. -- [[Axe]] <br />
<br />
Why don't you just stop reading and writing data? It must be less error prone than the above strategy. A strategy which reminds me of those Worms I used to play so much on my Dreamcast. =) -- [[PEZ]]<br />
<br />
Because i think that data saving and mining can be also a valuable and valid strategy, and (mostly important:) I'm not prepared to throw away all my beautiful data compression :). (I never played Worm, so i cant say about it...) -- [[Axe]] <br />
<br />
But i can say that remembers me the Orson Scott Card book "Ender´s game"... If u havent read, u should ([[Vic]] agree, right?)... -- [[Axe]]<br />
<br />
[[Paul]] agrees also. -- [[Paul]]<br />
<br />
That's enough for me. :) -- [[Axe]]<br />
<br />
@Axe: Have you tried wrapping the save in a try catch and simply catching the error rather than self destructing? Seems like this would at least allow you to continue. I feel the same as you do about saved data but I think your approach is a little too radical and runs the risk that you get a really poor score. -- [[jim]]<br />
<br />
Self destruction seems risky. Particularly when I constantly question why the ... the server is disregarding shut out battles anyway. -- [[PEZ]]<br />
<br />
@[[Jim]]: that SecurityException even if it is caught disables your bot. (But if you know how to catch it without disabling the bot, pls tell me). @[[PEZ]] I think that one of the reasons for the server disregarding these results is to protect ranking against clients malfunction. At least that's my assumption... -- [[Axe]]<br />
<br />
In what way could a client malfunction that would cause a shut-out result? And couldn't the RR client itself set that environment option in run time instead of relying on the .bat file to do it? If someone looks at that I could tweak the server to accept results only from clients updated in this way. -- [[PEZ]]<br />
<br />
Btw: I never said that this self-destruction is the best solution. The best solution is to have properly configured clients. But that is obviously out of my control... This is the <b>only</b> solution that i found. If someone come with other solution, ill be very grateful. -- [[Axe]] <br />
<br />
Hmmm, I think I just proposed a solution? -- [[PEZ]]<br />
<br />
I posted it in a edit conflict... That solution of yours is great. But how to assure that everybody is running the "good" client? -- [[Axe]]<br />
<br />
I mean: this is the same solution of including it in the .bat. If everybody include it... -- [[Axe]]<br />
<br />
Well, when the results are uploaded the client gives a version number. I could just make the server require the client to use a different version identifier than it uses today. That's the easy part. The tricky one might be to find out and implement the setting of that environment option at runtime. <br />
<br />
If you trusted everyone included the .bat change then you wouldn't make your bot swallow a granade with the pin pulled out, would you?<br />
<br />
-- [[PEZ]]<br />
<br />
Bull´s eye! -- [[Axe]]<br />
<br />
But it would be enough for me if everybody says that their environment are ok, an if we include this in the downloadable clients... -- [[Axe]]<br />
<br />
OK. But I know that I, for one, was bloody sure I was using that command line option in my clients. Until I checked yesterday. And I wasn't in the most often used one. Of course I do now, but anyway. -- [[PEZ]]<br />
* Thanks... -- [[Axe]]<br />
<br />
----<br />
<br />
If you want to check if your robot is going to be disabled when reading/writing to the file system use the following code...<br />
<br />
<pre><br />
boolean willMyBotBeAbleToSaveFileInformation = false;<br />
try {<br />
willMyBotBeAbleToSaveFileInformation = (System.getProperty("sun.io.useCanonCaches")).equals("false");<br />
}<br />
catch (Exception ex) { }<br />
<br />
</pre><br />
<br />
It works fine on Java VM 1.6.0 and should work with earlier versions.<br />
<br />
A slightly different version that ought to fix the problem (if executed before any reads or writes) is the following...<br />
<br />
<pre><br />
boolean willMyBotBeAbleToSaveFileInformation = false;<br />
try {<br />
willMyBotBeAbleToSaveFileInformation = (System.getProperty("sun.io.useCanonCaches","false")).equals("false");<br />
}<br />
catch (Exception ex) { }<br />
</pre><br />
<br />
This sets the default value if it finds none set and can be executed multiple times without disabling any robot.<br />
The only problem could be if the flag were set to true when starting the VM - in which case the boolean value would be set to false.<br />
<br />
--[[EventHorizon]]<br />
<br />
{{Saving Navbox}}<br />
[[Category:Data Saving]][[Category:Discussions]]</div>Nfwuhttp://robowiki.net/w/index.php?title=Template:Saving_Navbox&diff=3158Template:Saving Navbox2008-10-01T01:59:41Z<p>Nfwu: added SecurityException Bug</p>
<hr />
<div>{{Navbox<br />
|title=[[Saving]]<br />
|group1=Saving...<br />
|list1=[[Saving|Generic Data]]{{dot}}[[Saving Gun Data|Gun Data]]{{dot}}[[Saving Strategies|Strategies]]<br />
|group2=Methods<br />
|list2=[[Compressed Serialization]]{{dot}}[[Writing Arrays To File]]<br />
|group3=Related<br />
|list3=[[Visit_Count_Stats#Limit_File_Size|VisitCountStats/LimitFileSize]]{{dot}}[[SuperNode]]{{dot}}[[SecurityException Bug]]<br />
}}</div>Nfwuhttp://robowiki.net/w/index.php?title=Saving_Strategies&diff=3157Saving Strategies2008-10-01T01:58:03Z<p>Nfwu: Wiki links... and spelling corrections.</p>
<hr />
<div>''Old wiki page: [http://robowiki.net/cgi-bin/robowiki?SavingData/Strategies SavingData/Strategies]''<br />
This page is about the different strategies for saving data that might arise from different indiividuals creativity and different tournament styles. <br />
<br />
---<br />
A copied discussion from elsewhere on the wiki...<br />
<br />
Preloaded data is always an option, but I would avoid it. At the moment I estimate DT has data on only 70 or so robots at any time - and so the majority of battles DT has no oponent information. DT ought to keep a crib-sheet on all opponents it has met (or at least the last 1000 it has met) so it can use this information in the early rounds whilst it is building up its stats if necessary. - it won't make that much difference against the good bots - but it will give a significant improvement against the lower ranking bots. Unfortunately the DT's code is very scrappy and introducing this will be time comsuming - time I don't have as I have just acquired a few weeks of work :( -- [[Paul Evans]]<br />
<br />
I'm not sorry to hear you are short of time. =) Can you expand a little on the "crib-sheet" thingy? My English vocabulary doesn't contain that word. But it sounds interesting since you think it could improve DT's ranking. -- [[PEZ]]<br />
<br />
A crib-sheet is a summary of answers - useful in exams if you are not caught! When DT keeps stats on its guns it keeps probability information on all guess factors in all segments and continually builds on that information as each wave returns its results. For targeting however far less information is required - just the best guess factor for the particular situation - it is not important for the gun to know how good the guess factor is, or the relative strengths of the other guess factors. My thought is that if, due to data saving restrictions, the full stats have to be lost it may be possible to store the 'targeting answers' for use in the early rounds next time the opponent is met. -- [[Paul Evans]]<br />
<br />
Ah, thanks. I started something like that in [[Marshmallow]] long ago, but I messed things up so I had to scrap it. But I should consider trying again with [[GloomyDark]] as I add [[VirtualGuns]] to it. If I had think about it in terms of a crib-sheet I think I can keep the code reasonably maintainable. -- [[PEZ]]<br />
<br />
Truthfully Paul, I am split on pre-loaded data. I would ultimately like to go with out it and almost released [[Jekyl]] without it on this last release. I am working towards a system that will allow me to go without it and then I can join the ranks of the brave :) Do you have any mechanism for determining which data to store or is it first come first retained? I can see how a first come algorithm would work well in the [[EternalRumble]] but within the context of the [[RoboRumble]] this seems a bit arbitrary. -- [[Sparafucil3|jim]]<br />
<br />
My data saving works on a remove data not used for the longest time - DT keeps count of the battles it has fought and registers this count with each bot it fights. When the data file is too large it looks for the bot with the lowest battle number and removes that. It's a simple work-around for the problem but the best that can be done easily. -- [[Paul Evans]]<br />
<br />
Thats the method that I was thinking of for [[Jekyl]] originally too. But the more I think about it the more I am convinced that I can get a very close approximation of what my match score will be. I know the bullet damage I cause, I know the number of rounds I have won, I think I can get at any ram damage I have cause. The only things I do not know off hand are the bonus calculations and the ram damage calculation. If those can be got at, it should be possible to set a flag for starting without data and then set a threshold for not saving data if a certain score is reached. Why save data on an enemy if you can score 70%+ without it for instance? For right now my data files are small enough that I can store data on some 200+ enemies but the [[RoboRumble]] is approaching that size very rapidly. -- [[Sparafucil3|jim]]<br />
<br />
On the other hand, using a preload-strategy 200+ is good enough in the RR@H. Since, as you pointed out, it's not all that often you can utilize saved data gathered in the rumble anyway. You could preload your bot with data on 150 select enemies and then have 50+ slots left for league forms like [[EternalRumble]]. What I'm saying is that in keeping your data small enough that you can keep data on 200+ enemies you have already achieved a lot. I would rather make sure my bot didn't delete data to make room for data on a new enemy. -- [[PEZ]]<br />
<br />
Saving data on the best enemies is not that important to me - for me my priorities are a good ranking and always winning in the long term against any bot. In order to improve the ranking with the restriction on saving data on a limited range of bots I need to know the difference in winning percentages with stored data and without stored data and for accuracy I also need to know the ranking of the opponent - keeping data on those bots where saving data makes a big difference would improve the rankings. There are complications also because a bot does not know if it is a league battle, whether it is 10 rounds or 35 rounds etc and also how many battles before you could trust the comparison. For long battles data saving is not important at all - given enough rounds DT always beats an opponent - long may that be the case :) (Only one bot beats DT1.21 at the moment that is DT1.11 - but I can live with that.) -- [[Paul Evans]]<br />
<br />
The bot can't know what league it's fighting in. But it can know how many rounds the battle will be. I think. -- [[PEZ]]<br />
<br />
There is a getNumRounds() method or similar, yes. -- [[Tango]]<br />
<br />
{{Saving Navbox}}<br />
[[Category:Data Saving]] [[Category:Discussions]]</div>Nfwuhttp://robowiki.net/w/index.php?title=Saving_Strategies&diff=3156Saving Strategies2008-10-01T01:55:16Z<p>Nfwu: Categories... DataSaving and Discussions</p>
<hr />
<div>''Old wiki page: [http://robowiki.net/cgi-bin/robowiki?SavingData/Strategies SavingData/Strategies]''<br />
<br />
This page is about the different strategies for saving data that might arise from different indiividuals creativity and different tournament styles.<br />
<br />
--- A copied discussion from elsewhere on the wiki...<br />
<br />
Preloaded data is always an option, but I would avoid it. At the moment I estimate DT has data on only 70 or so robots at any time - and so the majority of battles DT has no oponent information. DT ought to keep a crib-sheet on all opponents it has met (or at least the last 1000 it has met) so it can use this information in the early rounds whilst it is building up its stats if necesary. - it won't make that much difference against the good bots - but it will give a significant improvement against the lower ranking bots. Unfortunatly the DT's code is very scrappy and introducing this will be time comsuming - time I don't have as I have just aquired a few weeks of work :( -- Paul Evans<br />
<br />
I'm not sorry to hear you are short of time. =) Can you expand a little on the "crib-sheet" thingy? My English vocabulary doesn't contain that word. But it sounds interesting since you think it could improve DT's ranking. -- PEZ<br />
<br />
A crib-sheet is a summay of answers - useful in exams if you are not caught! When DT keeps stats on its guns it keeps probability information on all guess factors in all segments and continually builds on that information as each wave returns its results. For targeting however far less information is required - just the best guess factor for the particular situation - it is not important for the gun to know how good the guess factor is, or the relative strengths of the other guess factors. My thought is that if, due to data saving restrictions, the full stats have to be lost it may be possible to store the 'targeting answers' for use in the early rounds next time the opponent is met. -- Paul Evans<br />
<br />
Ah, thanks. I started something like that in Marshmallow long ago, but I messed things up so I had to scrap it. But I should consider trying again with GloomyDark as I add VirtualGuns to it. If I had think about it in terms of a crib-sheet I think I can keep the code reasonably maintainable. -- PEZ<br />
<br />
Truthfully Paul, I am split on pre-loaded data. I would ultimately like to go with out it and almost released Jekyl without it on this last release. I am working towards a system that will allow me to go without it and then I can join the ranks of the brave :) Do you have any mechanism for determining which data to store or is it first come first retained? I can see how a first come algorithm would work well in the EternalRumble but within the context of the RoboRumble this seems a bit arbitrary. -- jim<br />
<br />
My data saving works on a remove data not used for the longest time - DT keeps count of the battles it has fought and registers this count with each bot it fights. When the data file is too large it looks for the bot with the lowest battle number and removes that. It's a simple work-around for the problem but the best that can be done easily. -- Paul Evans<br />
<br />
Thats the method that I was thinking of for Jekyl originally too. But the more I think about it the more I am convinced that I can get a very close approximation of what my match score will be. I know the bullet damage I cause, I know the number of rounds I have won, I think I can get at any ram damage I have cause. The only things I do not know off hand are the bonus calculations and the ram damage calculation. If those can be got at, it should be possible to set a flag for starting without data and then set a threshold for not saving data if a certain score is reached. Why save data on an enemy if you can score 70%+ without it for instance? For right now my data files are small enough that I can store data on some 200+ enemies but the RoboRumble is approaching that size very rapidly. -- jim<br />
<br />
On the other hand, using a preload-strategy 200+ is good enough in the RR@H. Since, as you pointed out, it's not all that often you can utilize saved data gathered in the rumble anyway. You could preload your bot with data on 150 select enemies and then have 50+ slots left for league forms like EternalRumble. What I'm saying is that in keeping your data small enough that you can keep data on 200+ enemies you have already achieved a lot. I would rather make sure my bot didn't delete data to make room for data on a new enemy. -- PEZ<br />
<br />
Saving data on the best enemies is not that important to me - for me my priorities are a good ranking and always winning in the long term against any bot. In order to improve the ranking with the ristriction on saving data on a limited range of bots I need to know the difference in winning percentages with stored data and without stored data and for accuracy I also need to know the rankng of the opponent - keeping data on those bots where saving data makes a big difference would improve the rankings. There are complications also because a bot does not know if it is a league battle, whether it is 10 rounds or 35 rounds etc and also how many battles befor you could trust the comparison. For long battles data saving is not important at all - given enough rounds DT always beats an opponent - long may that be the case :) (Only one bot beats DT1.21 at the moment that is DT1.11 - but I can live with that.) -- Paul Evans<br />
<br />
The bot can't know what league it's fighting in. But it can know how many rounds the battle will be. I think. -- PEZ<br />
<br />
There is a getNumRounds?() method or similar, yes. -- Tango <br />
<br />
{{Saving Navbox}}<br />
[[Category:Data Saving]] [[Category:Discussions]]</div>Nfwuhttp://robowiki.net/w/index.php?title=Template:Saving_Navbox&diff=3155Template:Saving Navbox2008-10-01T01:54:35Z<p>Nfwu: Typo</p>
<hr />
<div>{{Navbox<br />
|title=[[Saving]]<br />
|group1=Saving...<br />
|list1=[[Saving|Generic Data]]{{dot}}[[Saving Gun Data|Gun Data]]{{dot}}[[Saving Strategies|Strategies]]<br />
|group2=Methods<br />
|list2=[[Compressed Serialization]]{{dot}}[[Writing Arrays To File]]<br />
|group3=Related<br />
|list3=[[Visit_Count_Stats#Limit_File_Size|VisitCountStats/LimitFileSize]]{{dot}}[[SuperNode]]<br />
}}</div>Nfwuhttp://robowiki.net/w/index.php?title=Template:Saving_Navbox&diff=3154Template:Saving Navbox2008-10-01T01:54:04Z<p>Nfwu: New page: {{Navbox |title=Saving |group1=Saving... |list1=Generic Data{{dot}}Gun Data{{dot}}Strategies |group2=Methods |list2=[[Compressed St...</p>
<hr />
<div>{{Navbox<br />
|title=[[Saving]]<br />
|group1=Saving...<br />
|list1=[[Saving|Generic Data]]{{dot}}[[Saving Gun Data|Gun Data]]{{dot}}[[Saving Strategies|Strategies]]<br />
|group2=Methods<br />
|list2=[[Compressed Sterilization]]{{dot}}[[Writing Arrays To File]]<br />
|group3=Related<br />
|list3=[[Visit_Count_Stats#Limit_File_Size|VisitCountStats/LimitFileSize]]{{dot}}[[SuperNode]]<br />
}}</div>Nfwuhttp://robowiki.net/w/index.php?title=Saving_Strategies&diff=3153Saving Strategies2008-10-01T01:52:02Z<p>Nfwu: New page: ''Old wiki page: [http://robowiki.net/cgi-bin/robowiki?SavingData/Strategies SavingData/Strategies]'' This page is about the different strategies for saving data that might arise from dif...</p>
<hr />
<div>''Old wiki page: [http://robowiki.net/cgi-bin/robowiki?SavingData/Strategies SavingData/Strategies]''<br />
<br />
This page is about the different strategies for saving data that might arise from different indiividuals creativity and different tournament styles.<br />
<br />
--- A copied discussion from elsewhere on the wiki...<br />
<br />
Preloaded data is always an option, but I would avoid it. At the moment I estimate DT has data on only 70 or so robots at any time - and so the majority of battles DT has no oponent information. DT ought to keep a crib-sheet on all opponents it has met (or at least the last 1000 it has met) so it can use this information in the early rounds whilst it is building up its stats if necesary. - it won't make that much difference against the good bots - but it will give a significant improvement against the lower ranking bots. Unfortunatly the DT's code is very scrappy and introducing this will be time comsuming - time I don't have as I have just aquired a few weeks of work :( -- Paul Evans<br />
<br />
I'm not sorry to hear you are short of time. =) Can you expand a little on the "crib-sheet" thingy? My English vocabulary doesn't contain that word. But it sounds interesting since you think it could improve DT's ranking. -- PEZ<br />
<br />
A crib-sheet is a summay of answers - useful in exams if you are not caught! When DT keeps stats on its guns it keeps probability information on all guess factors in all segments and continually builds on that information as each wave returns its results. For targeting however far less information is required - just the best guess factor for the particular situation - it is not important for the gun to know how good the guess factor is, or the relative strengths of the other guess factors. My thought is that if, due to data saving restrictions, the full stats have to be lost it may be possible to store the 'targeting answers' for use in the early rounds next time the opponent is met. -- Paul Evans<br />
<br />
Ah, thanks. I started something like that in Marshmallow long ago, but I messed things up so I had to scrap it. But I should consider trying again with GloomyDark as I add VirtualGuns to it. If I had think about it in terms of a crib-sheet I think I can keep the code reasonably maintainable. -- PEZ<br />
<br />
Truthfully Paul, I am split on pre-loaded data. I would ultimately like to go with out it and almost released Jekyl without it on this last release. I am working towards a system that will allow me to go without it and then I can join the ranks of the brave :) Do you have any mechanism for determining which data to store or is it first come first retained? I can see how a first come algorithm would work well in the EternalRumble but within the context of the RoboRumble this seems a bit arbitrary. -- jim<br />
<br />
My data saving works on a remove data not used for the longest time - DT keeps count of the battles it has fought and registers this count with each bot it fights. When the data file is too large it looks for the bot with the lowest battle number and removes that. It's a simple work-around for the problem but the best that can be done easily. -- Paul Evans<br />
<br />
Thats the method that I was thinking of for Jekyl originally too. But the more I think about it the more I am convinced that I can get a very close approximation of what my match score will be. I know the bullet damage I cause, I know the number of rounds I have won, I think I can get at any ram damage I have cause. The only things I do not know off hand are the bonus calculations and the ram damage calculation. If those can be got at, it should be possible to set a flag for starting without data and then set a threshold for not saving data if a certain score is reached. Why save data on an enemy if you can score 70%+ without it for instance? For right now my data files are small enough that I can store data on some 200+ enemies but the RoboRumble is approaching that size very rapidly. -- jim<br />
<br />
On the other hand, using a preload-strategy 200+ is good enough in the RR@H. Since, as you pointed out, it's not all that often you can utilize saved data gathered in the rumble anyway. You could preload your bot with data on 150 select enemies and then have 50+ slots left for league forms like EternalRumble. What I'm saying is that in keeping your data small enough that you can keep data on 200+ enemies you have already achieved a lot. I would rather make sure my bot didn't delete data to make room for data on a new enemy. -- PEZ<br />
<br />
Saving data on the best enemies is not that important to me - for me my priorities are a good ranking and always winning in the long term against any bot. In order to improve the ranking with the ristriction on saving data on a limited range of bots I need to know the difference in winning percentages with stored data and without stored data and for accuracy I also need to know the rankng of the opponent - keeping data on those bots where saving data makes a big difference would improve the rankings. There are complications also because a bot does not know if it is a league battle, whether it is 10 rounds or 35 rounds etc and also how many battles befor you could trust the comparison. For long battles data saving is not important at all - given enough rounds DT always beats an opponent - long may that be the case :) (Only one bot beats DT1.21 at the moment that is DT1.11 - but I can live with that.) -- Paul Evans<br />
<br />
The bot can't know what league it's fighting in. But it can know how many rounds the battle will be. I think. -- PEZ<br />
<br />
There is a getNumRounds?() method or similar, yes. -- Tango <br />
<br />
[[Category:Data Saving]] [[Category:Discussions]]</div>Nfwuhttp://robowiki.net/w/index.php?title=Talk:Saving&diff=3152Talk:Saving2008-10-01T01:40:41Z<p>Nfwu: Moving Discussion, etc</p>
<hr />
<div>== Old Wiki: SavingDataHowTo or Saving/How ==<br />
I am struggling with adding persistence to my robot. Now I don't know a good way to see when the MatchIsOver. -- [[PEZ]]<br />
----<br />
'''''static variables'''''<br />
<br />
The easiest way to save data between rounds is to make your variables static. There is no need to save data to a file and retrieve it. You usually store the enemy information you collected in previous rounds (if you need it later) or information stored in files that you need to read only once. -- [[Albert]]<br />
<br />
As far as I know static variables in a Java class is shared among all instances of that class. Robocode creates a new instance of your bot for each round (and then calls the run() method), but since static variables are shared among all instances, your bot still has access to the data that was saved in the static variables last round. I'm not sure what this means if you have multiple instances of the same bot on the field though? --[[Zeb]]<br />
<br />
In principle, multiple instances of the bot work OK. I'm not sure why (because they are the same class, they should share the data). My guess is that it is OK because they execute in different threads. -- [[Albert]]<br />
<br />
I've found the answer in an old posting by [[MathewNelson|Mat]]: http://www.alphaworks.ibm.com/forum/robocode.nsf/archived/5F86B09EE7DCA3E682798BC09C4B0950?OpenDocument It says that each robot is created by separate ClassLoaders, with the purpose being that they should not share static variables. -- [[PEZ]]<br />
----<br />
I'm still a bit confused about what Robocode does between rounds. I have a static collection of enemies, each which get an instance of my robot when they are created. How come this robot reference is still valid between rounds? Isn't it a new instance of the Robot then? Or why would you need static variables for this otherwise? -- [[PEZ]]<br />
<br />
Pondering and discussing with my colleagues I now think I know the the answer to this question: Calls like getHeading() are accessing static variables in the robot. My static collection holds a reference to an old and dead robot, but it shares those static variables with each new and fresh instance, which make it work. It's when you try calls like ahead() that things stop to work. -- [[PEZ]]<br />
----<br />
'''''Serialization'''''<br />
<br />
Serializable means that a class can be converted into an array of bytes which can then be written to disk, sent over a network, etc. For a class to be Serializable it must (a) have no member variables which hold non-serializable classes and (b) implement the Serializable interface. The only real problem you can run into is if you have an object with a lot of references to other objects: when you serialize it, you''ll also be serializing and all of those objects, any objects that they have references to, etc. In an early version of Duelist I couldn't understand why my datafiles were about 40k per bot - turned out that one of the things I was serializing had a reference to my bot in it, so I was serializing EVERY object my bot used! :-P<br />
--[[David Alves]]<br />
<br />
You use the ''transient'' keyword to indicate that a member variables aren't part of the persistant object. As long as you know how to reconstruct an "incomplete" deserialized object you just put ''transient'' in front of the variable declaration and it won't get serialized along with the rest of the object. Beware though that if you initialize a transient variable upon declaration you won't have the initialized value on that variable after deserialization. Like:<br />
<pre><br />
transient double largestX = getBattleFieldHeight() - getWidth() / 2;<br />
</pre><br />
The variable 'largestX' will have the value of 0 (zero) after deserialization. Now this particular variable you might want to serialize anyway. =) But you get the drift I hope. -- [[PEZ]]<br />
<br />
You can also compress the serialized files. [[Kawigi]] shows how in CompressedSerialization.<br />
----<br />
'''Other'''<br />
<br />
If you have your data in simple, primitive type, arrays you can store and retrieve that data compressed by using a variant of the serialization thingy above: WritingArraysToFile. -- [[PEZ]]<br />
<br />
<br />
'''''TIP:'''''<br />
<br />
if you want to increase your file quata in your local machine, add the robocode.robot.filesystem.quota=2000000 in your robocode.propoerties file. It will set the file quata to 2MB.<br />
--[[SSO]]<br />
----<br />
If you are having problems saving data under 1.4.2, look here: [[JRE 1.4.2 SecurityException Bug]]<br />
<br />
==Old Wiki: Reducing File Size or Saving/Size==<br />
I'd like to know how other people reduce the size of the data they save per robot. I was thinking about using the zip stream thing, but didn't have a clue about how to use it. Anyone help? -[[Wolfman]]<br />
<br />
In my bot Parakeet, I store two arrays of floats instead of two arrays of doubles.. It cuts the filesize in half... I didn't need the precision of doubles anyway. --[[Dummy]]<br />
<br />
Hrm ... what format do you save as [[Dummy]]? I just save as a text file currently. So Im not sure how saving as a float instead of a double will help in that circumstance! -- [[Wolfman]]<br />
<br />
What are the limits of this file anyway? I was considering just serializing my Enemy objects, but I guess that's out of the question? -- [[PEZ]]<br />
<br />
Serializing Enemy objects works, but if you find yourself running out of space, you can do better. You don't need to store things like last position, heading, velocity, etc. which are probably in your enemy class. What DuelistMini does is to store an array of doubles in a GZipOutputStream. Remember that arrays are java Objects, so you can write an entire array by using:<br />
<br />
myObjectOutputStream.writeObject(myArray);<br />
<br />
and read an entire array from an input stream by using:<br />
<br />
myArray = (double[][]) myObjectInputStream.readObject();<br />
<br />
--[[David Alves]]<br />
<br />
Parakeet saves one integer and two arrays per datafile (one datafile for each opponent it meets in 1-on-1. No data-storage in melee battles). The source of Parakeet is included in the .jar file on the RoboCodeRepository. Actually, I looked in [[TheArtOfWar]]'s source code to see how writing to files worked. Which reminds me... forgot to add credits in Parakeet's description and source. --[[Dummy]]<br />
<br />
Object Streams consume a lot of space. Take a look inside a file written using ObjectOutputStream. If I remember correctly, each field is identified by its name and type, as well as the field's value. The signatures of the object's methods might also be written to the file. On the other hand, these files should compress very well with Zip Streams.<br />
<br />
If you are really want to reduce file size, you might want to look at Data Streams. Write only the fields you absolutely need. If you still need to reduce the file size, try cramming larger fields into smaller ones where possible (ie: double into int). Sure, you will lose some precision, but if file size is a real issue for you, you have to be willing to make some sacrifices.<br />
<br />
[[TheArtOfWar]]'s Bot class uses Data Streams, and the Reaction class crams two double fields (heading and speed) into two byte fields. The source is available at the RobocodeRepository. I should have used Zip Streams for further file size reduction, but I never got around to it -- [[Ray_Vermette]]<br />
<br />
Using Zip Streams is demonstrated, with code, on the CompressedSerialization page. -- [[PEZ]]<br />
<br />
==Old Wiki: Saving/What==<br />
=== What info to Save ===<br />
More than one opinion here- <br />
<br />
Dave Mold says to collect acceleration and change in heading.<br />
<br />
Plenty say to collect velocity and change in heading (these could be equivalent for <i>good</i> data)<br />
<br />
Paul Evans says to collect what firing angle should have been used based on distance and last direction of motion.<br />
<br />
A good circular aimer might collect only the velocity for several turns and the change in heading for several turns (to average them).<br />
<br />
Other ideas? Is it worthwhile to save information about your opponent's offense?<br />
--[[Kawigi]]<br />
<br />
This depends heavily on what aiming methods and movement system you are using. Heading change and velocity is good for playback when PatternMatching. 0.9.9.x versions of [[Marshmallow]] used to keep information on what dodging angles it had used and how they had worked. Is that what you mean by "opponent's offense"? -- [[PEZ]]<br />
<br />
That's the general idea, although I was thinking in a more advanced sense - if you try and track their bullets, store the powers the opponent tends to use, and when you got hit, if it appears he used direct, linear, circular, pattern, statistical, or other aiming techniques. Just a thought that probably goes under [[DodgingBullets]]. -- [[Kawigi]]<br />
<br />
Well, I think that might be a bit too much work for a rather slow learning process. Few bots rely on linear or circular aim alone, but instead use them if it seems you are moving in a particular pattern. If you have a good pattern matcher yourself you might use it to neutralise any pattern matcher the enemy might have by making sure you don't go where your own pattern matcher guesses you'll go. Same thing with statistical aim (which is what those 0.9.9.x version of Marshmallow tried to do). But you'll need something along the lines of AntiGravityMovement to do the "avoid" part of the plan. (Which is where Marshmallow failed since it doesn't use anti-grav...). Indeed, if it seems the enemy relies in HeadOnTargeting you might shift to a particular movement strategy where direct aim never hits. (Like moving like [[Walls]] or some such). -- [[PEZ]]<br />
<br />
It's certainly easy to shift to a movement that beats HeadOnTargeting. One thing I toyed with was a bullet dodging technique that wasn't quite perfect, and I had it just print "AM I HIT?" every time it got hit by a defensive virtual bullet. Then it would print "I'M HIT" in onHitByBullet. Virtually all the time, the "I'M HIT" message came amidst a few "AM I HIT" messages. It seems like one could figure out what's hitting me most of the time when I get hit, and use that to my advantage. Pattern-matching yourself is a good idea, too, sometimes, I think I've noticed MogBot doing it. It may be even better to implement multiple pattern-matchers (an acceleration-change in heading one, a velocity-change in heading one, one that just looks for the frequency in changes in direction, etc), to have good defense against any of them (of course, after awhile, there's just a bullet everywhere.<br />
<br />
The avoid part can be done without antigravity, antigravity is just a convenient way to do it that doesn't take much processor time if it's done right. SpareParts has a Bullet-dodging movement that works well in general (dodges just HeadOnTargeting, LinearTargeting, and CircularTargeting, both with velocity averaging and without). It just searches for the closest point that it can be at that doesn't intersect any "Virtual Lasers" that I create for each projected bullet.<br />
-- [[Kawigi]]<br />
<br />
Yes, it is because avoiding direct aim is so easy I thought it might be worth it to implement a check for it and the antidote. And while few bots rely on circular or linear aim some does rely on direct aim. Try using direct aim only against [[Marshmallow]] and you might find that it is quite effective... The problem with pattern matching is that it is time consuming. Though you can of course record lots of parameters and empirically try to figure what works best. Your search for "safe" points is something like what I mean when I speak about WantedTerrain. -- [[PEZ]]<br />
<br />
But collecting info doesn't cost anything so you could collect just about anything. Marshmallow certainly does... It's when it comes to '''using''' the info where you might pay a price (like with PatternMatching) and certainly when you want to save data between matches, which is where WhatToSaveBetweenRounds (and matches) comes in. -- [[PEZ]]<br />
<br />
<br />
----<br />
<br />
=== What to save Between Rounds ===<br />
<br />
You can save pretty much everything and anything you collect. You shouldnt variable things between battles (positions, time, etc) but beyond that, keep all important info in static variables and they will stay between rounds.<br />
<br />
----<br />
<br />
=== What to save Between Battles ===<br />
Ok, I am currently porting various guns from testbots into Raven and his Virtual gun array, but i'm struggling to decide what to store between battles. Although there will probably be more, the key guns i'm looking to port are PatternMatcher, GuessFactorTargetting, VirtualBullets. The question is do i store the stats for each of the individual guns between battles, the stats for the virtual guns, or both???<br />
<br />
Also, how many bot's should i leave capacity to store?? -- [[Brainfade]]<br />
<br />
That can be a tough question. My opinion is that you should probably at least store your VG stats and your info for guns that aren't particularly expensive to save (like your guess-factor gun probably). The problem that leaves you with is if you test a bot and you run long matches, the pattern-matcher might get pretty good, but then in real competition, it will remember that the PM was good but forget that it doesn't have much saved on the pattern-matcher. Something on FloodHT's todo list is adding a pattern-matcher that 'rates' the matches I get (either by how close they are or how long, depending on the nature of the PM) and then stores VG stats for each possible strength (so say I find a pattern of length 20, I'll use that instead of the Guess-factor gun, but if I find a match of length 4, I won't, regardless of how much pattern I know). -- [[Kawigi]]</div>Nfwu