Easyai (الوثائق الكاملة هنا) هو إطار ذكاء اصطناعي خالص للاعبين للألعاب المجردة مثل Tic Tac Toe و Connect 4 و Responsi ، وما إلى ذلك. يجعل من السهل تحديد آليات اللعبة ، واللعب ضد الكمبيوتر أو حل اللعبة. تحت الغطاء ، فإن الذكاء الاصطناعى هو خوارزمية Negamax مع جداول تشذيب ألفا بيتا ونقلها كما هو موضح في ويكيبيديا.
إذا قمت بتثبيت pip ، فاكتب هذا في محطة
Sudo Pip تثبيت Easyai
خلاف ذلك ، قم بتنزيل الكود المصدري (على سبيل المثال على GitHub) ، فك ضغط كل شيء في مجلد واحد وفي هذا المجلد ، في محطة ، النوع
Sudo Python Setup.py تثبيت
بالإضافة إلى ذلك ، ستحتاج إلى تثبيت Numpy لتتمكن من تشغيل بعض الأمثلة.
دعونا نحدد قواعد اللعبة وبدء مباراة ضد الذكاء الاصطناعي:
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 عظام تركت في الوبر Move #2: Player 2 Plays 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 لألعاب المعلومات غير المكتملة ، واستراتيجيات حل الألعاب الأفضل ، (فعالة) استخدام قواعد البيانات لتخزين التحركات ، خوارزميات الذكاء الاصطناعى باستخدام التوازي.
لاستكشاف الأخطاء وإصلاحها تقارير الأخطاء ، الأفضل في الوقت الحالي هو أن نسأل على جيثب.
في كل مرة يتم دمج MR في Master ، يحدث إصدار تلقائي: