View source for Talk:EnergyDome
- [View source↑]
- [History↑]
Contents
Thread title | Replies | Last modified |
---|---|---|
Expected bullets off a bit first 100 ticks of first round | 3 | 22:12, 24 February 2013 |
Looking forward to this. | 28 | 15:09, 21 February 2013 |
Comparing Results Between Shielders | 14 | 02:43, 21 February 2013 |
Tao quote | 2 | 21:31, 18 February 2013 |
Skilgannon -- I'm playing around with trying to shield against a slightly different targeting approach where you have to factor in robot turn (generally for robots that don't set the gun to adjust for robot turn). An example robot would be several of the oog.* robots, such as Fuatisha. EnergyDome can shield against these robots, and quite well. However, I generally can't get over a score of about 85%. The problem is, for the first 100 ticks or so, if the opponent is moving, the expected aim is off by about 0.005 radians. After 100 ticks or so, it's dead on for the rest of the 35 rounds. Those first 100 ticks or so and the error that comes with it is enough for me to miss those shielding shots and the reason for my less than perfect score. I'm curious, did you not run into this same phenomenon? How does EnergyDome deal with this so successfully? Is it that your shadow is broad enough to cover the error, whereas mine is not?
I was having very iffy performance against bots that don't use setAdjustGunForRobotTurn(true);
until I discovered I was taking the delta-heading from the wrong tick - it should be lastEnemyHeading - lastLastEnemyHeading
, rather than a tick even further back. If that isn't the issue, I'm not sure what is - it could be that my shadow is slightly broader, but DrussGT only gets ~70% vs. Fuatisha, so clearly at least there my shielding isn't enough to completely shut it out. Unless I've got a bug in my integration code...
I'm wondering if maybe, even though not as pronounced as on some other systems like Wompi's, if maybe I am experiencing a few hidden skipped turns due to garbage collection or something. However, the problem seems to persist even when paint is turned on, which I thought eliminated time restrictions, so maybe not. What I am definitely going to do is find an opponent I can modify to print out additional diagnostic information to help figure out why the discrepancy exists. If I find anything interesting, I'll post on it.
I think I have it figured out. I move slightly against shots where opponent is not moving. Looks like I was just moving too much, which overly polluted the data of some opponents.
I look forward to seeing your implementation. I tried making one at one time. It isn't a simple trick to get down. But I wonder if this could actually decrease your score against some robots that you already get 100% against. Like ones that have near head on targeting that never landed on your surfing, but might bypass your shield.
It can. But not by much more than a few percent, and your average score is still much better with it than without it. And I highly suspect that we'll soon see a generation of bots with bullet defenses intertwined with their movements much more than they currently are.
I actually feel a bit jealous about the current adding-bullet-shielding-to-megabots trend. A while ago I noticed GeomancyBS getting ~99% against Nene and other ridiculously high scores, and I wondered why other high-end bots weren't shielding. It was going to be my secret weapon, but now I guess I'll just have to find something else. :(
Well Nene also uses Raiko's gun, which was written back in 2004, long before bullet shielding or even surfing was a thing. It just has a strong movement. I had considered using BulletShielding for awhile to, at the time that GeomancyBS came out. But at the time I wasn't able to get it to work.
These days I might be able to, but I hadn't really given it much thought again before this latest round.
Sorry Sheldor. I guess I kind of let the cat out of the bag. I did briefly think about how nice it would be to get my score up closer to Diamond and DrussGT and then add bullet shielding in an attempt to briefly steal the top spot, but truth is, despite much effort, I have had very little success improving my wave surfing and guess factor targeting beyond where they are now.
I doubted that Skilgannon and Voidious would bother with trying to add bullet shielding, as they are more wave surfing and guess factor targeting purists who might not like the idea of adding an alternate behavior and/or risking losing a little score against non-vulnerable opponents, but I think the score boost for XanderCat was a little more than anyone was expecting and the temptation may be too much for them. :)
You're right on that it was something of a purity issue of me. It just felt like an ugly thing to implement. There is at least one other technique we already ignore, which is preloading data about specific opponents. But it's not "impure" in the same way and I could see myself adding Bullet Shielding augmentation to Diamond, but probably never preloading.
It's less of a 'purity' issue for me than it is a very difficult problem to integrate the two 'correctly' without losing score against anybody. I'm very willing to integrate this into DrussGT, but I feel that this is almost exploiting a bug similar to the x.x5 bullet power issue, as in I don't mind integrating it, as long as it doesn't cause any scores to decrease relative to current DrussGT levels, because it is so easy to work around that a new-gen smarter rumble population would effectively give me a lower relative score if I integrated this and was willing to compromise my score against non-vulnerable bots in the process.
Bullet Shielding is an exploitable strategy, like all other crush-the-weak strategies.
It will probably increase APS score and decrease PL score.
I don't see any way multi-mode Bullet Shielding could ever not decrease your score against bots that aren't susceptible to it. So it's purely a matter of accepting the cost as worth the benefit. The extreme case that might mitigate it for me is if I already beat everyone badly enough to still average > 50 APS even with the feature, but who knows if/when that might change.
Agreed. I don't see it as a bug, but at the same time it just feels naughty to use it, like maybe someone should give me a spanking for adding it to XanderCat. In fact, if active folks wanted to make a play nice agreement to not use it, I would remove it from XanderCat without complaint.
I don't feel the same way about bullet shadows or on-the-move shielding like MoxieBot uses. Both of those techniques I think are quite clever and well within the spirit of the competition. It's just the stand-still shielding that feels dirty.
Btw, I don't think he means a bug in Robocode, but a bug in other bots. Like shooting at bullet powers of the form ((x * 0.1) + 0.05) takes advantage of a bug in the original BasicSurfer that a lot of bots are based on.
I wouldn't mind such an agreement. Since generally it would save me having to implement it in a bot. Even though I just got an implementation working.
I think I would mind it. :-) Though I have no plans to implement it myself yet. It just kind of offends my sense of what techniques are worthy of banning. Pre-loading bot specific data, on the other hand, I feel I could make a legitimate case for (but wouldn't at this point).
What Voidious said. I'm quite happy to implement this, and actually would feel negligent if I didn't, since it would let people get away with sloppy targeting that doesn't attempt to avoid this technique. However, because I expect this to be something which is fixed in most re-releases and new bots joining the rumble, I don't want the integration to be something that in the long run will cost me points.
You do not have permission to edit this page, for the following reasons:
You can view and copy the source of this page.
Return to Thread:Talk:EnergyDome/Looking forward to this./reply (14).
I don´t see anything naughty about Bullet Shielding. It is only exploiting a vulnerability in deterministic targeting strategies.
Any deterministic targeting strategy has a counter dodging strategy which can dodge it almost perfectly. The same is true for counter Bullet Shielding strategies, which can shield predictable guns near perfectly.
But it works both ways. Deterministic dodging or shielding strategies also have counter targeting strategies which can achieve near 100% hitrate against them.
But hard-coding opponent´s names is something I really don´t like and will never put in Combat.
It removes all the challenge in classifying which strategy opponents are using. And breaks when a new competitor enter the rumble, even if it is weak.
Impact can defeat LittleBlackBook simply because it entered the rumble after the last release.
When BulletCatcher came around I thought: "Clever thinking, well executed", took my countermeasures and moved on. With MoxieBot I thought: "I want to be able to do this too". But I like to win, and not to 'not loose', so I won't let my movement dictate where to shoot. Passive bulletshielding, making use of the accidental shadows created by the gun, is the way to go for me. Although my first attempts at even creating the environment to start develop it horribly failed with version 3.3 and some more till 3.10.
I can't and won't dictate others what they should and should not use. I can only decide for myself, and conform myself to the rules of the community. But don't forget that a too strict 'ruleset' could stop innovation, making the rumble a tweak-competition.
Nice work. Looks like I´ll have to implement anti Bullet Shielding in Combat.
Done. Combat 3.19.0 is scoring 99,86% against EnergyDome and 99,97% against MoxieBot.
I hope anti Bullet Shielding doesn´t generate side effects.
I think it would be fun to release my own bullet-shielding-only robot to compare against the other bullet shielders, but at the same time I'm not sure I want to skew rumble results further by adding more bullet shielding.
Eh, I wouldn't worry about that. :-) The bots you're "skewing" are from inactive bot authors, too, so it seems silly to sacrifice any of your own Robocode experience for people that aren't even paying attention.
Or bots no longer in development. Like Nene. Which is actually a nice test bot for this, since it is an otherwise strong robot.
I was going to, but Nene got very bloated and its structure isn't as good as I would have liked. I can try to retrofit my current development gun on it, but I am not sure how well that would work.
I am currently writing a new robot to see if I can correct some of those issues. I found that migrating its movement is somewhat difficult. So I might just rewrite that too, but this time with a better idea how a good movement is put together.
That´s why we have a secondary PL ranking. This ranking system is designed to not be affected by the presence of specialist bots.
Interesting stuff with bullet shielding lately... it's getting me a bit interested in coming back to robocode perhaps
Just thought I'd chime in to note, PL ranking isn't resistant to all kinds of specialists. One could argue that a bot which barely but consistently beats non-surfers, but is great against surfers, is a specialist of sorts.
It is not immune if thats what you mean. But no system is.
The biggest weakness with PL (Copeland) is if you submit a bunch of exactly equal specialist bots (clones), whoever they specialize against (scores above 50%) suffers. But no one is doing this.
So as I was putting together my own bullet-shielding-only robot Spitfire, it occurred to me there are a few instances we need to think about if we want to compare performance between shielders. 1) When opponent is at low energy. 2) When opponent is too close. 3) Any other scenario where the robot developer may be tempted to do something other than shielding for special situations.
For mine, I currently try to shield right up until the opponent runs out of energy. If opponent stops firing before running out of energy, I don't fire either. The one time I do fire first is when the opponent is disabled and there are no more opponent waves in play. I never move, accept for a little step out and back in when firing. If opponent is too close for my shielding, I just get hit.
Shielding Robot | APS | Survival | Pairs Won | Specialization | Notes |
---|---|---|---|---|---|
jk.precise.EnergyDome 1.1 | 56.24 | 63.19 | 58.6% | 20,957 | |
jk.precise.EnergyDome 1.5 | 58.78 | 65.73 | 61.3% | 24,095 | |
rsim.micro.uCatcher 0.1 | 30.65 | 41.41 | 27.8% | 8,620 | |
rsim.mini.BulletCatcher 0.4 | 67.02 | 78.06 | 82.5% | 4,043 | (1) |
xander.cat.Spitfire 1.0 | 32.31 | 43.41 | 33.3% | 18,109 | (2) |
xander.cat.Spitfire 1.1 | 40.08 | 50.16 | 42.3% | 22,313 | |
wiki.BasicBulletShielder 1.0 | 19.08 | 28.11 | 14.7% | 7,419 |
Notes:
- Has light-weight second mode that takes over when shielding fails or when opponent is low energy.
- A bit handicapped by slow firing response. Only fires first when opponent disabled and no active waves in play.
No problem. The one I made is definitely the bottom of the pack. But I had only decided to make a very simple to show how its done to others. It only fires when the enemy is disabled.
The only way I think I can improve it thought, is to profile what kind of shot the enemy is firing and adjusting to it.
Yup, EnergyDome uses a VG to match which type of HOT/GF0 calculation they are doing, and also keeps an offset tally in case they consistently shoot slightly to the side. I've actually considered going all out and using a Kd-Tree to try to predict how much offset they will shoot with, but I'm a bit scared as to what the results might be :-p
It also doesn't run away under any circumstances, and is very careful to stay at GF0 for the ramming kill.
When I first experimented with Bullet Shielding, what I was trying to achieve was a rammer which closed in using shielding and 0.1 powered bullets, and switched to power 3 bullets at point blank range.
Attack with movement and defend with targeting. The opposite of the Wave Surfing/GuessFactor combination.
But it was so hard to predict where incoming bullets were heading I gave up. Until you showed that competitive Bullet Shielding is possible.
The trick is to give them a really easy target that makes their targeting predictable. Ramming has a big spike somewhere around GF0, but if they start moving laterally and you follow them you aren't at exactly GF0 any more for the waves that hit you, so who knows where they will shoot.
If the opponent uses only real waves, then you can try to plot a course where waves always hit at GF0.
If virtual waves are used, it gets trickier. You have to guess with which bullet power virtual waves are being fired. That could be estimated by analysing onHitByBullet and onBulletHitBullet events.
If other targeting strategy, like pattern matching, is being used, then it could also be estimated with onHitByBullet and onBulletHitBullet events.
If multiple bullet powers are used at the same time, then staying still seems a better alternative than ramming, as all deterministic strategies converge to head-on targeting. Who would guess SittingDuck movement is a viable strategy?
Another note: If shielding is integrated into another robot, the best system isn't necessarily the one that would produce the best bullet-shielding-only score, but rather the one that, against it's opponents, either works really well or fails miserably. It's problematic if it produces a lot of ~90 scores, as there is no good way to know if this is better than your normal drive and gun.
Why not just compare the version with shielding to the version without shielding?
I think perhaps a better measure of how useful they would be when integrated into a bot is 'percentage of pairings above x%', where x is somewhere between 95 and 98. Thoughts?
Btw, I love the Tao Teh Ching quote. =) I've actually been thinking about the book a lot lately and recently opened it for the first time in years. I read it a bunch when I was ~18, but looking back I feel like I understood nothing at all about it. My mindset over the last 2-3 years feels much more in tune with its principles.
One thing I love about the Tao Teh Ching and Zen is that as science progresses, they actually seem even more on point. Unlike some other religions which are constantly fighting against science. (No offense anyone!)
Heh, I actually came across that via Sun Tzu's The Art of War, I was trying to find a fitting quote and his work (along with Machiavelli's) came to mind. I'd also argue that Tao/Zen isn't a religion, but rather, at least as it was intended, a philosophy. Although anything taken seriously enough can become a religion, I guess.
They are extremely influential literature.
Only they all focus in a zero-sum mentality, which is dangerous when taken blindly as a philosophy.