Easyai (dokumentasi lengkap di sini) adalah kerangka kerja kecerdasan buatan murni-python untuk permainan abstrak dua pemain seperti Tic Tac Toe, Connect 4, Reversi, dll. Mudah untuk mendefinisikan mekanisme permainan, dan bermain melawan komputer atau menyelesaikan game. Di bawah kap, AI adalah algoritma Negamax dengan tabel pemangkasan alfa-beta dan transposisi seperti yang dijelaskan pada wikipedia.
Jika Anda memiliki pip terpasang, ketik ini di terminal
sudo pip instal easyai
Jika tidak, unduh kode sumber (misalnya di github), unzip semuanya menjadi satu folder dan di folder ini, di terminal, ketik
sudo python setup.py install
Selain itu, Anda harus menginstal Numpy untuk dapat menjalankan beberapa contoh.
Mari kita tentukan aturan permainan dan mulai pertandingan melawan 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 ()Hasil:
20 tulang tersisa di tumpukan Pemain 1 Apa yang kamu mainkan? 3 Pindah #1: Player 1 bermain 3: 17 tulang tersisa di tumpukan Pindah #2: Player 2 bermain 1: 16 tulang tersisa di tumpukan Pemain 1 Apa yang kamu mainkan?
Mari kita selesaikan game:
from easyAI import solve_with_iterative_deepening
r , d , m = solve_with_iterative_deepening (
game = GameOfBones (),
ai_depths = range ( 2 , 20 ),
win_score = 100
) Kami memperoleh r=1 , yang berarti bahwa jika kedua pemain bermain dengan sempurna, pemain pertama yang bermain selalu dapat menang (-1 akan berarti selalu kalah), d=10 , yang berarti bahwa kemenangan akan berada dalam sepuluh gerakan (yaitu 5 gerakan per pemain) atau kurang, dan m='3' , yang menunjukkan bahwa langkah pertama pemain pertama harus '3' .
Perhitungan ini dapat dipercepat menggunakan tabel transposisi yang akan menyimpan situasi yang dihadapi dan gerakan terbaik untuk masing -masing:
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
) Setelah garis -garis ini dijalankan, variabel tt berisi tabel transposisi yang menyimpan situasi yang mungkin (di sini, kemungkinan ukuran tumpukan) dan gerakan optimal untuk dilakukan. Dengan tt Anda dapat bermain sempurna tanpa berpikir :
game = GameOfBones ( [ AI_Player ( tt ), Human_Player () ] )
game . play () # you will always lose this game :) Easyai adalah perangkat lunak open source yang awalnya ditulis oleh Zulko dan dirilis di bawah lisensi MIT. Kontribusi Selamat Datang! Beberapa Ide: Algo AI untuk game informasi yang tidak lengkap, strategi pemecahan permainan yang lebih baik, (efisien) penggunaan database untuk menyimpan gerakan, algoritma AI menggunakan paralelisasi.
Untuk laporan pemecahan masalah dan bug, yang terbaik untuk saat ini adalah bertanya di GitHub.
Setiap kali seorang MR digabungkan menjadi master, rilis otomatis terjadi: