4WayBeacon PPO Script Review
์ด ํ์ผ์ ์์์ ์ ์ํ Policy_net.py์ ppo.py๋ฅผ ์ด์ฉํ์ฌ ์ค์ ํ์ต์ ์ํํ๋ ํ์ผ์ ๋๋ค. ์ ์ฒด ์ฝ๋๋ ๋ค์์ ์ฐธ์กฐํ์๋ฉด ๋ฉ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์คํํฌ๋ํํธ2(pysc2)์์ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค๊ณผ ์ด์ ์ ๋ง๋ Policy_net.py์ ppo.py๋ฅผ importํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ pysc2์์ ์ ๊ณตํ๋ ์ฌ๋ฌ๊ฐ์ง ๋ณ์๋ค์ ์ด์ฉํด ๋ณธ ์ฝ๋์์ ์ฌ์ฉํ ๋ช๊ฐ์ง ๋ณ์๋ค์ ์ ์ํฉ๋๋ค. _SELECT_ARMY๋ ์ ๋์ ์ ํํ๋ผ๋ ๋ณ์์ ๋๋ค. _MOVE_SCREEN์ ๋ฏธ๋๋งต์ด ์๋ ์คํฌ๋ฆฐ์์ ํน์ ์์น๋ก ์ด๋ํ๋ผ๋ ๋ณ์์ ๋๋ค. _NO_OP๋ ์๋ฌด ํ๋๋ ํ์ง ์๋ ๋ณ์์ ๋๋ค. _NOT_QUEUED์ _QUEUED๋ ์ค์ ์คํํฌ๋ํํธ2๋ฅผ ํด๋ณด์ ๋ถ์ ๋ฐ๋ก ์ดํดํ์ค ์ ์์ต๋๋ค. ์ค์ ์คํํฌ๋ํํธ2๋ฅผ ํ๋ ์ดํ ๋ Shift๋ฅผ ์ด์ฉํ์ฌ ํ์ฌ ์ํํ๊ณ ์๋ ํ๋ ๋ค์ ์ํํ ํ๋์ ์์ฝํ ์ ์์ต๋๋ค. _NOT_QUEUED๋ ๋ช ๋ น์ ์์ฝํ์ง ๋ง๊ณ ๋ฐ๋ก ์ํํ๋ผ๋ ๋ป์ด๋ฉฐ _QUEUED๋ ๋ช ๋ น์ ์์ฝํ๋ผ๋ ๋ป์ ๋๋ค. _SELECT_ALL์ ๊ฒฝ์ฐ _SELECT_ARMY์ ๊ฒฐํฉํ์ฌ ์คํฌ๋ฆฐ์ ์๋ ๋ชจ๋ ์ ๋์ ๋ปํฉ๋๋ค.
์ด ์ฝ๋๋ ์ค์ ํ๊ฒฝ์ ์ ์ํ๋ ๋ถ๋ถ์ ๋๋ค. map_name์ ๊ตฌ๋ํ ๋งต์ ์ด๋ฆ์ ๋๋ค. ์ด ์ฝ๋๋ MoveToBeacon์ด๋ผ๋ ๋งต์์ ๊ฐํํ์ต์ ์ํํ๊ธฐ์ 'MoveToBeacon'์ผ๋ก ์ง์ ํ์์ต๋๋ค. ์ด๋ ๋งต ํ์ผ ๋ช ๊ณผ ๊ฐ์์ผ ํฉ๋๋ค. ์ธ์ธํ ์ต์ ๋ค์ agent_interface_format๋ด์์ ์ ์๋ฉ๋๋ค. feature_screen์ ์คํฌ๋ฆฐ์ ์ด๋ฏธ์ง ๊ฐ๋ก ์ธ๋ก ํฌ๊ธฐ๋ฅผ ์ ์ํฉ๋๋ค. feature_minimap๋ ๊ฐ์ต๋๋ค. pysc2 ๋ฒ์ ์์๋ rgb_screen๊ณผ rgb_minimap์๋ ์ ๊ทผ์ ํ ์ ์์ต๋๋ค. step_mul์ ํ๋ฒ์ step์์ ์ค์ ์คํํฌ๋ํํธ2๋ฅผ ๋ช ํ๋ ์ ๊ตฌ๋์ํฌ์ง๋ฅผ ๋ปํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ํน์ ์์น๋ก ๋ง๋ฆฐ์ ์ด๋์ํฌ ๊ฒฝ์ฐ step_mul์ด ์์ ์๋ก ํ ์คํ ๋น ๋ง๋ฆฐ์ ์ด๋๊ฑฐ๋ฆฌ๊ฐ ์งง์ผ๋ฉฐ ํด์๋ก ์ด๋๊ฑฐ๋ฆฌ๊ฐ ๊ธธ์ด์ง๋๋ค. game_step_per_episode์ ๊ฒฝ์ฐ ํน์ ๋ณ์ ๋ช ๊ทธ๋๋ก ํ ์ํผ์๋๊ฐ ๋๋๋๋ฐ๊น์ง ๊ฑธ๋ฆฌ๋ step์ ์ง์ ํฉ๋๋ค. disable_fog๋ ์คํํฌ๋ํํธ2๋ด์ fog๋ผ๋ ์์ญ์ ๋ณด์ฌ์ค์ง๋ฅผ ์ง์ ํ๋ ๋ณ์์ ๋๋ค. fog๋ ํ์ฌ ์์ผ๋ด ์์ญ์ ์๋์ง๋ง ์ด์ ์ ์์ผ๋ด ์์ญ์ ๋ค์ด์์๋ ์์ญ์ ๋ปํฉ๋๋ค. fog๊ฐ ๋ฌด์์ธ์ง๋ ๋ค์์ ๊ทธ๋ฆผ์ ๋ณด์๋ฉด ๋ฉ๋๋ค.
ex.py ์ฝ๋๋ฅผ ์คํํ ๋ ์ ์ฒด์ ์ฌ์ฉ๋๋ ์ ์ธ์ ์ ์ง์ ํฉ๋๋ค. Policy_netํด๋์ค์ ๊ฐ์ฒด๋ฅผ ๊ฐ๊ฐ Policy์ Old_Policy๋ก ์ง์ ํ ํ main ๋คํธ์ํฌ์ target ๋คํธ์ํฌ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ํ๋ผ๋ฏธํฐ๋ค์ ํ์ต์ํค๊ธฐ ์ํ PPOTrainํด๋์ค์ ๊ฐ์ฒด๋ฅผ PPO๋ก ์ ์ํฉ๋๋ค. tf.global_variables_initializer()์ ๊ฒฝ์ฐ ํ์ต ์์ ํ๋ฆฌ๋ฏธํฐ๋ฅผ ์ด๊ธฐํํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค. saver์ ๋ณ์๋ฅผ tf.train.Saver()๋ก ์ ์ํ ํ saver.restore๋ฅผ ํตํด ์ด๋ฏธ ํ์ต์ํจ ๋ชจ๋ธ์ ๊ฒฝ๋ก๋ก๋ถํฐ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ถ๋ฌ์ต๋๋ค. tf.global_variables_initializer()์ saver.restore()์ ๊ฒฝ์ฐ๋ ํ์ต์ ์ฒ์๋ถํฐ ์์ํ ์ง ํน์ ์ด๋ฏธ ๊ฐ์ง๊ณ ์๋ ๋ชจ๋ธ์ ๋ถ๋ฌ์์ ์ฌ์ฉํ ์ง์ ๋ฐ๋ผ ์ฌ์ฉ์๊ฐ ์ง์ ์ฃผ์์ฒ๋ฆฌํ์ฌ ์ฌ์ฉํฉ๋๋ค.
๋ช ๋ฒ์ ์ํผ์๋๋ฅผ ์คํํ ์ง๋ฅผ ์ ํ ํ for๋ฃจํ๋ก ์ํผ์๋๋ฅผ ๊ณ์ ์คํํฉ๋๋ค.ํ๋ฒ์ ์ํผ์๋๋ฅผ ์คํํ ๋ ๋ง๋ค ์ด๋ ํ ์ ๋ณด๋ค์ด ์ฌ์ฉ๋์๋์ง๋ฅผ ์ ์ฅํ๊ธฐ ์ํด observations, actions_list, v_preds, rewards๋ผ๋ ๋น ๋ฆฌ์คํธ๋ฅผ ์ง์ ํฉ๋๋ค. obs.reset()์ ํตํด ์ํผ์๋๋ฅผ ์ด๊ธฐํ ํฉ๋๋ค. obs.reset()์ ์ํํ๋ฉด ์๋ฌด๋ฐ ํ๋์ ํ ์ ์์ต๋๋ค. ๊ทธ ์ด์ ๋ obs.reset()์ ์คํํ๋ฉด ๋ง๋ฆฐ์ ์ ํํ๊ธฐ ์ ์ ์ํ๋ก ์ด๊ธฐํํฉ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ง๋ฆฐ์ ์ฎ๊ธฐ๊ธฐ ์ํด ๋จผ์ ๋ง๋ฆฐ์ ์ ํํด์ผํฉ๋๋ค. _SELECT_ARMY์ _SELECT_ALL์ ์กฐํฉํ์ฌ ์คํฌ๋ฆฐ๋ด์ ์กด์ฌํ๋ ๋ชจ๋ ์ ๋์ ์ ํํ๋ผ๋ ํ๋์ action์ผ๋ก ์ ์ํฉ๋๋ค. env.step(actions=[action])์ ํตํด ์ค์ ๊ฒ์์ ๋ชจ๋ ์ ๋์ ์ ํํ๋ผ๋ ํ๋์ ์ํํฉ๋๋ค. env.step()์ ์ถ๋ ฅ์ผ๋ก ๋ฐ์ obs๋ ์ฌ๋ฌ ๋ณ์๋ค์ ๋ด๊ณ ์์ผ๋ฉฐ ํ์ฌ ์ํ์ ๋ํ ๋ง์ ์ ๋ณด๋ค์ ํ๊ณ ์์ต๋๋ค. ์๋ฅผ๋ค์ด reward, episode terminal, ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ์ค์ํ ์คํฌ๋ฆฐ์ ๋ํ ์ ๋ณด๋ค์ด ์์ต๋๋ค. done์ ์ฌ์ฉ์์ ๋ฐ๋ผ ๋ค๋ฅธ ๋ณ์๋ก ์ง์ ํ ์ ์์ง๋ง ๋ณธ ์ฝ๋ ๋ด๋ถ์์๋ ์ํผ์๋์ ๋(True or False)๋ฅผ ๋ปํฉ๋๋ค. ์ํผ์๋๊ฐ ์์ํ์๋ง์ ๋๋๋ ๊ฒฝ์ฐ๋ ์์ผ๋ฏ๋ก ๊ฐ์ ์ ์ผ๋ก False๋ผ๊ณ ์ ์ํฉ๋๋ค. global_step์ ๊ฒฝ์ฐ ์ด๋ฒ ์ํผ์๋์์ ์ง๋ ์คํ ์๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ์ ์ํ์์ต๋๋ค. ๋ค์ ํ์ฌ ์ํ๋ฅผ ์ ์ํ๊ธฐ ์ํ ์ด๋ฏธ์ง์ ์ ์ฒ๋ฆฌ๋ฅผ ์ํํฉ๋๋ค.marine_y์ ๋ง๋ฆฐ์ y์ขํ๋ฅผ, marine_x์ ๋ง๋ฆฐ์ x์ขํ๋ฅผ, beacon_y์ ๋น์ฝ์ y์ขํ๋ฅผ, beacon_x์ x์ขํ๋ฅผ ์ ์ฅํฉ๋๋ค. ๊ทธ ํ state์ ๋น์ฝ์ผ๋ก ๋ถํฐ ๋ง๋ฆฐ์ ์๋๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ์ฌ ์ ์ฅํฉ๋๋ค. ์๋์ ๊ทธ๋ฆผ์์ [x, y]๋ฅผ ์ํ๋ก ํฉ๋๋ค.
๋จผ์ ์คํ ์ด ์ง๋ ๋๋ง๋ค global_step์ ํ๋์ฉ ์ฆ๊ฐ์ํค์ํด global_step += 1์ ์ฌ์ฉํฉ๋๋ค. state๋ฅผ Policy ๋คํธ์ํฌ์ ๋ฃ์ด action์ ์ป์ ์ ์๋ ํํ๋ก ๊ฐ๊ณตํ ํ Policy ๋คํธ์ํฌ์ ์ ๋ ฅ์ผ๋ก ๊ฐ์ง๋๋ค.๊ทธ์ ์ถ๋ ฅ์ ๊ทธ ์ํ ์ผ๋์ action(act)์ Value-state(v_pred)๋ฅผ ์ป์ต๋๋ค. ์ด๋ฅผ ์ซ์์ธ Scalar ๊ฐ์ผ๋ก ๋ณํํฉ๋๋ค. ์ด๋ฒ ํ๋ก์ ํธ์์ ๋คํธ์ํฌ๊ฐ ํ ์ ์๋ ํ๋์ 4๊ฐ์ง์ด๋ฉฐ ๊ฐ๊ฐ ์ํ์ข์ฐ๋ฅผ ๋ปํฉ๋๋ค. ์ค์ง์ ๋ช ๋ น์ command์ pixel์ ์กฐํฉ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค. ์ด๋ฒ ๊ฐํํ์ต์์์ command๋ ์์์ ๋ณ์๋ก ์ง์ ํ _MOVE_SCREEN ํ๋๋ฐ์ ์์ผ๋ฉฐ pixel์ ์ง์ ํด ์ฃผ์ด์ผ ํฉ๋๋ค. ์ฝ๋์์ ๋ณผ ์ ์๋ฏ์ด act์ ๋ฐ๋ผ ํ์ฌ ๋ง๋ฆฐ์ ์์น๋ก ๋ถํฐ 3ํฝ์ ๋งํผ ์ค๋ฅธ์ชฝ, ์, ์ผ์ชฝ, ์๋ ์์น๋ฅผ ์ง์ ํ ํ command์ pixel์ ๊ฐ์ ์กฐํฉํ์ฌ ์ค์ง์ ๋ช ๋ น์ธ actions_space์ ์ง์ ํฉ๋๋ค. pixel ๊ฐ์ 0์์ 15์ฌ์ด๋ก clipํ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์์์ feature_screen์ ์ํด screen์ด 16 x 16์ ํฌ๊ธฐ๋ฅผ ๊ฐ๋๋ก ์ง์ ํ์ต๋๋ค. screen ๋ฐ์ ํฝ์ ๊ฐ์ ์ง์ ํ์ฌ ์ค์ง์ ๋ช ๋ น์ ๋ง๋ค ๊ฒฝ์ฐ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ด 0๊ณผ 15์ฌ์ด์ ๊ฐ์ผ๋ก clipํฉ๋๋ค.
์์์ ์ ์ํ action_space๋ฅผ env.step(action=[actions_space])๋ฅผ ํตํด ํ๊ฒฝ์ ๋ฃ์ด์ค๋๋ค. reward์ ๊ฒฝ์ฐ ํ ์คํ ์ด ์ง๋ ๋ ๋ง๋ค -0.1์ ์ง์ ํฉ๋๋ค. ๋น ๋ฅธ ์๊ฐ๋ด์ ๋น์ฝ์ ๋๋ฌํ๊ธฐ ์ํ reward ์ค๊ณ์ ๋๋ค. ๊ทธ ํ ์์์ ํ์๋ ํ๋ก์ธ์ค ๋๋ก next_state์ action_space์ ๊ฒฐ๊ณผ ์ํ๋ฅผ ์ ์ฅํฉ๋๋ค. 4WayBeacon์ ๊ฒฝ์ฐ ์ค์ ๋น์ฝ์ ์ผ์ ๊ฑฐ๋ฆฌ ์์ผ๋ก ๋๋ฌํ๊ฑฐ๋ ์ผ์ ์คํ ์ด ์ง๋๋๋ก ๋น์ฝ์ ์ผ์ ๊ฑฐ๋ฆฌ์์ผ๋ก ๋๋ฌํ์ง ๋ชปํ๋ฉด ์ํผ์๋๋ฅผ ์ ์งํ๋๋ก ์ค์ ํ์์ต๋๋ค. ๋ง๋ฆฐ๊ณผ ๋น์ฝ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ ํ distance์ ์ ์ํฉ๋๋ค. ์ด ๋ ๊ฐ์ง๋ฅผ ํ๋๋ง์ด๋ผ๋ ๋ง์กฑํ๋ฉด ์ํผ์๋๋ฅผ ์ ์งํ์ฌ์ผ ํ๋ฏ๋ก done=True๋ก ์ง์ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง ์คํ ์ ์ํผ์๋๊ฐ ์ข ๋ฃํ์์ ๋ ๋ชฉํ๋ฅผ ์ฑ๊ณตํ์์ ๋์ ์ฑ๊ณตํ์ง ๋ชปํ์๋๋ก ๋๋์ด reward๋ฅผ ๊ฐ๊ฐ 0๊ณผ -1๋ก ์ค๊ณํ์ฌ ์ ์ํฉ๋๋ค. ๋ง์ง๋ง์ผ๋ก ํ์ต์ ํ๊ธฐ ์ํด ์์์ ์ ์ํ ๋น ๋ฆฌ์คํธ์ state, act, v_pred, reward๋ฅผ ๋ชจ๋ ์์ต๋๋ค.
์์ ๋ณ์๋ค์ ํ์ต์ ํ๊ธฐ ์ํด ์ ์ ํ๋ ๋ถ๋ถ์ ๋๋ค. v_preds($V(s_t)$)๋ฅผ ์ด์ฉํด v_preds_next($V(s_{t+1})$)์ ๊ตฌํ๋ ๋ถ๋ถ์ ๋๋ค. ์๋ฅผ๋ค์ด v_preds๊ฐ [1,2,3,4]์ ๊ฐ์ ๋ชจ์์ ๊ฐ์ง๋ค๋ฉด v_preds_next๋ [2, 3, 4, 0]๊ณผ ๊ฐ์ ๋ชจ์์ ๊ฐ์ง๋๋ก ํฉ๋๋ค. Proximal Policy Optimization์์๋ ์์ reward๋ฅผ ๊ฐ๊ฐ์จ์ด ์ ์ฉ๋ Discounted Reward๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ์๋๋ผ General Advantage Estimation์ ํตํด ํ ๋ฒ ๋ ๊ฐ๊ณตํ์ฌ ์ฌ์ฉํฉ๋๋ค. gaes๋ ์ด๋ฅผ ๋ปํฉ๋๋ค.
์์์ ์ ์ ํ ๋ณ์๋ค์ ์ด์ฉํ์ฌ ํ์ต์ ์งํํ๋ ๋ถ๋ถ์ ๋๋ค. ๋จผ์ main ๋คํธ์ํฌ์ ํ๋ผ๋ฏธํฐ๋ค์ target ๋คํธ์ํฌ๋ก ๋ฎ์ด์์๋๋ค. ํ์ต ํ์ธ main ๋คํธ์ํฌ์ ํ์ต ์ ์ธ target ๋คํธ์ํฌ๊ฐ์ ํ๋ผ๋ฏธํฐ ์ฐจ์ด๋ฅผ ๋ณด์ด๋๋ก ํ๊ธฐ ์ํจ์ ๋๋ค. ์์์ ์์ ๋ณ์๋ค์ ๊ฐ์ ์์๋ฅผ ๊ฐ์ง๋๋ก inp์ ์ ์ฅํฉ๋๋ค. ์์ ๋ณ์๋ค์ ๊ฐ์์ 0์ฌ์ด์ ์ซ์์ค ๋ฌด์์๋ก 64๊ฐ๋ฅผ ์ ํํ ํ sample_indices๋ก ์ ์ํฉ๋๋ค. sample_indices๋ฅผ ํตํด์ sampled_inp์ stochasticํ๊ฒ ํ์ต์ ์งํํฉ๋๋ค. ์ด ํ์ต์ ํตํด ์ํผ์๋๋ณ reward๋ฅผ ๊ทธ๋ํํ ํ์ฌ ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๊ทธ๋ํ๋ฅผ ๋ณด๋ฉด ์ต์ ์ ์๊ฐ -20์ ์ด๋ฉฐ ํ์ต์ด ์ ์งํ๋ ๊ฒฝ์ฐ์๋ ๋๋ต -2์ ์ ๊ฐ์ง๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ์ต์ ์ ์๊ฐ -20์ ์ธ ๊ฒฝ์ฐ์๋ ์ํผ์๋๊ฐ ๋๋ ๋๊น์ง ๋น์ฝ์ ๋๋ฌํ์ง ๋ชปํ๋ ๊ฒ์ ๋๋ค. global_step์ด 200์ ๋๋ฌํ ๊ฒฝ์ฐ ์ํผ์๋๊ฐ ๋๋๊ณ ๊ฐ ์คํ ๋ง๋ค -0.1์ ์ด๊ธฐ ๋๋ฌธ์ ๋๋ฌํ์ง ๋ชปํ ๊ฒฝ์ฐ -20์ ์ด ๋๊ฒ ๋ฉ๋๋ค. ํ์ต์ด ์ ์งํ์ด ๋ ๊ฒฝ์ฐ์๋ ์๋ฌด๋ฆฌ ํ์ต์ด ์ ๋์ด๋ ํ๊ท ์ ์ผ๋ก -2์ ๋ณด๋ค ์ข์ ์ ์๋ฅผ ์ป์ง ๋ชปํฉ๋๋ค. ๊ทธ ์ด์ ๋ ํ๊ฒฝ์ด ์ด๊ธฐํ๋๋ฉด์ ๋ง๋ฆฐ๊ณผ ๋น์ฝ์ ์์น๊ฐ ๋ฌด์์์ ์ผ๋ก ๊ฒฐ์ ์ด ๋๊ธฐ ๋๋ฌธ์ ์ต์ํ์ผ๋ก ๊ฐ์ผ๋ง ํ๋ ์คํ ์ ์๊ฐ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ๋๋ค. Proximal Policy Optimization ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํด์ 4๋ฐฉํฅ์ผ๋ก ์์ง์ด๋ ๋ง๋ฆฐ์ ๋น์ฝ์ผ๋ก ๋น ๋ฅธ ์๊ฐ์ ๋๋ฌํ๊ฒ ํ๋๋ก ํ์ต์ ํด๋ณด์์ต๋๋ค. ์ด๋ฅผ ํ์ฅ์์ผ ์๊ฐํ๋ฉด ๋ชฉ์ ์ง์ ๋๋ฌํ๋ ์์ด์ ํธ๋ฅผ ๋ง๋๋ ๋ฌธ์ ์ ์ ์ฉํ ์ ์์ ๊ฒ์ ๋๋ค.
Last updated