Fhqwhgads loves Strong Bad, so she (it's a girl's name) will cling to Strong Bad if she sees him. Make a robot called StrongBad and see what I mean :-p. The movement is small, so I had plenty of room to just cram something stupid in there like that.
To quote David Alves, it moves the same against SittingDuck as it does against SandboxDT. Roughly, anyways.
https://www.robocoderepository.com/BotDetail.jsp?id=1604
I think it should be a quality bot - it will probably open 1-on-1 in the ER and the RO in the top 10. The movement is good, and the gun is tried and true.
It orbits its enemy in one direction for a random amount of time up to the amount of time a bullet from the enemy would take to reach it. At that point, it changes direction about half the time. The distribution of the 'distance function' is uniform, so if I always changed direction afterward, I'd probably have a Bell curve for a movement profile. Doing it this way, I have a bell curve and a half of a bell curve to the right of the original one, which results in a reasonably flat profile. It is amazingly simpler to tweak this movement than the FloodMovement, because if I move independently of individual bullets (except for the power of the last one fired), my profile should look roughly the same to about every bullet, regardless of how many there are. That was my goal with this robot - rather than having the super-duper-flattest movement, it is meant to have a good movement that is pretty much equally strong at all distances.
It uses a variation of GuessFactorTargeting ported over from FloodMini. It segments its statistics on its opponent's relationship to the wall, acceleration, LateralVelocity, and distance.
It completely ignores them. To help create a uniform profile, though, it knows when the bullets are fired and remembers the power of the last bullet fired by its opponent.
It doesn't have a Melee strategy, it does have a OneOnOne strategy. That's a pretty big difference.
Dumb luck, if anything.
It saves its statistics and DynamicDistance factors between rounds and matches.
It's short for Fhqwhgadshgnsdhjsdbkhsdabkfabkveybvf. Oh, and it's pronounced "Fuh-HOO-ku-gahdz". Of course, you can get that from just about any online urban dictionary. For those of you who aren't familiar with https://www.homestarrunner.com?, and you don't want to familiarize yourself too much, but you want in on the joke, then look at these pages (in this order, preferably) to get a general order of the state of the Fhqwhgads:
https://www.homestarrunner.com/sbemail9.html
https://www.homestarrunner.com/fhqwhgads.html
https://www.homestarrunner.com/sbemail76.html
I'm somewhat determined that it is the single most difficult name to spell among robots in current development.
Yes, as long as you don't make a robot that can beat any of mine. Ummm... just kidding. If you do make a robot that's better than mine using my own code, though, I'd like you to let me know and make your robot open source as well.
Maybe some tweaking, find something more useful to do with the extra code-space.
Eh, not really. I made it in one day, so it hasn't had time to have any WhiteWhales.
I love StrongBad too! I think you might have a bug in your code because it's almost as slow as Chameleon. -- PEZ
Hmmmm... Can't think of what that would be. There shouldn't be anything computationally intensive about this robot. More waves to manage if you're further away, but that's it. "In the time it took me to run your bot, I could have done all sorts of cool stuff, like paint a picture... of a guy... with a big knife. Whoa, I think I'm going to get started on that, right away!" -- Kawigi
F doesn't stay far away from M. It seems to prefer a really close combat. It has run 698 rounds now so if we give it another hour and a half I'll have some results. Though it seems already like it's a pretty strong bot. Even if M outsurvives it by about 115%. And any bot that M outsurvives loses. =) But instead of painting kitch pictures you should hunt the SlowBot bug I think. 36 fps is about the slowest bot I have tried. Only Chameleon is slower with 30 fps. -- PEZ
Now, 1000 rounds is not fun against SlowBots. =) Anway, M has a slight edge on this bot, it won 533 - 467 in survival and 47241 - 42909 in bullet damage. I guess this might be a top-10 bot after all. I'm intrigued by the movement scheeme, it sounds a bit like Ms actually. -- PEZ
I just had Jim try it out - in his tests, Jekyl gets about 60 fps against the main bots he's currently testing against (the Aspids and Nibbler), about 300 FPS against FloodMini, between 200 and 300 for Fhqwhgads (the only speed difference should e that Fhqwhgads saves data every round, where FloodMini only saved when he won). Against M, he said it started out at around 200 and then picked up to over 300 FPS. So I'm still not sure what the nature of this slowness is. One thing you could try is changing my Vector of MiniBullets? into an ArrayList or something. But, again, that shouldn't make it different from FloodMini, who also uses a Vector. Do you have a problem with bots whose run method basically consists of turnRadarRight?(Double.POSITIVE_INFINITY)? (That's also a difference from FloodMini 1.3, but the dev version does it the same way as here) -- Kawigi
As expected it doesn't matter if I use an ArrayList instead of a Vector. I think Vector is just a synchronized wrapper around ArrayList or some such. Of course you should only use Vector if you need the synchronization. Which you should seldom need. Even with a multithreaded bot where you should probably work with immutability and such measures to avoid synchronization. Also you should almost alway use interfaces (when they are provided) for the type specification of your objects. In the case of ArrayList and Vector they share the interface List. If you use it and find you want to switch from ArrayList to Vector or vice versa you only need to do that in one place; at the point of object creation. But as for what causes Fhqwhgads (there should be a penalty for using such names... =), I don't know where it could be. Since I'm using Java 1.3.1 maybe it has to do with that. But not for your other F bots. Strange. I'll fiddle around a little and see where it brings me. -- PEZ
I'm at loss here. I guess it might be it's name. =) -- PEZ
Well, I must say, if your OS has some sort of localization feature where it tries to pronounce words for you, I could see Fhqwhgads slowing it down. Good thing I didn't call the robot "Fhqwhgadshgnsdhjsdbkhsdabkfabkveybvf". I actually took a screen shot of the Strong Bad email to get that spelling all down. And it would be quite embarrassing to have spelled Fhqwhgads wrong, too. Just out of curiosity, have you looked at the movement scheme? Is it at at similar to Marshmallow? If it is, I think you should get working on MarshmallowMini?, because I'm sure that the movement is nano-able (with a very simple gun and no distancing). -- Kawigi
Eh, MarshmallowMini?? Don't think so. It's movement is small enough to fit in a mini, but it's targeting and Melee enemy manager won't. Besides, I think coding with codesize in mind is both a bit bizarr and a bit ridiculous. It has been good for my understanding of Robocode to try it some with Gouldingi, and I might write more minibots when I want to explore new concepts. But I will never try to compete in the mini disciplines. I'll leave the ugly-coding contest to others. =)
On the subject of movement. This looks veru much like early M movement. Though I wasn't aware of flatness issues then so I think I might have scrapped it for the wrong reasons. Ms' current movement is also simple, but not as simple as this. Ms' movement wouldn't fit in a nano without gun I think. -- PEZ
Fhqwhgads runs smoothly on my system. Against Ender i got to a speed of 400/500 fps. Maybe this is again one of those JDK 1.3 particularities? Also i had a very good laugh with those Strong Bad cartoons :-) Great fun! -- Vic
It's still a SlowBot in my book. I also like StrongBads? e-mail! I laugh out loud watching. One of my favs is when he gets a question about whether he can play the guitar. I wonder how he can type with those gloves though. =) -- PEZ
Lol, yeah, I love the Guitar one, too. I can almost quote it from memory in my best Strong Bad voice. -- Kawigi
I just noticed that FloodMini is just as slow on my system. And since it is I am suspecting the truly ugly try/catch piece of code that I guess is a minibot-thing for you not having to check your array boundaries. I guess some JVMs handle it with better performance, but the JVM I'm using doesn't like it at all. I can't really test it since I don't quite know what's going on there. -- PEZ
That's something to try, actually. Change that to something like this:
int guessindex; if ((guessindex = b.updateEnemy(x, y, time)) >= 0) { stats[b.wallrel][b.accl][b.latspeed][b.dindex][guessindex]++; ovbullets.removeElementAt(i); } else i++;It won't perform as well in melee (doing that try-catch thing accidentally pushed me up 32 spots in melee on the ER because it stopped me from having extremely off-the-wall data) and it may *occasionally* otherwise crash (but it physically shouldn't), but that's roughly how it was in version 1.2, and I did that mostly to clear the space for the acceleration segmentation. I actually got the idea from tobe's Calypso. See if that doesn't make a huge difference. As far as I can tell, FloodMini should be the fastest bot in the top 20 except for Marshmallow and Gouldingi. And this exception block is probably the only thing that could POSSIBLY make it slower than HT 0.8, which is also one of the fastest among top bots. Let me know if that fixes the whole problem, and maybe I'll appease you in the next version and not do that. I found some other space that I hoped to use in FloodMini to either put OCM in or tune the gun for multiple powers, but I suppose this could be worthwhile, too. -- Kawigi
Yes, that was it. Now Fhqwhgads is one of the fastest bots I have in my robot directory. Do as you please with this. I'll just keep you on the SlowBot list until it's fixed. =) And, of course, since skipping array boundary checking and using try/catch instead is a big NO-NO, it's bad for your Jarma as well. -- PEZ
Ok, the next version of Fhqwhgads won't do that, and should therefore run mega-fast on other operating systems/JVMs?. Of course, I'm on the verge of a whole new generation of Fhqwhgads (I should almost call it 2.0). It will sacrifice DynamicDistancing (it's so much easier to keep a uniform profile at all distances with this movement) and become melee aware, separate melee and one-on-one statistics, and it will have two virtual guns - one that fires waves continuously like FloodMini and one that only fires a wave when it fires a real bullet. The wave will also be variable speed and I will segment on predicted bullet travel time instead of distance. Basically, it will be more powerful against robots that might have otherwise given it trouble. And it will still be a MiniBot, if I have anything to say about it (I just need to find another 10 or 15 bytes I think). Sounds almost like a MegaBot, doesn't it? But it will be simplified still in a few places. -- Kawigi
That sounds very much like a MegaBot project. Can you really fit all that in a mini? Mako uses sets of VirtualGuns like that. (One set firing every scan, and one set only firing when the real gun fires.) I can recommend it. =) Funny that you think about sacrificing DynamicDistancing, since it looks to me like this bot really proves the value of it. At first I thought this bot was a piece of cake for Marshmallow. That was after the first 200 rounds they battled and F had for a majority of these battles performed a really close distance fight. After 1000 rounds M still had an edge. But after having fixed the SlowBot bug I have run many, many rounds and it seems F has choosen a long distance fight now and from there M can't beat it. Yet. M 1.9.1 might. -- PEZ
Yeah, I thought it would be interesting to basically put FloodHT 0.9's next gun into a mini. I tested it without DynamicDistancing against the top 20 and whiped its data and compared to my original tests. It didn't perform as well against DT or Chameleon, but it did even slightly better against Iiley's bots as a collective (this was already easily my best bot against Wave pattern-matching), and its overall performance was close to the same. So I decided to go for it and try all those things I could never fit into FloodMini (but got close). And the melee awareness is so it maybe has the chance to win best all-around MiniBot. It won't be *good* at melee by any means, but it will be better than all those Melee-ignorant 1-on-1 MiniBots I figure. Meanwhile, I may use the extra space I've found in FloodMini to stick the rest of FloodHT 0.8's movement into it. This makes these two bots more unique from each other more than anything else. In related news, I'm thinking I can give you more space for a new version of GouldingiHT. You down? -- Kawigi
Oh, just a note from the development team - this version of Fhqwhgads seems to be particularly good against Marshmallow, probably even partially because it's natural tendancy is to let his opponent get almost as far away as they want. I've found space, found bugs, found more space, and more bugs, and so on for awhile now. I'm surprised that I could create so many bugs trying to make a couple of simple improvements to the gun. The last one was particularly funny, but I did figure out that Fhqwhgads should be worthy of a roughly 30th place ranking with a pretty erroneous gun, maybe top 20 with a mal-tuned gun, and is probably top-15 material if it only uses the shot-time-only stat gun. I'm hoping it's looking at about #8 or so with everything fixed in the aiming. If I can pretend I have enough room for movement tweaks, I might try some movement tweaks before I release, too. -- Kawigi
I'm considering over-tweaking Fhqwhgads's movement and making it a MegaBot, and re-releasing this version as FhqwhgadsMini?. Part of the reason for doing this would be to justify making a FhqwhgadsMicro and maybe nano, too :-p The second reason would be to make a package kawigi.f_bots. The third reason would be to get a clear win over the creator of Yngwie in the 'hardest-to-spell-robot-name' league, at least until Loki makes a bot called "Yggdrasil". The other option is to either decide that FloodHT will be invariably better or that Fhqwhgads isn't worthy of being any more than a MiniBot. I just thought I'd bounce that off people to see what your opinions are. Should I take this further? -- Kawigi
As long as you have a different movement for the two bots I think it's very much worthwhile. Funny that you thinkg Yngwie and Yggdrasil being hard to spell. Not at all to me, but I guess that's because I'm a Swede. Yngwie Malmsteen, who's lending his name to the bot Yngwie, is also Swedish, though his real name is Yngve Malmsten. -- PEZ
Go-on make a mega bot - it always seems a bit of a hollow victory when I just beat mini, micro and nano bots :) -- Paul Evans
Speaking of your victories over minis, Iiley and I were bouncing scores back and forth yesterday (he has one heck of a megabot in the works), and I made "CigarQwhgads?", which was just Cigaret with FloodMini's gun. In 3 or 4 1000-round battles, it never lost by more than 10000 points, regardless of whether either of us had pre-saved data. -- Kawigi
Hmmm... It looks like you've found that Iiley's movement is particularly good. I was contemplating lifting the movement from Cigaret and dropping it into SandboxMini for the final minibot showdown - but it did not seem like fair play. BTW what does 10000 point represent as a percentage of the total score? -- Paul Evans
I don't know, seems like it was around 80000-830000 for SandboxDT, and 71000-78000 for CigarQwhgads?. Cigaret 1.31's movement is actually superb. I considered the same thing, but likewise, it would seem uncivil to exploit his open-sourceness by beating him with his own movement. Of course, CigarQwhgads? takes 200-300 rounds to catch up with Cigaret in learning. It did still catch up, though. One difference between DT and Cig is that Cig isn't optimized against his own guns ;-) -- Kawigi
Sounds like around 52.5% of score to DT - around 25 rating points - I can live with that - of course the new DT will make that 53.5% :) -- Paul Evans