Difference between revisions of "Watermelon"

From Robowiki
Jump to navigation Jump to search
m (author of Dookious is Voidious, not Simonton)
(Mass-edit Robocode Repository URLs)
 
(35 intermediate revisions by 2 users not shown)
Line 6: Line 6:
 
| author          = [[User:Synapse|Synapse]]
 
| author          = [[User:Synapse|Synapse]]
 
| extends        = [[AdvancedRobot]]
 
| extends        = [[AdvancedRobot]]
| targeting      = [[Linear Targeting]]
+
| targeting      = [[Segmentation/Autoselected Segmentation | Autoselected]] [[GuessFactor Targeting (traditional) | GF]]
| movement        = [[Wave Surfing]]
+
| movement        = [[Segmentation/Autoselected Segmentation | Autoselected]] [[Wave Surfing | WS]]
| released        = TBD
+
| released        = 4 June 2009
| best_rating    = N/A
+
| current_version = 7
| rating          = N/A
+
| best_rating    = 61<sup><small>st</small></sup>, version 7
| current_version = 1
+
| download_link  = http://robocode-archive.strangeautomata.com/robots/synapse.Watermelon_7.jar
| download_link  = Unavailable
 
 
}}
 
}}
  
 
== Structure ==
 
== Structure ==
  
It's built on a modular framework, coded pretty cleanly, but not good enough yet to be open source. Maybe once it's done something on the rumble that will change.
+
It's built on a modular framework, coded cleanly. Occasionally I'll post snippets for free - see [[Watermelon/Code]].
Currently developing in [[Robocode/Eclipse|Eclipse]]. Early on I used an educational IDE called BlueJ (its interface is a UML diagram, very pretty).
+
Currently developing in [[Robocode/Eclipse|Eclipse]]. Early on I used an educational IDE called BlueJ (its interface is a UML diagram, very pretty). I test by running battles against a few favorites, including [[CigaretBH]] and some others. For more specific testing I post a release to [[RoboRumble]] and see what happens.
  
 
== Movement ==
 
== Movement ==
  
Uses [[Wave Surfing]], implemented in a straightforward manner. <small><small>To the extent that that's possible <sub>grumble grumble</sub>.</small></small> I used [[User:Simonton|Simonton]]'s non-iterative [[Wall Smoothing]] code, and my own future position prediction. It took forever to realize that the future prediction needs to call the wall smoothing function for each imaginary tick, but I finally got it.
+
Uses [[Wave Surfing]], implemented in as straightforward a manner as I can manage. I used [[User:Simonton|Simonton]]'s non-iterative [[Wall Smoothing]] code, and my own precise prediction for future positions. Bot width is considered, averaging the danger from covered bins. There's no dive-in protection; bot width takes care of that.
  
It kind of uses the [[Musashi Trick]], by seeding the bins with a single hit at [[Guess Factor]] 0. The magnitude of the initial seed is such that the first real hit overrides it.
+
[[Guess Factor]]s are determined by [[Segmentation/Autoselected Segmentation|Autoselected Segmentation]].
  
It also takes bot width into account, averaging the danger from covered bins. There's no dive-in protection; bot width takes care of that.
+
A rolling average ensures that the bot accommodates adaptive targeters.
  
[[Guess Factor]]s are segmented by velocity.
+
== Firing ==
  
== Firing ==
+
=== Where to Fire ===
 +
[[Guess Factor]] gun, segmented on every combination of velocity, acceleration, time since last reversal, and lateral wall-distance. Segments are chosen based on the ratio of their maximum value to their average value, with a strong penalty for having too few hits. A rolling average ensures that the bot accommodates adaptive targeters.
  
Precise non-iterative [[Linear Targeting]], doesn't know about walls. Sometimes I can beat [[CigaretBH]]!
+
=== How Hard to Fire ===
 +
If the selected firing segment has enough hits, and a hit rate over 25%, fire a strong bullet, varying by how good the segment really is.
 +
If the enemy is close, fire stronger bullets.
 +
If energy is too low, scale all these back proportionally to how little energy I have.
  
 
== Radar ==
 
== Radar ==
  
Uses the same radar in melee and in 1v1 conflicts. An implementation quirk makes it look like a lazy spotlight.
+
Uses the same radar in melee and in 1v1 conflicts - turns the radar just past the furthest angle that the least recently seen bot could have reached since it was last spotted.
  
 
== Debug Graphics ==
 
== Debug Graphics ==
  
[[Image:WatermelonDebugGraphics.png | left]]
+
[[Image:Watermelon6DebugGraphics.png | thumb | 400px | right | Watermelon debug graphics ]]
Paints waves, with brighter segments where the bins are fuller. Also marks predicted future positions.
+
Paints waves for enemy bullets and its own bullets, with brighter segments where the bins are fuller. Also marks precisely predicted future positions.
 +
Waves are labeled with the applicable segmentation axes.
 +
<br clear="both"/>
  
== Source Code ==
+
== White Whales ==
 +
* [[Toa]] - energy management makes it a really tough nut to crack - it stops firing when it determines it would do better to let me fire my gun empty, and about half the time that's what happens. Then, when I run out of energy to fire, I'm killed by the inactivity timer and it gets the survival bonus. :-(
  
I saw what [[User:Voidious|Voidious]] did with [[Dookious]] and wanted to copy him, so I made my own word cloud from the current source for Watermelon.
+
== What I'm Working On ==
[[Image:WatermelonSourceWordle.png | right | thumb]]
+
Another bot - this one's retired.
  
__NOTOC__
 
 
[[Category:Bots|Watermelon]]
 
[[Category:Bots|Watermelon]]
 
[[Category:1-vs-1 Bots|Watermelon]]
 
[[Category:1-vs-1 Bots|Watermelon]]
[[Category:Melee Bots|Watermelon]]
 
 
[[Category:MegaBots|Watermelon]]
 
[[Category:MegaBots|Watermelon]]
[[Category:Unreleased Robots|Watermelon]]
+
[[Category:Retired Bots|Watermelon]]

Latest revision as of 03:47, 18 August 2017

/Development

Watermelon
WatermelonStockPhoto.jpg
Author(s) Synapse
Extends AdvancedRobot
Targeting Autoselected GF
Movement Autoselected WS
Released 4 June 2009
Best Rating 61st, version 7
Current Version 7
Download

Structure

It's built on a modular framework, coded cleanly. Occasionally I'll post snippets for free - see Watermelon/Code. Currently developing in Eclipse. Early on I used an educational IDE called BlueJ (its interface is a UML diagram, very pretty). I test by running battles against a few favorites, including CigaretBH and some others. For more specific testing I post a release to RoboRumble and see what happens.

Movement

Uses Wave Surfing, implemented in as straightforward a manner as I can manage. I used Simonton's non-iterative Wall Smoothing code, and my own precise prediction for future positions. Bot width is considered, averaging the danger from covered bins. There's no dive-in protection; bot width takes care of that.

Guess Factors are determined by Autoselected Segmentation.

A rolling average ensures that the bot accommodates adaptive targeters.

Firing

Where to Fire

Guess Factor gun, segmented on every combination of velocity, acceleration, time since last reversal, and lateral wall-distance. Segments are chosen based on the ratio of their maximum value to their average value, with a strong penalty for having too few hits. A rolling average ensures that the bot accommodates adaptive targeters.

How Hard to Fire

If the selected firing segment has enough hits, and a hit rate over 25%, fire a strong bullet, varying by how good the segment really is. If the enemy is close, fire stronger bullets. If energy is too low, scale all these back proportionally to how little energy I have.

Radar

Uses the same radar in melee and in 1v1 conflicts - turns the radar just past the furthest angle that the least recently seen bot could have reached since it was last spotted.

Debug Graphics

Watermelon debug graphics

Paints waves for enemy bullets and its own bullets, with brighter segments where the bins are fuller. Also marks precisely predicted future positions. Waves are labeled with the applicable segmentation axes.

White Whales

  • Toa - energy management makes it a really tough nut to crack - it stops firing when it determines it would do better to let me fire my gun empty, and about half the time that's what happens. Then, when I run out of energy to fire, I'm killed by the inactivity timer and it gets the survival bonus. :-(

What I'm Working On

Another bot - this one's retired.