728x90
스타크래프트 2 인공지능을 본격적으로 구현하고자
갈치와 서로 머리를 맞대어 생각한 결과
봇의 이름과 종족을 정하였습니다.
종족은 테란으로 하기로 결정하였습니다.
이름은 '실험용 기계', '더 봇 (The Bot)', '스타 플레티넘 봇'등의 안건이 나왔으나
어차피 재미로 만드는 봇이기도 하고, 구현하고 싶은 모든 기능들을 다 넣는 잡동사니처럼 만들 것 같기에
'하울의 움직이는 성'도 생각하였으나, 위 모든 안건들과 생각들을 잊어버리기 위해 술 이름으로 하기로 하였습니다.
소주나, 막걸리 같은 술도 생각하였으나, 테란 설정 상 제정신이 박혀있는 사람들이 거의 없다는 점을 참고하여
봇의 이름을 '압생트'로 결정하였다.
먼저 #1에서 설정한 것을 토대로 먼저 모듈을 불러오고
작업을 시작하겠습니다.
from pysc2.agents import base_agent
from pysc2.env import sc2_env
from pysc2.lib import actions, features
from absl import app
그런 다음 클래스를 정의를 해줘야하는 데, 심플하게 TerranAgent로 지었다.
class TerranAgent(base_agent.BaseAgent):
def step(self, obs):
super(TerranAgent, self).step(obs)
return actions.FUNCTIONS.no_op()
미리 PySC2의 로직을 설명하다면, 매우 단순한 로직을 지니고 있다.
초기화 및 실행 → 실행 → 현재 상황 파악 → 액션 → 게임이 끝났는가? (예) → 초기화 및 종료. (아니요) → 현재 상황 파악으로 돌아감
그런다음 봇이 작동하는 메인을 작성할 것이다.
def main(unused_argv):
agent = TerranAgent()
try:
while True:
with sc2_env.SC2Env(
map_name="Automaton", # 맵을 오토매이튼으로 세팅
players=[sc2_env.Agent(sc2_env.Race.terran),
sc2_env.Bot(sc2_env.Race.random,
sc2_env.Difficulty.very_easy)
],
# 상대방은 봇으로 할 것이며, 종족은 랜덤. 난이도 매우 쉬움
# 여기에 다른 agent 설정 가능
agent_interface_format=features.AgentInterfaceFormat(
feature_dimensions=features.Dimensions(screen=84, minimap=64)
),
step_mul=16,
# 액션 설정. 8 -> 300APM. 16 -> 150APM
game_steps_per_episode=0,
# 기본값은 30분 이지만, 현재는 endless 로 설정
visualize=True
# 스크린 과 미니맵 해상도 설정
# PySC2 2.0에서는 RGB 레이어 를 추가할 수 있음
) as env:
agent.setup(env.observation_spec(), env.action_spec())
timeSteps = env.reset()
agent.reset()
while True:
step_actions = [agent.step(timeSteps[0])]
if timeSteps[0].last():
break
timeSteps = env.step(step_actions)
except KeyboardInterrupt:
pass
그런 다음 마지막으로 실행 코드를 2줄만 적으면 완료된다.
if __name__ == "__main__":
app.run(main)
위 형식대로 작성을 한 후, 실행을 하면
오 토매 이튼으로 맵을 설정하고
아무런 기능을 하지않는 테란 봇이 완성된다.
다음은 건설로봇들을 사용하여, 보급고와 병영을 지은 후, 병영에서 해병들을 생산하는 것까지 구현하도록하겠다.
'스타크래프트2 봇' 카테고리의 다른 글
스타크래프트2 인공지능 봇을 만들어보자 (#5) (0) | 2021.08.07 |
---|---|
스타크래프트2 인공지능 봇을 만들어보자 (#4) (0) | 2021.08.06 |
스타크래프트2 인공지능 봇을 만들어보자 (#3) (0) | 2021.08.05 |
스타크래프트2 인공지능 봇을 만들어보자 (#1) (0) | 2021.08.02 |
스타크래프트2 인공지능 봇을 만들어보자 (#0) (0) | 2021.07.29 |