*** Hmm...that's true. Maybe it's just some double precision error, because: **** "Average survival up through this stage" is calculated by <some number> divided by <a variable> **** "Average survival in this stage only" is calculated by <same some number> divided by <a variable from an array> **** A quick check shows that <a variable> and <a variable from an array> are equal all the time. *** Therefore it should be a double precision error, since they differ by only 0.0019238476953907 anyways :) --Starrynte |
02-18-2004: released the source code. I commented some things and tried to make it readable.
Rozu, the big question on my mind is whether the new and incredibly good GlowBlowMelee is the HawkOnFire movement with your pattern matching gun?? --Brainfade
An updated GlowBlowMelee? That's major melee news! HawkOnFire has, imo, the best melee movement ever made. I made some tests with Shadow with a HeadOnTargeting gun and it doesn't come close to HawkOnFire's score. Time to make some melee tests, cool. :) -- ABC
Wow, that is awesome ABC. I don't think this is the HawkOnFire movement and GlowBlow gun, however. Muffin has made me test against them quite alot, and I have to say the GlowBlow gun hits it more accurately than this gun, and HawkOnFire's movement is alot more difficult for Muffin's gun to tag. Of course, just plastering those two together would probably be more of a OneOnOne bot than melee bot, so I'm guessing he did something different here. Very impressive, though. -- Kuuran
"ver 1.4 changed movement, now more like the one from HawkOnFire" - from the description on the Repository -- Kawigi
What can I say. its some time ago when I implemented the movement into GlowBlowMelee. unfortunately this bot didn't work so well (I don't now why), but the good thing is that I had 200 bytes left because HawkOnFire's movement is pretty small. so I put in many new factors to make also a fairly flat movement, to be serious it isn't flat at all but a good melee bot should also be a good 1v1 bot (ask Shadow, Tron or DT). it now doesn't differ between 1v1 and melee as strict as before, if it would be open source the only conditional expressions with "getOthers()" you could read is "getOthers()>4" :-). this also because I thought that HawkOnFire's movement has some disadvantages when things are getting more controlled on the field.
The gun is still the same old (really old) pattern matcher with heading-change and velocity. the main problem is and has allways been that the radar is turning all the time. so it necessarily can't be as accurate as GlowBlow's gun, which is compared to other guns around today really weak. I have not done many tests so far... -- rozu
A getOthers()==1 check followed by some simple radar locking code might improve the 1v1 performance greatly if you have so much free space. -- Kuuran
I just finished a 5k rounds test. 1st: Shadow 2.33, 2nd: SandboxDT 2.41, 3rd: GlowBlowMelee 1.4, 4th: Tron 2.02, 5th: HawkOnFire 0.1. At least in a field full of strong melee bots, GlowBlowMelee is stronger than Tron, and HawkOnFire is still amazingly good considering the simplicity of it's gun. I'm pretty sure you have a shot at the melee crown, great work. -- ABC
the space is filled at the moment. sure I already tried it but the result wasn't remarkable. the problem is that the gun is a melee pattern matcher and it neads a scan all 7 to 9 ticks. so it would take many bytes to change and the result would just be GlowBlow's gun.
5k, wow, this would take hours on my computer. If you have a copy of the exact results could you post them here? hey man be serious, shadow is far in front. I should work on everithing to get any further... I mean especially the gun. but the next thing I want to do is to put the new code into GlowingHawks code to see what is possible there. -- rozu
It takes hours on mine too, I left it running during the night:
As you can see, DT is still very close to Shadow, at least in very long battles, and GlowBlowMelee is way ahead of Tron. You have the hardest and most important part done, movement, the rest is details... ;) -- ABC
Nice, thank you. this is pretty much the restult I got in my tests. the bad thing for DT is that there are so many easy-to-hit-for-pm-gun-bots in the melee rumble =). BTW, Your gun is really incredible... I hope that I'll get some statistical elements into my gun, to improve the hitrate. -- rozu
You may want to consider removing HawkOnFire from the 1-v-1 RR@H... it's being clobbered by bots using the MusashiTrick. I already removed DuelistMicroMelee and DuelistMiniMelee for that reason. I hate seeing a bot of mine giving people numbers like expected score: 60% actual: 99.7% :-P --David Alves
Given that one of the bots benefiting is Aleph and that it's by far the best at taking advantage of head-on guns, I somehow doubt rozu sees it quite the same way. :p -- Jamougha
Thanks Axe. *blushes* :-D --David Alves
lol, HawkOnFire has to stay there. It still has a pretty good micro-rating... ;) -- rozu
In the line where you have if(getOthers()==1) setTurnRadarLeftRadians(getRadarTurnRemainingRadians());
, how about adding a melee radar lock:
if(getOthers()==1 || (getGunHeat()/getGunCoolingRate()<4 && target==en)) setTurnRadarLeftRadians(getRadarTurnRemainingRadians());--Starrynte
Why do you want a melee radar lock like that? HawkOnFire always fires HOT, so I could see maybe using < 4 or something, just to get the most recent position. But sticking to one portion of the field for 10 ticks seems excessive. -- Alcatraz
Ok, post changed from before --Starrynte
You also have to remember that HawkOnFire is a MicroBot, so the radar lock might be missing simply because there wasn't enough code space to have it in. I don't think it would be that necessary to have one for a HOT gun anyway because it doesn't really need up to date information on an enemy the way another targeting method would. -- Kev
when i use codesize.jar on HawkOnFire.class (compiled from HawkOnFireOS?.java) it says the code size is 770. Is it because i have an older version? --Starrynte
I believe rozu made a few changes to it for clarity and that it would compile a few bytes more, but I thought it was like 756 or something. What compiler are you using? -- Kawigi
[Edit conflict] May also have to do with your compiler. Jikes usually generates smaller code than the internal java compiler, although 21 bytes is quite much. -- GrubbmGait
I got the compiler when I was starting Java, it was from the Java website, so...it probably is the compiler and the version.--Starrynte
If there's enough space...maybe linear targeting the trig way? --Starrynte
If I remember correctly one could shrink the size to about 700 without loosing functionality (mostly due to some tricks from Kawigi's melee bots) but I never really could use it to push its performance so that I would have considered to release another version... - rozu
Might I offer a suggestion for the team version? I assume that the HOFSwarm bots are almost exactly the same as the open source HawkOnFire functionally, and it seems like if the perpendicularity factor were removed for teammates, they might do noticeably better with very little codesize difference. -- Kawigi
That is definitely true. When I released it there haven't been a lot of teams around so I didn't test it a lot. Just today I made some experiments with a version I lastly worked on two years ago. Thats the last test:
1st: abc.Tron 2.02 440204 308200 27800 95420 8450 290 43 278 88 62 2nd: kawigi.mini.Coriantumr 1.1 401342 291600 11700 91808 5970 262 0 117 110 117 3rd: rz.micro.HawkOnFire3 401007 306450 9900 79626 4676 316 38 104 158 115 4th: rz.HawkOnFire 0.1 359363 266550 5600 81878 4493 772 69 62 117 99 5th: kawigi.micro.Shiz 1.1 359067 269000 7700 78418 3551 397 0 78 116 96 6th: pe.SandboxLump 1.52 349481 222900 9000 108751 8291 515 23 90 68 98 7th: DuelistMiniMelee 1.2 321419 237650 5200 74590 3403 574 0 52 75 76 8th: shinh.Entangled 0.3 321185 232400 6700 77171 4423 457 33 67 70 104 9th: myl.micro.Troodon 1.10 307779 226850 4400 73240 2952 337 0 46 76 76 10th: tzu.TheArtOfWar 1.2 288925 196700 5300 82078 4281 541 24 53 71 70 11th: ms.Ares 0.19 261601 189200 6200 62901 2716 485 97 62 46 88
Will there grow a melee version out of your MarioBros team? Sounds interesting... -- rozu
Not sure, although I'd be interested in what kind of result it would get against the fairly loaded group you have there :-) Think of it as what you would get if you combined Raiko's unhittableness, FloodMini's gun and DoctorBob's melee strategy. -- Kawigi
The thing that makes melee an adventure is seeing how much changing one bot shifts everyone else's standings, too:
1st: kawigi.twin.Mario [1.0] 455497 325750 21800 98499 8933 456 59 218 114 103 2nd: abc.Tron 2.02 422939 299600 20600 94280 8081 316 62 206 100 85 3rd: kawigi.mini.Coriantumr 1.1 408430 299800 10900 91005 6328 397 0 109 130 125 4th: kawigi.micro.Shiz 1.1 356234 267700 6400 78377 3193 508 56 64 115 116 5th: rz.HawkOnFire 0.1 336665 248850 4600 78248 4350 576 41 46 115 94 6th: pe.SandboxLump 1.52 331668 212050 7800 103782 7392 588 57 78 46 87 7th: shinh.Entangled 0.3 326363 238950 7800 74393 4391 767 62 78 78 108 8th: myl.micro.Troodon 1.10 313263 231550 4700 73550 3111 332 19 48 91 62 9th: DuelistMiniMelee 1.2 303247 225250 4100 70612 2780 498 8 42 73 67 10th: tzu.TheArtOfWar 1.2 291387 200500 4800 81068 4265 754 0 48 87 76 11th: ms.Ares 0.19 270913 197600 6400 63393 2822 653 45 64 50 77So seems like the version of Mario in MarioBros 1.0 beats that field semi-convincingly, and my bots also do better with it (after the first 100 rounds, Shiz and Coriantumr were also ahead of Tron). The dev version seems to do somewhat worse (perhaps because it's more likely to be hit by head-on targeting). -- Kawigi
Just finished another battle with the dev version. Very close top three :-)
1st abc.Tron 2.02 421990 300500 20800 92286 8137 252 15 208 97 79 2nd kawigi.mini.Coriantumr 1.1 420714 308150 12700 93499 6229 136 0 127 121 130 3rd kawigi.twin.Mario 419605 309400 16100 87682 6237 186 0 161 116 112 4th kawigi.micro.Shiz 1.1 362708 268950 7900 81992 3608 258 0 79 114 92 5th rz.HawkOnFire 0.1 352053 261700 5700 79600 4357 589 107 58 141 97 6th pe.SandboxLump 1.52 342388 216500 9800 107206 8217 629 36 99 51 80 7th shinh.Entangled 0.3 321635 233550 8500 74241 4612 632 99 85 64 86 8th DuelistMiniMelee 1.2 315564 233900 5000 73119 3008 538 0 53 73 83 9th myl.micro.Troodon 1.10 310358 228650 2600 75595 3142 332 38 29 92 82 10th tzu.TheArtOfWar 1.2 288884 195800 5400 82130 4817 718 20 54 60 87 11th ms.Ares 0.19 261613 190400 5100 62819 2720 540 34 51 68 73
It's interesting to note that LuminariousDuo would not fair anywhere close to as well as Mario does in a melee, despite doing very well in the TwinDuel. It's a melee style movement, but it's very specialized to the 2v2 environment. In fact, BrokenSword is basically a melee bot derived from LuminariousDuo, and it clearly is decent but not great. -- Voidious
It should be noted perhaps that part of the reason the 1.0 version of Mario does better is because of a bug that happens to improve its performance against HOT bots (like HawkOnFire, Shiz and Troodon). -- Kawigi
Aleph has something in it like this too, when it is close enough to some bot it switches to a Raiko-like orbiting movement... There is always the question on what testbed to use. I thinks this one is reasonable for testing a mini or micro bot (it is also not as time consuming as it could be for a melee testbed). In some cases I also did some testing on a 400x400 field where Coriantumr was amazingly good ;). Did you ever thought about making a "flat" melee movement like that of SandboxDT (I tried but wasn't successful). I can remember Paul saying that there isn't MinimumRisk involved at all... -- rozu
Does HawkOnFire use the RPL (its source isn't included in the jar so i'm guessing either closed or no)? -- Chase-san
As far as I know, Rozu has put the source on the repository. Therefor it is free to use, but it would be nice if credits are given (and maybe there is a sortof RPL in the source) -- GrubbmGait
Mmm, nope, no rpl like license (or any at all). HoweverI? always give credit where it is due. I only plan to study the code, not build from it or reincorporate it. --Chase-san
Ok I used HawkOnFire against some other bots and here were the results (1000 rounds)...
1st ms.Ares 0.19 599082 368750 54270 158074 16927 877 184 603 65 97 2nd rz.HawkOnFire 578062 359950 21510 176804 18218 1428 151 240 403 119 3rd stelo.AreaTargetingBot 462100 286800 6030 157698 9816 1579 177 67 209 243 4th nic.AntiGravityBot 1.0 361110 255350 2070 97650 5801 239 0 23 118 177 5th cslib.SnippetBot 308552 221100 1980 79680 5345 432 15 22 65 115 6th sample.Walls 278664 210200 2880 62390 1620 1558 17 32 46 86 7th sample.Crazy 230172 200500 450 26607 231 2369 14 6 33 73 8th sample.MyFirstRobot 180444 159800 720 19269 297 347 11 8 45 62 9th sample.Tracker 150033 104550 0 41744 3047 662 29 0 4 11 10th sample.TrackFire 145537 81850 0 60108 3579 0 0 0 11 19note I say "used", this is because I was testing a "Melee Evaluater" that I recently finished:
Stage 1: Average energy gain: -4.01542851869929 Average hitrate: 0.49666154819198305 Average inflicted damage: 70.5918585096939 Average damage encountered: -12.901709285672858 Stage 2: Average energy gain: -14.308320647050909 Average hitrate: 0.37629811733251695 Average inflicted damage: 49.72084865626396 Average damage encountered: -15.42543738613059 Stage 3: Average energy gain: -10.756387799644193 Average hitrate: 0.25334049922972335 Average inflicted damage: 16.285328767587337 Average damage encountered: -2.995785573096796 Stage 4: Average energy gain: -15.270166282904292 Average hitrate: 0.18605444232537643 Average inflicted damage: 19.452879918777846 Average damage encountered: -2.694936324507394 Stage 5: Average energy gain: -53.81285063502592 Average hitrate: 0.027080020740656754 Average inflicted damage: 8.261417012802745 Average damage encountered: -7.078297165649152(stage 1 is with 9-8 bots left, stage 2 is with 7-6, stage 3 is with 5-4, stage 2 is with 3-2, and stage 1 is with 1 bot left) using these "statistics", HawkOnFire seems to encounter the most damage during stage 2, lose the least energy during stage 1, which is probably since its hitrate (about 50%) is the best at stage 1. if you have any suggestions to "statistics" to add to the melee evaluater please tell me (I'm working on adding a "Average survival through the stage" right now) at Starrynte/MeleeEvaluater --Starrynte
The new, real, and improved (not an ad) melee evaluater results for HawkOnFire (same bots, 1000 rounds too, one new stat added):
Stage 1: Average energy gain: -12.131224622297003 Average hitrate: 0.504984051036682 Average inflicted damage: 78.35403693530165 Average damage encountered: -22.310263868194387 Average survival through this stage: 0.974 Stage 2: Average energy gain: -14.02642856060337 Average hitrate: 0.3704742818971271 Average inflicted damage: 38.421232206659944 Average damage encountered: -12.910784186708048 Average survival through this stage: 0.917 Stage 3: Average energy gain: -14.889823480521384 Average hitrate: 0.2952402590026146 Average inflicted damage: 30.7818235848599 Average damage encountered: -9.322022391501218 Average survival through this stage: 0.847 Stage 4: Average energy gain: -20.476734132593386 Average hitrate: 0.22550706822372465 Average inflicted damage: 31.458286455266744 Average damage encountered: -8.015202935623632 Average survival through this stage: 0.692 Stage 5: Average energy gain: -28.367418376675978 Average hitrate: 0.08480396832967746 Average inflicted damage: 11.246752644705552 Average damage encountered: -6.214750387222596 Average survival through this stage: 0.228--Starrynte/Melee Evaluater
Stage 1: Average energy gain: -8.119537102458112 Average hitrate: 0.4066820276497695 Average inflicted damage: 26.271705958678954 Average damage encountered: -8.659350438587884 Average survival up through this stage: 0.96 Average survival in this stage only: 0.9619238476953907 Stage 2: Average energy gain: -15.179637812006169 Average hitrate: 0.35732882061962945 Average inflicted damage: 38.260258635095965 Average damage encountered: -13.006511311107074 Average survival up through this stage: 0.906 Average survival in this stage only: 0.94375 Stage 3: Average energy gain: -15.166182249246441 Average hitrate: 0.3091958083127273 Average inflicted damage: 32.44781144350145 Average damage encountered: -10.471953705729677 Average survival up through this stage: 0.803 Average survival in this stage only: 0.8863134657836644 Stage 4: Average energy gain: -21.219745051782294 Average hitrate: 0.24241835147744928 Average inflicted damage: 35.567042696051914 Average damage encountered: -10.347065496119743 Average survival up through this stage: 0.659 Average survival in this stage only: 0.8206724782067247 Stage 5: Average energy gain: -31.275988472164762 Average hitrate: 0.1706536388140159 Average inflicted damage: 47.30849331273982 Average damage encountered: -15.770941651482959 Average survival up through this stage: 0.221 Average survival in this stage only: 0.3353566009104704