Diamond
Jump to navigation
Jump to search
Diamond | |
Full Size | |
Author(s) | Voidious |
Extends | AdvancedRobot |
Targeting | DC-Displacement Targeting |
Movement | Minimum Risk Movement, DC-Wave Surfing |
Current Version | 1.262 |
Code License | RWPCL |
Download |
- Sub-pages:
- Version History - Code
Background Information
- What's special about it?
|
- How competitive is it?
- Quite competitive - currently #4 in 1v1 and #4 in Melee.
Strategy
- How does it move?
- It uses a Minimum Risk Movement, evaluating a bunch of points around itself and choosing the "safest" (least bad / most good) one. I'm still (endlessly, perhaps) tweaking the parameters, but some of the elements are:
- Considers points in a (randomized radius) circle around itself.
- Stay far away from other bots, weighted by their energy.
- Stay perpendicular to other bots.
- Don't be the closest bot to any other bots (avoid being targeted).
- Some randomizing based on past locations.
- In 1v1, it uses Wave Surfing (algorithm derived from Dookious) with Dynamic Clustering for data analysis.
- How does it fire?
- The gun uses Dynamic Clustering for data analysis - i.e., k-nearest neighbors to find similar states, and kernel density among those states to settle on a firing angle. It uses displacement vectors for recording and reconstructing firing angles. It fires a wave for each scan and records the vector the enemy traveled along (interpolating missed scans, if necessary), relative to his initial heading and divided by bullet ticks. To reconstruct a firing angle, it applies one of these vectors to the enemy's current location, heading, and distance (bullet ticks). I thought this made more sense for Melee than GuessFactors, and it's a lot simpler and more efficient than real play-it-forward.
- How does the melee strategy differ from one-on-one strategy?
- It switches to a Wave Surfing movement in 1v1 scenarios and switches to a different set of weights in the gun.
- How does it select a target to attack/avoid in melee?
- A combination of energy and distance, with a slight bias to the current enemy.
- What does it save between rounds and matches?
- Nothing between matches. Between rounds, it saves all its targeting and movement data, which includes general info about each enemy, a bunch of kd-trees, and maps of the trees' data points to displacement vectors (gun) and GuessFactors (movement).
Additional Information
- Where did you get the name?
- Diamond is the ex-superhero name of the main character in Powers, my favorite comic book series. That's how it initially occurred to me, as I like to name all my bots after warriors of some sort. But I'd be lying if I said I didn't think it just sounded cool.
- Can I use your code?
- Yes, it's released under the RWPCL.
- What's next for your robot?
- An honest attempt at claiming the Melee throne. =) I'm going to try not to let myself get too distracted with the 1v1 performance or the gun, but we'll see what happens.
- Does it have any White Whales?
- Shadow, of course. I can't believe how fricken amazing that bot is in Melee.
- What other robot(s) is it based on?
- For the most part, I tried to start with a clean slate on this one. But I did cull some ideas from the wiki and some code from some of my other bots, so I'll just run down a list of credits.
- BrokenSword - General guidance on various things, especially the minimum risk movement and bullet power management.
- Dookious - Diamond is using a slightly stripped down version of the Wave Surfing from Dookious, along with a variety of utility functions, including precise prediction code (itself based on Albert's FuturePosition).
- Lukious - The tiniest bit of kernel density code and general guidance on scan distancing.
- HawkOnFire - I never did peek at the code, but it deserves a nod just for the wisdom rozu shared about minimum risk movement via this bot.
- Corbos, Simonton - Corbos for the idea to use a kd-tree to speed up our DC guns, Simonton for the idea of the (much faster for my purposes) bucket variant.