Yes, sorry for just throwing it out like that, but I was dead tired. I started with the bot at midnight yesterday and when it compiled, was still and mini, and seemed to run without throwing exceptions I released it. No further testing whatsoever. That's me, in'it? Of course I don't create a top-10 material bot in two hours from thin air. This is really Aristocles grown to a mini. Grown to fit AdaptiveMovement. Like Paolo. But where Paolo uses the MusashiTrick to try to balance the number of hits it allows at GF1, Pugilist uses EnemyWaves to try avoid any GF it has recently been hit at. It uses enemy waves to avoid HeadOnTargeting too, which makes it very good at that. -- PEZ
It's the only MiniBot having breaken the 2K barrier in the general class of RoboRumble@Home. 2007 points for version 2.0.8.
It's #8 in general rumble. #1 in mini rumble!
In fact in minirumble it beats all opponents. Making it a PremierLeague king there. It not only beats them actually it beats them on average by 81.58%! Check it out: http://rumble.robowiki.net/servlet/PremierLeague?game=minirumble&table=2
I guess the 2K clubs are not for me...
This P only loses to one minibot yet. Quite surprisingly this is Tityus. (Although, it's almost a tie.) I would have thought that the Tityus gun would be very vulnerable to P's style of WaveSurfing...
-- PEZ
Could you please explain what you do for the edge-smoothing protection? -- ABC
What I would like to do is to have two or three extra bins on either side of the edges and then mirror the bins on the inside of the edge to the outside when writing to the stats array. But that won't fit in my byte starved mini. Instead I just do index = min(index, FACTORS - 2) before reading the data. That way reading the last (GF1) bin gets the next last instead and the GF1 bin weights less. Does this make any sense? How about some code...
double smoothedVisits(int index) { index = (int)Math.min(index, Pugilist.FACTORS - 2); double smoothed = 0; for (int i = 0; i < Pugilist.FACTORS; i++) { smoothed += (double)visits[i] / Math.sqrt((double)(Math.abs(index - i) + 1.0)); } return smoothed / Math.sqrt(distanceToTarget() / bulletVelocity); }-- PEZ
Check this out...
Now I only need 5 points and I will have fulfilled my new years promise of 2004 - with a mini. That would be sweeet. But how? The air is really thin this high in the ranking table nowadays...
-- PEZ
3.76 points and 327 battles left :D --deathcon
pez.mini.Pugilist 1.9.4.3b 2001.73 details graph 228 15-5-2004:14:56
--deathcon
Looking good! What did you do? Found that Thread.sleep() bug or something? I know I know, too early to say... -- Pulsar
I surely touched 2K ground a while there! I've decided to always treat that as a sign. =) Thanks for letting me know. Now it's 1991 with 426 battles. And, more importantly, I'm past DT! It's gonna be a high tensed PEZ until it's decided if it's stay there. Seems my performance against iiley's PM guns has gotten worse though. P is not undefeated in mini any more. But since I know what changes I made I just might be able to correct that. Problem is, as always, byte starvation. I only have three (3!) bytes left as it is. If anyone sees where I can save some bytes, please, please let me know. Tons of thanks to Jim who helped me save 13 bytes by being smarter about my wall segmentation. -- PEZ
I think I might have some clues to improve my wae surfing in particular and maybe wave surfing in general now. It seems that segmenting on wall proximity instead of acceleration improves performance against many pattern matchers, but degrades over all performance. This could mean that wall-segmentation works against many pattern matchers. But, more likely I think, it' is acceleration segmentation that gives these pattern matchers an easier target. I can't explain how, but my gut feeling is that the time variable involved in pattern matching somehow gets important when the target is segmenting its movement on acceleration. What do you rocket scientists out there think about this? -- PEZ
I really wish I'd know... I have made up many theories about why the PM bots perform so well against wavesurfing opponents, but none of them work as well as expected when I implement the correspondent "solution". I also don't know what to say about your feeling regarding acceleration segmentation, if you test it further and it evolves from a "gut feeling" to a proven method, please share ;). Atm, my feeling tells me that the only way you can improve performance against good PM guns is by reintroducing some kind of random factor, slightly sacrificing dodging performance against the "typical" GF gun. -- ABC
Hell will freeze before I do that. =) -- PEZ
1997 with 407 battles fought. 2K club better prepare a chair for Pugilist. Even if it will collect some dust while I figure out where to find the missing points. =) -- PEZ
I really thought you had it, Pug was 2001 after about 200 battles with a positive momentum. Depending on how deperate you are to make the club, i reckon you could actually tip the scales by removing a couple of your older bots (Mako, Gloomy and Frankie all have high PBI's). As they're your bots there is no reason you couldn't, it just the ethical issue you need to think about....Brainfade
=) Gloomy must have been lucky. Those old bots are too dear to me for me to remove them. P must do this on his own I guess. He's like SilverSurfer on that account. Suffering alone. -- PEZ
No pain no gain... 460 battles , 1996.83 pts... That 1.9.7b.6 looks very good, maybe u get the 2K... -- Axe
Thanks. But what's bothering me is that I only can do it with this targeting bug in place. It's the most peculiar thing I've yet come across in my robocoding. And, I've come across one or two peculiarities. =) -- PEZ
I really understand what u are talking about, sometimes is like rc universe laws and properties conspire against the logic. -- Axe
Well, 1989 it is now with 849 battles. I think maybe that the overload of mini battles can have dragged it down some. Seen it happen before. -- PEZ
As usual it wont last. But it sure is a nice picture (literally):
=) -- PEZ
congrats on the 2000-club by the way! Well done!!! -- Pulsar
Contgrats from me too. Way cool !!! --deathcon
Thanks! Now this is my road map:
I know step 2 there can be a too hard for me, but I think I must try. One thing is for certain; If I don't try it I won't make it. Lacking Jam's talent I can only answer with hard work and persistance. And I've got plenty of the latter. =)
-- PEZ
What can I say? Congrats!! A truly incredible ranking from a mini. I look forward to duking it out with Cassius. ;-) -- Jamougha
Thanks. It'll be like "old times". Only this time I hope to end up the winner. =) -- PEZ
(robot.getEnergy()>2||robot.getEnergy()>target.energy||(!target.isFiring()&&robot.getEnergy()<target.energy))And in the (few) tests i did, it seemed to give a small rise in overall score, it especially seems to help against iileys bots... --Brainfade
Yes, I think there is a bit more bullet damage as a result. Can't fit it in Pugilist, but I'll keep it in mind with CassiusClay. Thanks! -- PEZ
Of course I don't mind. I'm as curious as you are about the results! -- PEZ
Ok. I think i will have a version ready this evening. How do you like the name "wiki.mini.FeederOfRavens" ? --Loki
Ravens? Still in norse mythology land? =) feeder of ravens is cool. But feeder of vultures would be more videly understood I think. -- PEZ
yes, still in norse prose land. Although 'kennings' are known in Dutch too. I thought using a kenning would be a nice idea for a mostly Swedish bot (and so i can keep the norse gods 'exclusively' for the bvh.* series of bots =) ).
The basic version is 'clean compiled'. Pugilist set-up is quit clean for a mini, i could quite easily add the PM-code! I will now run some tests and upload it soon. --Loki
It's out! Cool! -- PEZ
Yes. Let's see where it ends up. --Loki
static Point2D wallSmoothedDestination(Point2D location, double direction) { Point2D destination = new Point2D.Double(); int tries = 0; while (tries < 2) { double currentSmoothing = 0; while (currentSmoothing < 100 && !fieldRectangle.contains(destination = project(location, absoluteBearing(location, enemyLocation) - direction*(Math.PI / 2 + 0.2 - (currentSmoothing++ / 100.0)), enemyDistance / 5.0))); direction -= direction; tries++; if (currentSmoothing < 45) { break; } } return destination; }And here's the .14 code:
static Point2D wallSmoothedDestination(Point2D location, double direction) { Point2D destination = new Point2D.Double(); int triesLeft = 1; double currentSmoothing; do { currentSmoothing = 0; while (!fieldRectangle.contains(destination = project(location, absoluteBearing(location, enemyLocation) - direction*(Math.PI / 2 + 0.2 - (currentSmoothing++ / 100.0)), enemyDistance / 5.0)) && currentSmoothing < 100); direction -= direction; } while (triesLeft-- < 1 && currentSmoothing > 46); return destination; }Anyone that sees where these two snippets should differ in functionality?
-- PEZ
I think the second one will only loop once in the do/whie. You set triesLeft = 1, then do..while(triesLeft-- < 1). That triesLeft-- will evaluate to 1 and then decrement triesLeft. Maybe you want "triesLeft-- > 0"? -- Voidious
{Edit conflict]First thing that catches my eye is the 'triesLeft-- < 1' construction. If I understand it correctly, the do-loop will be done only once. triesLeft starts with 1, then tested if it is smaller than one and then decremented. I think that you wanted to do something like 'triesLeft-- > 0' -- GrubbmGait
Just in case you didn't know it, --triesLeft will decrease and then use that value in your evaluation, while triesLeft-- will evaluate the present value of triesLeft and then decrease the variable independently. -- Martin
Thanks guys. Yes I knew about the post-decrement and did that intentionally. But I reversed the logic as you both noticed... Great. New hope for Pugilist! Since most of the > .03 releases used the buggy code I might even have a version among them that will kick some major ass with the bug nailed! -- PEZ
Nope. Checked it now, this logic error was introduced with 2.4.12 so I don't have a Pugilist hiding there that would outrank 2.4.03. Not to mention 2.0.9 which was the strongest Pugilist by far. It's awful having spent so much time trying to improve a bot and never ever coming close! -- PEZ
Yeah, well, I don't have that much pity for you ... I am at that stage with Komarious, and still about 40 points behind the best version of Pugilist in the mini-rumble. :P (j/k) -- Voidious