3D Tic-Tac-Toe 게임을 디자인하고 Minimax 알고리즘의 한계점을 찾아야합니다. 깊이가 6까지는 크게 중요하지 않지만 (< 1s) 깊이가 높을수록 시간이 오래 걸립니다.Minimax 알고리즘 내 스레딩
>Depth 7 = 6 seconds
>Depth 8 = 49 seconds
>Depth 9 = 314 seconds
나는 더 높은 수심을 검사 할 시간이 없다 (하!). 최대 깊이는 22로, AI가 Move 1에서 가능한 모든 게임 상태를 분석하고 결코 사용자가 승리하지 못하게합니다.
Minimax 함수에서 스레딩을 구현하고 싶지만 스레딩에 비교적 새로운 기능입니다.
//player is -1 for human, +1 for AI
function minimax(board_state, depth, player)
if depth <= 0 or board == full //full board means no further states
return score * player
bestScore = -1000;
foreach possible move
if valid move
/* */
make_move()
bestScore = max(bestScore, minimax(board_state, depth-1, -player)
undo_move()
/* */
return bestScore
내가 /* */
사이의 비트가 새로운 스레드입니다 뭔가를하려고하지만 문제가 발생 : 내 최소 최대 기능은 다음과 같은 경우에도 depth = 1
로, 즉 8 개 스레드입니다. depth = 8
은 16534863 스레드입니다. 스레드의 한계는 무엇입니까? 내 CPU에 몇 개의 물리적 코어가 연결되어 있습니까?
C++과 관련된 질문은 무엇입니까? –
내 프로그램 자체가 C++입니다. – gator
[스레드 풀] (https://en.wikipedia.org/wiki/Thread_pool)을 구현하십시오. –