Difference between revisions of "Diamond"

From Robowiki
Jump to navigation Jump to search
m (update pic)
m (minor updates)
Line 6: Line 6:
 
| targeting      = [[Dynamic Clustering|DC]]-[[Displacement Targeting|Displacement Targeting]]
 
| targeting      = [[Dynamic Clustering|DC]]-[[Displacement Targeting|Displacement Targeting]]
 
| movement        = [[Minimum Risk Movement|Minimum Risk Movement]], [[Dynamic Clustering|DC]]-[[Wave Surfing|Wave Surfing]]
 
| movement        = [[Minimum Risk Movement|Minimum Risk Movement]], [[Dynamic Clustering|DC]]-[[Wave Surfing|Wave Surfing]]
| current_version = 1.284
+
| current_version = 1.31
 
| license        = [[RWPCL]]
 
| license        = [[RWPCL]]
| download_link  = http://www.dijitari.com/void/robocode/voidious.Diamond_1.284.jar
+
| download_link  = http://www.dijitari.com/void/robocode/voidious.Diamond_1.31.jar
 
| isOpenSource    = yes
 
| isOpenSource    = yes
 
| isMelee        = yes
 
| isMelee        = yes
Line 17: Line 17:
 
| page1        = Version History
 
| page1        = Version History
 
| page2        = Code
 
| page2        = Code
 +
| page3        = DiamondHawk
 
}}
 
}}
 
{{Youtube|dqHmp_kMz-U}}
 
{{Youtube|dqHmp_kMz-U}}
Line 31: Line 32:
  
 
; How competitive is it?
 
; How competitive is it?
: Quite competitive - currently #4 in 1v1 and #4 in Melee.
+
: Quite competitive - currently #4 in 1v1 and #2 in Melee.
  
 
== Strategy ==
 
== Strategy ==
  
; How does it [[Movement|move]]?
+
; How does it [[:Category:Movement|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:
 
: 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.
 
:* Considers points in a (randomized radius) circle around itself.
Line 44: Line 45:
 
: In 1v1, it uses [[Wave Surfing]] (algorithm derived from [[Dookious]]) with [[Dynamic Clustering]] for data analysis.
 
: In 1v1, it uses [[Wave Surfing]] (algorithm derived from [[Dookious]]) with [[Dynamic Clustering]] for data analysis.
  
; How does it [[Targeting|fire]]?
+
; How does it [[:Category:Targeting|fire]]?
 
: The gun uses Dynamic Clustering for data analysis - i.e., [http://en.wikipedia.org/wiki/K-nearest_neighbor_algorithm k-nearest neighbors] to find similar states, and [http://en.wikipedia.org/wiki/Kernel_density_estimation kernel density] among those states to settle on a firing angle. It uses [[Displacement Targeting|displacement vectors]] for recording and reconstructing firing angles. It fires a [[Waves|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 [[GuessFactor|GuessFactors]], and it's a lot simpler and more efficient than real play-it-forward.
 
: The gun uses Dynamic Clustering for data analysis - i.e., [http://en.wikipedia.org/wiki/K-nearest_neighbor_algorithm k-nearest neighbors] to find similar states, and [http://en.wikipedia.org/wiki/Kernel_density_estimation kernel density] among those states to settle on a firing angle. It uses [[Displacement Targeting|displacement vectors]] for recording and reconstructing firing angles. It fires a [[Waves|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 [[GuessFactor|GuessFactors]], and it's a lot simpler and more efficient than real play-it-forward.
  
Line 50: Line 51:
 
: It switches to a Wave Surfing movement in 1v1 scenarios and switches to a different set of weights in the gun.
 
: 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|melee]]?
+
; 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.
+
: As of 1.30, it no longer does. It aims at everyone on the battle field at once and tries to hit as many enemies as possible. (Big thanks to [[Shadow/Melee Gun]] for the excellent idea.)
  
 
; What does it save between rounds and matches?
 
; What does it save between rounds and matches?

Revision as of 18:20, 29 August 2009

Diamond
Diamond collage thumb200.png
Full Size
Author(s) Voidious
Extends AdvancedRobot
Targeting DC-Displacement Targeting
Movement Minimum Risk Movement, DC-Wave Surfing
Current Version 1.31
Code License RWPCL
Download
Sub-pages:
Version History - Code - DiamondHawk
Youtube
Youtube has a video of Diamond in action: click here to watch

Background Information

What's special about it?
   
How competitive is it?
Quite competitive - currently #4 in 1v1 and #2 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?
As of 1.30, it no longer does. It aims at everyone on the battle field at once and tries to hit as many enemies as possible. (Big thanks to Shadow/Melee Gun for the excellent idea.)
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.