์ง์ง ๋ฉฐ์น ๋์ ๊ฐ๊ณ ์ํจ. ์ธ๊ณ ์ํ(World State)๋ฅผ ์ด๋ป๊ฒ AI๊ฐ ๋ฐ์๋ค์ผ ์ ์๋ ํํ๋ก ์กฐ์งํ๋๊ฐ, ์ด ๋ถ๋ถ์์ ๋งํ๊ฐ์ง๊ณ ์ง์ง ๋ณ ์ง์ ๋คํจ. ์ด๊ฒ ์ ์ด๋ ค์ ๋๋ฉด ๋ฌ์คํธ๋ก ํฌ์ธํฐ ์บ์คํ ํ๋ ๋ฒ์ ๋ชฐ๋์ด์(์ด์ ๋ ์) ๋ค์ํ ํ์ ์ ๋ฐ์ดํฐ ๋ฐ์๋ค์ผ ์ ์๋ ๋ฐฐ์ด ๋ง๋๋๋ฐ ๊ฐ๋ป์งํ๊ฑฐ๋ . ๊ทธ์ ๋ํด ๋ด๊ฐ ์ฐ๋ ์์ง ํน์ฑ์ AI๊ฐ ๊ผด๋ฆด ๋๋ง๋ค ๊ฑ ๋ชจ๋ ๋ฐ์ดํฐ์ ์ ์ํด์ ์ํ๋๊ฑฐ ๋ง๊ตฌ์ก์ด๋ก ๋ฝ์์ฌ๋ฆด ์ ์๋ ๊ทธ๋ฐ๊ฒ ์ด๋ ค์์ ๊ทธ ๊ตฌ์กฐ๋ฅผ ์ด๋ป๊ฒ ์งค์ง๋ ๋งํ๊ณ ... ๊ทธ๋๋ ๋ผ๋๋ ์ด์ ๋๋์ด ๋ง๋ฌ. ์ค๋์ด๋ ๋ด์ผ์ด๋ฉด ๋์ถฉ ๋ญ ์ฌ๋ฆด ์ ์์๊ฑฐ ๊ฐ๋ค.
AI๋ ์ฒ์์๋ GOAP์ผ๋ก ํ๋ ค ํ๋๋ฐ, ์ค๊ฐ์ ๋งํ๋ค๊ฐ ์ด๊ฒ์ ๊ฒ ๋ง ์ง์ด๋ค์ด๋ณด๋ ๊ณผ์ ์์ HTN์ผ๋ก ๋์ด๊ฐ. ์์ธํ๊ฑด ์ด ์ํฐํด(http://www.gameaipro.com/GameAIPro/GameAIPro_Chapter12_Exploring_HTN_Planners_through_Example.pdf) ๋ณด๋ฉด ๋์ด.
๋งํ๋ ๋ถ๋ถ์ ๋ํ ํด๊ฒฐ์ฑ ๋ค.
1. ๋ก์ง์ ๊ตฌ์กฐ์ฒด์ ๋ด๊ธด๋ค.
2. Compound Task์ Primitive Task๋ ๋ชจ๋ ํ๋์ ๋์ผํ Task ํธ๋ ์์ ๊ตฌํํ๋ ๊ฐ๊ธฐ ๋ค๋ฅธ ๊ตฌ์กฐ์ฒด์ด๋ค.
3. ๊ฐ๊ธฐ ๋ค๋ฅธ Operator๋ ๋ชจ๋ ํ๋์ ๋์ผํ Operator ํธ๋ ์์ ๊ตฌํํ๋ ๊ฐ๊ธฐ ๋ค๋ฅธ ๊ตฌ์กฐ์ฒด์ด๋ค.
4. ๋ชจ๋ Operator๋ ์ค์ง ํ๋์ ์ธ์คํด์ค๋ง์ ๊ฐ์ง๋ฉฐ, ๊ทธ๊ฒ๋ค์ ๋ชจ๋ Operator์ ์ธ์คํด์ค๋ฅผ ๋ด์ ๋ฒกํฐ์ ์ ์ฅ๋๋ค.
5. ๋ชจ๋ Operator๋ u8 ์ธ๋ฑ์ค๋ฅผ ํตํด ์ํด ์๋ ๋ฒกํฐ๋ก๋ถํฐ ์ธ๋ฑ์ฑ ๋๋ค.
6. ๋ชจ๋ AI ํ๋์๋ ํ์ฌ ์ง๋ ์ธ๊ณ์ ๋ณด์ ๋ํ ํด์ฌ๋งต์ ๊ฐ์ง๋ค.
7. ํด์ฌ๋งต์ ํค๋ ํ ์ด๊ฑฐํ์ variant์ด๋ฉฐ ๊ฐ์ Box๋ค.
8. Primitive Task ๊ตฌ์กฐ์ฒด๋ ์ํ Operator๋ค์ ์ธ๋ฑ์ค๋ฅผ ๋ณด๊ดํ๋ ๋ฒกํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
9. Operator๊ฐ ํธ์ถ ๋ ๋ ๊ทธ๊ฒ์ด ์ํด์ ธ ์๋ Primitive Task๋ ์ธ๊ณ์ ๋ณด ํด์ฌ๋งต์ผ๋ก๋ถํฐ ์ด๋ ํค์ ๋ด๊ธด ๊ฐ์ ์ฌ์ฉํด์ผํ ์ง๋ฅผ ํค๊ฐ ๋ด๊ธด ๋ฐฐ์ด์ ์ ๊ณตํจ์ผ๋ก์ ์๋ ค์ค๋ค.
ECS ์์คํ ์์ AI ํ๋์๋ component์ธ๋ฐ ์ด AI ํ๋์๊ฐ ์ค์ง ๋ฐ์ดํฐ๋ง์ ๊ฐ์ง๊ณ ์์ผ๋ฉด ๋ก์ง์ ์ด๋์ ๋ณด๊ดํ๊ณ ์ด๋ป๊ฒ ํธ์ถํ๊ณ ์ด๋ป๊ฒ ๊ทธ ๋ก์ง์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ ์ ์์๊น, ์ด๊ฒ ์ง์ง ์ด๋ ค์ ๋๊ฑฐ ๊ฐ๋ค.
ํด๋น ๋๊ธ์ ์ญ์ ๋์์ต๋๋ค.
HTN์์ ํ๋์๋ ์ธ๊ณ์ ๋ณด์ Task๋ค์ ๊ฐ์ง๊ณ ์๋๋ฐ, ์ฌ๊ธฐ์ Task๋ ์กฐ๊ฑด๊ณผ ํจ๊ณผ๋ฅผ ๊ฐ์ง๊ณ ์์. Task์ ์กฐ๊ฑด์ ์ธ๊ณ์ ๋ณด๋ฅผ ๋ณด๊ณ ์กฐ๊ฑด์ด ๋ง์์ Task๊ฐ ๊ฐ๋ฅํ๋ค ์๋ ค์ฃผ๋๊ฑฐ๊ณ , ํจ๊ณผ๋ Task๊ฐ ์ํ ๋ ์ ์ธ๊ณ์ ๋ณด์ ์ด๋ค ๋ณํ๊ฐ ๊ฐํด์ง๋์ง๋ฅผ ์๋ ค์ฃผ๋ ๊ฒ. ํ๋์๋ ์์ ์ด ๊ฐ์ง๊ณ ์๋ Task๋ค๊ณผ ์ธ๊ณ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ Task๋ฅผ ๋ ์์ Task๋ก, ๊ทธ๋ฆฌ๊ณ ๋ค์ ๊ทธ๋ณด๋ค ์์ Operator ๋จ์๋ก ์ชผ๊ฐ ๊ณํ์ ๋ง๋ฌ. ์ฌ๊ธฐ์ ๋ด๊ฐ ์ด๋ ค์ ๋ ๊ฒ์, ์ด๋ป๊ฒ ํด์ผ ํ๋์๊ฐ ๋ฌด์จ Task๋ฅผ ๊ฐ์ง๊ณ ์๋์ง๋ฅผ ๋ฌต์งํ Task ๊ตฌ์กฐ์ฒด๋ฅผ ํ๋ํ๋ ๋ค ํ๋์์ ์ง์ด๋ฃ์ด ํฌํจ์ํค์ง ์๊ณ ๋ํ๋ผ ์ ์์๊น. ๊ทธ๋ฆฌ๊ณ ์ด๋ป๊ฒ ํด์ผ ๋ด๊ฐ ์ฒํ ์ํฉ๊ณผ ๊ตฌ์กฐ์์ ๋ก์ง์ ์ ์ ํ ๋ฐ์ดํฐ๋ฅผ ์ง์ด๋ฃ์ ์ ์์๊น, ์ด๊ฑฐ์๋๊ฑฐ ๊ฐ์.
๊ทธ ์ค ์ฒซ๋ฒ์งธ ๊ฒ์ ๋๋ ๊ฐ Task์ Operator๋ค์ ๋ฒกํฐ์ ์ง์ด๋ฃ๊ณ ๊ทธ ๋ฒกํฐ์ ์ธ๋ฑ์ค๋ฅผ ํ๋์๊ฐ ์์ ํ๊ฒ ํ๋ ๊ฒ์ผ๋ก ํด๊ฒฐํ๊ณ , ๋๋ฒ์งธ ๊ฒ์ ๋ฅ๊ผฌ์ผ ํด์ ํด๊ฒฐํจ.
https://github.com/MegasKomnenos/poc2
์ฌ๋ด์ด์ง๋ง ์ธ์ด๊ฐ ๋๋ C#์ด๋ C++ ์๋๋ผ Rust๋ฅผ ์จ์ ์ฃผ์ด์ง ํ๊ฒฝ์ด ์ข ๋ค๋ฆ.
HTN์ด๋ผ๋ ์ฒ์ ๋ฃ๋ ๋จ์ด์ธ ๊ฒ์ด์์ค... ์ฑ๊ธฐ๋ฐฉ๊ธฐ
GOAP ํ๊ณ ๋น์ทํ๋ฐ ๊ณํ ์ง๋ ๋ถ๋ถ์์ A*์ ์ฐ์ง ์์์ ๋ ๊ฐ๋จํ๊ณ ๊ฐ๋ฒผ์.
ํน์ behavior tree ๋ ์จ๋ดค์? ์จ๋ดค๋ค๋ฉด HTN์ด BT๋ณด๋ค ์ข์ ์ ์ ์๋ ค์ค ์ ์์๊น? BT์ ๋ง์ ์๋ค์ด์...
GOAP์ด๋ HTN ๊ฐ์ด ๊ณํ ์ง๋ AI๋ค์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ ์ด๋ค ํ๋์ ํ ์ ์๋๊ฐ๋ฅผ ์ ์ํ๊ณ ๋ฌด์์ ์ํ๋๊ฐ๋ฅผ ์ ์ํ๊ณ ๋๋ฉด ์์์ ์ธ๊ณ์ํ์ ๋ฐ๋ผ ํ๋์ ์กฐํฉํด ์ํ๋ ๊ฒ์ ๋ฌ์ฑํ๊ธฐ ์ํ ๊ณํ์ ์งค ์ ์๋ค๋๊ฑฐ์. Jeff Orkin์ด ๋ค์๋ ์๋ฅผ ๋น๋ ค์ค์๋ฉด, '์ฐฝ๊ณ ๋ฅผ ์์ฐฐํ๋ผ. ์ ์ ๋ฐ๊ฒฌํ๋ฉด ์ฃฝ์ฌ๋ผ.' ์ด ๋ชฉ์ ์ 3๊ฐ์ ๋ค๋ฅธ ํ๋์์๊ฒ ๋ถ์ฌํ๋ค๊ณ ํ์. ํ ํ๋์๋ ๋ณ์ฌ๊ณ , ๋ค๋ฅธ ํ๋์๋ ์์ด์๊ณ , ๋ค๋ฅธ ํ๋์๋ ์ฅ์. ๋ณ์ฌ๋ ์๊ธฐ๊ฐ ํ ์ ์๋ ํ๋๋ค์ ์กฐํฉํด์, ๊ทธ๋ฅ ํ๋ฒํ๊ฒ ๋์๋ค๋๋ค ์ ์ด ๋ฐ๊ฒฌ๋๋ฉด ์ด์ ์๋ค ๋ผ๋ ๊ณํ์ ์ธ์. ์์ด์๋ ์๊ธฐ๊ฐ ํ ์ ์๋ ํ๋๋ค์ ์กฐํฉํด์, ๋ฒฝ์ ๊ธฐ์ด์ค๋ฅด๊ณ ์ง๋ถ ์์ ๋๊ธฐํ๊ณ ๊ทธ๋ฆผ์์ ์จ์ด ์๋ค๊ฐ ์ ์ ๋ฐ๊ฒฌํ๋ฉด ๋จ์ด์ ธ ๋ด๋ ค์ค๋ฉฐ ๊ธฐ์ต์ ํ๋ค๋ ๊ณํ์ ์ธ์.
์ฅ๋ ์๊ธฐ๊ฐ ํ ์ ์๋ ํ๋๋ค์ ์กฐํฉํด์, ์ ๋๋ ์ ์ ์ฃฝ์ผ ์ ์๊ตฌ๋ ๋ผ๋ ๊ฒฐ๋ก ์ ๋ด๋ฆฌ๊ณ ๊ทธ๋ฅ ์์ฐฐ๋ง ํ๋ฉฐ ๋์๋ค๋๋ค๋ ๊ณํ์ ์ธ์.
GOAP์ ๋จ์ ์ BT๋ณด๋ค ์์์ด ๋ ๋ค๊ณ ๊ตฌํ ๋์ด๋๊ฐ ๋์ผ๋ฉฐ AI๊ฐ ๋์์ด๋์ ์๊ฐ๊ณผ ๋ค๋ฅธ ๊ณํ ๋ฐ ํ๋์ ๋ณด์ผ ์ ์๋ค๋ ๊ฒ. HTN์ ์ด๋ฌํ GOAP์ ๋จ์ ์ ์ด๋์ ๋ ํด๊ฒฐํ๋ค ํ ์ ์๋๋ฐ, ๊ทธ๋๋ ๊ตฌํ ๋์ด๋๋ ์ฌ์ ํ BT๋ณด๋ค ๋์.
์น์ ํ ์ค๋ช ๋กํ. ๋ด ๊ฒ์ AI๋ค์ด ๊ฝค ๋จ์ํ๊ฒ ๊ฐ ์๊ฐ์ด๋ผ (์ชฝ์๊ฐ ๋ง์์ง๋ฉด AI๋ค์ด ๋ ๋๋ํด๋ ์ ์ ๊ฐ ํผ๋์ค๋ฌ์) ๊ฑ BT๋ก ๊ฐ์ผ๊ฒ ๋น...