LauLectrik won the Face2face competition 15.Feb.2003 (Minibots).
As all my bots, LauLectrik is a 1v1 bot.
LauLectrik 1.2 released! It features a completely new gun and some improvements as persistence for the data gattered in battles.
LauLectrik made it to the #5 in the Eternal Rumble just after entry!
I'm not good designing movements :-( It uses the same movement as MicroAspid, that is the most succesful movement I have so far.
It uses a new technology: symbolic pattern matching. The idea is that instead of defining a matching function and then programming the search, you translate your variables into a symbolic space, put them into an String, and then use the built-in java substring search functions to match the patterns. It has some advantages compared to traditional methods:
I'm not using velocity and heading change to match the patterns, but some sort of measure of bearing change (in relation to my bot).
LauLectrik is an experimental bot. I rewrote its gun completely for this version. Now it features what I call a "best p-space" gun, which does not uses pattern matching. Rather, it keeps track of the rigth gun bearings to hit the target, finds the variables (for a given time) that best describe the hit-probability function (best describe = have more information) and uses this function to aim.
I'm quite satisfied with this gun, but I'm solving a couple of problems: (a) It learns slowly (b) It needs a lot of space to store the information from battle to battle.
No dodging at all.
It's a kind of private joke.
I'm not releasing the code, but I have no problem to share the ideas, so just ask.
I consider LauLectrik 1.0 quite experimental, and if the gun works as expected, it will be the development plattform to:
With version 1.2 I'm trying to develop a new approach (not pattern matching nor VB) to aim, and I keep thinking in the idea of developing a gun suitable for melee. Next steps will probably be to fix the problems the new gun has.
Movement is from MicroAspid.
There are two clear tasks when you are creating a pattern matcher: first one is to match the good pattern(s), second one is to use this information to aim at your enemy. You can use the same set of information to match the pattern(s) and to aim at your enemy, but it is not necessary. LauLectrik uses "some sort of bearing change" to match the patterns, but aims by using the usual information (ie. last heading, velocity and heading change). About factoring away my movement: I'm not doing it (yet). For now, I assume it has a little impact on my aiming. -- Albert
Yes, of course! Thanks for clarifying. It seems LauLectrik's pattern matcher does quite well (assuming it uses only pattern matching for aiming). Which means I will also try to use bearing change for the match, my current matching doesn't do well at all against non-trivial bots, though Marshmallow somewhat compensates this with VirtualGuns. As for the symbolic match, I've been there, though I used Soundex. Without any success though. =) Then again Marshmallow doesn't need o save bytes, being a MegaBot. -- PEZ
I've now tried using bearing change for matching. But for me it seems to perform on par with velocity + heading change matching. What lies behind your "some sort sort of" there Albert? -- PEZ
It matches the target velocity projcted on the perpendicular of the bearing of the enemy bot. Realize that it is similar to bearing change, but independent of the distance to the enemy bot. To be honest, I don't know if it is bettern that velocity and heading change (that's why I say it is an experimental gun). I guess it will be better for some bots, and worst for others. The final objective is to have a multi-criteria pattern matcher. -- Albert
Marshmallow now has a pattern matcher that can match on velocity+heading_change, bearing_change, distance_change and distance_change + bearing_change. Interestingly distance_change was the best against PrairieWolf in the first 100 rounds. After that PW somehow adapted it's movement so that all pattern matching criteria where pretty useless and similar, around 11-12%. -- PEZ
I know about this bug. I'w fix it in the new release. The problem is that I didn't implemented a circular buffer yet, so when it reaches its maximum capacity it raises an error. But it will not produce if you run 100- rounds battles. -- Albert
I'm not sure how the buffer is implemented at current, but for circularity my pattern matcher uses a LinkedList and I add to the buffer with addLast() and then use removeFirst() when the buffer is full. Or if it's a plain array you could just use use something like:
index = counter++ % bufferSize; buffer[index] = whatever;-- PEZ
The development version of LauLectrik gets a 14.6% hits to DT. The line I'm following is quite promising, so I hope to raise the percentage to a 15%. When it happens, DT will have a hard time (of course, I'w need to improve my movement too :-)) -- Albert
Cool! Here's a trio of questions again: Can I have it to try Marshmallow against? What hit rate does it get against Fermat? Are you still only using PatternMatching or have you introduced VirtualBullets as well? -- PEZ
New version of LauLectrik is not ready yet to be released :-( Rigth now I'm using only pattern matching, but a flexible one (that let's me select the best parameters depending on the robot). I'w try it against Fermat and let you know. --Albert
Do you just use a normal string to store the chars in?