This page contains news updates, because I didn't want them clogging up my main page.
This will be one of Fractal's last news updates. I've decided that I'm pretty much going to stop working on Fractal, and start up a new bot. Much of Fractal's code is half complete, and so its code is covered in bandages and workarounds for pieces of code I never got around to finishing. It makes it very difficult to read, and even more difficult to write and tweak. My new bot will reuse a lot of the code from Fractal, but it's going to be built much better from the ground up. However, before I do start it, jim has convinced me to start over SineSweep and get it working again. I'm going to tweak a couple more things in Fractal, and then release it soon (without MoOOo) as a final version.
Okay. Been working on Fractal on and off the past couple days. Uploaded new version, 0.55. Interestingly enough, the new version of MoOOo dropped another 4 places, again. Fractal went up, but only because I fixed that very large movement bug that had been haunting it since 0.32. I've looked into an algorithm for deciding firepower, and I think I'll settle on just using power 2 bullets instead of power 3. Meanwhile I'm going to rewrite some of its reliability factoring to try to take into account the relative height of the graph peak in an attempt to get its Fast Learning score above 85%. Whether or not I manage to improve it, I'm going to take some time to fix ModdedBot, because that infinite recursivity bug has been 'bugging' me... (pun!)
Argg... After all that work on prioritization and reliability, MoOOo always seems to perform best when I turn it off and just use the minimum data comparisons. I think it just needs tweaking, because it should be so much more powerful than that. Anyway, to keep my sanity up and to prevent myself from going insane, I took a break and wrote a nice new cocky victory dance for Fractal. Man, does it look cool. It stops dead, and swings its radar back and forth once in the form of a sine wave... It's awesome. Looks best with RobocodeGLV014, because it's so so smooth. It keeps my spirits up in all these hours of tweaking :D. Anyway, it's 6 am, and I have class in 3.5 hours. Maybe I should go to bed...
I've mostly built the graphing prioritization and reliability functions, and spent hours debugging it and tweaking it; it's starting to take shape nicely. I'm finally getting the fast learning times that AutomatedSegmentation was originally designed for. For those who don't have RobocodeGLV014, I figured I should post a screenshot of what it looks like.
I also forgot to mention that I removed Fractal's curve to make it run much faster; there's no point in it plotting its own movement if it doesn't use it. The scores shown are what are generated from its Score class (see Fractal/Calculating Score). After only 18 rounds, it has quite an advantage over Tron; the way it's configured now, they eventually balance out to be about even after about 100 rounds or so, but MoOOo always starts out with a big score advantage over most bots in the first few dozen rounds of the battle. This just goes to show how fast its gun learns the enemy's movement. The gun is set up so that I can tweak all sorts of parameters for the value of data, as well as the value of the individual axis (for example, segmentation on time traveling in the same direction is more reliable than segmentation on lateral acceleration (while segmentation on both at once is the product of the two)). This has loads of room for tweaking, but I'm afraid to play around in there without having much more information on what's going on. I figure I may as well build a graphing function out of it so that I have some basis for comparing the value of the axis, as well as providing a useful new tool for everyone currently in the Movement Laboratory. After that I can start tweaking the axis reliabilities.
Okay. I've been working the past few days straight in the Targeting Laboratory trying to get Fractal's gun up to speed. I rewrote its binning to be much less coarse, and rebuilt some of 0.32's curve smoothing into the new Fractal, but with a gaussian smoothing rather than quadratic with a total-based deviation function. I also just came up with a new way to weight its curve selection using prioritized axis; I'll be building that now to see if it will improve its performance. If this works, I'll try writing a peak-based prioritization function. Hopefully the repository will be back soon!
AHA! I just figured out the major bug that's been plaguing Fractal's movement. In creating Fractal's new gun, while porting the wave-handlers, the data locations holding the rolling average bullet power of the enemy and that of itself somehow got swapped. This means that rather than curve flattening to the enemy's bullet power, it was flattening always to power 3 bullets. This had no effect on other bots that also shoot power 3 (which explains why the new Fractal could tear the old one to shreds), but to any bots that don't always shoot power 3, it would create a massive spike in its forward movement and subsequently die a horrible horrible death. This has now been fixed, so I should see a much better ranking once the repository comes back online.
Anyway, I also rebuilt its Multiple Choice graph summing algorithm to make it independent of the amount of data gathered in the graph. It learns quite fast now, and I am very impressed by its performance. I tweaked the segmentation axis to basically all-around thin out the number of bins; it now segments across 3 bins for lateral velocity, 3 bins for acceleration, and 3 bins for wall nearness, rather than the old 6/6/6. The other axis were also slightly modified as well (including an increase on the distance segmentation), and a more coarse angle division is now used. This improves its learning time without much loss in precision. I think it now gets around 86% or so in the targeting challenge, so I am impressed by what I've finally managed to accomplish with its gun. I was planning on restarting its movement at this point, but since I've finally caught the bug in its gun, I'm tempted to keep working on it and improving it.
I also added a nice little scoring feature; basically the same thing Cake had (console score printing), but it also displays it on the HUD. I was always so annoyed at having to pause to read the scores in mid-battle because the bots would move around so fast; it's much more convenient to have it static on the HUD. The scores it calculates aren't perfect, but they are a good approximation. Once the new version comes out (when the repository comes back), if you have RobocodeGLV014 turn on its GL drawing to see it.
Crappily enough, the new version of Fractal dropped 10 places. I think I inadvertently added a bug in its movement, because it's functioning very poorly. I tried to improve a few bugs, and I tried also to improve the gun, but it seems like everything I do only makes it worse. However, I isolated all of Fractal's code into a modular configurable engine; this means I can have multiple versions (modes) of Fractal running the same framework. I'm releasing the new version (0.48) with Fractal, FractalTC (targeting challenge), FractalMC (movement challenge), and MoOOo (Cigaret movement) in the same package. I find this a really good alternative to .properties files, because people never have to worry about what settings the robot is on; they just choose the one they want. This way I can make it also come packaged with versions for CoopRobot, FreezeMod, PowerUpMod, DeathMatch, and anything else I'd like the robot to be configured for. I'm also adding MoOOo to the rumble for a day or so, just to get a feel of how good its gun is doing in real combat. By tomorrow night I should also have Fractal's targeting challenge results.
- AutomatedSegmentation gun framework: 90% built
- SegmentedData/Segments: 60% built
Quick and dirty release of Fractal. I just figured out a rather large flaw in its new gun, but since I won't have time to work on it for the next couple days I released a test version to see what I have so far. As such I haven't included the version with Cigaret movement in this package (actually, if you look real hard, it's there... hidden...) So yeah. 0.45 tears 0.32 to shreds anyway, so it should improve its ranking some; I'm not expecting more than 10 places up, because its movement is still really crappy, but I'm anxious to see what happens.
- AutomatedSegmentation gun framework: 80% built
- SegmentedData/Segments: 40% built
Hmm... After watching endless (upon endless) rounds of the development version of Fractal, many against version 0.32, I think I've come to the conclusion that its gun is somewhat better (even though it's barely complete), but I introduced some sort of bug into its movement. It's movement is a tad more erratic around walls, and it crashes into them sometimes (as opposed to never). This just about evens out, as it generally ties with 0.32. Once I complete the gun, it should be able to tear 0.32 to pieces even with its buggy movement, but what I'll do instead is leave to gun as it is now to weed out the movement bug so that I can tell once it's fixed by whether or not it wins. Meanwhile, I've created a new segmentation axis. The modularity of its AutomatedSegmentation gun is incredible; the new axis took about 4 lines of code, and I plugged it in, and it just, worked. 4 lines. Awesome stuff. I have 2, maybe 3 more axis to design, and a rather large part of the gun to complete and tweak; after that I can release a new version.
- AutomatedSegmentation gun framework: 80% built
- SegmentedData/Segments: 20% built
Success! So far, I've got everything done but the segmenting selection; this part is only about half done, and although not hard to get working, it will be hard to tweak. I've currently hotwired the segmenting selection to always pick distance, so it should behave exactly as the old bot, but without any bin smoothing and lower resolution, and hazaa, it beats Fractal 0.32 with about 55% score! I just have to close off the methods for segmenting selection, and then I can start building segmentation axis. I've began pulling off the drawing board the final segments I'm putting into the first release of AutomatedSegmentation; I'm picking only the most promising, powerful, and proven segments to keep the overall dimensions low. I can just plug these in as I build them and watch Fractal's performance from there; after that it should be able to uncover any weakness in a robot's movement. Meanwhile, I've fixed some bugs in the AnalyticArray, and am halting its progress until I decide to put more than one gun in Fractal (since it's useless with only one gun), and I'm also currently not concerned with saving data until I get extremely powerful on its own. I want to make it good enough without data so it doesn't have that dependency later on. Anyway, I should have something to show soon after my midterms are over.
- AnalyticArray framework: 10% built
- AutomatedSegmentation gun framework: 50% built
- SegmentedData/Segments: 15% built
- SavingData: 0% built
Yay! Fractal compiles again. That's gotta be a step in the right direction. I've also re-implemented most of it's wave handling. Next I have to write the recursive function that scatters the bin data throughout its array. I also threw together a wiki version that uses iiley's movement, so that I have some basis for comparing the gun to other people's guns (other than the Targeting Challenge). When I get the gun up and running, I'll probably just release both in the same package and test them out on the RoboRumble to see how the gun places (and to give me a comparison of how badly I need to improve its movement!). Unfortunately I have 3 midterm exams this coming week, so I'll likely not be able to do much robocoding; I want to pass my physics exam this time. That means I'll have to study... urggg...
- AnalyticArray framework: 10% built
- AutomatedSegmentation gun framework: 30% built
- SegmentedData/Segments: 15% built
- SavingData: 0% built
In other words, progress is slow. I finally found some time today to work on it, and right now I'm prioritizing the gun (since the rest of the stuff can't work without it); so far I've built the main components of the gun framework and the recursive arbitrary-dimension data array creation. Now I have to re-integrate the wave handlers into the gun and make it iterate through the dimensions recursively to add a wave hit in all the proper bin locations. Then I have to figure out a way to make it use the data it gathers! Once that's done, it should perform about the same way it did before, because I've currently only built the Distance axis; after that, I can go nuts building segmentation axis and plugging them in, and watching Fractal's performance from there. Hopefully I'll have something to show within the next couple weeks.
Okay. I've been thinking like crazy lately for like the past month jotting notes down on every idea that popped into my head. I've basically compiled all these ideas a couple nights ago into a new 'gun' management system. It's a pretty interesting new concept, and I'm not entirely sure if it will be successful, but the idea is that it's a form of BestPSpace but with automated axis management and a much more analytic rather than statistical approach to peak blending and selection. If it works, I'll come up with a good name for it and post a big explanatory writeup on the RoboWiki. I'm basically going to trash everything I have on waves, graphs, and basically its entire gun, and start over from scratch. I know improving Fractal's movement is more probably important than improving its gun right now, but I've found several large flaws in its movement design, and it won't be possible to improve it without starting it over from scratch as well; and since I've got more ideas for new concepts in gunning than in movement right now, I think it'l be more fun to try something new with my gun rather than something everyone else has already done better with my movement. Anyway, I'm getting rid of most of Fractal's gun handling classes right now (don't worry, the source to 0.32 is backed up); here goes nothing... -- Vuen
I also forget to mention that I fixed several bugs, one of which is a NullPointerException (thrown in memory.go() if anyone has seen it in earlier versions). This bug shouldn't be there anymore; if you notice it let me know! I also added a scary victory dance (DT style); gotta love sitting still. New scary victory dance to come soon; I've wanted to do a victory dance way back in the day with SineSweep, but I'll add it into Fractal since SineSweep ceased to exist... Anyway, I posted something similar to this in RoboRumble/RankingChat; I can't believe Fractal jumped so many positions with so few changes. I haven't built any of the concepts that are supposed to bring out its real power yet; all I really did was tweak it's movement distancing to make it more survivable and less passive (while more predictable), and remove its bin decay. Here is the result I'm most proud of:
pe.SandboxDT_2.11 46.6 2 8-10-2003:21:39 32.5 14.1
-*grin* getting closer...
Fractal 0.32 released; I wanted to release a new tweaked version before I leave for thanksgiving (Canada) so I can feel like I accomplished something. No major changes, just a few tweaks that should improve it's all around performance. The changes in the past few news updates are now available. I made its movement much less passive; it's not very agressive, but it's not as passive any more. Added color! Fractal is now an ugly uniform orange. Hmph. I also rewrote the gl.txt file, so you can turn on and off the individual sections of Fractal's gl drawing functions as you like. I probably changed some other random stuff that I can't remember, so if I can't remember it's not important. Implementation of new ideas to begin when I come back from thanksgiving!
Heyhey. Made a few improvements to Fractal; changed the bin data decay to none (for now anyway... see my rant in Wave), and re-added it's patient little bulletdodge on round start. I've mostly been spending a lot of time lately just coming up with ideas; I have a huge list written down of all sorts of concepts to build and try in Fractal. However, I won't be able to try them any time soon. I just looked at some of the marks of my assignments online and got some pretty bad marks, so I need to catch up in my classes. Anyway, when I get a chance I'll post more news here.
I've been working on Fractal's movement a bit the past couple days to try to improve all the quirky problems it exibits, particularly those at close distances, to make it worthy of the MovementChallenge. I fixed the challenge mode detection; Fractal once again detects movement challenges. I also improved some of the bugs in its curve flattening. It no longer jams back and forth when it's close to the enemy. In fact it no longer tries to flatten its curve at all at close distances, but rather simply tries to flee; it starts flattening at about 300 and up. In any case when I get some free time I'll try to fix the swerving problem it has by adding some directional normalizers and heading preset calculators, which will be run on round start; this will also be a step forward in designing its melee movement because these will also be needed on target change. If I find some free time to fix this I'll see about releasing a new version. =)
New version, Fractal 0.3. Found a couple hours to create Fractal's curve-based gun. It's very basic right now and simply fires at the peak for the distance range, but it performs better against a lot of older bots. Let's see if its ranking increases in the RR@H =)
New version, Fractal 0.2. Fixed 2 crash bugs (thanks go to PEZ for radar bug), slightly tweaked movement, and created a graphing utility that plots the graph in full detail of the last opponent fought. It writes the data every round so that movement data can be graphed immediately. Check out the Grapher page to see screenshots and an explanation.
New version, Fractal 0.1. Fixed the rolled curve, but removed it from the HUD since it's not very useful to look at. Improved Fractal's movement; it should be much flatter than before now. Still using random fire. Try out Fractal 0.1's graphing utility to see if you like it (requires RobocodeGLV014); open its gl.txt file and change it to 1 for the graph. I'm planning a side applet to draw the real graph in full detail for a later version. Anyway, check out a scary graph of Rapture's movement: (try it yourself if you don't believe it)
Hey all. I rebuilt the structure of the movement system; I completely removed the movement manager, and built the components of the original movement directly onto the movement handler. This means that its movement is no longer pluggable (which is good), and that the one movement is used in all scenarios; this will allow me to code the various components to handle cases individually rather than a using global movement manager. I also rebuilt the curve generator; it now segments based on distance, which makes for some neat 3D graphs; the axis are angle horizontally -50<theta<50, and distance vertically 100<dis<890. The graphs are also drawn at a low resolution to not slow down the game too much.
You can see how Cake shows quite a spike on the positive at about 15 or so degrees at all near distances. Here's a graph of Fractal vs. SandboxDT:
This shows SandboxDT's slight tendency to move on the positive side and it shows a spike along Fractal's movement. Of course I still have to program Fractal to actually use this data... In any case, I'll rewrite Fractal's roll algorithm because the blue curves don't seem to be providing much useful data.
Hey all. I'm back. I just started university, and I'm taking a Java programming class, so that and the fact that Warcraft III doesn't work in residence got me hooked on Robocode again. I'll hopefully be putting a lot of time into Fractal soon enough to improve it again. -- Vuen
Yeah, bad news... I tried adding in the Flank angles to its stride roller, and it just seems to be getting worse and worse. I can't seem to come up with any good ideas for how to keep it safe and unpredictable in the arena. It can steer fine, curving the walls beautifully (I'm proud of it :D), but it doesn't know when to turn around. I think I'm not even gonna bother adding the Zoning into what I have; I think I'll upload what I have now so all the bots online can eat it alive, and then I'll scrap its roller entirely and go back to the drawing board. I have to come up with something far more intelligent in how it moves. This class is the heart of the survivability of the robot, and I can't get the darn thing to survive in the slightest; it can't pull off more than 10% in the Movement Challenge. Anyway, so I'll see about packaging this piece of junk, and then I'll brainstorm on some new ideas for a while. If I can't come up with anything by tomorrow-ish, maybe I'll start it's gun. That should give me time to think; I think maybe letting it sit for a while and coming back to it later should help me out. I also have to learn to keep these updates short....
- I can feel your pain Vuen. Currently i'm also struggling with movement and frankly i find it much harder than targeting. About your curves: are you segmenting these also for distance?..because that makes a big difference i think. You could test against iiley's StatistBot for that... -- Vic
- Heh you know what's funny, after all that, I packaged it and everything but I forgot to upload it. There it is now, the link is on the top. Also, the bottom curve is currently 'not' segmented for distance; it had originally seemed to me from the endless battles that I'd watched that most bots either factor their movement based on distance so that the curve looks the same at any distance, or they move a constant distance for each bullet fire. That's why the bottom curve is the 'independant' curve, in other words the standard curve not segmented for distance, and the top curve is the 'distance travelled' curve, which is simply the distance the bot travelled across the bullet's travel time, ranging from -560 to 560. There was some mathematical reason for why I chose 560, but I forget what it is now. In any case, it doesn't seem to work like I expected, so maybe I'll scrap the top curve and redo it the uncheapo way to segment it based on distance. I can't figure a way to use both curves together anyway. Meh. Also, I've been brainstorming some wierd and complicated ideas for curve flattening, and I'll see if I can first explain them to myself and then break them down into pseudo code to see how they work. The mathematics behind all this though is just nuts, and I think my brain realized it was summer vacation and just completely shut down because lately I have trouble jotting down simple little things like folding values together weighted geometrically, or building any kind of quadratic curves (currently all of Fractal's wall avoidance weighting is linear, which is the pits and makes it look drunk when it approaches the walls). Anyway, keeping these updates short is HARD! I'm finished now. :) -- Vuen
I've finished the two curve types with their rolling counterparts; once the first curve was finished the other three were a snap, so Fractal now learns (and draws) 8 curves as it fights. I've also started the hud class; so far it only shows the bots' names, but hopefully I'll start making it print some useful statistics soon (and I'll show some screenies). This is what the screen looks like as it fights (with gl waves off). This is obviously only after 21 rounds, so the curves are pretty jagged, but check it out. The blue curves are the rolled curves (what it will eventually use to shoot), and the red and green curves are the accumulated curves:
Meanwhile, I've started its movement system; I finally finished the wall angle flee crap thingy! YAY! Now it flees the enemy and slides along the walls almost as gracefully as SandboxDT does. No sticking, no crashing, and no cornering whatsoever. It doesn't have all the features I planned and some of them aren't as advanced since I lack a lot of the mathematical knowledge required, so it's not quite as fearless as SandboxDT when it comes to walls, but it'll do, at least for now; I can't make many changes there that'll improve Fractal without building other parts of its movement first. I've built a lot of the curve normalizer so it flattens 'fairly' well, but I haven't built any of its flank and zone factors. These aren't quite as important against real opponents, but it suffers horribly in the challenges (5.1% against PatternMatcherBot! *thumbsup*).
However, right now there seems to be a memory leak. I tried running 2000 rounds against StatistRobot and my poor puter got slower and slower; it managed to finish the 2000 rounds but I had to close down Robocode before the computer became usable again. Once I get that fixed and I finished, I'll see about uploading it. I CAN'T WAIT MUCH LONGER!!
I finally fixed Fractal's stupid curve angle bug. It can now do Virtual Bullets/Wave curves, but unlike most robots it calculates them for both itself and the enemy. That way it can see how its own curve is looking to figure out where to flatten it. What's more is with RobocodeGLV014, it can draw these curves to the screen as it builds them. Check it out: (old pic removed). The curves on the bottom left are the same curves you would see from StatistRobot, but the difference is that you can see them at runtime. The green curve is Fractal's movement, and the red curve is Rapture's movement; with multiple enemies, the curves all line up in columns along the bottom of the battlefield (I'm not sure how I'll use curves in melee yet, but we'll see.) These curves are for accumulated hits only (equivalent of the red curve on StatistRobot); I'll soon add the rolling curve (blue curve) either above these or simply drawn over top, which is what Fractal will use to fire. I also have some ideas on building a similar curve to show a gunning curve as well. I may also start its gunning system first instead of its movement, because I have a few ideas on how to best use these curves for gunning. I haven't started its gunning or movement system yet, so right now it's just running a simple direction randomizer thing. That's why it's showing a big spike on the positive. The curve also shows Rapture's high tendency to dodge :D. I suppose having some axis set up on these curves would be useful to show where zero is; I'll see about doing that. :) I'll also probably soon set up a type of HUD above the curves showing relevant data on both the enemy's behaviour and Fractal's behavior towards that enemy.