Difference between revisions of "Tomcat"
m (last version updates) |
(Add navbox) |
||
(35 intermediate revisions by 2 users not shown) | |||
Line 3: | Line 3: | ||
| name = Tomcat | | name = Tomcat | ||
| altimage = | | altimage = | ||
− | | image = | + | | image = Tomcat_logo.jpg |
− | + | | caption = [[:Image:Tomcat_logo.jpg|Full Size]] | |
− | | caption = | ||
| author = [[User:Jdev]] | | author = [[User:Jdev]] | ||
| extends = [[AdvancedRobot]] | | extends = [[AdvancedRobot]] | ||
− | | targeting = [[ | + | | targeting = [[Dynamic_Clustering|kNN]]-[[PIF]] |
| movement = [[RS]]-[[Wave Surfing]] | | movement = [[RS]]-[[Wave Surfing]] | ||
| released = August 5th, 2011 | | released = August 5th, 2011 | ||
− | | best_rating = | + | | best_rating = 88.14 APS (3rd) |
− | | rating = | + | | rating = 88.27 APS (4rd) |
− | | current_version = 3. | + | | current_version = 3.68 |
− | | license = | + | | license = [http://creativecommons.org/licenses/by-nd/3.0/deed.en CC BY-ND 3.0] |
− | | download_link = | + | | download_link = https://github.com/aleksey-zhidkov/Tomcat/raw/develop/builds/lxx.Tomcat_3.68.jar |
| isOneOnOne = true | | isOneOnOne = true | ||
| isMelee = false | | isMelee = false | ||
− | | isOpenSource = | + | | isOpenSource = true |
+ | }} | ||
+ | {{Navbox small | ||
+ | | title = Sub-pages | ||
+ | | page1 = Version History | ||
}} | }} | ||
Line 25: | Line 28: | ||
==== What's special about it? ==== | ==== What's special about it? ==== | ||
− | * | + | * It's the best Russian bot at now |
− | |||
* It's my first released bot | * It's my first released bot | ||
* It was under development without releases more than 2 years | * It was under development without releases more than 2 years | ||
* It has only one gun | * It has only one gun | ||
* "g" and "m" keys enables gun and movement debug graphics respectively | * "g" and "m" keys enables gun and movement debug graphics respectively | ||
+ | * Tomcat use unique adaptive logs management system in movement | ||
+ | * Now, maybe temporary, i stop active robocoding at all, and in rare times, when i return to it, i develop [[Emerald]] | ||
==== How competitive is it? ==== | ==== How competitive is it? ==== | ||
− | + | Very, Tomcat is in [[The_2100_Club|The 2100 Club]] and one of top duelists at 19 of september 2014 | |
==== How does it [[:Category:Movement|move]]? ==== | ==== How does it [[:Category:Movement|move]]? ==== | ||
− | Tomcat | + | ===== Data analysis ===== |
+ | Tomcat has two sets of log - visits and hits. Each set - it's all possible subsets of {lateralVelocity, acceleration, distanceBetween, distanceToForwardWall, distLast10Ticks}. For each log Tomcat tracks it's average "hit" and "miss" rates for last 9, 45, 5000 bullets/waves and enemy hit rate, when this log was used. Each log can produce several (now 5) possible bearing offsets.<br/> | ||
+ | When enemy bullet hit Tomcat or his bullet, Tomcat calculate "hit" rate for each log - how many predicted bullets contained by interval with robot width and center in real bearing offset.<br/> | ||
+ | When enemy bullet missed, Tomcat calculate "miss" rate for each log - how many predicted bullets contained by interval with robot width and center in current bearing offset.<br/> | ||
+ | When it's time to predict enemy's bullet bearing offset, Tomcat selects by 3 best logs in terms of "hit rate" - "miss rate" for last 9, 45 and 5000 bullets/ and 3 best logs in terms of enemy's hit rate. Then Tomcat tries to dodge bullets produced by this 12 logs (there're may be only 3 logs if they are the best in all categories) | ||
+ | |||
+ | ===== Movement mechanics ===== | ||
+ | Tomcat has pretty unique movement mechanics, which is hybrid between True Surfing and GoTo Surfing. Tomcat's reselect destination point only after few events: first bullet changed (passed, hitted or intercepted), bullet data updated (mainly because more late bullet has been intercepted), enemy change velocity sign and Tomcat's distance to destination point is less than stop distance + 8.<br> | ||
+ | For reselect orbit direction Tomcat generate two destination points, which encourage him to move in clockwise and counter clockwise movement at max speed. These points are selected on circle with center in bullet fire position and radius = (distance between bullet fire position and Tomcat) * 10. Then Tomcat calculates precise route in both direction and danger of each point of routes. Then the most safe point are selected as destination point. Tomcat do not directly go to this point, but each tick do decision in wich orbit direction he must move to be at same bearing offset as this point. But really, because reselecting orbit direction when distance to destination point is less than stop distance + 8, this mechanics works like GoTo. | ||
==== How does it [[:Category:Targeting|fire]]? ==== | ==== How does it [[:Category:Targeting|fire]]? ==== | ||
===== Data analysis ===== | ===== Data analysis ===== | ||
− | Tomcat keeps log of turns organized as linked list with several | + | Tomcat keeps log of turns organized as linked list with several kD-trees with different segmentation attributes for search. When it's time to fire, Tomcats find out set of similar situations in past, using every tree. |
===== Fire angle reconstruction ===== | ===== Fire angle reconstruction ===== | ||
− | + | See [[PIF/Gradient PIF]] | |
===== Multiple choice ===== | ===== Multiple choice ===== | ||
When enemy's possible future positions is finded out, Tomcat calulates interval of [[Bearing_Offset|bearing offsets]] (BO), which hits enemy for each future position. Then, Tomcat builds histogram of BOs dangers and selects random BO from set of BOs with maximum danger value. | When enemy's possible future positions is finded out, Tomcat calulates interval of [[Bearing_Offset|bearing offsets]] (BO), which hits enemy for each future position. Then, Tomcat builds histogram of BOs dangers and selects random BO from set of BOs with maximum danger value. | ||
Line 55: | Line 67: | ||
==== Can I use your code? ==== | ==== Can I use your code? ==== | ||
− | + | You can use any code published on this wiki. But code avaliable from Tomcat's jars, you can only read. See [http://creativecommons.org/licenses/by-nd/3.0/deed.en CC BY-ND 3.0] for license of not published code. | |
==== What's next for your robot? ==== | ==== What's next for your robot? ==== | ||
− | * | + | * Relax and be happy:) |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
==== Does it have any [[WhiteWhale]]s? ==== | ==== Does it have any [[WhiteWhale]]s? ==== | ||
− | + | In past Tomcat could beat any bot in RR, but now days [[DrussGT]] is big problem and [[Diamond]] wins with little advantage | |
− | |||
==== What other robot(s) is it based on? ==== | ==== What other robot(s) is it based on? ==== | ||
− | Set of my unreleased bots: Jdev, UltraMarine, Primarch; <br> | + | Set of my unreleased bots: Jdev, UltraMarine, Primarch; <br>[[User:Rednaxela/FastTrig]] class, [[User:Rednaxela/kD-Tree]] class and exact Non-Iterative solution for [[LinearTargeting]] from wiki |
[[Category:Bots|Tomcat]] | [[Category:Bots|Tomcat]] | ||
[[Category:1-vs-1 Bots|Tomcat]] | [[Category:1-vs-1 Bots|Tomcat]] | ||
[[Category:MegaBots|Tomcat]] | [[Category:MegaBots|Tomcat]] |
Latest revision as of 20:25, 9 August 2017
Tomcat | |
Full Size | |
Author(s) | User:Jdev |
Extends | AdvancedRobot |
Targeting | kNN-PIF |
Movement | RS-Wave Surfing |
Released | August 5th, 2011 |
Best Rating | 88.14 APS (3rd) |
Current Rating | 88.27 APS (4rd) |
Current Version | 3.68 |
Code License | CC BY-ND 3.0 |
Download |
- Sub-pages:
- Version History
Contents
- 1 Most Recent Updates
- 2 What's special about it?
- 3 How competitive is it?
- 4 How does it move?
- 5 How does it fire?
- 6 What does it save between rounds and matches?
- 7 Where did you get the name?
- 8 Can I use your code?
- 9 What's next for your robot?
- 10 Does it have any WhiteWhales?
- 11 What other robot(s) is it based on?
Most Recent Updates
Check out the /Version History
What's special about it?
- It's the best Russian bot at now
- It's my first released bot
- It was under development without releases more than 2 years
- It has only one gun
- "g" and "m" keys enables gun and movement debug graphics respectively
- Tomcat use unique adaptive logs management system in movement
- Now, maybe temporary, i stop active robocoding at all, and in rare times, when i return to it, i develop Emerald
How competitive is it?
Very, Tomcat is in The 2100 Club and one of top duelists at 19 of september 2014
How does it move?
Data analysis
Tomcat has two sets of log - visits and hits. Each set - it's all possible subsets of {lateralVelocity, acceleration, distanceBetween, distanceToForwardWall, distLast10Ticks}. For each log Tomcat tracks it's average "hit" and "miss" rates for last 9, 45, 5000 bullets/waves and enemy hit rate, when this log was used. Each log can produce several (now 5) possible bearing offsets.
When enemy bullet hit Tomcat or his bullet, Tomcat calculate "hit" rate for each log - how many predicted bullets contained by interval with robot width and center in real bearing offset.
When enemy bullet missed, Tomcat calculate "miss" rate for each log - how many predicted bullets contained by interval with robot width and center in current bearing offset.
When it's time to predict enemy's bullet bearing offset, Tomcat selects by 3 best logs in terms of "hit rate" - "miss rate" for last 9, 45 and 5000 bullets/ and 3 best logs in terms of enemy's hit rate. Then Tomcat tries to dodge bullets produced by this 12 logs (there're may be only 3 logs if they are the best in all categories)
Movement mechanics
Tomcat has pretty unique movement mechanics, which is hybrid between True Surfing and GoTo Surfing. Tomcat's reselect destination point only after few events: first bullet changed (passed, hitted or intercepted), bullet data updated (mainly because more late bullet has been intercepted), enemy change velocity sign and Tomcat's distance to destination point is less than stop distance + 8.
For reselect orbit direction Tomcat generate two destination points, which encourage him to move in clockwise and counter clockwise movement at max speed. These points are selected on circle with center in bullet fire position and radius = (distance between bullet fire position and Tomcat) * 10. Then Tomcat calculates precise route in both direction and danger of each point of routes. Then the most safe point are selected as destination point. Tomcat do not directly go to this point, but each tick do decision in wich orbit direction he must move to be at same bearing offset as this point. But really, because reselecting orbit direction when distance to destination point is less than stop distance + 8, this mechanics works like GoTo.
How does it fire?
Data analysis
Tomcat keeps log of turns organized as linked list with several kD-trees with different segmentation attributes for search. When it's time to fire, Tomcats find out set of similar situations in past, using every tree.
Fire angle reconstruction
See PIF/Gradient PIF
Multiple choice
When enemy's possible future positions is finded out, Tomcat calulates interval of bearing offsets (BO), which hits enemy for each future position. Then, Tomcat builds histogram of BOs dangers and selects random BO from set of BOs with maximum danger value.
Implementation features
Tomcat's PIF algorithm is position based - it's calculates enemy displacement vector between two turns in past, which is applied to enemy's current state to calculate enemy's future position. This algorthm allows me to avoid accumulating rounding errors
What does it save between rounds and matches?
Between rounds it saves targeting and movement logs and other stuff (enemy prefered disance, enemy targeting profile, hit rates etc.), between matches nothing
Where did you get the name?
From his colors:)
Can I use your code?
You can use any code published on this wiki. But code avaliable from Tomcat's jars, you can only read. See CC BY-ND 3.0 for license of not published code.
What's next for your robot?
- Relax and be happy:)
Does it have any WhiteWhales?
In past Tomcat could beat any bot in RR, but now days DrussGT is big problem and Diamond wins with little advantage
What other robot(s) is it based on?
Set of my unreleased bots: Jdev, UltraMarine, Primarch;
User:Rednaxela/FastTrig class, User:Rednaxela/kD-Tree class and exact Non-Iterative solution for LinearTargeting from wiki