Difference between revisions of "User:Tkiesel/Dev Notebook"

From Robowiki
Jump to navigation Jump to search
m (More detail.)
m (link fix)
 
(11 intermediate revisions by the same user not shown)
Line 1: Line 1:
== DeBroglie Roadmap / Development notepad / Brainstorming Sandbox ==
+
[[User:Tkiesel/Copernicus|Copernicus]] dev sandbox, notes and such
  
# Continue tracking down why there are so many skipped turns.
+
== Timing ==
#* I used an approximation via <math>e^x = \lim_{n \to +\infty}(1+\frac{x}{n})^n</math>, with n = 128 It helped a lot, and it only gets serious error at 4-5+ bandwidths away. Also, the approximation drops off faster than the real thing, which is more acceptable to me than lingering too high.
+
 
# Virtual gun array time!
+
=== Plan ===
#* How to choose a gun? 
+
 
#** Simply using the log of what worked best for the k-nearest-neighbors (real waves only) for this shot doesn't work too well.
+
In order to do stat decay right, I realized that I need proper timekeeping. Rather than try to work with rounds and ticks, I'll keep a single '''''long''''' that holds the elapsed ticks since the start of the match.  Stat decay becomes easier to deal with in a more granular fashion with cross-round timekeeping.
#** I'm tempted to try [http://code.google.com/p/voteutil/ instant runoff voting or maybe some other fun voting method] by polling several selectors: the this-knn one above, several hitrate loggers with different rolling depths and a static selector that always favors the main gun.
+
 
 +
Since I'm at it, paying attention to time means I can do proper(ish) interpolation of enemy state in melee and after skipped 1v1 turns.
 +
 
 +
=== Notes and Reminders ===
 +
 
 +
* Stop counting ticks if Copernicus is dead or all enemies are dead.
 +
* Test across rounds.
 +
* Probably go with linear stat decay or something more CPU-friendly.  Half-lives were murder in deBroglie, and caused use of a less effective decay-by-round strategy.
 +
 
 +
=== To Do ===
 +
 
 +
# <del>Work this code up in barebones SittingDuck Copernicus.</del>
 +
# <del>Move code to Universe.</del>
 +
 
 +
== Universe ==
 +
 
 +
=== Plan ===
 +
 
 +
The Bot class is going to get a complete clean-out. A Bot no longer handles another Bot as enemy. This prevented any melee work and made deBroglie a 1v1 specialist. In Copernicus, there will be one Bot per robot in the match and pairwise stats between bot pairs (and thus 1v1) will be handled by another Object. For performance, each bot will keep a rolling buffer of previous state now, rather than instantiating a stipped down copy of itself as done previously.
 +
 
 +
The Wave class needs a similar cleanout. The precise intersection code and basic structural elements should stay from deBroglie, but the Wave itself should no longer handle its own BracketHist objects.  Let a customized stats object do that.
 +
 
 +
=== Notes and Reminders ===
 +
 
 +
* Waves should be timestamped with firetime. This lets the stats object index Bot situation from n ticks ago to get the fully proper stats picture. This also lets Copernicus use Gun Heat Waves by launching expected waves for surfing, then tagging/updating/deleting them later on as needed.
 +
 
 +
=== To Do ===
 +
 
 +
# Clean out and stip down Bot.
 +
# Add time awareness and previous state buffer to Bot.
 +
# Add state interpolation to Bot.
 +
# Clean out Wave.
 +
# Hunt for any performance improvements in the Wave intersection code.
 +
# Get Universe to cleanly handle the new Bots.
 +
# Write PSO (see below) to handle Bots and Waves.
 +
 
 +
== Pairwise Stats Object ==
 +
 
 +
=== Plan ===
 +
 
 +
This needs a design, and a name!
 +
 
 +
=== Notes and Reminders ===
 +
 
 +
=== To Do ===
 +
 
 +
== BracketHist ==
 +
 
 +
=== Plan ===
 +
 
 +
The bit of code I'm happiest with from deBroglie, all told.  All this needs is bullet shadows and any performance/kernel tweaks I can give it!
 +
 
 +
=== Notes and Reminders ===
 +
 
 +
* Bullet shadows need to be removable. This means they can't simply be baked into the histogram.  Therefore, surfing danger lookup gets more expensive. :(  This means performance gains in other areas must be found.
 +
 
 +
=== To Do ===
 +
 
 +
# Implement Bullet Shadows.. addable and removable.
 +
 
 +
== Melee ==
 +
 
 +
=== Plan ===
 +
 
 +
For now, import minimum risk movement and preferential targeting from Leibniz.  Use these when # enemies > 1. When enemies <= 1, use 1v1 objects.
 +
 
 +
=== Notes and Reminders ===
 +
 
 +
# The Leibniz targeter chooses a bot to shoot at, heavily weighting by closeness to other bots and by closeness to death. This isn't exactly the same as the Shadow Melee gun, but not terribly far from it. Should be fun to see how it does.
 +
 
 +
=== To Do ===
 +
 
 +
# Import Leibniz radar, gun and movement into objects callable by Copernicus.
 +
# rewrite the Leibniz code to call on Universe for data.

Latest revision as of 19:24, 20 February 2013

Copernicus dev sandbox, notes and such

Timing

Plan

In order to do stat decay right, I realized that I need proper timekeeping. Rather than try to work with rounds and ticks, I'll keep a single long that holds the elapsed ticks since the start of the match. Stat decay becomes easier to deal with in a more granular fashion with cross-round timekeeping.

Since I'm at it, paying attention to time means I can do proper(ish) interpolation of enemy state in melee and after skipped 1v1 turns.

Notes and Reminders

  • Stop counting ticks if Copernicus is dead or all enemies are dead.
  • Test across rounds.
  • Probably go with linear stat decay or something more CPU-friendly. Half-lives were murder in deBroglie, and caused use of a less effective decay-by-round strategy.

To Do

  1. Work this code up in barebones SittingDuck Copernicus.
  2. Move code to Universe.

Universe

Plan

The Bot class is going to get a complete clean-out. A Bot no longer handles another Bot as enemy. This prevented any melee work and made deBroglie a 1v1 specialist. In Copernicus, there will be one Bot per robot in the match and pairwise stats between bot pairs (and thus 1v1) will be handled by another Object. For performance, each bot will keep a rolling buffer of previous state now, rather than instantiating a stipped down copy of itself as done previously.

The Wave class needs a similar cleanout. The precise intersection code and basic structural elements should stay from deBroglie, but the Wave itself should no longer handle its own BracketHist objects. Let a customized stats object do that.

Notes and Reminders

  • Waves should be timestamped with firetime. This lets the stats object index Bot situation from n ticks ago to get the fully proper stats picture. This also lets Copernicus use Gun Heat Waves by launching expected waves for surfing, then tagging/updating/deleting them later on as needed.

To Do

  1. Clean out and stip down Bot.
  2. Add time awareness and previous state buffer to Bot.
  3. Add state interpolation to Bot.
  4. Clean out Wave.
  5. Hunt for any performance improvements in the Wave intersection code.
  6. Get Universe to cleanly handle the new Bots.
  7. Write PSO (see below) to handle Bots and Waves.

Pairwise Stats Object

Plan

This needs a design, and a name!

Notes and Reminders

To Do

BracketHist

Plan

The bit of code I'm happiest with from deBroglie, all told. All this needs is bullet shadows and any performance/kernel tweaks I can give it!

Notes and Reminders

  • Bullet shadows need to be removable. This means they can't simply be baked into the histogram. Therefore, surfing danger lookup gets more expensive. :( This means performance gains in other areas must be found.

To Do

  1. Implement Bullet Shadows.. addable and removable.

Melee

Plan

For now, import minimum risk movement and preferential targeting from Leibniz. Use these when # enemies > 1. When enemies <= 1, use 1v1 objects.

Notes and Reminders

  1. The Leibniz targeter chooses a bot to shoot at, heavily weighting by closeness to other bots and by closeness to death. This isn't exactly the same as the Shadow Melee gun, but not terribly far from it. Should be fun to see how it does.

To Do

  1. Import Leibniz radar, gun and movement into objects callable by Copernicus.
  2. rewrite the Leibniz code to call on Universe for data.