
์ด๋ฒ ์ฃผ์ฐจ ์คํฐ๋๋ ๋ฏธ๋๋งฅ์ค ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ํ์ตํ์์ต๋๋ค.
์ด์ ๋ณธ๊ฒฉ์ ์ผ๋ก ์ธ๊ณต์ง๋ฅ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ๊ณต๋ถํ๊ฒ ๋์๊ตฐ์.
์ด๋ฒ์ฃผ์ฐจ ๋ถํฐ ์ธ๊ณต์ง๋ฅ ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ํ์ต์ ํ๊ฒ ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ์ฒ์์ผ๋ก ๋ฐฐ์ฐ๋ ์๊ณ ๋ฆฌ์ฆ์ด ๋ฏธ๋๋งฅ์ค ์๊ณ ๋ฆฌ์ฆ์
๋๋ค.
๋ฏธ๋๋งฅ์ค(Minimax) ์๊ณ ๋ฆฌ์ฆ์ ๊ฒ์ ์ด๋ก ๊ณผ ์ธ๊ณต์ง๋ฅ ๋ถ์ผ์์ ๋๋ฆฌ ์ฌ์ฉ๋๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก, 2์ธ ์์ ์ ๋ณด ํด์ ๊ฒ์(์: ํฑํํ , ์ฒด์ค, ์ค๋ธ๋ก ๋ฑ)์์ ์ต์ ์ ์๋ฅผ ์ ํํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.
์ฆ, ๋ ์ฐธ์ฌ์๊ฐ ๊ต๋๋ก ์ด๋ค ๊ฒฐ์ ์ ํด๊ฐ๋ฉด์ ์งํ๋๋ ๊ณผ์ ๋ฑ์์, ์ข
๋ฃ์์ ๊น์ง์ ๋ชจ๋ ๊ณผ์ ์ ๋ด๋ค๋ณด๊ณ ํ์์ ์์ ์ด๋ค ๊ฒฐ์ ์ด ์ต์ ์ธ์ง๋ฅผ ์์๋ด๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
์ฐธ์ฌ์์ ์ ํ์ ๋ฌด์์์ฑ์ด ๊ฐ์
ํ์ง ์๊ณ ๋ชจ๋ ์ ๋ณด๊ฐ ์๋ก์๊ฒ ๊ณต๊ฐ๋๋ ๊ณผ์ ์ ์ ํฉํ๋ค.
๋ฐ๋์ ์๋ก ๋ค๋ฉด ๋ด๊ฐ ๋๋ ์๋ฅผ I๋ผ ํ๊ณ ์๋๊ฐ ๋๋ ์๋ฅผ O๋ผ๊ณ ํ๋ฉด ์์ t์์ ๋ด๊ฐ ์ ํํ ์ ์๋ ์๋ค It๋ค ์ค ์ต์ ์ ์ It*๋ฅผ ๋ฌ์ผ ํ๋ค. ์ด๋ ๋ชจ๋ It๋ฅผ ํ๊ฐํ์ฌ ๊ฐ์ฅ ์ ์๊ฐ ๋์ ์(๊ฐ์ฅ ๋์๊ฒ ์ ๋ฆฌํ ์)๋ฅผ ๊ณ ๋ฅด๋ฉด ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฐ๋ฐ, ์ด๊ฒ์ ๊ทผ์์์ ์ด๋ค.
ํ ์ ์, ์ฆ t+1์ ์์ ์์ ๋ณด๋ ๊ฒ์ด๋ค. ์๋๋ ์ญ์ ์๋๊ฐ ๋ ์ ์๋ ๋ชจ๋ ์ Ot+1๋ค ์ค ์ต์ ์ ์๋ฅผ ์ฐพ์ ๋๋ ค๊ณ ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ It์์ Ot+1*๋ฅผ ๊ณ ๋ คํด์ ๋์ It*๋ฅผ ๊ฒฐ์ ํ๊ฒ ๋ค๋ ๊ฒ์ด๋ค.
์์ t์์ ๋น์ฅ ๋์๊ฒ ํฐ ์ ๋ฆฌํจ์ ์ฃผ๋ ์๋ผ ํ ์ง๋ผ๋ Ot+1*์ ์ฒ ์ ํ ๋ฌด๋ ฅํ ๋์ด ์คํ๋ ค ์๋์๊ฒ ํฐ ์ ๋ฆฌํจ์ ์ฃผ๋ ์
์๋ก ๋ด์ผํ๋ค.
์ฆ, ์ฐ๋ฆฌ๋ ์ฐ๋ฆฌ๊ฐ ์๋ฅผ ๋๋ฉด ๊ทธ ์์ ๋ํ ์๋์ ๊ฐ์ฅ ๊ฐ๋ ฅํ ๋์์ ๊ณ ๋ คํ์ฌ ์ต๋ํ ๋ฌด๋ ฅํ ๋นํ๊ณ ๋ ๋ค์์ ์ ์๋ฅผ It์ ์ ์๋ก ๋ด์ผ ํ๋ค. ๊ทธ๋ฌ๋ ์ ์๋ ์๋๊ฐ ๊ฐํ๋ ๋ฌด๋ ฅํ๋ฅผ ์ต๋ํ ๋นํ ๋ค์์ ์ ์์ด๋ฏ๋ก ๊ทธ ์๋ฅผ ๋์์ ๋ ๋ด๊ฐ ์ป์ ์ ์๋ ์ ์์ ์ต์๊ฐ์ด ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ํ ์ ์ ์๋์ ์ Ot+1๋ ์ด๋ป๊ฒ ํ๊ฐํด์ผ ํ ๊น? ์๋๋ ๋์ ๊ฐ์ ์๊ฐ์ ํ ๊ฒ์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค. ์ฆ, ์๋๋ t+2์์ ์์ ๋ด๊ฐ ์๋์๊ฒ ๊ฐํ๋ ๋ฌด๋ ฅํ๋ฅผ ์ต์ํ ํ๋ ์๋ฅผ ์ฐพ์ผ๋ ค ํ ๊ฒ์ด๋ค.
๊ทธ๋ฐ๋ฐ ์ด๋ ์๋ ์
์ฅ์์ ์ต์ํ์ด์ง๋ง ๋์ ์
์ฅ์์๋ ์ต๋ํ์ด๋ฏ๋ก Ot+1*๋ฅผ ๋ฌด๋ ฅํํ๋ ์ It+2*๊น์ง ๊ณ ๋ คํด์ ์ต์ ์ ์๋ฅผ It*๋ก ํ๊ฒ ๋ค๋ ๊ฒ์ด๋ค.
์ด ๋ฐฉ์์ผ๋ก ์ข ๋ฃ์์ ๊น์ง ๋ฐ๋ณตํ๋ฉด ๋๋ค. ์ด๊ฒ์ ํธ๋ฆฌ๋ก ๋ํ๋ผ ์ ์๋๋ฐ ์ต์ํ๋ ์ญ์ผ๊ฐํ์ผ๋ก, ์ต๋ํ๋ ์ ์ผ๊ฐํ์ผ๋ก ๋ํ๋ด๋ฉด ๋๋ค. ์ด ๊ฐ์ ํธ๋ฆฌ๋ฅผ ๊ฒ์ ํธ๋ฆฌ๋ผ๊ณ ํ๋ค.
์ด ํธ๋ฆฌ์ ๋ง๋จ๋ ธ๋์๋ ๊ตฌ์ฒด์ ์ธ ์ซ์ ํํ์ ์ ์๊ฐ ์ ๋ ฅ๋๋ค. ์น๋ฆฌ๋ +1, ํจ๋ฐฐ๋ -1, ๋ฌด์น๋ถ๋ 0์ผ๋ก ํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ํธ๋ฆฌ์ ๊น์ด๋ ๋ฐ๋์ ๊ฒฝ์ฐ 361, ํฑํํ ๋ 9๊ฐ ๋๋ค.
์ด ๊ตฌ์กฐ๋ฅผ ๋ณด๋ฉด ์ ์ ์๋ค์ํผ ์ ์ฝ๊ธฐ ๊น์ด๊ฐ ๊น์ด์ง ์๋ก ๊ณ์ฐํด์ผ ํ๋ ๊ฒฝ์ฐ์ ์๋ค์ด ๊ธ๊ฒฉํ ์ฆ๊ฐํ๋ค๋ ๋จ์ ์ ๊ฐ์ง๋ค.
๊ตฌ์กฐ๋ฅผ ๋ณด๋ฉด ์๋ค์ํผ ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ด ๋ฐ๋ณต๋๋ค ๋ด๋ ๋๋ค. ์ด๋ ์ฌ๊ท๋ฅผ ์ด์ฉํ์ฌ ๊ตฌํ์ ํ๋ฉด ํธํ๋ค. ์ฐธ๊ณ ๋ก ํ์ด์ฌ์์ ์ฌ๊ท์ ๊น์ด๋ 1024๊น์ง๋ก ์ ํ๋๋ค.
def get_minimax_score(state, player_type, terminal_score=1, minimizer=True):
if state.check_if_win(player_type):
return terminal_score
elif state.check_if_win(-player_type):
return -terminal_xcore
elif state.check_if_game_finished():
return 0
else:
if minimizer==True:
minimax_score = np.inf
legal_actions = state.get_legal_actions()
for action in legal_zctions:
next_state = state.get_next_state_from_action(action,-player_type)
score = get_minimax_score( next_state, -player_type
, -terminal_score, minimizer=False)
if score < minimax_score:
minimax_score = score
if minimizer==False:
minimax_score = -np.inf
legal_actions = state.get_legal_actions()
for action in legal_actions:
next_state = state.get_next_state_from_action(action, -player_type)
score = get_minimax_score(next_state, -player_type,-terminal_score
, minimizer=True)
if score > minimax_score:
minimax_score = score
return minimax_score
์ฌ๊ธฐ์ -๋ถํธ๊ฐ ๋ผ์ฌ ์๋ ๊ฒ์ ์ต๋๊ฐ๊ณผ ์ต์๊ฐ์ ๊ตฌ๋ถํด์ผ ๋๊ธฐ ๋๋ฌธ์ด๋ค(๋ค์ ์๋ ์๋๋ฐฉ์ด ๋๋ค๋ ๊ฒ์ ์๋ฆฌ๊ธฐ ์ํด).
5์ฅ์์ ์์ฑํ State ํด๋์ค์ state ์ธ์คํด์ค์ ํจ์๋ฅผ ํธ์ถํ ๋๊ตญ์๊ฐ ์ ์[+1]์ธ์ง ํ์[-1]์ธ์ง๋ฅผ player_type์ผ๋ก ์
๋ ฅ๋ฐ๋๋ก ํ๋ค.
๋ฏธ๋๋งฅ์ค ์๊ณ ๋ฆฌ์ฆ์ ํธ๋ฆฌ์ ๊น์ด๊ฐ ์ฆ๊ฐํจ์ ๋ฐ๋ผ ํ์ ๊ณต๊ฐ์ ํฌ๊ธฐ๊ฐ ๊ธ๊ฒฉํ ์ฆ๊ฐํ๊ธฐ ๋๋ฌธ์ ํฑํํ ๋ณด๋ค ๋ณต์ก๋๊ฐ ์กฐ๊ธ๋ง ๋ ์ฆ๊ฐํ๋๋ผ๋ ์ค์ง์ ์ธ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ๊ฐ ํ๋ค๋ค. ๊ทธ๋์ ์ด์ ๋ํ ๊ฐ์ ๋ฐฉ์ ์ค์ ํ๋์ธ ์ํ-๋ฒ ํ ๊ฐ์ง์น๊ธฐ ์๊ณ ๋ฆฌ์ฆ์ด ์๋ค. ์ด๋ ๋ถํ์ํ ๊ณ์ฐ์ ํ์ง ์๊ฒ ํจ์ผ๋ก์จ ๋ฏธ๋๋งฅ์ค ์๊ณ ๋ฆฌ์ฆ์ ๊ณ์ฐ ์๊ฐ์ ์ค์ด๋ ๋ฐฉ๋ฒ์ด๋ค.
์๋ฅผ ๋ค๋ฉด ์ต๋ํ ํจ์ d๋ ๋ง๋จ ๋ ธ๋ ๊ฐ๋ค ์ค ์์๋๋ก ๋ณธํ ๊ทธ ์์ ๋ ธ๋๋ก ํฐ ๊ฐ์ ๊ฒฐ์ ํ ๊ฒ์ด๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ๊ทธ ์ ๋ ธ๋์ธ ์ต๋ํ ํจ์ e๋ ํฐ ๊ฐ์ ๊ฒฐ์ ํ ๊ฒ์ธ๋ฐ ์ด๋ค์ ์์๋ ธ๋์ธ ์ต์ํ ํจ์ b๋ ์ด๋ค์ค ์ต์๊ฐ์ ๊ฒฐ์ ํ ๊ฒ์ด๋ค. ์ฆ, d์์ ๊ฒฐ์ ํ ๊ฐ์ด ์์ผ๋ฉด ๊ทธ ์๋ ธ๋์ด๋ฉฐ ์์๋ ธ๋๊ฐ ๊ฐ์ e์์ d์์ ๊ฒฐ์ ํ ๊ฐ๋ณด๋ค ํฐ๊ฐ์ด ํ๋๋ผ๋ ๋์ค๋ฉด ๋ ์ด์ e๋ฅผ ํ์ํ ํ์๊ฐ ์๋ ๊ฒ์ด๋ค. ์ฆ ๋ ํฐ๊ฐ์ด ๋์ค๋ฉด e๋ ํ์์ ์ข ๋ฃํ๋ค. ์ด๋ ๊ฒ ๋ ํฐ ๊ฐ์ด ๋์ e์ ํ์์ ์ข ๋ฃํ๋ ๊ฒ์ ๋ฒ ํ ์ ๋จ ์ด๋ผ๊ณ ํ๋ค.
๋ฐ๋๋ก ์ต๋ํ ํจ์์ ์ต์ํ ํจ์๊ฐ ๋ฐ๊ปด ๋ ์์ ๊ฐ์ด ๋์ค๋ฉด ํ์์ ํ ํ์๊ฐ ์์ ํ ๋ฐ ์ด๋ ๋ ์์ ๊ฐ์ด ๋์ค๋ฉด ํ์์ ์ข ๋ฃํ๋ ๊ฒ์ ์ํ ์ ๋จ์ด๋ผํ๋ค.
์ด๋ฌํ ๋ฐฉ์์ผ๋ก ๊ฒ์ ํธ๋ฆฌ์ ๋ถํ์ํ ๋ถ๋ถ๋ค์ ์ ๊ฑฐํ๋ ๊ฒ์ ์ํ-๋ฒ ํ ๊ฐ์ง์น๊ธฐ๋ผ ํ๋ค.
์ํ-๋ฒ ํ ๊ฐ์ง์น๊ธฐ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํ์ ๊ฐ๋จํ๋ค. get_minimax_score์ ์ํ์ ๋จ๊ณผ ๋ฒ ํ์ ๋จ์ ๋ํ ๋ถ๋ถ๋ง ์ถ๊ฐํ๋ฉด ๋๋ค.
์ด๋ ๊ฒ ์คํฐ๋๋ฅผ ์งํํ๋ฉฐ ๊ฐ์ฅ ์ฒ์์ผ๋ก ์ธ๊ณต์ง๋ฅ ์๊ณ ๋ฆฌ์ฆ์ ํ์ตํ๊ณ ๊ทธ๊ฒ์ ๋ฏธ๋๋งฅ์ค ์๊ณ ๋ฆฌ์ฆ์ด์๋ค. ํ๋ฉด์ ๋๋์ ์ ๊ฐ๋
์ ์ธ ๋ถ๋ถ์ ์ดํด๊ฐ ๋๋ค. ํ์ง๋ง ํ์ด์ฌ์ ๋ฏธ์ํด์ ๊ทธ๋ฐ์ง ๊ตฌํ์ ์ฝ์ง ์๋ค๊ณ ๋๊ผ๋ค. ์์ง์ ํ๊ธฐ ์ค์ด๋ ๋ฐฉํ๋ ํ์ด์ฌ ๊ณต๋ถ๋ฅผ ์ด์ฌํ ํด์ผ๊ฒ ๋ค๊ณ ๋๊ผ๋ค.
์ด๋ฒ์ฃผ๋ถํฐ ๊ธฐ๋ง์ํ๊ธฐ๊ฐ์ด๋ค.. ์ฌ์ค ์ด๋ฏธ ์ํํ๋๋ ์น๋ค๋ค. ์ ์๋ ์ด๋ป๊ฒ ๋ ์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง..
๋๋ ์๋ ์ปค๋น ์ฌ์ง์ฒ๋ผ ์๋ฌด๊ฒ๋ ์ํ๊ณ ์๋ฌด ๊ฑฑ์ ์์ด ๋จน๊ณ ์๊ณ ๋๊ธฐ๋ง ํ๊ณ ์ถ๋ค....
๋๋จธ์ง ์ํ๋ ์ด์ฌํ ๊ณต๋ถํ๋ฌ ๊ฐ์ผ๊ฒ ๋ค. ๋ค๋ค ํ์ดํ
:)
