Difference between revisions of "Diamond"

From Robowiki
Jump to navigation Jump to search
m (misc updates)
(misc updates, brags, and credits)
Line 4: Line 4:
 
| caption        = [[:Image:Diamond_collage.png|Full Size]]
 
| caption        = [[:Image:Diamond_collage.png|Full Size]]
 
| extends        = [[AdvancedRobot]]
 
| extends        = [[AdvancedRobot]]
| targeting      = [[Dynamic Clustering|Dynamic Clustering]], [[Displacement Vector|Displacement Vectors]]
+
| targeting      = [[Dynamic Clustering|Dynamic Clustering]], [[Displacement Vector|Displacement Vectors]], [[GuessFactor|GuessFactors]]
 
| movement        = [[Minimum Risk Movement|Minimum Risk Movement]], [[Dynamic Clustering|DC]]/[[GuessFactor|GF]]-[[Wave Surfing|Wave Surfing]]
 
| movement        = [[Minimum Risk Movement|Minimum Risk Movement]], [[Dynamic Clustering|DC]]/[[GuessFactor|GF]]-[[Wave Surfing|Wave Surfing]]
| current_version = 1.5.22
+
| current_version = 1.5.30
 
| license        = [http://www.gzip.org/zlib/zlib_license.html zlib]
 
| license        = [http://www.gzip.org/zlib/zlib_license.html zlib]
| download_link  = http://www.dijitari.com/void/robocode/voidious.Diamond_1.5.22.jar
+
| download_link  = http://www.dijitari.com/void/robocode/voidious.Diamond_1.5.30.jar
 
| isOpenSource    = yes
 
| isOpenSource    = yes
 
| isMelee        = yes
 
| isMelee        = yes
Line 23: Line 23:
  
 
; What's special about it?
 
; What's special about it?
{| cellspacing="0" cellpadding="0" border="0"
+
: Oh, nothing, really. Well, since you asked...
|    
+
:* It took the [[Melee]] throne from [[Shadow]].
|
+
:* The Melee guns use [[Displacement Vector|displacement vectors]].
* It took the Melee throne from [[Shadow]].
+
:* It may have the strongest [[One-on-one|1v1]] gun against [[Random Movement|random movers]].
* It may have the strongest 1v1 gun against [[Random Movement|random movers]].
+
:* It's by far the top [[Dynamic Clustering|DC]] surfer.
* The Melee and Anti-Surfer guns use [[Displacement Vector|displacement vectors]].
+
:* The Melee [[Wall Smoothing]] is quite graceful, if I do say so myself.
* It has pretty debugging graphics.
+
:* It has pretty debugging graphics.
|}
+
:* The source code is available under a [[wikipedia:Permissive free software licence|permissive license]] - have fun! (And try to learn something!)
  
 
; How competitive is it?
 
; How competitive is it?
: Currently #2 in both Melee and 1v1.
+
: Very. =) #1 in Melee since September 2009 (tied with [[DemonicRage]] right now), #2 in 1v1 behind [[DrussGT]].
  
 
== Strategy ==
 
== Strategy ==
  
 
; How does it [[:Category: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:
+
: In melee, it uses a [[Minimum Risk Movement]], evaluating a bunch of points around itself and choosing the best (least bad / most good) one. I'm always tweaking the parameters, but some of them are
 
:* Considers points in a (randomized radius) circle around itself.
 
:* Considers points in a (randomized radius) circle around itself.
 
:* Stay far away from other bots, weighted by their energy.
 
:* Stay far away from other bots, weighted by their energy.
Line 44: Line 44:
 
:* Don't be the closest bot to any other bots (avoid being targeted).
 
:* Don't be the closest bot to any other bots (avoid being targeted).
 
:* Some randomizing based on past locations.
 
:* Some randomizing based on past locations.
: In 1v1, it uses [[Wave Surfing]] (algorithm derived from [[Dookious]]) with [[Dynamic Clustering]] for data analysis.
+
: In 1v1, it uses [[Wave Surfing]] (derived from [[Dookious]]) with [[Dynamic Clustering]].
  
 
; How does it [[:Category: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 Vector|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. In Melee, it uses [[Displacement Vector|displacement vectors]] for recording and reconstructing firing angles - I thought that made more sense than [[GuessFactor|GuessFactors]], and it's a lot simpler and more efficient than real [[Play It Forward]]. In 1v1, it uses GuessFactors with [[Maximum Escape Angle/Precise|precise MEA]]. It uses [[Waves/Precise Intersection|precise intersection]] and interpolates missed scans when necessary.
: I'm also experimenting with various clustering techniques under my [[TripHammer]] banner.
+
: I'm also experimenting with various clustering and optimization techniques for the 1v1 guns, with the help of [[User:Voidious/WaveSim|WaveSim]].
  
 
; How does it select a target to attack/avoid in [[melee]]?
 
; How does it select a target to attack/avoid in [[melee]]?
Line 57: Line 57:
  
 
; What does it save between rounds and matches?
 
; 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-Tree|kd-trees]], and maps of the trees' data points to displacement vectors and/or [[GuessFactor|GuessFactors]].
+
: Nothing between matches. Between rounds, it saves all its targeting and movement data, which includes general info about each enemy, a bunch of [[Kd-Tree|kd-trees]], and maps of the trees' data points to displacement vectors and/or GuessFactors.
  
 
== Additional Information ==
 
== Additional Information ==
  
 
; Where did you get the name?
 
; Where did you get the name?
: Diamond is the ex-superhero name of the main character in [[wikipedia:Powers (comics)|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.
+
: Diamond is the ex-superhero name of the main character in [[wikipedia:Powers (comics)|Powers]], my favorite comic book series. I like to name all my bots after warriors of some sort, but I'd be lying if I said I didn't just think it sounds cool.
  
 
; Can I use your code?
 
; Can I use your code?
Line 68: Line 68:
  
 
; What's next for your robot?
 
; What's next for your robot?
: I'd really love to take the 1v1 throne, but I'm not working on anything for now.
+
: I'd love to take the 1v1 throne. A lot. =) And it will take some work to reclaim the Melee throne, especially with [[Demon]] coming.
  
 
; Does it have any [[White Whale|White Whales]]?
 
; Does it have any [[White Whale|White Whales]]?
Line 74: Line 74:
  
 
; What other robot(s) is it based on?
 
; What other robot(s) is it based on?
: 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.
+
: I tried to start with a clean slate on this one. But I did take some ideas from the wiki and some code from some of my other bots.
 
:* [[BrokenSword]] - General guidance on various things, especially the minimum risk movement and bullet power management.
 
:* [[BrokenSword]] - General guidance on various things, especially the minimum risk movement and bullet power management.
:* [[Dookious]] - Diamond's 1v1 movement was directly ported from the Wave Surfing of Dookious, along with a variety of utility functions, including [[Precise Prediction|precise prediction]] code (itself based on [[User:Albert|Albert]]'s [[FuturePosition]]).
+
:* [[Dookious]] - Diamond's 1v1 movement was directly ported from the Wave Surfing of Dookious, along with a variety of utility functions, including [[Precise Prediction|precise prediction]] code based on [[User:Albert|Albert]]'s [[FuturePosition]].
 
:* [[Lukious]] - The tiniest bit of kernel density code and general guidance on scan distancing.
 
:* [[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 [[User:rozu|rozu]] shared about minimum risk movement via this bot.
 
:* [[HawkOnFire]] - I never did peek at the code, but it deserves a nod just for the wisdom [[User:rozu|rozu]] shared about minimum risk movement via this bot.
 
:* [[User:Corbos|Corbos]], [[User:Simonton|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.
 
:* [[User:Corbos|Corbos]], [[User:Simonton|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.
 +
:* [[Shadow]] - Pioneered the [[Shadow/Melee Gun]], which is an amazing advancement in Melee targeting.
 +
:* [[User:Rednaxela|Rednaxela]] - Credit for precise intersection and [[Gun Heat Waves]], both of which are great improvements.
  
 
[[Category:MegaBots]]
 
[[Category:MegaBots]]

Revision as of 20:03, 8 February 2011

Diamond
Diamond collage thumb200.png
Full Size
Author(s) Voidious
Extends AdvancedRobot
Targeting Dynamic Clustering, Displacement Vectors, GuessFactors
Movement Minimum Risk Movement, DC/GF-Wave Surfing
Current Version 1.5.30
Code License zlib
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?
Oh, nothing, really. Well, since you asked...
How competitive is it?
Very. =) #1 in Melee since September 2009 (tied with DemonicRage right now), #2 in 1v1 behind DrussGT.

Strategy

How does it move?
In melee, it uses a Minimum Risk Movement, evaluating a bunch of points around itself and choosing the best (least bad / most good) one. I'm always tweaking the parameters, but some of them 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 (derived from Dookious) with Dynamic Clustering.
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. In Melee, it uses displacement vectors for recording and reconstructing firing angles - I thought that made more sense than GuessFactors, and it's a lot simpler and more efficient than real Play It Forward. In 1v1, it uses GuessFactors with precise MEA. It uses precise intersection and interpolates missed scans when necessary.
I'm also experimenting with various clustering and optimization techniques for the 1v1 guns, with the help of WaveSim.
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.)
How does the melee strategy differ from one-on-one strategy?
In 1v1, it switches to a Wave Surfing movement and switches to its 1v1 Virtual Guns.
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 and/or GuessFactors.

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. I like to name all my bots after warriors of some sort, but I'd be lying if I said I didn't just think it sounds cool.
Can I use your code?
Yes, it's released under the zlib license.
What's next for your robot?
I'd love to take the 1v1 throne. A lot. =) And it will take some work to reclaim the Melee throne, especially with Demon coming.
Does it have any White Whales?
DemonicRage, Shadow, Portia, and Glacier are all big threats in Melee. In 1v1, Pris really gives it a whooping, along with all the other usual suspects: Shadow, YersiniaPestis, DrussGT, Phoenix, and its brother, Dookious.
What other robot(s) is it based on?
I tried to start with a clean slate on this one. But I did take some ideas from the wiki and some code from some of my other bots.
  • BrokenSword - General guidance on various things, especially the minimum risk movement and bullet power management.
  • Dookious - Diamond's 1v1 movement was directly ported from the Wave Surfing of Dookious, along with a variety of utility functions, including precise prediction code 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.
  • Shadow - Pioneered the Shadow/Melee Gun, which is an amazing advancement in Melee targeting.
  • Rednaxela - Credit for precise intersection and Gun Heat Waves, both of which are great improvements.