EasyAi (여기에서 전체 문서)는 Tic Tac Toe, Connect 4, Reversi 등과 같은 2 인 추상 게임을위한 순수한 파이썬 인공 지능 프레임 워크입니다. 게임 메커니즘을 정의하고 컴퓨터를 쉽게 재생하거나 게임을 해결할 수 있습니다. 후드 아래에서 AI는 Wikipedia에 설명 된대로 알파 베타 가지 치기 및 전달 테이블이있는 Negamax 알고리즘입니다.
pip 설치 한 경우 터미널에 입력하십시오.
Sudo Pip Easyai 설치
그렇지 않으면 소스 코드 (예 : GitHub)를 다운로드하고 모든 것을 하나의 폴더로 그리고이 폴더에서 단자에서 단자에서 압축합니다.
Sudo Python Setup.py 설치
또한 일부 예제를 실행하려면 Numpy를 설치해야합니다.
게임 규칙을 정의하고 AI와의 경기를 시작합시다.
from easyAI import TwoPlayerGame , Human_Player , AI_Player , Negamax
class GameOfBones ( TwoPlayerGame ):
""" In turn, the players remove one, two or three bones from a
pile of bones. The player who removes the last bone loses. """
def __init__ ( self , players = None ):
self . players = players
self . pile = 20 # start with 20 bones in the pile
self . current_player = 1 # player 1 starts
def possible_moves ( self ): return [ '1' , '2' , '3' ]
def make_move ( self , move ): self . pile -= int ( move ) # remove bones.
def win ( self ): return self . pile <= 0 # opponent took the last bone ?
def is_over ( self ): return self . win () # Game stops when someone wins.
def show ( self ): print ( "%d bones left in the pile" % self . pile )
def scoring ( self ): return 100 if game . win () else 0 # For the AI
# Start a match (and store the history of moves when it ends)
ai = Negamax ( 13 ) # The AI will think 13 moves in advance
game = GameOfBones ( [ Human_Player (), AI_Player ( ai ) ] )
history = game . play ()결과:
더미에 20 개의 뼈가 남았습니다 플레이어 1 무엇을 플레이합니까? 3 움직임 #1 : 플레이어 1 플레이 3 : 더미에 17 개의 뼈가 남았습니다 움직임 #2 : 플레이어 2 플레이 1 : 16 개의 뼈가 더미에 남았습니다 플레이어 1 무엇을 플레이합니까?
이제 게임을 해결합시다.
from easyAI import solve_with_iterative_deepening
r , d , m = solve_with_iterative_deepening (
game = GameOfBones (),
ai_depths = range ( 2 , 20 ),
win_score = 100
) 우리는 r=1 을 얻습니다. 즉, 두 플레이어가 완벽하게 플레이하면 첫 번째 플레이어가 항상 승리 할 수 있습니다 (-1은 항상 잃어 버렸을 것입니다), d=10 , 즉 승리는 10 번의 움직임 (예 : 플레이어 당 5 이동) 이하, m='3' 은 첫 번째 플레이어의 첫 움직임이 '3' 이어야 함을 나타냅니다.
이러한 계산은 전치 테이블을 사용하여 속도를 높일 수 있으며,이 테이블은 발생하는 상황과 각각에 가장 적합한 움직임을 저장합니다.
tt = TranspositionTable ()
GameOfBones . ttentry = lambda game : game . pile # key for the table
r , d , m = solve_with_iterative_deepening (
game = GameOfBones (),
ai_depths = range ( 2 , 20 ),
win_score = 100 ,
tt = tt
) 이 라인을 실행 한 후 변수 tt 에는 가능한 상황 (여기서는 파일의 가능한 크기)과 수행 할 최적의 동작을 저장하는 전치 테이블이 포함되어 있습니다. tt 사용하면 생각 없이 완벽하게 연주 할 수 있습니다.
game = GameOfBones ( [ AI_Player ( tt ), Human_Player () ] )
game . play () # you will always lose this game :) EasyAI는 원래 Zulko가 작성하고 MIT 라이센스에 따라 릴리스 된 오픈 소스 소프트웨어입니다. 기부금을 환영합니다! 일부 아이디어 : 불완전한 정보 게임을위한 AI Algos, 더 나은 게임 해결 전략, (효율적인) 데이터베이스를 저장하기 위해 데이터베이스 사용, 병렬화를 사용한 AI 알고리즘.
문제 해결 및 버그 보고서의 경우 현재 가장 좋은 것은 Github에 문의하는 것입니다.
MR이 마스터에 합병 될 때마다 자동 릴리스가 발생합니다.