Easyai (เอกสารฉบับเต็มที่นี่) เป็นกรอบปัญญาประดิษฐ์ Pure-Python สำหรับเกมนามธรรมสองเกมเช่น Tic Tac Toe, Connect 4, Reversi ฯลฯ ทำให้ง่ายต่อการกำหนดกลไกของเกมและเล่นกับคอมพิวเตอร์หรือแก้ปัญหาเกม ภายใต้ประทุน AI เป็นอัลกอริทึม 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 ซึ่งหมายความว่าการชนะจะอยู่ในการเคลื่อนไหวสิบครั้ง (เช่น 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 ได้รับการรวมเข้ากับ Master การปล่อยอัตโนมัติจะเกิดขึ้น: