From the Old Wiki
Who says that HeadOnTargeting isn't good. especially if the bot is moving long ways (or even orbiting his enemy) this is a pretty good aiming methode (Troodon is another example). Or when have you seen lastly a micro bot getting first in the MiniBot Challenge (1-on-1) just using HeadOnTargeting :). no seriously, I'm working on it -- rozu
Wow, just checked the Minibot Challenge, amazing is an understatement! You doubled Troodon's score in micro melee! Definitely a king of melee contender, have you tried other simple targeting methods? Something like DuellistMiniMelee's "distance factored linear targeting" could maybe improve it's performance enough for at least a 2nd place in the EternalRumble. And would make me finally think seriously about data saving between battles. ;) About HeadOnTargeting, sure it is good, I remember in the "old days", when Tron was fighting Predator for the melee crown, I tried replacing Tron's (now obsolete) targeting with HeadOnTargeting, It got 4th/5th position, exactly what you are getting now with HawkOnFire... -- ABC
1st: pe.SandboxDT 1.91 257123 186150 13680 53577 3631 85 0 154 62 91 2nd: abc.Tron 1.5 217551 151350 8550 53645 3821 167 15 97 67 60 3rd: rz.HawkOnFire 0.1 200436 143900 4500 48745 2984 261 44 51 70 76 4th: rz.GlowBlowMelee 1.3 199193 144750 3420 47928 3026 68 0 40 90 61 5th: cx.mini.Nimrod 0.55 194469 127900 3870 58812 3408 395 81 47 75 61 6th: shinh.Entangled 0.3 191517 135750 5760 46636 3008 316 45 67 59 64 7th: davidalves.net.DuelistMiniMelee 1.2 176261 125850 3870 44102 2036 375 26 44 39 53 8th: tzu.TheArtOfWar 1.2 169196 112050 4410 49806 2679 250 0 49 52 45 9th: myl.micro.Troodon 1.10 164257 116700 2610 42901 1846 184 14 30 48 40 10th: ara.Shera 0.88 153118 104100 2790 43541 2206 433 47 31 32 50
this are 600 rounds, I couldn't wait till I passed 1000. therefore I can't say if this is enough, especially to see the difference from place 3 to 6. but it's obvious, to get first your bot should also be a top 1v1 fighter -- rozu
I just love when this happens (as rare as it is):
SYSTEM: Bonus for killing dummy.micro.Sparrow 2.5: 0 SYSTEM: Bonus for killing mld.Infinity 2.0: 5 SYSTEM: Bonus for killing kano.gamma.KanoGamma 1.8: 6 SYSTEM: Bonus for killing myl.micro.Troodon 1.10: 0 SYSTEM: Bonus for killing pe.SandboxDT 1.91: 5 SYSTEM: Bonus for killing cx.mini.Nimrod 0.55: 8 SYSTEM: Bonus for killing rz.GlowBlowMelee 1.3: 6 SYSTEM: kawigi.sbf.FloodHT wins the round.
I'm trying to get FloodHT among the top 5 in the RO Pro melee division (in hopes that it will qualify into it). I also wouldn't mind releasing a top-10 melee bot, but we have yet to see if I have it in me. I suppose a select few bots debut into the ER in the top 1nd and the last thing it prints out is 34463. -- Kawigi
Ok, so i've been playign around with melee recently (it's more fun than 1v1), but im having targeting problems. To cut a long story short if i run a melee with my bot and 9 SittingDucks over 100 rounds and i count how many bullets i fire, and how many bullets hit, i get the following:
Bullet's Fired: 11624 Bullets Hit : 6748
I am currently waiting for my gun to finish turning before firing, and have my radar spinning constantly so there is no period where i have no target, i always pick the closest enemy to target. I also dont fire when there are no enemies left. The bullets seem to randomly pass either side of the target, as if they have moved. Just to clarify i use both setAdjustGunForRobotTurn(true) and setAdjustRadarForGunTurn(true). The above results don't really tell half the story as there are situations where the bulelt misses the intended target and hits another bot (i didnt take that into account when getting the data) Anyone have any idea why nearly half my bullets are missing?? Puzzling... --Brainfade
I would have to see your gun's code, but from your description my guess is that you are firing at the bearing the enemy was in when you scanned him, and not at his position. Because you are moving, the e.getBearing()+getHeading() angle will not be correct when your gun finishes turning, specially when you are moving at full speed or the gun needs to turn a lot. Also, if you allways choose the closest enemy as a target, you will get a lot of "thrashing" between targets. Consider only changing target if the new bot comes closer than your current target by some margin. -- ABC
Alas, you were right i was just using the bearing from when i scanned rather than using its scanned position to work out a new angle according to where i was. As for thrashing between enemies, i wasn't strictly telling the truth when i said i always target the nearest enemy, i only change if the newly scanned bot is less than 90% the distance of the current target. I wanna try some stuff with target selection though. Hopefully now i can fix my pattern matcher, and have a reasonable melee bot. Cheers ABC... --Brainfade
Ok, so i'm confuzzled. Regardless of who i test against and how much improvement i find i seem to find my rating always goes down. is there some kind of spell i have to cast before being able to make a decent melee bot?? :( --Brainfade
Impressive Melee bots
- TheArtOfWar - even though it hasn't been updated for ages it still kicks ass in Melee battles. Often seen in the finals of the ChampionsLeague on EternalRumble.
- PrairieWolf - ditto
- Tron - very old, very impressive
- DuelistMiniMelee - Best mini melee bot by a huge margin when it came out, still decent
- HawkOnFire - Unbelievably good movement more than makes up for the HeadOnTargeting gun in this MicroBot
- Aleph - Current king of melee
General Melee Strategy
I thought I should start a separate page about MeleeStrategy, to give us a good place to talk about the sorts of strategic and design ideas that should go in a melee bot away from talking about individual bots too much. Some of this page's content might be duplicated/summarized there. -- Kawigi
Ok, so i have been trying to rework my melee strategy today, and i have a few questions/observations:
- Standard melee strategy tells you to stay out of the centre of the battlefield, however i reccon that with a reasonable bullet doging strategy, the centre may be a fairly safe bet. There's plenty of room to move, and everyone else is fighting it out for the corner.
- I would think the problem here would be you only scan an enemy every 8th tick (Radar swings at 45 degrees a tick). You would only have a 1 in 8 chance of detecting the enregy drop that may indicate a bot firing in your direction. Also, a lot of Bots use low powered bullets in melee so categorizing the difference between a hit by a low powered bullet, a collision, or a bot firing would be difficult if not impossible. You add in the fact that you can not even tell if they are firing your way and I think dodging will be difficult. --Sparafucil3
- At the moment i am just spinning my radar round in melee, however i vaguely remember someone saying that they kept track of how many robots they'd scanned, and once they'd scanned all of them they reversed radar direction. Is this more effective than just spinning??
- I have heard and seen this technique used. I have also read some where that this is not a perfect algorithm as it is possible to scan an enemy more than once, in effect counting him twice. Your radar would then prematurely swing in the other direction. -- Sparafucil3
- The big problem i'm having at the moment is picking a target. Currently i just pick whoever is nearest but this tends to cause me to spend alot of time turning my gun to shoot and not very much time actually shooting. My current thinking is to change it so that i only change to the new target if their energy level is lower, but i can see this leading to me firing at a weak opponent that's a long way away, while a high energy opponent is right next to me.
- What Jekyl does is pick a target and not let go unless another target comes within 200 or so. In early melee, this results in a bit of thrashing about between targets but it does help to protect from the occasional RamBot. -- Sparafucil3
- MambaTeam (note that's not for melee, but a team) uses a weighted function to score the enemies to dedice were to shot (distance, energy, and if it's current target or not). This way it tends to focus on an enemy unless there is a good reason to change. Realize that using this function is just a generalization of the mentioned above (pe. if you use weight 0 for energy and current target, you will select target based only on distance) and that you will have to select the weights. Anyway, I found it useful because it makes for more rational target selection. -- Albert
Any ideas anyone?? -- Brainfade
Well, I have had lots of ideas on selecting a target (see the page for SpareParts), but for most situations, firing at the closest is best. SpareParts switches around between shooting the closest ("convenience"), shooting the one that keeps shooting him ("vengeance"), shooting at the perceived 'weakest' robot ("smear the queer"), shooting at the robot he thinks he is most likely to hit ("feed off sitting duck"), and shooting (to try and get the kill) whoever has the least energy (this one doesn't seem to be that effective). Of those, I'd say smear the queer and convenience are the most effective methods. -- Kawigi
Do most top melee bots shoot blind (meaning not during a scan event on the target)? I seem to be getting lower bullet damage and higher survival in general as I'm working on a melee strategy for FloodHT. ABC? David Alves? Paul Evans? Iiley? Input? -- Kawigi
My melee bots (GlowBlowMelee and HawkOnFire) are not firing inside the scan event. this wouldn't be good because my bots are turning the radar all the time. My bots made a big jump foreward when I checked for getGunTurnRemaining()==0. -- rozu
Tron also shoots blind, I tried waiting for a scan to fire but it seemed to get slightly worse results, especially if you are shooting low power bullets. Of course your targeting must account for the extra ticks since the last scan. -- ABC
Lol, go figure I'd name off 4 top melee bot authors and forget the one that has two in the top 10 ;-) You know, rozu, you REALLY have a knack for this. Maybe I just need to put more time into it, but I'm just not having nearly as easy of a time making a strong melee strategy. Thanks for the input, you two. By 'accounting for the ticks', in your case do you mean projecting the pattern forward further? How would a guess-factor type like myself go about doing that? (probably a question for David or Paul) -- Kawigi
Interesting. It would be interesting to use a linear projection (or maybe even a quadratic distance sort of projection if they are accelerating/decelerating) for their position. The point is, though, that my gun has to finish turning sometime, which means I'd have to anticipate when that would happen when I first turn my gun (and oddly, my position is also an issue there). Well, plenty to chew on here. Just a side thing, Paul - I do use linear interpolation of missed scans to update my wave bullets - do you do something similar, or more complex/accurate? -- Kawigi
can somebody help me with avoiding ramfire!?! he kicks my butt every time
Basically, keep moving (preferably sideways) and try to target it with some linear prediction. --GrubbmGait
DT doesen't have this problem as it 'locks' its radar on the target just before fireing, however if you are firing blind you will simply have to guess where the opponent is (simple linear projection would do for the missing ticks), then apply the guess factor from the guessed point. -- Paul Evans
Hi guys, were using robocode atring. It works great! Now I'm often leading in bullet damage against melee bots of my caliber. Thanks for the pointer, Paul! All I had to do is change my radar code to locking mode if my gun would be cool in the next 5 ticks, and it works like magic. -- Kawigi
eh? Andrew Ford
The melee radar that Kawigi, Paul and probably some others use is based on an alternating full area sweep and lock on target OneOnOne style radar. It sweeps the battlefield observing all bots, then goes into lock mode and scans only it's current target for the same period of time. What Kawigi said is that he gained a lot of accuracy by moving to lock mode right before firing as well, so as to have recent and thorough data on the target at fire time. To see this in action turn on visible scan arcs and run FloodHT or SandboxDT in a melee (SittingDucks are best as opponents since they don't have radars of their own to interfere with what you see). -- Kuuran
Yes, In my case (PM), I project the pattern further. I also project my position one or two ticks further to account for the gun turning time (easy because Tron has a very predictable short term movement). About guess-factor targeting, I don't really know, but I would guess a method similar to SandboxDT should be the best bet, especially if you want to segment your stats by acceleration/deceleration. I have this strange feeling another SandboxLump(at least) is in the making, if you make it as powerfull as a DT 1.71 I'll have to end my "RC vacation" sooner than I expected... please take your time with the small details! ;) -- ABC
Lol, well, if anyone these days is going to end your "RC vacation", it will probably be Rozu. If I'm to be up in your league with this release, I'll be REALLY taking my time with it. I do think it's possible top-20 melee material at the moment, though (of course, I'd need Rozu to watch it to really know ;-) ). And I'd be happy with that for this release - especially if I could also start in the Pro League at the Robocode Outpost (but that seems to be hard to attain, too). Thanks for the help, though. The state of the art in dueling robots is well covered in these pages, but there seems to be just a modest amount of information on melee strategy, and very little on this level of detail. -- Kawigi
Ok, new topic on which i need help - MeleePatternMatching --Brainfade
Something I haven't gotten quite right, in my one or two attempts. The funny thing is that my biggest problem last time I attempted it was too many scans (the occasional two consecutive scans and then assuming that they were 8 ticks apart). -- Kawigi
I would chose 10 others bots mixed with some of the top melee bots and some bots with more or less the same rating your bot has. then run at least 100 rounds (for minor tweaks I'd say 500) to take in new improvements if your score is getting better or discard them if it doesn't show up reasonably.
I just tested your bot... what I could see is that it had the lowest bulletdamage (even Graviton had more!!!). So I thought that it could be something with your gun:
1000x1000, 100 rounds:
1st: myl.nano.Graviton 1.10 7700 4550 910 1889 350 0 0 92 9 0 2nd: brainfade.melee.Genghis 0.34 3326 450 90 2688 81 1 14 9 91 0
If Genghis has a PM gun then I'd say it isn't working really well. -- rozu
Casting to Characters
Yeah, you were right. I was using a symbolic pattern matcher, generating the index using godel numbering on the change in xpos, and change in ypos. the problem is that (2^diff)*(3^ydiff) oftens ends up being over 65536, so when you cast it to a char it is being cast to 65536. I'll sort taht at some point, but for the moment i have modded one of Dummy's pattern matchers to fit the bill. hopefully there will be a vast improvement... --Brainfade
Or when you cast it as a char, it becomes ((2^diff)*(3^diff))%65536. And I assume that godel numbering somehow gives you some way to recover those numbers again? -- Kawigi
No, rather than trying to recover them i store the actual values i need in an array list, and just pulll them back out as needed. The problem is that it doesnt seem to become ((2^diff)*(3^diff))%65536, it actually just truncates the number to 65536, meaning that vastly different moves became theoretically equal., i suppose i could actually fix it by just adding %65536 into my code... -- Brainfade
It truncates the number to 65536? (of course, you probably mean 65535, because 65536 isn't a valid char (unsigned short) value). But it doesn't make sense for that to happen, because it's physically not truncation, it's an actual mathematical operation. My experiments show otherwise, though, at least with this snippet:
for (double i=0; i<100000; i++) System.out.println((int)((char)i) + "\t");
it does wrap around and the last thing it prints out is 34463. -- Kawigi
Hi guys, were using robocode at uni this semester. our final test is a melee consisting of about 30 robots (I KNOW!!!) since there are soo many bots, a couple of groups have decided to form an alliance. the basic idea is that when we scan a bot, we compair its name to about 7 of ours on a list, and if its there we dont fire. its not much but its less damage, and every little bit helps. my question is this, we need a way to find out if anyone is shooting the alliance team members (i.e. friendly fire), is there a way to communicate to different robots that arent set up as a team? if not then is there a way to know who fired a bullet and who it hit? (so we could all keep individual tallies) this way if someone friendly fires a certain number of times in a round, we dont include them in the next round. thanks -- Bolox
AFAIK you can't communicate with robots not in your Team.
- Way to detect who is hit by a bullet - measure EnergyDrop
- Way to detect who fired a bullet - measure bullet's heading and power, calculate bullet's speed, and then it's fire coordinates. The iterate through your enmies' movement history and find who was in calculated time in calculated position
Conclusion: unless it is your robot or you can communicate you can only do 1. but not 2. because you will not know heading of a bullet that hit other robot.
There is no way to communicate, but you can figure out who you hit in the onBulletHit event, and who hit you in onHitByBullet. You can print the results in onDeath and onWin. -- Jonathan
ok cool.. thanks guys --Bolox
Hey! How can my bot fight in melees in this site? My bot is KanoGamma 1.8.
We don't have any melee rumbles running actually. We should though... Let me consider it some. -- PEZ
If your bot is a mini or smaller, you could also consider entering it in the RobocodeLittleLeague. It would be nice though to have the melee rumble up and running again. --GrubbmGait
Melee is up and running again (17 januari 2005), although the rankings are far from stable yet. Now is the time to enter the frightening world of melee ! -- GrubbmGait
Any reason why there are no fights in Melee since the 27th? -- BigPete
No specific reason, just nobody is running meleebattles with RR@Home right now. My main computer is currently not available (hardisk crash) and my ancient laptop is not fit to run meleebattles. Also OneOnOne is more popular, but as soon as all bots there have reached around 1000 battles, someone will switch to melee. Remember that every battle fought is run on someones private computer. -- GrubbmGait
Yeah realised that. I have a couple servers lying around, will set them up once exams are over. Thanks. -- BigPete
|Thread title||Replies||Last modified|
|Multi-Wave Targeting||1||02:12, 19 November 2017|
- I couldn't find a proper name for this.
- Since a standard melee bot takes every enemy bot into account, a bot can fire a wave from every other bot and gather more information. The problem is that it is a bit hard to handle. If there were 11 bots on the field there would be 110 waves on air.
Well, assume each bot fires exactly 1 bullet, then for 11 bots there will be 11 on the field, and only 10 of them is what you need to track — since one of them is yourselves.
from other bots’ perspective, the number of waves it need to track (and simulated by you) is the same, the only difference is about which wave to ignore.
Wave is not necessary the abstraction of targeting, it can be the abstraction of firing instead. Since you fire at most 1 bullet at a time, you fire at most 1 wave at a time as well.
To handle multi-bot targeting, simply store the targeting information (e.g. target location, target latvel) and the firing information (e.g. power, source location) separately, and associate multiple targeting information with one wave.