[Home]History of Aspid

Robo Home | Changes | Preferences | AllPages


Revision 23 . . May 4, 2006 22:03 EST by GrubbmGait [reverted vrom vandalism]
Revision 22 . . May 4, 2006 21:54 EST by proxy.ns.ac.yu
  

Difference (from prior major revision) (no other diffs)

Changed: 1,2c1,74
null
Bausch wrap fumed physically?alabaster howling holding entity [online poker ] parsimony Vinson salvaging mung [poker ] electromechanical beep [party poker ] Clarence
Aspid is the big brother of MicroAspid. I develop them in parallel, so they share many features (ie. movement for MicroAspid 1.4.5 and Aspid 1.6.5 is the same).

Aspid is currently (Jan 2003) 3rd in the Eternal Rumble global ranking, and 2nd in the MiniBots ranking. It was 3rd in Face2face competition (Christmas ranking - MiniBots) and has reached some good places in the Minibot challenge.

Aspid is again 3rd in the Face2face Cruel Winter ranking, mini category - Apr 07

Aspid is first in the MiniBot Challenge - May 28

Aspid features a powerful pattern matcher, that is probably the best one out there right now.

I dunno... cx.mini.Cigaret's quite good too! :-p --Dummy

Cigaret's and BlackSwans' pattern matchers are the same - one does better than Aspid, one doesn't do as well. Call it a tie. :-P --David Alves

How do you measure this? And is it OneOnOne only or do you count in Melee. I wonder of course since I'd like to know how Marshmallow's pattern matcher compares... -- PEZ

Aspid is a OneOnOne bot, and so is its pattern matcher (it is not good at all for Melee). I don't have a structured way to test it, but you can try against some bots with more or less regular patterns and see what happens (ie. does it hit Walls more than 90% of the time? How it performs against some oscillators and avoiders - eg. Geek series?).
About Cigaret: I agree it has a very good targeting system (I won't dare to say Aspid's gun is clearly better) but as far as I know, Cigaret uses an advanced VirtualBullets targeting system :-) -- Albert

Cigaret uses a pattern matcher. It tracks what firing angles would have hit and looks for patterns there. The difference is that a VirtualBullets system just says "A hits more than B, so we should use A to aim from now on" whereas pattern matchers look for patterns in data. --David Alves

How does it move?




Uses the same movement as MicroAspid.

How does it fire?




It uses a killer PatternMatcher. I'm using velocity and angular velocity (heading change) as inputs for the pattern matcher (I think 90% of pattern matchers use it).

What makes Aspid's pattern matcher really effective is:

* Instead of fixing a length for the vector to match, it starts with a vector of length one, then takes all matching points and matches them again using a vector with length two, again with length 3, and so on. It allows the pattern matcher to use all the available information and to avoid not considering good patterns just because the selected length was too long.
* Once it has a group of matching points, it calculates the correct gun bearing for each one, selects the most common bearing and fires there. Note that this strategy avoids selecting a "strange point" that will make you miss. Also, note that when the algorithm is unable to find a good set of points, it behaves in a similar way to a VirtualBullets system.

MicroAspid's pattern matcher uses the same principles as Aspid's one but it picks a point from the selected set and uses it.

How does it dodge bullets?




No dodging at all.

How does the melee strategy differ from one-on-one strategy?




Aspid is a OneOnOne bot. It hasn`t melee strategy.

Where did you get the name?




See MicroAspid.

Can I use your code?




I'm not releasing the code, but I have no problem to share the ideas, so just ask.

What's next for your robot?




I'll improve its movement.

What other robot(s) is it based on?




Aspid and MicroAspid are closely related, they develop in parallel.



Comments:

I remember spending lots of time determining a good vector-length for my own patternmatcher. Of course this differs for each opponent. Your idea of a variable vector-length is very clever! --Dummy

Marshmallow uses a randomized vector length, just to be a bit less predictive. =) -- PEZ

I notice that when I run Aspid robocode slows down considerably, especially when minimized. This, I guess, is due to some heavy iterations on Aspid's account. With Marshmallow I can't do much more calculations since I already get one or two "skipped events". Does Aspid get a load of these or has it some means to grab all that CPU and still get robocode's full attention? -- PEZ

Aspid makes heavy use of CPU but in general it does not get "skipped events", just because I optimized it to avoid them (under special circumstances a skipped event can happen, but it is not usual). The logical question now is: how do you optimize it? Well, no science behind it. When I develop I put a println in the skippedturnevent that says "skipped turn" and then I try to figure out the reasons. It happens that for Aspid, the major CPU usage is consumed by a very specific part of the algorithm, so I just make sure I don't use more data than Aspid can crunch... Just based on my experience: Be careful with skipped events, they tend to kill your bot, because it is not able to react. -- Albert

Yes, I also print when I get skipped events, that's how I know I'm close to the limits on what I can do each turn. But still, running two Marshmallows allows my Mac (which is very slow on executing Java stuff) to produce 700+ fps when robocode is minimized. But running two Aspids it's more like 60 fps... There much be something more to this. Do you use the specialized event handlers or do you dispatch from the run loop using getAllEvents?() or some such? -- PEZ

I'm not using any kind of specialized handlers nor any special code to grab more CPU. The only thing I can think of is that I am using some java built-in functions to process the data (especially from the Collections package) - maybe it allows Aspid to use more CPU. Maybe you should check Cigaret's code (it's open source and it is *very* slow). If he is using some java built-in functions to deal with large arrays of data, then it could be the answer. -- Albert

Robo Home | Changes | Preferences | AllPages
Search: