Hello! I found this while looking around on the internet! It's so cool! Even though I'm only 13, I'm a pretty good at Java and really good at Python.
Currently I am working on a robot called DodgeBot. It's named that because it was originally intended to dodge bullets. I'm going to rename it when I think it's finished. He has a superb movement system that dodges many, many bullets. It gets 75% against N, which I'm very proud of =) It is totally a one on one robot, and it's movement is stimulated by it's target shooting, which works because enemies usually shoot a lot XD
DodgeBot has superb movement. I like it a lot. It's simple too! However, the code in my opinion is a little on the long side (I'm not good at making code shorter) and it's gun isn't that good. It never loses a lock once it's found a target! Note that although DodgeBot does okay in melee, it is strictly a one-on-one robot. I have discovered that many of my one-on-one bots do VERY well in melee too...
NEWS: I've finished! Check it out at the Fission page.
Anyway, I'm also working on my first NanoBot, and man, it's hard! You have to seriously cut back on code. It takes many sacrifices. However, my new bot, Elite, is doing fine. In a hundred rounds it gets 70% against N, and a startling 64% against PulsarNano, 22nd in the overall world rankings. Elite seems to be very competitive. I also made it on my own; didn't take any code or ideas from anyone else. I was just bored in study hall XD He also gets 51% on NanoSatan.
Targeting Using Trees
I've had an interesting targeting idea using trees. There would be one universal starting point, the stump, at the base of a "tree" of movement. Say at the beginning of a battle the enemy bot acts like MyFirstBot, and move forward, stops, moves back, and stops. Each branch on the tree would have what the robot did and how many times it's done that. If the robot does this sequence again, it'd search through the tree and say, "Oh! This looks like 'move forward, stop, move back, stop'!" and aim where it'd be in that sequence by the time the bullet would get there. If it worked, add to the number of times that sequence has happened. If it didn't, create a new branch that has what the bot really did. Let's just say it works the second time. The tree would look like:
Of course you can see there's no branches, it's just one long sequence. Say next time, the enemy tries to trick the robot by moving slightly differently once, and then switching back to the original movement. It would start out using the original movement; it moves forward, stops, but then, it turns and moves back, changing the variable T, turn rate, and stops! It would mess up the first time doing the original movement pattern, but then once it switches back he'd be hit by bullets again immediately. Because the original movement had more #, it was used. This doesn't mean the new movement pattern was ignored; another branch was created for it, it's just its # was smaller. # could be more statistical, (maybe the hit percentage when this sequence is used) you could add more things to consider in the tree, such as distance, just like segmentation! Unfortunately, unless # decreased over time, like data decay, and when it gets to 0 it disappears, the number of branches would increase exponentially. Anyway, to me it seems like Pattern Matching, but you take in multiple factors into your decision making and pattern recognizing, which may, or may not, make it more accurate. I just came up with this. The idea was inspired by three things:
- I've been curious if it was possible to do Guess Factor Targeting with the results of a Pattern Matcher as some of the segmentation.
- I've been working with trees, searches, and optimization in my compression program.
- I simple combined these two ideas while daydreaming about random stuff. My mind drifted to Robocode, then my compression program, and then I started thinking about them both, and... BAM! It hit me. Literally. I got the idea while tripping. My jaw hit a wooden arm rest in my school auditorium and it hurt a lot. But I came up with a new idea! =D
I have made a few lists that record enemy data for the past 50 ticks, and I have made a TreeNode class to build the tree with. I have a bunch of numbers to record and I've built a searcher. You give it some data to search for, and it searches the whole tree (Well, if you search using the root node) for a match. If it finds more than one match, it uses the one that occurs most. It's very primitive though. It doesn't so far use its parent node, looking to see if movement history matches it. It needs a bunch of optimizing. Also, by the way Nat, I found out that my tree idea is totally different than LambDaBot's tree idea. Mine searches through a tree of movement, looking for matches and using that to predict it's movement, while LambDaBot uses trees to look through possible movement options, and finding long strings of moves (one move is one tick) and rating them by a "successfullness" rating, like how much of an advantage his position, bearing, and velocity will have in that position, like chess.
Recently I have been working on my first really complicated bot. I'm using trigonometry and having to invent my own formulas. It's really hard because I'm only in seventh grade! However, my bullet simulators and predictors are doing fine.