Of course I don't mind. But I guess you will have to resist the temptation to tune the gun to get an accurate answer on how your movement measures up. =) -- PEZ
You that are stepping into WaveSurfing, iŽll recomend that u use first HeadOnTargeting bots (like HawkOnFire or NanoStalker) to test your WaveSurfing. A good WaveSurfing should be able to defeat these simple targeting bots by 99%, that was my primary goal when i started (and it helped a lot). Most of the points that WaveSurfers get come from simple targeters like HeadOn? or linear. A good advice also, is to use RobocodeGLV014 (if u arenŽt yet) to graph your waves & bins, WaveSurfing is a nest of huge potential bugs (at least for me is). -- Axe
Nest of bugs? Bugs in wave surfing? Naaah, never even heard about it... eahm right. Only problem I see when you get the wave surfing working against head on targeting is that, not too rarely, you don't allow the enemy bot even a single point, meaning the result is not accepted :) Good luck! -- Pulsar
Ok, i've loving this:
cx.Lacrimas_1.36 54.7 1 25-5-2004:20:50 26.7 28.0that's the new version with changed adpatation speed, and a few bits and bots tweaked. Although its no world beater, the victory over lacrimas is enough to put a smile on my face.. --Brainfade
In fact no, screw Lacrimas (nothing personal iiley) but this just blows my mind:
pe.SandboxDT_3.02 51.6 1 25-5-2004:21:6 28.5 23.1I know that when DT has another crack with saved data i'll get creamed, but until i'll have an extremely smug lookign grin on my face...--Brainfade
public int getBackwardsReachable(double time) { //Works out the bearing difference from when the wave was fired double bearingDiff = robocode.util.Utils.normalRelativeAngle(absoluteBearing(surfing.here, this) - surfing.enemyBearing); //Works out my lateral velocity compared to the direction i was going when the wave was fired double myVelocity = surfing.direction * lateralVelocity; //Loop through all the possible times for(int i=0; i<time; i++) { //Increase the velocity to account for acceleration if(myVelocity == 1) myVelocity = 2; myVelocity += (myVelocity>0?-2:-1); myVelocity = Math.max(-8, myVelocity); //Work out the bearing difference for this lateral velocity for the current tick bearingDiff += surfing.direction*myVelocity/(this.distance(surfing.here)); } //Return index corresponding the most backwardly reachable guess factor return Math.max(0,Math.min(12+(int)((surfing.direction*bearingDiff/surfing.maxAngle)*12),12)); }
Anything there look wrong to anyone?? --Brainfade
Ummm, I don't quite follow the velocity trickery there, but it might be right. In my experience it's not necessary though. A rough estimate on how far you can travel works quite good too. But what's more important is the "time" variable you call this method with. I would remove that and instead iterate the wave forward together with the bot in the loop there and then the exit condition would be when the wave hits your iterated bot position. -- PEZ
Yeah, The velocity code tries to find the precise distance i can move forward in the time before the wave hits. It seems to be marginally better than a guess, so i just left it in there. Iterating the wave forward is on my todo list. But it requires me to drastically change my movement code, so i thought id see if i could score some cheap points by throwing in some random elements. The current version favours guess factors that give it the same lateral direction as the enemy has to it, and also tries to throw in some randomness to fool PatternMatchers?. Failed miserably though. Looks like pure surfing is a better way forward... --Brainfade
Pure surfing is a better start at least, I think. It delivers a sure answer for when you have gotten it to works. There are so many little and big bugs you can have in a surfer. When those are out and pure surfing is working you can go back and see where you can try fool those PM guns and stuff. -- PEZ
Haven't checked the source. But your surfing is cleary broken. Watch Fallen against DevilFISH and you'll see it. Even though DF keeps hitting at GF1 over and over again, Fallen keeps driving in the same direction all the time. Maybe it is some code you have there that's supposed to make you avoid close combat that causes it? If so try removing any such code. -- PEZ
I reverted to an old version of the code and made some changes and it seems to be working much better now. I'm currently going through a last process of tweaking my raw movement. What kind of rating should i be looking for when using unsegmented statistics?? --Brainfade
Good question. I guess you can get somewhere around 1900 with that. Wait, that's what you have, in'it? =) Seriously, throw in distance and velocity segemantations and you'll boost your rating quite a few points I think. -- PEZ
Ok, here's the final version without any segmentation, and the first release i've ever done that's been extensively tested. Change the wall bouncing threshold, so now it rarely bounces. Also changed the learning speed significantly. i was previously using a rolling average of the last 3 hits, i'm not using 15. let's see if testing pays off...--Brainfade
Interesting. I'm using the last 2 hits. -- PEZ
Well, from my tests it seems to be that higher numbers work better against the whole range of opponents. I can't guarantee it'll work for you, but when your ranking has stabilized, pick a number between 15 and 20 (it made little difference in my tests and try it). The tests were over 250 rounds, but at the end of the day if it's taking a long time to get hit 15 times, then you really didnt ought to worry about it :) --Brainfade
I'll try it. Definately. Thanks! -- PEZ
Trying it now. With CC 1.8.9.3. I don't expect it to work the same magic it does for Fallen though. Since you are using unsegmented stats there and are more vulnerable for contamination than I am. -- PEZ
Lost 10 points. Now I'll try going to the other extreme and roll the data as fast as can be done with rolling averages. -- PEZ