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.
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
Uses the same movement as MicroAspid.
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:
MicroAspid's pattern matcher uses the same principles as Aspid's one but it picks a point from the selected set and uses it.
No dodging at all.
Aspid is a OneOnOne bot. It hasn`t melee strategy.
I'm not releasing the code, but I have no problem to share the ideas, so just ask.
I'll improve its movement.
Aspid and MicroAspid are closely related, they develop in parallel.
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
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