Difference between revisions of "DeBroglie"
m (link fix) |
m (subpages + roadmap) |
||
Line 1: | Line 1: | ||
− | + | {{Navbox small | |
− | + | | title = Sub-pages | |
− | + | | page1 = Version History | |
+ | | page2 = Roadmap | ||
+ | | page3 = Archived Talk 2010 | ||
+ | }} | ||
{{Infobox Robot | {{Infobox Robot | ||
| name = [[deBroglie]] | | name = [[deBroglie]] |
Revision as of 14:18, 23 May 2012
- Sub-pages:
- Version History - Roadmap - Archived Talk 2010
deBroglie | |
Louis de Broglie, winner of the 1929 Nobel Prize for Physics | |
Author(s) | Tkiesel |
Extends | AdvancedRobot |
Targeting | Dynamic Clustering with precise intersection |
Movement | Random Movement |
Best Rating | 274th (not updating until movement is written by me) |
Current Version | rev0024 |
Code License | RWPCL |
Contents
Name
This is my first wave surfing bot, and I'm a physicist by training, so it's named in honor of Louis de Broglie, who discovered that matter has wavelike properties. This was a foundational discovery in Quantum Mechanics. In 1929 de Broglie received the first ever Nobel Prize given to work done as a student thesis.
In honor of the namesake, all data collection is done in the form of waves. Waves emanate from the bot for targeting data, and from the enemy for movement data.
This bot is very much a work in progress.
Design
Goals
I wanted to gather waves to use as targeting information, both incoming waves from the enemy for movement, but also outgoing waves from DeBroglie for targeting. I wanted to reuse as little code as possible, so I've been working on implementing the wave system in as modular a way as possible.
Universe
The bot has a Universe object which contains all elements of its picture of the battlefield, including two Bot objects, one for itself, and one for the enemy. The Bots are updated on every scan.
Information is gathered in a kD tree. The Universe feeds information to the Wheels, and Gun which are movement, and targeting respectively.
Segmentation
After a lot of annoying code digging every time I wanted to try a different way of segmenting/dimensioning my gathered data, I decided to put all of that code into a single static class. All data segmenting about the current situation of the Bots is done via the Segmentation class.
Gun
The gun uses precise prediction to gather angles that would have hit the enemy from each wave. Those angles are saved in the kD tree. To shoot, a histogram is generated from the k nearest situations, and the target is chosen from the histogram. This means that DeBroglie doesn't use fixed bins at all.
DeBroglie uses an escape angle calculation that's somewhere between the naive version and the more precise calculation.
Wheels (Placeholder Movement)
The movement right now is PEZ's Aristocles movement, until I finish writing the targeting and move on to defense. I chose Aristocles because my other degree is in Philosophy, and it was a mini/micro open source movement that uses waves. It would be against the spirit of this bot to use a movement that lacked waves, even as a placeholder.
Eyes
A turn multiplier lock radar with a factor of 1.95.
Code
License
This bot's code (messy a state as it's in right now) is available under the RoboWiki Public Code License (RWPC) - Version 1.1 or any later version.
Credits
All code written by others is under the RWPC or a more permissive license.
- The kD tree is written by Rednaxela and is available on this wiki. License: as-is with attribution.
- The FastTrig lookup table and methods are written by a host of amazing folks at this wiki, starting with Rednaxela, but including other great Robocode luminaries.
- Parts of the precise prediction are accomplished with the help of code originally by Paul Bourke, adapted by REAS @ OpenProcessing.org and further adapted by me. This code determines if a line segment and a circle intersect. License: CC-by-sa 3.0
- The test-bed is Aristocles by PEZ. The code is under the RWPCL.