Skip to content

lzhbrian/pysc2-minigame-ai

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

StarCraft II Minigames

  • Rule based game AI for 5 StarCraft II Minigames
    • max score achieved for these agents:
      • CollectMineralShards: 125
      • CollectMineralsAndGas: 5010
      • DefeatRoaches: 91
      • DefeatZerglingsAndBanelings: 220
      • BuildMarines: 132
  • Author

TOC

[TOC]

 

 

Usage

  • Files

    final_agent_lzh.py
    tactics.py
  • Install

    • Install StarcraftII from battle.net (or link for linux)
    • download minigame map in link, extract and put in to your StarcraftII/Maps/ directory
    • install pysc2, numpy as instructed (pip install pysc2, numpy)
    • put final_agent_lzh.py and tactics.py in your installed site-packages pysc2/agents path
      • for example ~\Anaconda3\Lib\site-packages\pysc2\agents\ (if you are using Anaconda)
  • Usage

    # CollectMineralShards
    python -m pysc2.bin.agent --map CollectMineralShards --agent pysc2.agents.final_agent_lzh.CollectMineralShards --use_feature_units
    
    # CollectMineralsAndGas
    python -m pysc2.bin.agent --map CollectMineralsAndGas --agent pysc2.agents.final_agent_lzh.CollectMineralsAndGas --use_feature_units
    
    # DefeatRoaches
    python -m pysc2.bin.agent --map DefeatRoaches --agent pysc2.agents.final_agent_lzh.DefeatRoaches --use_feature_units
    
    # DefeatZerglingsAndBanelings
    python -m pysc2.bin.agent --map DefeatZerglingsAndBanelings --agent pysc2.agents.final_agent_lzh.DefeatZerglingsAndBanelings --use_feature_units
    
    # BuildMarines
    python -m pysc2.bin.agent --map BuildMarines --agent pysc2.agents.final_agent_lzh.BuildMarines --use_feature_units

 

 

Overall Agent Structure

  • Overall structure pysc2

    • Definition
      • Tactic: one complete movement (e.g. train an SCV by a CommandCenter)
    • We notice that most tactic should contain 3 steps
      • check if this tactic should be used (e.g. check if we have a CommandCenter , and have enough minerals to train an SCV)
      • select the executor of this tactic, click one unit on the screen, e.g. select the CommandCenter)
      • execute the tactic (use the selected CommandCenter to train an SCV)
    • So we build a basic pipeline for every AI (shown in the figure above)
      • select_new_tactic: for each step, we first make a decision if we want to start a new tactic, or we are in the execution of a tactic.
      • select_tactic: if we want to start a new tactic, then we iteratively go through the tactics' criterion (check_available_func()) to select one.
      • choose_executer: After we choose the tactic, we return a select op (select_executer_func()) to select the executor we want to execute this tactic.
      • exec_selected_tactic: If we are in the execution of a tactic (i.e. we have chosen a tactic and select an executer in the previous step()), we return the execution function (exec_func()) to finally execute the tactic.
  • How to write a new agent?

    • Overall:

      • We have a base class TacticAgent in final_agent_lzh.py, which is inherited by other agents.
      • If you want to write a new agent, you need to inherit TacticAgent and rewrite the variable self.possible_tactic_list in the setup() function.
      • Items in self.possible_tactic_list are instances from class Tactic in tactics.py.
    • Example:

      import tactics
      tactic_no_op = tactics.Tactic(
          lambda *argv: True, # check_func
          lambda *argv: FUNCTIONS.no_op(), # select_executor_func
          lambda *argv: FUNCTIONS.no_op()  # execute_func
      )
      
      class NewAgent(TacticAgent):
          def setup(self, obs_spec, action_spec):
              super(NewAgent, self).setup(obs_spec, action_spec)
              self.posible_tactic_list = [
                  tactic_no_op,
                  ... # other tactics
              ]

Strategy

  • Strategy for each game: (Here we briefly summarize them. The code in final_agent_lzh.py is extremely clear and self-documented.)
    • CollectMineralShards
      • Let the two marine collect different mineral shards one by one
    • CollectMineralsAndGas
      • build a new CommandCenter
      • if SupplyDepot count < 3 and CommandCenter count >=2 and food_cap == food_used, then build SupplyDepot
      • if there is idle SCV, then let it harvest mineral
      • train SCV
    • DefeatRoaches
      • Defeat the one with the largest y pos
    • DefeatZerglingsAndBanelings
      • send 3 marines to kill Zerglings (be bait/pioneer to let Baneling explode)
      • After all Banelings are gone, send all army to attack all Zerglings
    • BuildMarine
      • if there is idle SCV, then let it harvest mineral
      • if food_cap == food_used, then build supply depot
      • if Barracks count < 7, then build Barracks
      • if Barracks count >= 7, then train marine
      • if SCV count < 20, then train SCV

 

 

Results

For each game, we run 10 times and record the results. We can see that we outperform DeepMind's best baseline in [1] in terms of mean score across 4 games (except DefeatRoaches) and some of our scores are very competitive compared to human players'.

  • CollectMineralShards

    Mean Std Max
    StarCraft GrandMaster in [1] 177 N/A 179
    DeepMind Human Player in [1] 133 N/A 142
    DeepMind best baseline in [1] 104 N/A 137
    Ours 113 6 125
  • CollectMineralsAndGas

    Mean Std Max
    StarCraft GrandMaster in [1] 7566 N/A 7566
    DeepMind Human Player in [1] 6880 N/A 6952
    DeepMind best baseline in [1] 3978 N/A 4130
    Ours 4802 100 5010
  • DefeatRoaches

    Mean Std Max
    StarCraft GrandMaster in [1] 215 N/A 363
    DeepMind Human Player in [1] 41 N/A 81
    DeepMind best baseline in [1] 101 N/A 373
    Ours 25 24 91
  • DefeatZerglingsAndBanelings

    Mean Std Max
    StarCraft GrandMaster in [1] 727 N/A 848
    DeepMind Human Player in [1] 729 N/A 757
    DeepMind best baseline in [1] 96 N/A 444
    Ours 108 41 220
  • BuildMarine

    Mean Std Max
    StarCraft GrandMaster in [1] 133 N/A 133
    DeepMind Human Player in [1] 138 N/A 142
    DeepMind best baseline in [1] 6 N/A 62
    Ours 127 5 132

Reference

[1] StarCraft II: A New Challenge for Reinforcement Learning. in ArXiv

Useful links

Some of the API usage is learned from the following links

License

MIT

Releases

No releases published

Packages

No packages published

Languages