μ„Έκ³„μ΅œκ³ μ˜ κ²Œμž„ AI μ „λ¬Έκ°€ 20λͺ…이 λ§Œλ“  μ±…


제λͺ©μ€ Game AI 폭둜! μ •λ„κΈ΄ν•œλ°, κ·Έλƒ₯ 재발견이라고 ν•˜μž.


26a8c968f2d73ab64e81d2b628f1706fd5470b

ꡬ맀처링크


7.1 μ„œλ‘ 

아직 λ°œν‘œλ˜μ§€ μ•Šμ€ 타이틀을 κ°œλ°œν•˜λ˜ 쀑 (우리) AI νŒ€μ€ λ‚œκ΄€μ— λΆ€λ”ͺν˜”μŠ΅λ‹ˆλ‹€.

행동 트리(비헀이비어 트리,Behaviour Tree)κ°€ μ˜μ‚¬ κ²°μ • μ•„ν‚€ν…μ²˜λ‘œ μ„ νƒλ˜μ—ˆμ§€λ§Œ λ°˜μ‘ν˜• 행동 트리(RBT)λŠ” μ•„λ‹ˆμ—ˆμŠ΅λ‹ˆλ‹€.

그리고 νŠΈλ¦¬κ°€ μ΄λ²€νŠΈμ— λ°˜μ‘ν•˜λ €λ©΄ λ°˜μ‘κ³Ό 그에 이λ₯΄λŠ” 쑰건이 트리의 일뢀가 λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

λ°˜μ‘ν˜• 행동 트리(RBT)λŠ” 이 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ μ„€κ³„λ˜μ—ˆμ§€λ§Œ,

이 μ•„ν‚€ν…μ²˜κ°€ ν•΄κ²°ν•˜κ³ μž ν•˜λŠ” λ¬Έμ œμ™€ 이 μ ‘κ·Ό 방식을 κ΅¬ν˜„ν•˜λŠ” 이유λ₯Ό μžμ„Ένžˆ μ•Œμ•„λ³΄κΈ° 전에 기쑴의 행동 νŠΈλ¦¬μ— λŒ€ν•΄ κ°„λž΅νžˆ μ‚΄νŽ΄λ³Ό ν•„μš”κ°€ μžˆμŠ΅λ‹ˆλ‹€.


(μ—­μ£Ό: FSM을 κ°œμ„ ν•˜κΈ°μœ„ν•΄μ„œ ν—€μΌλ‘œ νŒ€μ΄ λ§Œλ“  νŠΈλ¦¬κ°€ 비헀이비어 트리고, 행동 트리라고 뢈림. 근데 이 비헀이비어 트리λ₯Ό κ°œμ„ ν•˜κΈ° μœ„ν•΄μ„œ λ°˜μ‘ν˜• BTκ°€ λ‚˜μ˜€κ²Œλ¨)


(μ—­μ£Ό2: FSM->HFSM->BT->RBT μ •λ„μ˜ νλ¦„μœΌλ‘œ λ˜μžˆλŠ”λ° FSM의 λ¬Έμ œμ μ€ μ‹œμŠ€ν…œμ— λ°˜μ‘μ„±μ΄ λ†’μ„μˆ˜λ‘, 즉 응닡과 μƒν˜Έμž‘μš©μ΄ λŠ˜μ–΄λ‚ μˆ˜λ‘, 더 λ§Žμ€ μƒνƒœμ „ν™˜μ΄ ν•„μš”ν•΄μ§€λ―€λ‘œ μ½”λ“œμ˜ λͺ¨λ“ˆμ„±μ΄ 저해됨. λ”°λΌμ„œ 이 문제λ₯Ό ν•΄κ²°ν•˜κΈ°μœ„ν•΄μ„œ Complexity of the state MachineλΌλŠ” κ±Έ λ„μž…ν–ˆμ§€λ§Œ, μ—­μ‹œ λͺ¨λ“ˆμ„±κ³Ό λ°˜μ‘μ„±μ„ 이유둜 비헀이비어 νŠΈλ¦¬κ°€ λ„μž…λ¨,)


(μ—­μ£Ό3: 기본적으둜 각각의 FSM은 ν™•μž₯성에 ν•œκ³„κ°€ 있고, 비헀이비어 νŠΈλ¦¬λŠ” μ œμ–΄ λ…Έλ“œ(Control Nodes)-μ•‘μ…˜ λ…Έλ“œ(Action Node)-μƒνƒœ λ…Έλ“œ(Condition Nods)둜 κ΅¬μ„±λ˜λŠ”λ°, 비헀이비어 νŠΈλ¦¬λŠ” μ—¬κΈ°μ„œ Success λ˜λŠ” Failureλ₯Ό μ‚¬μš©ν•΄μ„œ μ „κ°œν•¨. λ¬Όλ‘  비동기(Asynchronous) λ™μž‘μ˜ κ²½μš°μ—λŠ” Running을 μ‚¬μš©ν•œλ‹€λŠ” μ΄μ•ΌκΈ°λŠ” λ“€μ—ˆμ§€λ§Œ, 이뢀뢄은 λ‚˜λ‘œμ¨λ„ μžμ„Έν•œ 정보λ₯Ό λͺ»λ΄„.)


(μ—­μ£Ό4: FSMκ³Ό 비헀이비어 트리λ₯Ό μ–Έμ œ μ¨μ•Όν•˜λ‚˜ 이야기듀이 λ§Žμ€λ°, 기본적으둜 μž‘μ€ κ²Œμž„μΌμˆ˜λ‘ FSM을, 큰 κ²Œμž„μΌμˆ˜λ‘ 비헀이비어 트리λ₯Ό ν•˜λΌκ³  함. μ΄μœ λŠ” μƒνƒœκ°€ μ μ„μˆ˜λ‘ FSM은 직관적이고 μ‰½κΈ°λ•Œλ¬Έ)


7.2 행동 트리(비헀이비어 트리)


행동 νŠΈλ¦¬λŠ” μ˜€λž˜μ „λΆ€ν„° μ‚¬μš©λ˜μ–΄ μ™”μŠ΅λ‹ˆλ‹€.

μ›λž˜λŠ” Damian Islaκ°€ ν—€μΌλ‘œ 2λ₯Ό κ°œλ°œν•  λ•Œ μœ ν•œ μƒνƒœ λ¨Έμ‹ (FSM)을 κ°œμ„ ν•˜κΈ° μœ„ν•΄ κ°œλ°œν–ˆμŠ΅λ‹ˆλ‹€(Isla, 2005).

κ·Έ μ΄ν›„λ‘œ λ‹€μ–‘ν•œ κ²Œμž„μ—μ„œ μ‚¬μš©λ˜μ–΄ μˆ˜λ§Žμ€ 기사와 연ꡬ 논문이 μž‘μ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

비헀이비어 νŠΈλ¦¬λŠ” 이제 업계 μ „λ°˜μ—μ„œ AI 비헀이비어에 μ„ ν˜Έλ˜λŠ” μ ‘κ·Ό λ°©μ‹μž…λ‹ˆλ‹€.

심지어 μ—ν”½μ˜ 언리얼 μ—”μ§„μ—λŠ” 비헀이비어 νŠΈλ¦¬κ°€ 엔진에 λ‚΄μž₯λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.


일반적으둜 행동 νŠΈλ¦¬λŠ” μ‹€ν–‰ μœ ν˜•μ„ μ§€μ‹œν•˜λŠ” 볡합 λ…Έλ“œ(일반 트리 μš©μ–΄λ‘œ λΆ„κΈ° λ…Έλ“œ)와 μΌμ’…μ˜ λ‘œμ§μ„ μ‹€ν–‰ν•˜λŠ” 행동/μž‘μ—… λ…Έλ“œ(리프 λ…Έλ“œ)둜 κ΅¬μ„±λœ κ·Έλž˜ν”„λ‘œ,

κ΅¬μ–΄μ²΄λ‘œ 'Do thing(μž‘λ™ν•œλ‹€)'라고 ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

이듀은 거의 항상 νŠΈλ¦¬κ°€ μ„œλ‘œ 데이터λ₯Ό κ³΅μœ ν•˜κΈ° μœ„ν•œ 곡톡 데이터 μ €μž₯μ†ŒμΈ λΈ”λž™λ³΄λ“œ(Black Board)와 μ—°κ΄€λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

λΈ”λž™λ³΄λ“œλŠ” 행동 νŠΈλ¦¬μ™€ μΌλŒ€λ‹€ 관계λ₯Ό κ°€μ§€λ―€λ‘œ ν•˜λ‚˜μ˜ λΈ”λž™λ³΄λ“œκ°€ μ—¬λŸ¬ 행동 νŠΈλ¦¬μ— 연결될 수 μžˆμ§€λ§Œ,

각 행동 νŠΈλ¦¬λŠ” 였직 ν•˜λ‚˜μ˜ λΈ”λž™λ³΄λ“œμ—λ§Œ 연결될 수 μžˆμŠ΅λ‹ˆλ‹€.

μ΄λŠ” ν•œ μ—μ΄μ „νŠΈμ˜ 행동 νŠΈλ¦¬μ—μ„œ 데이터λ₯Ό μ„€μ •ν•œ λ‹€μŒ μ™„μ „νžˆ λ‹€λ₯Έ 행동 트리의 λ‹€λ₯Έ μ—μ΄μ „νŠΈκ°€ μ‚¬μš©ν•  수 있기 λ•Œλ¬Έμ— μ‹œμŠ€ν…œμ˜ μœ μ—°μ„±μ„ 크게 λ†’μ—¬μ€λ‹ˆλ‹€.


각 μ—…λ°μ΄νŠΈλ§ˆλ‹€ νŠΈλ¦¬λŠ” μ–΄λ–€ μž‘μ—… λ…Έλ“œκ°€ μ‹€ν–‰ν•˜κΈ°μ— κ°€μž₯ μ ν•©ν•œμ§€ ν‰κ°€ν•˜κ³  νŠΉμ • μž‘μ—… λ…Έλ“œκ°€ 참을 λ°˜ν™˜ν•  λ•ŒκΉŒμ§€ λͺ¨λ“  λ…Έλ“œλ₯Ό μœ„μ—μ„œ μ•„λž˜λ‘œ, μ™Όμͺ½μ—μ„œ 였λ₯Έμͺ½μœΌλ‘œ μˆœμ„œλŒ€λ‘œ μ§„ν–‰ν•©λ‹ˆλ‹€.

κ°€μž₯ 일반적으둜 μ‚¬μš©λ˜λŠ” 볡합 λ…Έλ“œμ™€ κ·Έ μš©λ„μ— λŒ€ν•œ κ°„λž΅ν•œ μ„€λͺ…은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:


μ‹œν€€μŠ€(Sequence) - μ΄λŸ¬ν•œ 볡합 λ…Έλ“œλŠ” λͺ¨λ“  λ…Έλ“œκ°€ 성곡을 λ°˜ν™˜ν•  λ•ŒκΉŒμ§€ μ™Όμͺ½μ—μ„œ 였λ₯Έμͺ½μœΌλ‘œ 각 μžμ‹ λ…Έλ“œλ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.


선택기/폴백(Selector)/(FallBack) - μ΄λŸ¬ν•œ 볡합 λ…Έλ“œλŠ” 적어도 ν•˜λ‚˜ μ΄μƒμ˜ μžμ‹ λ…Έλ“œκ°€ 성곡을 λ°˜ν™˜ν•  λ•ŒκΉŒμ§€ 각 μžμ‹ λ…Έλ“œλ₯Ό μž„μ˜μ˜ μˆœμ„œλ‘œ μ‹€ν–‰ν•©λ‹ˆλ‹€.


병렬(Parallel) - μ΄λŸ¬ν•œ 볡합 λ…Έλ“œλŠ” ν•˜μœ„ λ…Έλ“œλ₯Ό λ™μ‹œμ— μ‹€ν–‰ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ 볡합 λ…Έλ“œλŠ” n개의 μžμ‹ λ…Έλ“œ 쀑 일뢀인 m개의 λ…Έλ“œκ°€ μ„±κ³΅ν•˜λ©΄ 성곡을 λ°˜ν™˜ν•˜κ³ , n개의 μžμ‹ λ…Έλ“œκ°€ λͺ¨λ‘ μ‹€νŒ¨ν•˜λ©΄ 거짓을 λ°˜ν™˜ν•©λ‹ˆλ‹€. '병렬'μ΄λΌλŠ” μš©μ–΄κ°€ μ‚¬μš©λ˜μ§€λ§Œ 이 ν”„λ‘œμ„ΈμŠ€λŠ” 일반적으둜 μ§„μ •ν•œ 병렬 μ²˜λ¦¬κ°€ μ•„λ‹™λ‹ˆλ‹€. 코루틴에 더 κ°€κΉμŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, 각 ν‹±μ—μ„œ 각 μžμ‹ ν΄λž˜μŠ€λŠ” μ™Όμͺ½μ—μ„œ 였λ₯Έμͺ½μœΌλ‘œ 순차적으둜

κ°œλ³„μ (individually)으둜 ν‹±ν•˜κ³  λ‹€μŒ ν‹±κΉŒμ§€ μΌμ‹œ μ€‘λ‹¨λ©λ‹ˆλ‹€.


(μ—­μ£Ό: μ œμ–΄λ…Έλ“œμ˜ ν•˜μœ„ λΆ€λ₯˜λ‘œ μ‹œν€€μŠ€ λ…Έλ“œ- λͺ¨λ“  μžμ‹ λ…Έλ“œλ₯Ό 순차적 μ‹€ν–‰), μ…€λ ‰ν„° λ…Έλ“œ- μžμ‹ λ…Έλ“œμ€‘ ν•˜λ‚˜λΌλ„ μ„±κ³΅ν•˜λ©΄ μ„±κ³΅μœΌλ‘œ μ’…λ£Œλ˜κ³ , λͺ¨λ“  μžμ‹ λ…Έλ“œκ°€ μ‹€νŒ¨ν•˜λ©΄ μ’…λ£Œλ¨, 병렬 λ…Έλ“œλŠ” μ—¬λŸ¬ μž‘μ—…μ„ λ™μ‹œμ— μ‹œν‚€λŠ” μ œμ–΄λ…Έλ“œ, μ € μœ„μ— 3κ°œλŠ” νŠΉλ³„ν•œ μ œμ–΄ λ…Έλ“œλΌκ³  μ΄ν•΄ν•˜λ©΄λ¨)


λΈ”λž™λ³΄λ“œ 외에도 일반적으둜 ν•˜μœ„ 트리의 λ£¨νŠΈμ—μ„œ 루프/반볡 λ°μ½”λ ˆμ΄ν„°λ₯Ό μ‚¬μš©ν•˜μ—¬ νŠΉμ • ν•˜μœ„ 트리λ₯Ό λ°˜λ³΅ν•˜κ±°λ‚˜ λ°˜μ „ λ°μ½”λ ˆμ΄ν„°λ₯Ό μ‚¬μš©ν•˜μ—¬ 성곡을 μ‹€νŒ¨λ‘œ λ˜λŠ” κ·Έ λ°˜λŒ€λ‘œ λ’€μ§‘λŠ” λ“± κ³ μœ ν•œ μ •μ±…μœΌλ‘œ ν•˜μœ„ λ…Έλ“œλ₯Ό μˆ˜μ •ν•˜λŠ” λ°μ½”λ ˆμ΄ν„° λ…Έλ“œκ°€ μžˆμŠ΅λ‹ˆλ‹€.


이 외에도 μ—¬λŸ¬ κ°€μ§€κ°€ μžˆμ§€λ§Œ μš”μ μ„ νŒŒμ•…ν•˜κΈ°μ—λŠ” μΆ©λΆ„ν•©λ‹ˆλ‹€.


μœ„μ—μ„œ μ–ΈκΈ‰ν•œ λͺ¨λ“  λ…Έλ“œλ₯Ό κ²°ν•©ν•˜λ©΄ λ©‹μ§„ AI μ—μ΄μ „νŠΈλ₯Ό λΉ λ₯΄κ²Œ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€. 이제 λ°”λ‘œ κ·Έλ ‡κ²Œ ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.


(μ—­μ£Ό: λΈ”λž™λ³΄λ“œλŠ” AI 브레인이라고 ν”νžˆλ“€ μ§€μΉ­ν•˜λŠ”λ°, μ‰½κ²Œ λ§ν•΄μ„œ λΈ”λž™λ³΄λ“œ=칠판, 칠판 아킀텍쳐라고도 ν•˜λŠ”λ° λ‹€λ₯Έ 데이터λ₯Ό λ„˜κ²¨μ€„λ €κ³  ν• λ•Œ, μ™ΈλΆ€ 데이터 μ €μž₯μ†Œλ‘œ μ΄μš©λ˜λŠ” 아킀텍쳐 기법을 말함.)


-λ‚˜μ€‘μ— μ‹œκ°„λ‚˜λ©΄ 2편 λ²ˆμ—­ν•¨