Announcement

Collapse

Forum Rules

  • No flaming or derogatory remarks, directly or through insinuation.
  • No discussion, sharing or referencing illegal software such as hacks, keygen, cracks and pirated software.
  • No offensive contents, including but not limited to, racism, gore or pornography.
  • No excessive spam/meme, i.e. copious one liners in a short period of time, typing with all caps or posting meme responses (text/image).
  • No trolling, including but not limited to, flame incitation, user provocation or false information distribution.
  • No link spamming or signature advertisements for content not specific to Dota 2.
  • No Dota 2 key requests, sell, trade etc.
  • You may not create multiple accounts for any purpose, including ban evasion, unless expressly permitted by a moderator.

  • Please search before posting. One thread per issue. Do not create another thread if there is an existing one already.
  • Before posting anything, make sure you check out all sticky threads (e.g., this). Do not create new threads about closed ones.
  • It is extremely important that you post in correct forum section.

  • Balance discussion only in Misc.
  • All art related (such as hero model) feedbacks go to Art Feedback Forum.
  • All matchmaking feedback should go here: Matchmaking Feedback
  • All report/low priority issues should go here: Commend/Report/Ban Feedback
  • No specific workshop item feedback. These should go to workshop page of that item.
  • When posting in non-bugs section (such as this), use [Bugs], [Discussion] or [Suggestion] prefix in your thread name.



In case you object some action by a moderator, please contact him directly through PM and explain your concerns politely. If you are still unable to resolve the issue, contact an administrator. Do not drag these issues in public.



All rules are meant to augment common sense, please use them when not conflicted with aforementioned policies.
See more
See less

pydota2

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • #31
    So I shifted some of my time back to seeing how much information I can extract from protobuf replays for the purposes of RL and the currently github committed Radiant game I recently played (I was the TA) that lasted approx 21 min (slightly less actually) I get the following counts based on animation activities by the 5 players/bots on my team:
    Code:
    [1500] Count:  5921, Perct: 19.55%
    [1502] Count: 20826, Perct: 68.78%
    [1503] Count:  2335, Perct:  7.71%
    [1504] Count:   525, Perct:  1.73%
    [1510] Count:   312, Perct:  1.03%
    [1511] Count:   192, Perct:  0.63%
    [1512] Count:    28, Perct:  0.09%
    [1513] Count:    76, Perct:  0.25%
    [1514] Count:    51, Perct:  0.17%
    [1534] Count:    14, Perct:  0.05%
    This is the mapping of the animation keys to what they mean:
    Code:
            {
                "key": "ACTIVITY_IDLE",
                "value": 1500
            },
            {
                "key": "ACTIVITY_IDLE_RARE",
                "value": 1501
            },
            {
                "key": "ACTIVITY_RUN",
                "value": 1502
            },
            {
                "key": "ACTIVITY_ATTACK",
                "value": 1503
            },
            {
                "key": "ACTIVITY_ATTACK2",
                "value": 1504
            },
            {
                "key": "ACTIVITY_ATTACK_EVENT",
                "value": 1505
            },
            {
                "key": "ACTIVITY_DIE",
                "value": 1506
            },
            {
                "key": "ACTIVITY_FLINCH",
                "value": 1507
            },
            {
                "key": "ACTIVITY_FLAIL",
                "value": 1508
            },
            {
                "key": "ACTIVITY_DISABLED",
                "value": 1509
            },
            {
                "key": "ACTIVITY_CAST_ABILITY_1",
                "value": 1510
            },
            {
                "key": "ACTIVITY_CAST_ABILITY_2",
                "value": 1511
            },
            {
                "key": "ACTIVITY_CAST_ABILITY_3",
                "value": 1512
            },
            {
                "key": "ACTIVITY_CAST_ABILITY_4",
                "value": 1513
            },
            {
                "key": "ACTIVITY_CAST_ABILITY_5",
                "value": 1514
            },
            {
                "key": "ACTIVITY_CAST_ABILITY_6",
                "value": 1515
            },
            {
                "key": "ACTIVITY_OVERRIDE_ABILITY_1",
                "value": 1516
            },
            {
                "key": "ACTIVITY_OVERRIDE_ABILITY_2",
                "value": 1517
            },
            {
                "key": "ACTIVITY_OVERRIDE_ABILITY_3",
                "value": 1518
            },
            {
                "key": "ACTIVITY_OVERRIDE_ABILITY_4",
                "value": 1519
            },
            {
                "key": "ACTIVITY_CHANNEL_ABILITY_1",
                "value": 1520
            },
            {
                "key": "ACTIVITY_CHANNEL_ABILITY_2",
                "value": 1521
            },
            {
                "key": "ACTIVITY_CHANNEL_ABILITY_3",
                "value": 1522
            },
            {
                "key": "ACTIVITY_CHANNEL_ABILITY_4",
                "value": 1523
            },
            {
                "key": "ACTIVITY_CHANNEL_ABILITY_5",
                "value": 1524
            },
            {
                "key": "ACTIVITY_CHANNEL_ABILITY_6",
                "value": 1525
            },
            {
                "key": "ACTIVITY_CHANNEL_END_ABILITY_1",
                "value": 1526
            },
            {
                "key": "ACTIVITY_CHANNEL_END_ABILITY_2",
                "value": 1527
            },
            {
                "key": "ACTIVITY_CHANNEL_END_ABILITY_3",
                "value": 1528
            },
            {
                "key": "ACTIVITY_CHANNEL_END_ABILITY_4",
                "value": 1529
            },
            {
                "key": "ACTIVITY_CHANNEL_END_ABILITY_5",
                "value": 1530
            },
            {
                "key": "ACTIVITY_CHANNEL_END_ABILITY_6",
                "value": 1531
            },
            {
                "key": "ACTIVITY_CONSTANT_LAYER",
                "value": 1532
            },
            {
                "key": "ACTIVITY_CAPTURE",
                "value": 1533
            },
            {
                "key": "ACTIVITY_SPAWN",
                "value": 1534
            },
            {
                "key": "ACTIVITY_KILLTAUNT",
                "value": 1535
            },
            {
                "key": "ACTIVITY_TAUNT",
                "value": 1536
            },
    As you can see, almost 69% of all "work" done by the bots is "moving", 9.4% (1503 & 1504) is on "attacks / right-clicks". As a result, this just re-affirms that pathing/navigation is the largest facet of bot behavior to tackle.

    UPDATE:
    Also, here is the same for the actual ability/items used as reported by "AbilityEvent" protobuf messages:
    Code:
    <ITEMS>
    [1], Count:    36, Perct  2.34%    <-- blink dagger
    [16], Count:     1, Perct  0.07%   <-- branches (yes, I planted a tree with an ironwood branch)
    [34], Count:     5, Perct  0.33%   <-- magic stick
    [36], Count:   112, Perct  7.29%  <-- magic wand
    [38], Count:     3, Perct  0.20%   <-- clarity
    [39], Count:     2, Perct  0.13%   <-- flask
    [40], Count:     6, Perct  0.39%  <-- dust
    [41], Count:    82, Perct  5.34%  <-- bottle
    [42], Count:     8, Perct  0.52%  <-- observer ward
    [44], Count:    25, Perct  1.63%  <-- tango
    [45], Count:     1, Perct  0.07%   <-- courier (1 courier)
    [46], Count:   105, Perct  6.84%  <-- tpscroll
    [48], Count:    10, Perct  0.65%   <-- BoTs
    [63], Count:     2, Perct  0.13%
    [79], Count:     4, Perct  0.26%
    [92], Count:    16, Perct  1.04%  <-- urn of shadows
    [100], Count:     2, Perct  0.13%
    [102], Count:     4, Perct  0.26%
    [131], Count:     3, Perct  0.20%
    [172], Count:     8, Perct  0.52%
    [180], Count:    42, Perct  2.73%  <-- arcane boots
    [185], Count:     6, Perct  0.39%
    [188], Count:     4, Perct  0.26%
    [216], Count:     1, Perct  0.07%
    [237], Count:     1, Perct  0.07%
    [241], Count:     1, Perct  0.07%
    [254], Count:    11, Perct  0.72%   <-- glimmer cape
    [257], Count:     2, Perct  0.13%
    
    <ABILITIES>
    [5040] Count:    66, Perct:  4.30% -- lina_dragon_slave
    [5041] Count:    54, Perct:  3.52% -- lina_light_strike_array
    [5043] Count:     9, Perct:  0.59% -- lina_laguna_blade
    [5094] Count:    34, Perct:  2.21% -- sven_storm_bolt
    [5096] Count:    22, Perct:  1.43% -- sven_warcry
    [5097] Count:    11, Perct:  0.72% -- sven_gods_strength
    [5182] Count:    47, Perct:  3.06% -- faceless_void_time_walk
    [5185] Count:     7, Perct:  0.46% -- faceless_void_chronosphere
    [5194] Count:    65, Perct:  4.23% -- templar_assassin_refraction
    [5195] Count:    44, Perct:  2.86% -- templar_assassin_meld
    [5197] Count:    51, Perct:  3.32% -- templar_assassin_psionic_trap
    [5198] Count:    42, Perct:  2.73% -- templar_assassin_trap
    [5226] Count:    39, Perct:  2.54% -- dragon_knight_breathe_fire
    [5227] Count:    19, Perct:  1.24% -- dragon_knight_dragon_tail
    [5229] Count:    10, Perct:  0.65% -- dragon_knight_elder_dragon_form
    [5263] Count:    49, Perct:  3.19% -- omniknight_purification
    [5264] Count:    17, Perct:  1.11% -- omniknight_repel
    [5266] Count:     6, Perct:  0.39% -- omniknight_guardian_angel
    [5353] Count:    32, Perct:  2.08% -- spirit_breaker_charge_of_darkness
    [5354] Count:    23, Perct:  1.50% -- spirit_breaker_empowering_haste
    [5356] Count:    12, Perct:  0.78% -- spirit_breaker_nether_strike
    [5548] Count:    72, Perct:  4.69% -- bristleback_viscous_nasal_goo
    [5549] Count:   104, Perct:  6.77% -- bristleback_quill_spray
    [5637] Count:    49, Perct:  3.19% -- oracle_fortunes_end
    [5638] Count:     5, Perct:  0.33% -- oracle_fates_edict
    [5639] Count:    41, Perct:  2.67% -- oracle_purifying_flames
    [5640] Count:     8, Perct:  0.52% -- oracle_false_promise
    [5651] Count:    21, Perct:  1.37% -- winter_wyvern_arctic_burn
    [5652] Count:    36, Perct:  2.34% -- winter_wyvern_splinter_blast
    [5653] Count:    21, Perct:  1.37% -- winter_wyvern_cold_embrace
    [5654] Count:     6, Perct:  0.39% -- winter_wyvern_winters_curse
    [5691] Count:    11, Perct:  0.72% -- faceless_void_time_dilation
    Last edited by nostrademous; 12-06-2017, 05:59 AM.

    Comment


    • #32
      You also get the target of item or ability usages in the protobuff, correct? The reason I am asking is, I was wondering how it would serialize a hero eating a normal tree vs an iron tree vs a sprout tree.
      I ask because atm I don't think there is a way to target "non-map" trees.

      Also, since I assume it's an integer target, keep in mind that you'll have to always track the item to not assume the int is a unit vs a tree.
      I am mostly thinking of GetBotByHandle() calls here.
      Last edited by The Nomad; 12-07-2017, 10:58 AM.
      Explanations on the normal, high and very high brackets in replays: here, here & here
      Why maphacks won't work in D2: here

      Comment


      • #33
        No, the target is not provided as far as I know. Only for EventDamage messages.

        Comment


        • #34
          Interesting

          +1
          Going through the approach. A bit of novice myself on ML, will try to help

          Comment


          • #35
            Back from the Holidays. Starting to submodule and improve a Dota Simulator (which will be necessary) started by lenLRX into the project.

            Comment


            • #36
              @nostrademous Hey, awesome work! I'd love to contribute to this. I've been trying out several policy gradient and evolutionary techniques for toy problems, as well as for robot soccer (https://github.com/korroktheslavemaster/rl-algos super hacky code). From what I gather, your client/server model will not work in custom games since CMsgBotWorldState is not broadcasted in that mode (atleast not when I tried, maybe you can help?)? And without custom games how are you planning to make different environments (creep block only, last hit only etc.)?

              Comment


              • #37
                @theslavemaster I plan on supporting custom games eventually (and will default to using the polling CreateRemoteHTTPPost() to pass data), but currently working on implementing Dota2 simulator support (with help from @lenLRX) to allow for parallelized non-GUI learning of things that can easily be simulated.

                Comment


                • #38
                  OK, thanks. I wanted to do episodic training, where I can reset the environment (eg. despawn creeps, reposition heroes) to start a new episode, but I don't think it would be possible with this right now I hope that functionality is present in the simulator?

                  Comment


                  • #39
                    I went through the simulator code briefly. I feel like Dota's physics engine will be required for a lot of interesting tasks (creep blocking, even last hitting for melee heroes) and will definitely be required for more complex environments. I'm not sure if it's even feasible to get that into the simulator... what specific environments do you have in mind now which you're adding to the simulator?

                    Comment

                    Working...
                    X