[G1-Sync] Manual knowledge update
This commit is contained in:
@@ -1,66 +1,122 @@
|
||||
---
|
||||
id: wiki-2026-0508-micro-management
|
||||
title: Micro management
|
||||
title: Micro-management (RTS)
|
||||
category: 10_Wiki/Topics
|
||||
status: needs_review
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: []
|
||||
aliases: [Micro, RTS Micro, Unit Micro, StarCraft Micro]
|
||||
duplicate_of: none
|
||||
source_trust_level: A
|
||||
confidence_score: 0.92
|
||||
tags: [uncategorized]
|
||||
source_trust_level: B
|
||||
confidence_score: 0.85
|
||||
verification_status: applied
|
||||
tags: [game-design, rts, ai, alphastar, reinforcement-learning, starcraft, esports]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-08
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
inferred_by: Claude Opus 4.7 (auto-normalize 2026-05-08)
|
||||
tech_stack: { language: python, framework: pysc2|sc2|gymnasium }
|
||||
---
|
||||
|
||||
# [[Micro-management|Micro-management]]
|
||||
# Micro-management (RTS)
|
||||
|
||||
## 📌 한 줄 통찰 (The Karpathy Summary)
|
||||
마이크로 매니지먼트는 War Commander의 전투 시스템에서 단축키와 동적인 부대 관리를 통해 실시간으로 유닛의 행동을 조작하는 핵심 전술입니다. 2014년 2월에 도입된 '전투 컨트롤(Combat Controls)' 시스템을 기점으로, 정적인 방어 태세에서 벗어나 플레이어의 상황 인지와 세밀한 유닛 조작 능력이 중요해졌습니다[1]. 이는 AI의 경로 탐색 및 교전 논리를 역이용하여 요새화된 방어선을 무력화하는 데 필수적인 역할을 합니다[1, 2].
|
||||
> 한 줄: RTS에서 개별 유닛을 정밀 컨트롤(이동·공격·스킬)해 전투력을 극대화하는 행위 — APM·반응 속도·상황 인지의 종합. AlphaStar가 인간 상위 0.2%를 돌파한 RL 벤치마크.
|
||||
|
||||
## 📖 구조화된 지식 (Synthesized Content)
|
||||
* **전투 컨트롤(Combat Controls) 명령어 활용:** 마이크로 매니지먼트의 기본은 C2(Command and Control) 인터페이스를 통한 실시간 명령 하달입니다[1]. 플레이어는 공격 이동(A), 이동(M), 정지(S), 위치 사수(D), 자율 타격(F) 등의 명령어를 사용하여 전투 상황에 맞게 유닛을 통제해야 합니다[3, 4].
|
||||
* **단축키를 통한 세밀한 대형 관리:** 교전 중 부대 관리 효율을 높이기 위해 특정 단축키가 활용됩니다. 단축키 'X'를 사용하여 부대를 산개시킴으로써 박격포나 중장갑 플랫폼으로부터 받는 광역(AoE) 및 스플래시 데미지를 최소화할 수 있습니다[5, 6]. 또한, 'Shift+숫자' 단축키를 통해 다중 전선 공격을 수행할 특수 타격대(Strike teams)로 부대를 분할 지정할 수도 있습니다[5, 6]. 단축키 'B'를 누르면 모든 적 유닛의 체력 소모 상태를 확인할 수 있어 전략적인 타겟팅이 가능합니다[5, 6].
|
||||
* **유인 전술(Baiting) 및 AI 역이용:** 마이크로 매니지먼트의 가장 고급 기술이자 필수적인 요소는 적 AI의 추적 논리를 악용하는 '유인(Baiting)' 전술입니다[2, 7]. 방어 유닛이 '자율 타격(Fire at Will)'이나 '일반' 상태로 설정되어 있을 때, 비대칭 유닛(예: 대공 전차를 유인하기 위한 항공기 미끼 또는 중전차를 유인하기 위한 빠른 지상 유닛)을 미끼로 사용하여 기지의 방어 구역 밖으로 적을 끌어냅니다[7-9]. 이후 매복해 있던 카운터 유닛으로 해당 적을 파괴하는 'Bait and Bash' 기법이 주로 사용됩니다[8, 10].
|
||||
* **전술적 필수성:** 최상위 전투에서 전장은 단순히 초당 데미지(DPS)를 겨루는 것이 아니며, 이러한 마이크로 매니지먼트를 통해 굳건히 방어된 기지의 취약점을 뚫어내는 것이 승리의 필수 조건으로 작용합니다[2].
|
||||
## 핵심
|
||||
- **Macro vs Micro**: macro = 경제·생산·확장, micro = 유닛 컨트롤. 프로는 둘 다.
|
||||
- **APM**: Actions Per Minute. 인간 프로 200-400, AlphaStar 비공식 cap 280 (인간 수준 제한).
|
||||
- **핵심 기술**: focus fire, kiting (stutter step), spreading (스플래시 회피), flanking, target priority, 시거리 활용.
|
||||
- **AI 벤치마크**: SC2 (DeepMind PySC2/AlphaStar), Dota 2 (OpenAI Five), Honor of Kings (JueWu) — long-horizon, partial observation, multi-agent의 종합 시험대.
|
||||
- **현대 RL**: self-play + league training (AlphaStar), PPO/IMPALA, large-scale distributed.
|
||||
|
||||
## 🔗 지식 연결 (Graph)
|
||||
- **Related Topics:** [[Combat Controls|Combat Controls]], [[Baiting|Baiting]], [[Unit Stances|Unit Stances]]
|
||||
- **Projects/Contexts:** [[Command and Control (C2) Interface|Command and Control (C2) Interface]]
|
||||
- **Contradictions/Notes:** 마이크로 매니지먼트의 핵심인 '유인(Baiting)' 전술은 적 유닛의 AI 태세에 의존하기 때문에, 적 유닛이 '위치 사수(Hold Position)'나 '제자리 사수(Stand Ground)' 상태로 고정되어 있는 경우에는 효과가 없습니다[7, 8].
|
||||
## 결정 기준
|
||||
| 목표 | 접근 |
|
||||
|---|---|
|
||||
| RTS AI 학습 환경 | PySC2 (SC2), microRTS (가벼움), Stratagus |
|
||||
| 단순 micro 봇 | 스크립트 + finite state machine |
|
||||
| 강화학습 | PPO + LSTM/transformer policy |
|
||||
| 멀티 유닛 협동 | MARL (QMIX, MAPPO) |
|
||||
| 모방 학습 시작 | Replay 데이터 → behavior cloning |
|
||||
| 대규모 학습 | League / population-based training |
|
||||
|
||||
---
|
||||
*Last updated: 2026-04-27*
|
||||
## 💻 패턴
|
||||
|
||||
## 🤖 LLM 활용 힌트 (How to Use This Knowledge)
|
||||
### PySC2 minimal agent
|
||||
```python
|
||||
from pysc2.agents import base_agent
|
||||
from pysc2.lib import actions, features
|
||||
|
||||
**언제 이 지식을 쓰는가:**
|
||||
- *(TODO)*
|
||||
class MicroAgent(base_agent.BaseAgent):
|
||||
def step(self, obs):
|
||||
super().step(obs)
|
||||
marines = [u for u in obs.observation.feature_units
|
||||
if u.unit_type == features.PlayerRelative.SELF and u.alliance == 1]
|
||||
if not marines: return actions.FUNCTIONS.no_op()
|
||||
target = pick_lowest_hp_enemy(obs)
|
||||
if target is not None:
|
||||
return actions.FUNCTIONS.Attack_screen("now", [target.x, target.y])
|
||||
return actions.FUNCTIONS.no_op()
|
||||
```
|
||||
|
||||
**언제 쓰면 안 되는가:**
|
||||
- *(TODO)*
|
||||
### Kiting (stutter step) 의사 코드
|
||||
```python
|
||||
def stutter_step(unit, enemy):
|
||||
if unit.weapon_ready:
|
||||
return Action.attack(enemy)
|
||||
if dist(unit, enemy) < unit.range and enemy.range > unit.range:
|
||||
return Action.move(away_from(enemy))
|
||||
return Action.move(toward(enemy)) # close gap
|
||||
```
|
||||
|
||||
## 🧪 검증 상태 (Validation)
|
||||
### Focus fire (target priority)
|
||||
```python
|
||||
def focus_target(my_units, enemies):
|
||||
# threat = damage * speed / hp_remaining
|
||||
return min(enemies, key=lambda e: e.hp / max(e.threat, 1))
|
||||
```
|
||||
|
||||
- **정보 상태:** needs_review
|
||||
- **출처 신뢰도:** A
|
||||
- **검토 이유:** *(P-Reinforce Phase 1 자동 정규화. 본문 검증 필요.)*
|
||||
### PPO with PySC2 (sketch)
|
||||
```python
|
||||
import gymnasium as gym
|
||||
from stable_baselines3 import PPO
|
||||
env = gym.make("SC2MoveToBeacon-v0") # 단순 micro env
|
||||
model = PPO("MultiInputPolicy", env, n_steps=2048, batch_size=64,
|
||||
learning_rate=3e-4, gamma=0.99, verbose=1)
|
||||
model.learn(total_timesteps=2_000_000)
|
||||
```
|
||||
|
||||
## 🧬 중복 검사 (Duplicate Check)
|
||||
### League training 개념 (AlphaStar)
|
||||
```python
|
||||
# Main agents + Main exploiters + League exploiters; PFSP matchmaking
|
||||
# Prioritized Fictitious Self-Play: 약한 상대일수록 자주 매칭하지 않음
|
||||
```
|
||||
|
||||
- **기존 유사 문서:** *(TODO: 인덱서 클러스터 리포트 참조)*
|
||||
- **처리 방식:** UPDATE (자동 정규화)
|
||||
- **처리 이유:** Phase 1 정규화 — 옛 템플릿/누락 필드 보강.
|
||||
### Replay-based behavior cloning
|
||||
```python
|
||||
# 1) replay parse → (state, action) pairs
|
||||
# 2) supervised cross-entropy on actions
|
||||
# 3) RL fine-tune from BC checkpoint (jumpstart RL exploration)
|
||||
```
|
||||
|
||||
## ⚠️ 모순 및 업데이트 (Contradictions & Updates)
|
||||
## 🔗 Graph
|
||||
- 상위: [[Game-AI]] · [[Reinforcement-Learning]] · [[RTS-Games]]
|
||||
- 관련: [[AlphaStar]] · [[OpenAI-Five]] · [[PySC2]] · [[MARL]] · [[PPO]] · [[Self-Play]] · [[League-Training]]
|
||||
- 비교: [[Macro-management]] (반대 개념)
|
||||
|
||||
- **과거 데이터와의 충돌:** 없음
|
||||
- **정책 변화:** 없음
|
||||
## 🤖 LLM 활용
|
||||
- 게임 디자인 토론(LLM brainstorm): 새 유닛 micro skill 설계, 카운터 분석.
|
||||
- 코드 어시스트: PySC2 보일러플레이트, replay parser.
|
||||
- LLM 단독으로 RTS 플레이는 비현실적 (실시간·연속 액션 부적합) — RL과 결합.
|
||||
|
||||
## 🕓 변경 이력 (Changelog)
|
||||
## ❌ 안티패턴
|
||||
- **APM만 추구** — 의미 없는 클릭 (spam). EPM (effective APM)이 중요.
|
||||
- **모든 유닛 attack-move** — 마이크로 포기. 부대 분리·focus fire·kiting 조합.
|
||||
- **RL 환경에서 sparse reward만** — 학습 안 됨. shaping (kill, hp 차이) + curriculum.
|
||||
- **single-agent로 multi-unit RTS 학습** — 정책 collapse. 적절한 abstraction (군 단위) 또는 MARL.
|
||||
- **AlphaStar 재현 시도 with 작은 GPU** — 수만 TPU-day 필요. microRTS·SMAC 같은 축소 환경부터.
|
||||
|
||||
| 날짜 | 변경 내용 | 처리 방식 | 신뢰도 |
|
||||
|------|-----------|-----------|--------|
|
||||
| 2026-05-08 | P-Reinforce Phase 1 정규화 (frontmatter + 헤더 표준화) | UPDATE | A |
|
||||
## 🧪 검증 / 중복
|
||||
- 중복 후보 없음.
|
||||
- 검증: 표준 task — MoveToBeacon, CollectMineralShards, DefeatRoaches (PySC2 mini-games)·SMAC 시나리오 win-rate.
|
||||
|
||||
## 🕓 Changelog
|
||||
- 2026-05-08 | Phase 1 — 자동 시드.
|
||||
- 2026-05-10 | Manual cleanup — PySC2/PPO/league 패턴, kiting 의사코드, RL 안티패턴 정리.
|
||||
|
||||
Reference in New Issue
Block a user