Last year I worked on Ender but abandoned it because I no longer believed in its design.
In Ender's later stages I was developing a new gun concept called ZoomTargeting. It proved interesting, but had unacceptably high memory consumption. However I learned a lot from this gun. Most notably it made me realize the importance of Segmentation. This inspired me to design yet another new gun concept which features DynamicSegmentation?. The gun has been baptized SelfOrganizingObservationLog? gun, or SOOL? gun. When I get it to perform as well as I expect it to, I'll write a detailed description of the concept. When anyone is interested, the gun is featured in my latest bot Locke, which is OpenSource. --Vic
btw, the names of my bots are all characters from the book "Ender's Game", by Orson Scott Card. This book is a true classic, and I highly recommend it.
When I saw the name 'Ender' I wondered about the Wiggen (or is it Wiggin?) connection - I agree the Ender series are good - as are most of Orson Scott Card's books. I can also recommend all of the Iain M Banks books (the S.F books he writes have the M initial in the authors name - his others (also good) are witten under the name Iain Banks). -- Paul Evans
It's Wiggin :-) I haven't read Iain (M) Banks yet. What is his best book in your opinion? -- Vic
All of them, It is probably best to read them in order of publication (but on the whole the plots are self contained). Most of his novels are formed in the world/universe of the 'Culture' which I like best - the first of which is 'Consider Philebas'. Be warned however, some of his novels are dark and a litte gruesome in places. My favorite is 'Excession' -- Paul Evans
Hi all, I'm back from my vacation. It's been good! I have been able to relax completely in the Toscana region of Italy. 30 degrees celcius on average, fresh air all day, and no worries at all. After a week or so, I started thinking with a fresh mind about my next robocoding steps. And I was on a roll :-)
First of all I thought through my new movement algorithm, and concluded it was crap :=) I had the idea of using my own gun to predict where the enemy would fire, contrary to using a low segmentation GF array like you wavesurfers do. Then I would fire one or more virtual bullets in the most likely direction(s). So at each possible moment there are several virtual enemy bullets in the air. Using a pathfinding algorithm I would navigate around these bullets. My goal with this was to improve on the WaveSurfing principle and I concluded this idea of mine was not going to do that at all.
Instead I have now come up with a new strategy which -I must admit- resembles WaveSurfing much more. But maybe I will be able to improve some aspects: My new movement will consider all enemy bullets currently in the air, by using a pathfinding algorithm, and not just the closest (or let the closest weigh in more). It will also consider a wider range of enemy guns, ranging from little segmented guns to high segmented ones.
Of course this is currently only on paper, and these lines are no more then just cheap hyping ;-) But I do plan on implementing it in the coming weeks/months.
Secondly I've been thinking through my ideas on Dynamic Segmentation using a tree structure. I think I may have succeeded in solving all of the problems that I saw in this manner of targeting. The results are two new gun designs: a "simple" tree gun and a "serialized" tree gun with data prepopulation. The first one will be fun to make, but I'm not expecting it to perform very spectacular. The second one I do expect to perform really well. To be honest, I expect to take the best gun crown with that one =) If you find this an arrogant statement then I must of course agree with you ;-) Except of course if I actually manage to do it... :-)
So here's my to do list for the next few months:
I'm in the middle of implementing my design for a pathfinding WaveSurfing movement. And I must send great respect to all RoboCoders who have successfully built a WaveSurfing movement. It's very, very hard. Maybe it's because this is my first attempt at creating a serious movement scheme, but I find targeting much, much easier to deal with. Respect to all you WaveSurfers! --Vic
It is not WaveSurfing if your head does not hurt just thinking about it. It is not WaveSurfing if you get it right and know it is right. It is not WaveSurfing if you do not finally get it right only to break it because you thought you understood why it was right in the first place. WaveSuffering is easily the hardest Robocode related thing I have ever done. I have had it, then lost it, then rediscovered, to lose it again. I would highly recommend you use some sort of revision contol, only work on one thing at a time (the tennant that I break over and over), and try to release small changes. If you do not hate Robocode at least once while you are working it out you are probably not doing it right. -- jim
Hey you two! Don't scare people away from WaveSurfing. =) Jim's advice are really valid though. Small releases is good. Another thing to remember is not to trust the WaveSurfingChallenge too much. Sure, it can help you find bugs. But it can also mask bugs since the shooting bot is stationary. -- PEZ
Welcome to the "Triumviratum"! Good inventor hat that u are wearing! Congratulations... -- Axe
Thanx! I feel good :-) @jim: sound advice! another one: write unit tests. But to be honest, since halfway the development of Locke I stopped writing them myself. It reminded me too much of real work ;-) --Vic
Vic, I have lent your flag. Hope you don't mind. --GrubbmGait
Off course not, feel free. :-) Vic
Hoi Vic, still actively working on your pathfinding WaveSurfing? I am working on my own WaveSurfing implementation right now and recognise your complaint ("verzuchting"). It's hard. I finally think my algoritm is right, and now try to get rid of all the NullPointerExceptions? and ArrayIndexOutofBoundsException? which occur to often... Anyway, succes! --Loki
Welcome to the club, Loki. To be honest, I've been a little busy with work so I haven't had much time for robocoding lately. At this point Bean is actually surfing waves, but not very well yet. I've eliminated all Exceptions, but its surfing behaviour is not what I expected. Back to the drawing board for me ..... Succes to you too :-) --Vic
It's my experience that getting rid of exceptions and array indexing errors and such are the small problems when WaveSurfing. Successful surfing is about paying attention to details. Thinking through the what, when and hows. Try to make abstractions for things like current_lateral_direction and back_as_front and other things that I don't recall right now... Make sure you use the same abstractions everywhere in your code. Think through in what order things are executed, and when possible, try to take control of that order. Make use of RobocodeGL, the debug window and whatever debug utilities you have. Assert! Never assume. All things wrong I found with my surfing during its development has been about assumptions that doesn't hold. Keep it simple in the beginning. Question every little special case you have. Remove most of them and replace them with tought-trough generalistics. Only consider special cases for this or that when you are certain your surfing works. Those special cases are common and unecessary sources for bugs. -- PEZ