Hello! I found this while looking around on the internet! It's so cool! Even though I'm only 14, I'm a pretty good at Java and really good at Python.
NEWS: I have decided to make a tutorial on Virtual Bullets. I'll finish it soon, but I have a busy weekend.
NEWS: Before I came back, I created a NanoBot called Elite. It's melee oriented. After I came back, I made him into PwnBot, a 1-on-1 oriented version. They are similar. I'll post PwnBot in the repository soon; I'm almost done.
NEWS: I'm back! After lots of busy schoolcrap I've finally found the time again!
I've finished! Check it out at the Fission page. EDIT:Now that I look back, it's not that great, lol.
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 the enemy'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.
None so far.
I'm back! The TargetTree project is way too difficult for me. I'm going to postpone it for a while because I'm still learning the ropes. I'll continue work some day. Now that I think about it, the tree gun I've been making is a lot like a pattern matcher, but instead of just using only one section of movements to predict exactly where the robot would go if he did the exact same thing, it uses all of the movements. It follows the tree down until it finds a match, and, so far, it would select the branch that has occurred most. I might add things like rolling averages. I suppose it might be a combination of pattern matching and statistics. But this is way, way out of my league. I won't be able to finish this for at least a year.
I haven't been around for a while. I've been finishing my file compression program and making games. I might be back in a while, but I'm not done yet.
I have started on my targeting idea and made progress!
That bot, which was PwnBot, never worked out. I found there was nothing I could do with the bullet simulation. Still, I learned a lot and I may use the VirtualBullet class I made in the future.
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.