If you're wondering what has been added to it over time, check /VersionHistory
Be the first to download your copy!
In version 0.8, I tuned down the OCM a little bit, and did some changing and randomization of the rest of the movement. More tweaks will probably come later, as this wasn't the focus of this release. It now has a melee/team movement that is a variant of AntiGravity that has probably been done before, but I don't know of anyone right off who has done it. Basically it constantly chooses and moves toward points of the battle field with a low 'risk'. The risk is calculated mostly in a gravity-type of way, with a few other weird things I do that seem to work better. So just be where the risk is the smallest. It seems to work better in smaller battlefields (vs. other good melee bots) than the 1000x1000 that most people use for large melee battles. Maybe I'll talk more about the risk calculation and how I pick points to try in the calculation later.
The FloodMovement I've used and abused purely reacts to enemy bullet fire, so it is a form of DodgingBullets. The OCM element of the movement is also based on bullet fire time, but the approach is quite different.
The first beta has some enemy management in place, but it isn't 100% melee-aware. As a result, putting it in melee may 'corrupt' its saved data until I put complete enemy management into place.
The second release (version 0.8) is not only melee aware, it will use a new 'minimum risk' movement in melee to outsurvive its opponents.
The first beta doesn't intelligently choose.
Version 0.8 generally targets the closest opponent, but won't switch opponents unless the new opponent is at least 100 units closer than the old target (so he changes targets 'stubbornly')
It saves a database of enemy statistics and factored angles, as well as DynamicDistancing factors, both between matches and between rounds. I do my saving and loading in a single file and in a custom method, for the sake of conserving space, much like SandboxDT does. Because of the time needed to write the file (partially because of the custom data formatting, but mostly because all the data is saved to one file), FloodHT only writes its data on the last round, so it won't save any data on your robot if you end the match prematurely.
Now on that note, I'd like to vent a little. The robocode documentation says that getRoundNum?() "Returns the number of the current round (1 to getNumRounds?()) in the battle". It doesn't. It returns the number of the current round from 0 to getNumRounds?()-1. I wasn't writing data at all for awhile (I was wondering how 40 enemies' data was fitting into 3K).
In version 0.8, no more factored angles are saved. Also, the data format is faster to load (probably just as long to write, though), using a standard zip file and a file for each enemy within the zip file. The advantage of this is that even though I'm saving everything into one file, you can look into it with zip utilities that most people have and delete specific files out of it for testing if you want.
It's name was thought up long ago, when I was trying to tweak out my test bot, SandboxFlattener's movement to give SandboxDT 1.61 a hard time. The HT part stands for "Hit This", I direct answer to SandboxDT's "Dodge This" challenge. The Flood name came from my thoughts on what would flatten out a lump in a sandbox better than anything. You got it. Water. That's what keeps the beach so flat.
Afraid not. Although a lot of the concepts used in FloodHT come from an open-source test bed, consisting of FloodMicro, FloodNano, FloodMini, Teancum and Barracuda. I don't plan on publishing the source for this robot, however, until I'm good and ready (for some reason). A few of the concepts I use are things I think are just too clever to put into the general robocode knowledge at the moment (like OCM, or how to cram the logic for 24 stat guns into about 15 lines of code).
Some movement tweaks are still in order. There may be a bug in some of my data-saving code, that needs to be looked at. I will probably add a few VG's back in there, more than likely variants of the same gun, probably one that doesn't get saved (some robots learn movement based on where they get hit, and that screws me up right now, notably I have problems against Princess).
It may. In OneOnOne, I guess that SandboxDT is appropriately its WhiteWhale, although I stopped testing against DT for a time. The reason I would say DT is the target is because it was the original target when I started working on the concepts that became this bot a couple months ago.
In Melee competition, it's hard to nail down one WhiteWhale, although I think anyone in the top 10 would probably qualify.
In Team battles, I think the main WhiteWhale right now is TroodonPack. In my tests (over 10 rounds is all), I seem to be better or about equal with most other well-known teams (i.e.- the ones in Albert's Face2Face competition), but with Troodon and SandboxDT, I still lag behind.
Version 0.8 is really only based on FloodMini 1.3, if anything.
=) No one can put so much hype into their bots like you do. I hope you can deliver! For the record, I have taken flat movement seriously for very long. Very seriously. And I know iiley has too. Why else create StatistRobot? What really got me moving again with new attempts was actually Paul Evans starting to share some of his expertise in the area. As I can't wait really for you to release this monster. Can you run som of my bots against it and tell me how they fare? -- PEZ
I will as soon as I can find this bug... All of a sudden I'm just freezing to a stop. Can't seem to find an infinite loop or anything to explain it, really. Hope this doesn't take too long to figure out... -- Kawigi
VirtualGuns is power. And flat movement too. ContaminationMovement? done right might be the last piece of the puzzle. FloodHT has the right ingredients and might very well be tomorrows #1 bot. But I'm not scared yet. You obviously must have a few bits and pieces to get right yet, since it looses to all those bots. =) -- PEZ
On the subject of your little vent in the saving section, yes, I thought more people knew this. I discovered it when trying to write out match stats at the end of each match. I think someone should post it somewhere very public, like the BeginnersFAQ. -- Kuuran
Interesting... All the while I thought Sandbox's challenge was "Dodge This". Hmph. -- Vuen ; )
Could you elaborate some on why VirtualGuns are not working for you? I don't quite follow. Marshmallow has eight VGs' of which only two are generally usable and the other six are picked against specific opponents and/or specific statistic segments. The only problem I see is that the two good guns need quite a lot of stats before starting to get any good and that it slows the learning since the VG stats has these guns low ranked for quite a while before they over-prove themselves. I have a few ideas on how to overcome this, but nothing crystal clear so I'll wait until it strikes me. =) -- PEZ
I think my main problem is that you can only rate your VG's by past experience. You can't know what's going to hit in the future, unless it's the same as that. And, as you said, sometimes the wrong gun will inflate itself for a little bit and then not go back down fast enough for you to figure out you should be using something different. I guess the time when you have problems with it is really when there are two or 3 good guns for a certain opponent (with 29, this was always the case), you go back and forth, always choosing the second best one, because it was just barely the best. What convinced me that this happens is partially the CurveFlatteningChallenge - why else would my average against DT stablize after about 200 rounds and then go up slightly? Why do I have a harder time (still) beating SandboxDT 1.61 than any other version? But yet version 1.71 does even better against most of the robots it has to fight against. For the stronger bots, this happens because they have been testing against SandboxDT 1.61 for 10000 rounds before they decide to keep a change, so they've strengthened themselves against the one gun. For the weaker bots, this happens because VG's do that - they cover up weaknesses in your primary targeting strategy. When I try to flatten my curve without reference to DT (i.e. using SmogPainter or FloodGrapher), I come back with something that does much better against the current DT, because he's muddling between guns, where the previous version with just one gun and theoretically inferior movement (whether or not I'm convinced that the current movement is better at all) is one I'm still not close to in my tests.
In reality, I'm not planning on permanently ditching the concept, though, I just plan on doing much fewer and I will think hard about why I have each gun. At the moment I can think of at most 6 or 8 guns I would consider putting in at this point. I don't see myself doing anything else unless I'm sure it's stable. And more importantly, I probably won't keep more guns unless it improves performance against my problem bots without degrading performance against other bots. I have one good gun that I know works, and I am using only that now, because it's stable. FloodHT 0.7's gun kicked butt in a lot of ways, but it was unstable, both in the sense that it made peoples' systems crash and in the sense that it couldn't perform consistently enough against many robots, even if one gun or another was working great for it. -- Kawigi
Marshmallow doesn't have those kinds of problems. It weights in both long and short term statistics. And for the situation with having two or more guns of equal strength I don't see why that's a problem. If the guns are about equally good it doesn't matter which one you choose. All my tests and observations tells that DT 1.91 is clearly better than 1.61. 1.71 was an improvement I think and with the 1.81 movement this bot made a clear advancement as well. I'm not sure if what Paul is doing is VGs', but it sounds a bit like it and of course one or two bugs could be in this new code. Maybe that's what you are observing rather than proof of VGs voulnerabilities. I'm not sure but I do think that i could add 100 VGs to Marshmallow without sacrificing anything but robotcache space. -- PEZ
Remember, however, that Marshmallow also has good movement, and can still be somewhat less than effective against many robots for the first 100 rounds. My guns take about 15 to 25 rounds currently to be really good against most opponents, and I think I would need at least 5 or 10 more to convince a VG system that it was the one to use over one that learns faster. Another side to my problems with DT's older versions is that I don't necessarily agree that 1.81's movement clearly better, as far as I can tell it's about equivalent if anything. -- Kawigi
Yes, M is a slow learner. 100 rounds is probably not enough. I must find a way to deal with that. A question is if your gun is as effective as Ms' when M has got those 100+ rounds under its belt. -- PEZ
That's a good question, too, I suppose. Here's a first 1000-round battle:
1st: kawigi.sbf.FloodHT 0.8 76444 26400 5280 39482 5274 7 0 530 472 0 2nd: pez.Marshmallow 1.6.1 72824 23600 4720 39479 4775 17 230 474 528 0Which would show they're not all that far off. At least I wouldn't read into the difference of 3 bullet damage too much. And it does show a few other things - I got about 10% more bullet damage bonus, but you make up some by the fact that you ram disabled bots, and I do end up disabled sometimes still. I can't say they were both fresh on their data, of course, but I'm pretty sure M had more saved data before this match than FloodHT (because I never deleted any of M's files, and HT's data got lost several times as I tried to get it all to work). Of course, FloodHT is getting close to as good as it gets by this time, probably. What's probably more significant than the win margin is the fact that HT reported a 13.5% hitrate against Marshmallow, and estimated Marshmallow only hit it 10% of the time. I'm running more rounds right now, and it looks like both hit-rates improve over more time (I know you're a fan of 10000 round matches against Guess-factor targeters), either because the guns are tuning themselves or because my DD-factors just start to bring me a little closer. At that point, I approach a 15% hit-rate to M's 11%, which basically means it's not even worthwhile for you to shoot at me from a survival standpoint. I'm about half way through the longer battle now, I'll post it...
1st: kawigi.sbf.FloodHT 0.8 801170 270550 54110 419539 56884 86 0 5441 4589 0 2nd: pez.Marshmallow 1.6.1 727293 229450 45890 401436 46826 254 3436 4617 5411 0So it looks like FloodHT continues to tune fairly well over the long haul. And this is what his console said after the last round:
SYSTEM: Bonus for killing pez.Marshmallow 1.6.1: 12 SYSTEM: kawigi.sbf.FloodHT 0.8 wins the round. Hit rates (accurate in one-on-one): kawigi.sbf.FloodHT 0.8 : 14.99533839702718 Others : 10.880616628556043 Enemies remaining: 0 Survival: 5411 - 4589Again, the actual bullet damage doesn't tell the story, I suspect FloodHT is using more conservative energy management (although not to the degree of SandboxDT), and still just out-damaging you. And there's FloodHT 0.8's official assessment of the situation. Whether the difference in my performance against you is due to the removal of the VG's or not is up for grabs. Whether you would do better against me with one better gun than with your current 10 guns also remains to be seen. It also shows that M is better against HT than HT is against DT:
1st: pe.SandboxDT 1.91 827310 307100 61420 402379 56357 54 0 6153 3854 0 2nd: kawigi.sbf.FloodHT 0.8 753129 192700 38540 470910 50718 260 0 3869 6142 0 SYSTEM: Bonus for killing pe.SandboxDT 1.91: 15 SYSTEM: kawigi.sbf.FloodHT 0.8 wins the round. Hit rates (accurate in one-on-one): kawigi.sbf.FloodHT 0.8 : 13.83692662585396 Others : 13.811881625051853 Enemies remaining: 0 Survival: 3858 - 6142Hmmmm... now to solve that problem. That has to be a bug ;-) It's not too pitiful, though. Maybe I'll try it against an old DT and see if I'm right about myself having a harder time with 1.61 than 1.91. Plus it will go a lot faster. Of course, I'm never running 10000 rounds against Chameleon. -- Kawigi
Interesting. Looks like the new FloodHT will book a top-10, maybe top-5 position in the next rumble. It's probably your excellent movement that behind most of the improvement. M had a surprisingly easy time hitting HT 0.7, especially at far ranges. When it comes to comparing hit rates, it's difficult. Especially since both HT and M use DynamicDistancing. Also I often find my bots are underestimating the hit rate of the opponent. Don't remember if this version of M prints it's hit rate and enemy estimates, but if it does you should probably compare the hit rates as reported by the respective bot. I'll make sure the next release of M reports it's own hit rate. Congrats on making a good bot. -- PEZ
I was actually a little bit bummed about what the current M prints - just number of walls hit, skipped turns, and wins. If M did report its own hit rate, I would have certainly posted that instead (I looked). It's true, however that the opponents will tend to be a little lower than it should be, for two reasons - hitting walls and shots that were fired before I died but after the bullet that killed me (I don't count misses for myself after I win). As for comparing hit rates, I think *comparing* them is fine, but calling them anything finite is harder, because we both will go further or closer to each other. Now what I also want to know is whether we're looking at a top-10 or maybe top-5 melee bot, too. There's only a few of those, basically Tron and SandboxDT.-- Kawigi
#2! Really impressing debut. Congrats again. -- PEZ
Look close enough. 7th place is quite a bit offset from 2nd to 6th. -- PEZ
Oops, I guess I was lining up stuff wrong. You're right, there's sort of a gap between the FloodHT to Cigaret group and the Marshmallow to ... well, there's about 40 within 100 points of each other. But you're the leader of the pack ;-) If both of us are in DT's playing range, maybe we'll keep that ranking under 1900 at least ;-) I need to do something about Chameleon I think, if HT's saved data doesn't, he's what's really holding me back right now, and he's what's likely to put me back in 3rd place when I can't beat DT anymore. -- Kawigi
kawigi.sbf.FloodHT 0.9.1: Throwable: java.lang.NoSuchMethodError?: robocode.util.Utils.normalNearAbsoluteAngle?(D)D java.lang.NoSuchMethodError?: robocode.util.Utils.normalNearAbsoluteAngle?(D)D at kawigi.sbf.utils.MovementSimulation?.execute(MovementSimulation?.java:81) at kawigi.sbf.core.DuelMovement?.findRisk(DuelMovement?.java:91) at kawigi.sbf.core.DuelMovement?.waveSurf(DuelMovement?.java:57) at kawigi.sbf.core.DuelMovement?.move(DuelMovement?.java:30) at kawigi.sbf.FloodHT.run(FloodHT.java:35) at robocode.peer.RobotPeer?.run(RobotPeer?.java:616) at java.lang.Thread.run(Unknown Source)-- GrubbmGait
Interesting, that must be my problem on RR@H? It was weird that my meleerumble client would have me probably crashing with that and getting last place, but I couldn't see it when I tried running battles. -- Kawigi
With your version of 1.0.7 (my development environment) everything went fine, but with my RR@Home client (1.0.6) FloodHT scored 0 points continuously. So I switched my dev-env back to 1.0.6 and tried it out. Did you add that function to utils.Robocode or did Mat that in the official 1.0.7. -- GrubbmGait
I didn't add it, I think it's part of the fix for the teleport bug. I moved the method into my code in 0.9.2 - any idea what's causing the problems now? I can't seem to see it in 1.0.7, my 1.0.7, or a mostly-1.0.6, but something is obviously wrong (I just watched it beat a collection of my bots + Tron 2 and some version of Shadow in a short battle). -- Kawigi
Checked it on an old PC at work, and with JRE 1.4.2 (and Robocode 1.0.7) I get the error below. I think you will have to make your bots compatible with JRE 1.4.2 (and Robocode 1.0.6), because a number of clients still use that :-p -- GrubbmGait
SYSTEM: Could not load kawigi.sbf.FloodHT 0.9.2 : java.lang.UnsupportedClassVersionError?: kawigi/sbf/FloodHT? (Unsupported major.minor version 49.0) java.lang.UnsupportedClassVersionError?: kawigi/sbf/FloodHT? (Unsupported major.minor version 49.0) at java.lang.ClassLoader?.defineClass0(Native Method) at java.lang.ClassLoader?.defineClass(ClassLoader?.java:537) at robocode.security.RobocodeClassLoader?.loadRobotClass?(RobocodeClassLoader?.java:196) at robocode.battle.Battle.initialize(Battle.java:501) at robocode.battle.Battle.run(Battle.java:149) at java.lang.Thread.run(Thread.java:534)
The real baffling thing is that for me is that I don't see any problems in any version of Robocode I have handy (of course, always Java 1.5, thanks), but my RR@H client just stalls and kills FloodHT. Grrr! -- Kawigi
Pretty sure, I don't even have full 1.4.2 installed on that computer (just the jre that came with it, but it does appear to be using 1.5, which is in the default path). At first I thought it might be stalling because getOthers() can potentially take longer (due to the HT hang fix), but reducing calls to getOthers() didn't help. I wonder what the heck an UnsupportedClassVersionError? is supposed to be, anyways... -- Kawigi
I don't know either, but I do now that recompiling with 1.4.2 solves it. Can it be a Jikes-problem by the way? JRE 1.5 forces you to use v1.22 instead of v1.16 and maybe there is a bug in v1.22. -- GrubbmGait
No, I'm using javac f rom java 1.5. Do you think compiling with 1.5 and --target 1.4 or something like that would also solve it? -- Kawigi
Well, FloodHT may be a few years old and Kawigi may not see see this, but today I'm in a commenting mood and I really must say... Even against top-20 bots today, FloodHT still puts up a hell of a fight. I was watching a few battles with it against RougeDC, and it really seemed like it's primary weaknesses were wall segments and choosing firepower and that were it not for those it might have won those matches. I wonder if we shall some day see another iteration of FloodHT or a new megabot from Kawigi the Fertile of legend. :) -- Rednaxela