DarkHallow/Archived Talk

From Robowiki
Jump to navigation Jump to search
Sub-pages:
DarkHallowBulletin Board - Archived Talk
       Archive        This is an archive of past discussions. Do not edit the contents of this page. If you wish to start a new discussion or revive an old one, please do so on the current talk page.     

Anyone have a suggestion on a good set of testbed bots for tuning WaveSuffering? I have it working pretty well vs head-on targeting and full-lead targeting now. -- jim

I like to test against:

  1. Quest Because it has a good bot with fast learning, quite effective GF gun, that rolls its stats. I like it when Quest gets less than 20% in survival.
  2. FloodMini Because it has non-rolling stats in it's GF gun. And becuase RaikoMX gets almost 85% against it and I only get 81%.
  3. Barracuda Because it fires near GF0 all the time. But it also has a challenging movement that sometimes refuses to let you pass by driving GF1 all of the time. Sometimes you have to reverse and then your surfing is put to a real test. CC often looks like a bullet collector in these situations. Watch RaikoMX against this bot for some 10 or so rounds. Be ready with a Kleenex because it is so beautiful you risk starting to cry. Again RaikoMX sets the goal for me, I think it gets some 99.6% or so in average. I get 98.7% with the version of CC that was most focused on GF0 avoidance.
  4. NanoStalker Because it fires GF0 all the time but it really likes a close, close fight so your evasion skills are put to a test. You should get close to 99% against this bot.
  5. DevilFISH Because it also likes a really close fight, but it fires linearly so you can't escape it as easily as you can with nanostalker. SilverSurfer gets some increadible 95% against it!
  6. Lacrimas Beacuase it is a helluva bot! I guess you could call it my WhiteWhale (goes for all of my bots). My current CC beats it though and I have decided to never release a CC that doesn't beat Lacrimas 1.36. I just wish iiley would return to the robocoding pack! I think he's the best robocoder ever.
  7. RaikoMicro Because it can beat a surfer in development, but doesn't stand a chance when the surfing has matured. It's a fast bot and it doesn't save data.

There, my $.1 -- PEZ

  • Thanks. I already had some of these in my pack but not all. I was really in need of a close fighter as there is an issue with my projection at close ranges. I think if I get those right then I will be in much better shape. I did not have Lacrimas in there as I hate SlowBots and most of iiley's are just that. I also am using mini.Aristocles in place of RaikoMicro as they are so closely matched =^> -- jim
  • Lacrimas isn't a SlowBot. It uses a fast gun. Surfing costs some cpu of course, but I bet it isn't slower than any other surfer. -- PEZ
  • After running 500 rounds to give the savers a chance to get data I get these results: FloodMini: 60.5%, Quest: 55.3%, RaikoMicro: 60.0%, Lacrimas: 50.9%, DevilFish: 76.4%, Barracuda: 91.0%, NanoStalker: 84.0%. I guess I gave to much preference to evasion at ranges less than 250. Scores vs. DevilFISH and NanoStalker prove that. Room for improvement. But definitely better than any of my other bots as I at least win that grouping. Nothing I have ever done before would beat RaikoMicro or Quest. -- jim
  • Hey! A win against Lacrimas! You just must be doing something right. -- PEZ

I also use DuelistNano, because it uses head-on targeting and since it is a move-to-point mover u can test your wall-segments with it. And of cause it is often very helpful to test your bot against other bots for yours, because you know (or should know) how they work and can find locate weaknesses better. --deathcon

Another good thing with testing against DevilFISH became appearant last night by Jim and me. Since traditional linear tergeting extrapolates on your current speed your surfing must either do this or segment its data on velocity to avoid getting hit as good as it can be done with surfing. Example: if you are stationary when DevilFISH fires; it is GF0 (as defined by absolute GuessFactors) that should be avoided. -- PEZ

Well I am glad you pointed that out as thats not exactly the lesson I learned. What I learned was thet it is better to avoid being close to your opponent =^>. I got a 30 point boost by adding a case for conditions when you are inside one WaveLength (WaveLength == periodicity of the waves). This case then considers which of two points will carry me farthest from my enemy and I then head there. I still think there are some issues with my surfing but I am getting closer. Soon it will be time to focus on the gun. -- jim

Better than measuring the distance I think it is to choose the farthest point when there is no wave coming at all. This often means you are inside one wave length, but it lacks the predictability issue you might add with your current method. -- PEZ

  • That might be a better approach as any wall smoothing point would in theory be closer to me. It would have the hopeful side affect of moving to open space which is what I would like to see happen. -- jim
  • Yes, that's what happens to CC at least. It also makes it move out to open space in the beginning of the round when the guns are cool. -- PEZ

PEZ, are those percentages that you point out above over 500 rounds, 35 rounds, N rounds where N is between zero and infinity? Just interested as I can approach those numbers over 35 rounds but after about 100 I slide downwards some. After finally watching a RaikoMX vs. FloodMini I can see I have a long way to go. -- jim

They are mostly from 100-round battles. But when I decide to keep this or that tweak I run 1000-round battles with and without. Performance can vary wildly between two 100-round battles. -- PEZ

I HATE REFACTORING That is all. -- jim

There's always the alternative: Always write perfectly factored code. =) -- PEZ

  • My actual problem is that I started DarkHallow with BlackPearls code. That meant that everything (some 5 plus classes) were in one file :( Now of course I have them all split out but it is not working quite right. I think the movement is still the same but my gun is shooting head on. And I know now that it is going to come down to a misplaced paren some place. Ah well. Should have done it right from the start. At least when this is all done I will have pluggable movement =^> -- jim
  • And we have people sayin that RC doesn´t estimulate good estructuration(?), and oo technics... :) --Axe

jim, try comparing your last know-to-work version with your first broken one using a file compare program. I use WinMerge. This has helped me track down bugs introduced by refactoring many times. Of course, with Major refactoring (splitting up files like you did) it may be a little more difficult.

According to Extreme Programming, refactoring should be a fun thing to do. But that can only be true if you can test if the refactored version didn't break using unit tests. I started out development on Locke with writing tests before the code as I usually do and that really makes refactoring a breeze. But, I was stupid and didn't make backups of those tests ... My harddrive crashed and I lost them. Now I find a have much less courage to go in and refactor something. Of course I could rewrite my tests but that would remind me too much of actual work instead of some programming fun in my free time :-) --Vic

  • Isn´t required a pair of programmers to XP? -- Axe
  • yes. XP promotes a lot of these practises. I'm just naming two of them here. XP also states that XP itself can be refactored to suit your specific needs. That could mean that if you have only one person working, you can drop the pair programming :-) --Vic
    • I set out to add the test cases and all that but decided I did that enough at my old job =^> I am really just whining because instead of improving my bot I am trying to make it the same as before, only more wordy. Thats never fun. -- jim

I've tested Locke 0.6.3 against DarkHallow 0.52, and I don't think your bot is firing head on. But, DarkHallow is always travelling towards GF1, at least against Locke. I don't know if that's a bug, or if you are only testing movement against HeadOn targeters. --Vic

Fighting battle 0 ... jekl.DarkHallow 0.52.1,vic.Locke 0.6.4
RESULT = jekl.DarkHallow 0.52.1 wins 2619 to 2513

All better now =^> -- jim

  • But now Locke beat CC instead. -- PEZ
  • @jim: me and my big mouth :-/ @pez: only slight, but it feels great :-)
    • @Both: Looking at Locke's details page it seems as if order has been restored. Locke beats me and CC beats us both, for now.

I was sadly disappointed in DH's performance so I was glad to see this message here. A quick look at what was happening showed that you were correct. I tested this bot heavily vs. FloodMini but not much else. In doing so I noticed it was possible to get hit with Waves in rapid succession in case where you are twisting or turning. I added a check to make sure that the bullet power matched the wave and moved on. Apparently FloodMini always uses whole number firepowers in it's shots or some sort of internal bug exists between shot power and reported energy drop. I was getting a margin of error of something on the order of .00000001. So of course 1.9000000001 != 1.9. And if they do not equal and you are not balancing your movement unless they are, well you can see where this leads. I have added a Math.round and it all should work now. Upload in a minute. Thanks for the feedback Vic --jim

Yes, you can compare for equality with the Robocde API calls. I usually do something like Math.abs(value - e.getValue()) < 0.001 instead. -- PEZ

Now you tell me :). What is the method for ensuring that your enemy scores at least one lousy point? A shut out is RR@H is useless. I know it has been discussed else where but why is it that the upload servlet or the scoring module has not been modified to change zero scores to a score of one? I never thought I would have to worry about making sure my enemy scored at least one point. This is ridiculous =^> -- jim

OK Everybody. Stop releasing bots, and if you must release, please no SlowBots. I am 16 points away from my goal of 1900 and I would like to see if I can make it there by bed time. I am now officially in the hunt for 2K. I think my next move will be to patch Jekyl's gun into DH. That gun seems to give people some of the top bots a fit so maybe this would be worth while. I should also probably hack in some wall avoidance at some point too. I am tempted not to as it seems that I get much better approaching wall performance, as reported by FloodGrapher, than RaikoMX the way it is now =^> -- jim

Well 1967.42 after 106 rounds with a momentum of 35 and change. Unfortunately I have not faced any cx.* bots except Princess. This means that when I finally do face them they will depress my score more than I would like. Still this is better than I had hoped for. I was hoping for 19K+ and if at all possible to slide in front of David_Alves for #1 American in the competition. I think I am going to walk away a bit so I do not have to watch the fall :) -- jim

Don't worry about the cx.* bots. They don't drag your score down very much since they are pretty high ranked. Your LRP graph looks really good this time. Your surfing is definately starting to work! Good job. -- PEZ

Thanks. I have tried repeatedly to look at my LRP graph but I can not see it. For some reason it just never works for me. It has in the past though. I also have hope to beat some of the cx.* bots. I was really hoping to simply score 50% or better vs each of them as that would be a big improvement. If this holds I will need to finally add some "diving" protection, wall avoidance code. Still makes me laugh that DH crashes into walls. I like to think it makes segmenting on "out" a lot harder. -- jim

I wonder if it does. Good wall segmentation should "see" that you often crash. If, ineed, you do, I haven't noticed very much of it. Must run DH interactively some more maybe. -- PEZ

I've now checked. Not seen DH crash into any walls at all. Seems to handle it better than any of my bots. The diving problem you mention doesn't look exactly pronounced either. If you're using anything like a blin-mans-stick maybe you can try shorten it slightly. That'll make you dive a bit less steep and less often. But it would not let you hide your wall movement from segmentation like your current movement does. Looks very much like RaikoMX actually. It too uses a long stick. -- PEZ

Well you know the old American motto coined by Theodore Rosevelt? He said "Speak softly and carry a big stick." How could I mess with that tradition? It was the shorter stick that I used in previous versions that made me likely to hit the walls for some reason. Also I think it very interesting that you mention that the movement look similiar to RaikoMX as in graphing the two vs. FloodMini they get very similiar results. RaikoMX is still better (lower hit rate) and broader (especially towards +1) than what I have now. RaikoMX's constant velocity profile in particular is so much better than DH's that I think that alone counts for more than 50 points or so difference between them. Getting closer. Next up pass DT. -- jim

Whoah! 1955 points! That's a big jump! Great, jim! Which of the 4 tweaks you mention do you think accounted most for this jump? --Vic

  • I would bet the quick learning buffer was the biggest thing. I added that to my surfing stats so that I would not need to learn the same thing over and over again but could rather learn it once instead. After that, adding rolling averages is a huge improvement against other surefers. At least the decay of your stats then affords you the chance to hit your opponent some. Not sure if that is actually the truth of it or not but thats the way it "feels". -- jim
  • The rolling average is probably good against all learning guns. There are not many points to be collected against surfers. -- PEZ
  • Actually watching matches vs. cx.* it seems that firepower management can help some there. We often get to the end of the round in much the same battered shape. Then my power management kicks in and I seem to often hang in there longer. Might be enough to tell some difference there. And emperically I am pretty sure that the quick learning buffers help a lot. DarkHallow saves no data from one match to the next yet so learning with some speed is absolutely essential. Seems to be working. Oh yeah, Team USA got by the first round of the World Cup qualifiers. Hard to believe that the US side is currently ranked in the top 10 in the world. -- jim
  • Well, last time I saw them they played really good football. Beat Portugal in the last World Cup too, didn't they? -- PEZ
  • 3-2 as I recall. Jumped to a really quick lead and then held on for dear life. It was one of the really big early upsets. I also thought they outplayed Germany in the round of 8 as well but got a bit unlucky to lose 1 - nil. I would love to see them do well this upcoming World Cup. Then you lot in Europe might want to start paying more attention to some of our better players. We are making in-roads there but it seems that an American player had to be really, really, really good to get a break there. The EU player permits caught Bobby Convey this year or we would have another. We still need to find a stellar center midfielder to be very good national side. The defense we put on the field this World Cup will be tall, fast, solid, and able to jump out of the stadium. We have 5 - 8 forward / attacking midfielders with pace to match any. First touches sometime seem to escape them still but I think that a symptom of not always playing in traffic like the Europeans tend to. We are getting better. Good enough for me to plan on coming to Germany to be a part of Sam's Army :) -- jim

A moment of silence please:

1st: jekl.DarkHallow	35245	13550	2710	16701	2280	3	0	272	229	0
2nd: jam.RaikoMX 0.32	32518	11450	2290	16738	2038	1	0	233	271	0

And to show it is not a fluke

1st: jekl.DarkHallow	34913	13250	2650	16841	2163	8	0	265	235	0
2nd: jam.RaikoMX 0.32	32770	11750	2350	16596	2070	2	0	236	265	0

WOOOOT!!!! Now, if we would only fight 500 round matches =^> -- jim

Cool! I think CC in its later incarnations has lost its edge against RMX in long battles. -- PEZ

V 0.54 has an impressive LRP graph against head-on targeters so far. Looking really good! Your gun is keeping you back now. With a RMX class gun you could be a throne contender! -- PEZ

  • I think I have no choice but to agree: the time has come to re-do the gun. This gun has been with me since Jekyl 0.41. That was my first competative bot. My bots have grown a lot since then but we have stuck by this gun through thick and thin. The time has come to put it to retire it. I am going to miss it's simplicity. I will miss it's elegance. I will miss screaming at my monitor because it has missed yet again at 50 pixels =^> -- jim

Went through and fixed the dates in the bulletin section, just in case we look back in the future and get confused. =) -- Kuuran


Congratulations on 2000+!! --Brainfade

Thanks!!! I just got out of bed and saw it. Too bad I have to go to work as I have other ideas to try. Maybe later today. -- jim

Hey, u did it! Congrats jim, u surelly deserved it!! -- Axe

Congratulations man. I was sure u will make it!!! ... but i have to say: be careful and dont try to steel me my top5 ranking :D --deathcon

@everyone: Thanks for the words of encouragement. I am glad to have crossed that line.
@whoever put DH on the The2000Club page: Thanks!!!! I did not have time to do that before I left for work.
@deathcon: I have no aim to take #5 from you. You may find that when I get where I want to go you may have lost a ranking point though. I aim to see the American flag on top of the rumble. Hopefully next to a jekl.* robot. -- jim


Changes to the .55 Version that may have put me over the top:

  • A) Improved gun performance: I found that my gun segmentation was not all the great. By playing with them a bit I was able to squeeze out some added performance against the also rans. DH's gun now scores > %89 in the TC. Still a lot of room for improvement there and that's where I will be expending my efforts in the near future.
  • B) I matched my movement segmentation with my gun segmentation. Some of the weak segments in there were holding me back some I think. It is nice that improvements in my gun code should potentially help my movement as well.
  • C) I refactored my Wave slightly and although the performance should not have been affected you never can tell with my code.

Thats all I can think of now. If you want a real summary I can CVS diff it for you =^> -- jim

Congrats on breaking the 2K limit! It was less work for you than it was for me. Good luck on putting the american flag on top of the rumble. It'll be the first thing in a long while that the americans will be on top of anything. =) -- PEZ

  • I will not take this bait. 8^P -- jim
    • Lib is back on top of nano melee this week (actually, american bots have owned that division for some time, with Lib, DoctorBob and Infinity. -- Kawigi
    • That Lance Armstrong guy doesn't suck either, or so I have been told. Looking more and more like 6 straight. Of course thats pretty easy. It's only a bike ride after all ;^) -- jim
    • Well, your first bet on it being a bait for you was right. And I knew you wouldn't take it. Just teasing ya! =) -- PEZ

Jim, my client was running your latest version, and i noticed this result:

Fighting battle 2 ... jekl.DarkHallow 0.55.2,kawigi.micro.Shiz 1.0
RESULT = jekl.DarkHallow 0.55.2 wins 4667 to 0

Don´t know if you are aware of a particularity of the server: 100% results are discarded... This means that this result, for example, will not count at all! And those (99.9%) are the more profitable results... In order to avoid this kind of stuff, I (and some fellows too) have a piece of code that makes SS stay still in the lasts rounds if the opp score is zero. Maybe u should consider doing something like this too... -- Axe

  • I knew this happened occasionally. I have not put the code in as of yet but maybe I should soon. Still playing around a bit with movement and guns. Trying to find that magic combination. Does not look like this version has found it yet either. -- jim
  • Seems that your movement is pretty good, but your gun is having some problem against the ones u call "top dogs"... It seems that it is beeing fooled by the WaveSurfers. Okami & SS have almost the same gun, but SS have a good WS, while Okami a broken WS, u score 57% against Okami, but only 32% against SS. The same pattern we see against RaikoMX(35%) and Raiko(55%). My guess is that your gun (GF right?) needs to be more fast-adaptive. I know very few about GF guns, but PEZ might be able to give u good advices in that way, afterall CC gun is GF, but very fast adaptive and strong even against WS... -- Axe

Can you share a little more detail on how minor changes moved the gun from 65% against DT to the 80s? I've had a few trial GF guns similarly perform disproportionately badly against DT 1.91 as compared to the rest of their results, so I'm quite curious.

Unrelated note: It'll hurt learning speed a bit, but have you tried just having a segment that's either 0 or 1 and simply rotates every time one of your bullets hits the opponent? -- Kuuran

  • Sure. I would be happy to. First off I segment my gun like this:
	float[] stats = statBuffer[closingIndex][outIndex][accellIndex()][Math.min(3, (int)lastDecelTime++/13)][latVelIndex][distIndex];
    • closingIndex: The only real new segment for me is the closingIndex and not the most telling stat. I think I could easily remove it and it would not make a difference. It is the a 3 item segment that is the sign of the closing velocity. I find that it seems to help in some situation and I should really test without it soon to see if I can dump it.
    • outIndex: This is a measure of wether the enemies current heading and 60 pixels will take them out of bounds. I then iterate through 0 to 3 * 60 to see how far out he is from the wall. Obviously 0 - 3 is the index and detect if someone will be out in 0, 60, 120, or 180 or less pixels. For some reason the more segments I add here the better my results vs DT become. I think that as you smooth the corners you decrease your escape area and are statistically easier to hit. I think this bumped my 6 - 8 points or so vs DT. This also seems to help a lot vs. Cigaret.
    • accellIndex: A measure of wether the lastLatVelIndex and latVelIndex are equal or not. If they are not, is he accelertating or decelerating? 0 == constant, 1 == decel, 2 == accel. This seems to be a significant segment vs. DT as without it I can not hit it very well at all. I am not sure what it contributes in terms of hit rate but I know I need it 8^).
    • lastDecelTime: This one is sort of muddied by the accelIndex but the two together seem to work better than either of the indavidually. Four segments. This one helps quite a bit vs. Cigaret.
    • latVelIndex: Math.abs(latVel)/3. Gives range of 0 - 2 == 0, 3 = 5 == 1, 6 - 8 == 2. DT was much better vs me when I was using Math.abs(LatVel)/2 for some reason. The more aggregated stat bucket was better for some reason. May have been the interplay with the accelIndex some. Switching to divided by 3 was worth an 8 - 10 point bump.
    • guessFactors: I currently use 23. I try to fight in the 450 - 600 range. At range 600 I make the max possible distance you could travel to either side to be 436 pixels. 436 * 2 = 872 if you take into account forward and reverse. 872 / BOT_WIDTH == 24.2. Interestingly enough 0 - 23 is 24 units. At MAX range I could be better and I mean to soon test other values. I have tested 31 but I think that at close ranges it tends to muddy the waters some. Other guns use that number (and more) very effectively so I suspect there is more room for tuning for me.
  • If you want all the gory details, the code for DH is in the jar. The file to look at if called WaveGun.java. I use a pluggable interface so if you want to add a gun implement the interface :)

You are doing really great with DH lately, jim! 2019 points that's a really great bot you have there....

About your outIndex: depending on the distance of the enemy you may end up segmenting unnecessarily because the enemy may not even reach the wall when you are close enough to it (I have the same 'problem' with Locke currently). Have you considered a BlindMansStick? This would represent the distance travelled in its current direction until a wave (fired now) would hit it. If that stick goes through a wall then you should segment for it. If not, you should not. I have not tried it in practise yet, but it is high on my todo list. In theory it should be an improvement. I've also been thinking that a BlindMansTail could be useful. This is basically the same as the BlindMansStick, but you assume the enemy reverses immediately. The tail (getting more important as lastDecelTime becomes larger) could indicate if it will encounter a wall when reversing. And of course then you could add a few outIndex values for that situation also.

About guessFactors: why does increasing that number 'muddy the waters' in your case? Maybe you are not using what I call BinOverflow (filling neighbouring bins if they fall within the bot width). If you do that correctly -the edge bins are tricky- increasing that number should have no negative impact at all. I have read somewhere that ABC and someone else have calculated that 97 bins (iirc) is the optimal number to get good accuracy at the longest distances. Beyond that would just be a waste of cpu cycles :-)

--Vic

  • I think it muddies the waters as when developing this gun I went as high as 41 bins and the more bins I added the worse I got at near ranges. I am doing the bucket overflow (or I was when I was doing this testing) and it did not seem to make a difference. At closer ranges having fewer possible bins to shoot at seemed to make me more accurate. I decided to accept the trade off in distance for the better accuracy. It may be time to re-visit this but I know I have explored it. As far as the BlindManStick, if I follow you this is sort of what I am doing now except I test 4 different static stick lenghts: 0 which is a waste and should be removed, 60, 120, and 180 pixels long in the direction of travel. I may add a new 240 bucket to replace the useless zero bucket. I could use a varying length stick based on the travel time it would take a wave to reach it but I am not sure I see the advantage of doing so. I must give this some thought. Good to see people are chiming in as I was considering giving up as no one else seemed to be playing anymore 8^) -- jim
  • Don't you give up on me now, jim! ;-) I think the summer time is keeping people away from their computers..... The advantage of considering the wave would be that you do not pollute your valuable wall segments. Suppose your enemy will hit the wall in 180 pixels. In your case such waves will be stored in that special 180 segment. But the enemy may be so close to you that it will never reach that wall before your wave hits it. So in fact it is not a near wall case at all! That case and all similar cases should have enriched a normal, non wall segment which would become better populated. It also means these cases pollute your genuine wall segments with non-wall data. Hope this is clearer. I had a hard time wrapping my mind around it when I was thinking it through.... --Vic
    • I now see the advantage of your proposed wall segment changes. I will have to keep this in mind for future gun developments. Currently I am rolling my whole bot back to 55.4.1 as the current line seems to be faltering.

About that BlindMansStick for checking wall proximity. That's what I do, though I use a set number of fixed distances instead of comsidering the wave travel. I think I must try that. I makes a lot of sense. -- PEZ

  • What numbers do you use then, PEZ? And do you also use that ReverseBlindMansStick? --Vic
  • I use 5.5 * n ticks, where n goes from 1 to 3. I have been using that reverse stick, but with a different rationale. My reasoning was that if both the nose and tail was pointing against a wall then the enemy was cornered. Didn't get too good pay back for the effort though. -- PEZ

I calculate 57 being the ideal number, and yes, getting all the buckets in the bot width is important when the bucket is half or less the bot width. Here's how I calculate this:

asin(8/11)/asin(36/1200)

buckets are required both forward and back, plus one stationary. If you assume only a 800x600 battlefield it would be:

asin(8/11)/asin(36/1000)

which would mean 47 buckets. Using this number will help your longer range accuracy a fair bit.

Oh, and thanks a lot, Jim. It should be of great help. :)

-- Kuuran

I am glad it helped. You have helped me in the past and it is nice to return the favor. -- jim

It would be interesting to hear you describe how your stat handling works. Both the rolling and the non-rolling. -- PEZ

When I say rolling I mean Paul's classical sense. When I say otherwise I mean Andrew's Quest sense. They are both rolling after a fashion in the sense that they are not persistent. For some reason I seem to get better results when I use Andrew's method but I really want Paul's methos to work as I understand it better. -- jim

OK, and have you tried totally accumulative stats? Seems to work for ABC. In any case it would be interesting to know. With CassiusClay and Pugilist I roll the stats super fast. Using deeper a deeper roll or accumulative stats makes them perform much worse. To me this is the remaining biggest mystery with WaveSurfing. (The different impacts rolling stats have on different implementations that is.) -- PEZ

When I use Paul's classical RollingAverages, I am using a depth of 5. It seems to work very well in testing but very poorly in the rumble. I haveno idea why that would be. I have also started to tinker with a more precise movement prediction engine as it applies to surfing and that seems to be showing some promise. I have not tried totally accumilative stats although I think I will release a DH to try that. I would love to breal into the 2030+ range. Thats my current goal.

My highest rated CassiusClay version used a rolling depth of 1. Which is about what Pugilist uses too (even if it is not really using rolling averages to achieve it). Maybe it is your weighting of the different stat sources that should be different for different rolling methods and depths? -- PEZ

  • I have been experimenting with different depths of the different stats methods too. I am trying to get it right and find that elusive "perfect" match. -- jim

I would recommend keeping a non-rolling gun around, as it will be better against non-adaptive movement every time. As for the rolling gun, have you tried more mundane moving averages? Exponential ones might just not be a good way to go about it. I'm guessing wildly here. -- Kuuran

I have tried several different ways to keep movement stats. What I have found works best is this:

	public void incrementHits() {
		guessFactors[0]++;
		fastBuff[0]++;
		
		for(int i=1; i<guessFactors.length; i++){
			fastBuff[i]*=0.98f;
			guessFactors[i]*=0.98f;
		}
		guessFactors[getGuessFactor()] += 0.01f;
		fastBuff[getGuessFactor()] += 0.01f;
		//Andrew's cool way
		if(getGuessFactor() + 1 <= (GUESS_FACTORS - 1)) {
			fastBuff[getGuessFactor() + 1] += 0.006f;
			guessFactors[getGuessFactor() + 1] += 0.006f;
		}
		if(getGuessFactor() - 1 >= 1) {
			fastBuff[getGuessFactor() - 1] += 0.006f;
			guessFactors[getGuessFactor() - 1] += 0.006f;
		}
	}

I do not know why but if I use that I will score somewhere north of 2015. Maybe I need to look at the projection aspect next to make sure it is working as I expect too. -- jim

But that not only includes stat decay. It also does some bin smoothing. Maybe that's where you gain the points? You do any bin smoothing elsewhere? -- PEZ

Congrats on reaching 2022 points! You should try rolling back your movement to version 0.59 together with this fixed gun. -- PEZ

  • I did roll everything back to .59 to see how it would do. Now I can go forward. -- jim

Yeah, 10 more points may be gained that way. Congrats from me too! I'm curious how your fixed gun would score in the RRGunChallenge. --Vic

For anyone who was following along during the gun talk for this bot, it appears that advancing and retreating velocity was indeed more important than I originally thought. -- jim

How much more important? -- PEZ

2.5 points in the TargetingChallenge. My gun was operating at about %89 pre gun fix. It is operating at about %91.5 post gun fix. Strange as I did not think it would make that much difference. -- jim

I didn't realize you answered the question and decided to answer it myself. Helps my gun a LOT in the TargetingChallenge 500! Running a TC35 now to see if it might also be worth it in the Rumble. (Well, I'm also trying it in the rumble at the same time. Doesn't seem to lose me points so far. But at 165 battles it's way too early to tell...). -- PEZ

And. Big thanks for sharing this! Tiny change. Big difference. I like. -- PEZ

Of course it improves everyone's gun some and does not answer why *my* gun was shooting at 89%. So once again I will have the worst stinking gun in the business. Sigh. -- jim

Also, now you need to return the favor and provide me with a +1.5 point gun fix ;-) -- jim

How about you try carbon copy the segmentations I use in CC? That might tell you if it's in segmentation or elsewhere that your gun needs attention. -- PEZ

73% against Aristocles? Man, I must try that with CC. Sounds like your surfing must be working great! -- PEZ

  • I like testing against Aristocles as it does not save data and it has a pretty good gun. Right now I am trying to see if I can get the RollingAverages right or I will abandon them for AndrewsCoolWay again. -- jim

Ain´t surfing cool? Congratulations! Aloha! -- Axe

I have had surfing working, then broke it, the fixed it, then borke it. My problem is that I do not like to make small changes and then release. I like to make big changes. Then wonder what the heck went wrong. I have to change this model. -- jim

"Can you believe I still hit the walls?" Try this:

setMaxVelocity(150.0 / getTurnRemaining());

Combine that with a large enough wall margin and you should be fine. For example, use 150.0 / getTurnRemaining() and don't pick destination points that are within 25 pixels of the walls. Using a higher number than 150 will prevent you from slowing down so much when you turn, but will require a larger wall margin to ensure that you don't hit walls. --David Alves

But this is a risky business for a WaveSurfer unless you also build it into your movement predictor. CassiusClay too hit walls at times. I think it is my WallSmoothing algo that don't take into account that it takes quite a while to reverse direction. Jim, check if maybe DH has decided to reverse direction just before it hits the wall and see if you share the same glitch. -- PEZ

So build it into your movement predictor. ;-) --David Alves

Nah. It's complicated enough as it is. -- PEZ

Right now I am testing all of my "improvements" from the .70 line. It seems that for the most part they were anything but. Once I am done with that I will move on to new things. One of the first orders of business will be to protect myself from firing enemy waves when they collide woth the wall. I am not sure how to work that out though. -- jim


November 2 2004 (CET) - Welcome back man. I've missed ya! -- PEZ

Lets see how I feel in a week. I was pretty burned out. This version will finally beat DT over 500 rounds. It is the only test I ran too. -- jim

So much for me having the top US bot. :-( Oh well. Congrats! --David Alves

Thanks. It was really just old code. Nothing new. Some small bug fixes. Still plenty of room between my score and infinity for you to slip into ;-) -- jim

Cool man, welcome back. ;] -- iiley


Pulsar is waking us all up. Isn't he? =) You found 10 points there. Good work. -- PEZ

I would not read too much into it. I just had the day off work due to a snow storm in the region. Like I said last time, lets see how I feel in a week. -- jim

How do you weight your visit stats compared to hit stats? Do you roll the stats? How fast? I find it interesting that you gain lots of points by segmentation of the visit stats while I lose a few... -- PEZ

Hey PEZ. I segment my stats like this:

hits[accelIndex][outIndex][(int)Math.round(myLatVel)/3][distIndex] fastHitsBuf[0][0][0]

The distance index is 5 buckets of 180 pixels, the out index is 5 buckets of 45 pixels. I am currently using 29 GuessFactors. I got a 6 point boost going from 41 to 29. I roll the stats using AndrewsCoolWay. My gun stats and my movement stats are indentical in most ways. My gun stats have more segments (a closingIndex and a timeIndex) and are not rolled. I have tried not rolling my movement stats but after about 15 or so turns I seem to get stuck between some local maxima and oscilate in place. As you are well aware, thats not so good =^> -- jim

Cool. And how (if) do you weigh the visit stats? Mine has weight 45. Unsegmented hit stats has weight 50 and most segmented hit stats weighs 100. I roll my movement stats using Paul's RollingAverage. -- PEZ