Difference between revisions of "PrairieWolf"

From Robowiki
Jump to navigation Jump to search
m (is Melee, is not open source)
 
(One intermediate revision by one other user not shown)
Line 3: Line 3:
 
| image          = Prairiewolf.jpg
 
| image          = Prairiewolf.jpg
 
| extends        = [[AdvancedRobot]]
 
| extends        = [[AdvancedRobot]]
| targeting      = [[Circular Targeting|Circular Targeting]]
+
| targeting      = Unknown
 
| movement        = [[Multi-Mode]]
 
| movement        = [[Multi-Mode]]
 
| current_version = 2.61
 
| current_version = 2.61
| download_link  = http://darkcanuck.net/rumble/robots/intruder.PrairieWolf_2.61.jar
+
| download_link  = http://robocode-archive.strangeautomata.com/robots/intruder.PrairieWolf_2.61.jar
 
| isOneOnOne      = yes
 
| isOneOnOne      = yes
 
| isMelee        = yes
 
| isMelee        = yes
Line 18: Line 18:
  
 
; How competitive is it?
 
; How competitive is it?
: It's around the 75th percentile in both the RoboRumble and the MeleeRumble. Not bad for a bot that's almost 9 years old!
+
: It's around the 75th percentile in both the RoboRumble and the MeleeRumble in 2024, falling short of the best [[NanoBots]].
  
 
== Strategy ==
 
== Strategy ==
Line 38: Line 38:
  
 
; How does it fire?
 
; How does it fire?
: From the author: ''The firing algorithm is very primitive, plotting target movement using only the target's current speed and a rough approximation of the target's rate of turn.'' Sounds like something resembling [[Circular Targeting]].
+
: From the author: ''The firing algorithm is very primitive, plotting target movement using only the target's current speed and a rough approximation of the target's rate of turn.'' Sounds like something resembling [[Circular Targeting]], but that can be easily ruled out by testing PrairieWolf 2.61 against different movements.  [[Pattern Matching]] is possible.
  
 
; How does the [[Melee|melee]] strategy differ from [[One on One|one-on-one]] strategy?
 
; How does the [[Melee|melee]] strategy differ from [[One on One|one-on-one]] strategy?

Latest revision as of 13:47, 16 March 2024

PrairieWolf
Prairiewolf.jpg
Author(s) David McCoy
Extends AdvancedRobot
Targeting Unknown
Movement Multi-Mode
Current Version 2.61
Download

Background Information

What's special about it?
It's an ancient, but relatively sophisticated bot that has aged better than most. It has a variety of radar and movement modes. It tries to find the optimal strategy against any bot and remembers each bot it faces for up to a month.
It had its own web page until GeoCities came down. Thankfully, you can still find the latest version at archive.org.
How competitive is it?
It's around the 75th percentile in both the RoboRumble and the MeleeRumble in 2024, falling short of the best NanoBots.

Strategy

How does it move?
The following is taken verbatim from the PrairieWolf homepage:
Navigation is responsible for picking the best possible movement pattern for the circumstances. Different classes of pattern are used depending on the number of enemies within view.
  • Corners (Multiple Enemies) - Attempts to stay as close to the walls as possible, while attempting to avoid other bots. This was one of the first states I had planned, yet one of the last I implemented. Ultimately, it proved to be the best melee state for most situations. PrairieWolf utilizes this state exclusively on battlefields of 1000x1000 or less.
  • Evade (Multiple Enemies) - Every successful bot seems to utilize (at least to some degree) an anti-gravity algorithm. I decided PrairieWolf should be no different. In addition to distance, PrairieWolf also factors the other bots' bearings in to this calculation. While this was once PrairieWolf's mainstay for melee combat, it is now only used on battlefields larger than 1000x1000.
  • Perimeter (Multiple Enemies) - This was an early attempt at keeping PrairieWolf out of the fray. It is basically an extension of the Evade state, factoring in the center of the battlefield as an additional evade point. It seemed like a good idea at the time, but proved somewhat less effective than planned.
  • Weave (Multiple Enemies) - This was PrairieWolf's original all-purpose movement state. The plan was to navigate in graceful half-circles, reversing at the end of each arc. This state was removed after it became clear the only thing it was good for was racking up unbelievable ram damage.
  • Cautious Approach (Single Enemy) - Sometimes the best defense is a good offense, but using a head-on approach often makes a bot cannon fodder. This state attempts to resolve this problem by approaching the enemy in side-to-side arcs.
  • Dodge (Single Enemy) - This was PrairieWolf's first single-fight state. It started as a back-and-forth pattern very similar to (though not half as graceful or effective as) the pattern used by MadHatter. I later changed this state to use an anti-gravity algorithm designed specifically for a single enemy.
  • Finisher (Single Enemy) - Impressed with Wolverine's very classy finishing move for disabled opponents, I decided PrairieWolf needed a finishing move as well. I spent considerable time designing and implementing a special state to do a little dance before finishing off disabled opponents. However, after watching several bots come back to win after a still-active bullet hit PrairieWolf in mid-dance, I decided showing off was best left to those who could actually pull it off. ;-)
  • Opposing Orbit (Single Enemy) - Being somewhat mathematically challenged, I quickly realized my opponents were likely to have much more elegant one-on-one movement strategies than PrairieWolf. This state is my attempt at using an opponent's strength against them - it keeps PrairieWolf in an opposing orbit around the center of the battlefield from it's opponent. Simple, but very effective against some bots.
  • Orbit Enemy (Single Enemy) - This is the mainstay of PrairieWolf's one-on-one navigation. It keeps PrairieWolf in an orbit around it's opponent, moving only when shot at or when the opponent gets too close.
  • Reflection (Single Enemy) - Another one of my early states that seemed like a good idea at the time, but didn't quite pan out. The plan was for PrairieWolf to mirror it's opponent's movements; using the opponent's own movement strategy against them. In reality it made PrairieWolf fumble around clumsily and run in to the walls a lot.
  • Search (No Enemies Visible) - I despise bots that hide away, refusing to engage any opponents until the fighting dies down and all the other bots are badly damaged. This state is my attempt at keeping PrairieWolf from falling in to that category - it puts PrairieWolf in a circular search pattern around the center of the battlefield whenever all contact is lost with other bots.
How does it fire?
From the author: The firing algorithm is very primitive, plotting target movement using only the target's current speed and a rough approximation of the target's rate of turn. Sounds like something resembling Circular Targeting, but that can be easily ruled out by testing PrairieWolf 2.61 against different movements. Pattern Matching is possible.
How does the melee strategy differ from one-on-one strategy?
Some of the movement modes apply only to Melee or 1v1.
How does it select a target to attack/avoid in melee?
Targets the closest enemy, with some resistance to switching targets.
What does it save between rounds and matches?
Saves info on which modes were most effective against each enemy.

Additional Information

Can I use your code?
No, PrairieWolf is closed source (and obfuscated).
What's next for your robot?
It hasn't been updated since 2002, so probably nothing. =) But the author did have future plans for the bot:
PrairieWolf is far from finished. I have planned several additional movement states in addition to a complete rework of the sensor and navigation systems. I may also add a separate pattern analyzer if I start getting lost turn events using PrairieWolf's current single-threaded architecture.
What other robot(s) is it based on?
None.