AI dengan Python - Gaming

Game dimainkan dengan strategi. Setiap pemain atau tim akan membuat strategi sebelum memulai permainan dan mereka harus mengubah atau membangun strategi baru sesuai dengan situasi permainan saat ini.

Algoritma Pencarian

Anda juga harus mempertimbangkan permainan komputer dengan strategi yang sama seperti di atas. Perhatikan bahwa Algoritma Pencarian adalah salah satu yang menentukan strategi dalam permainan komputer.

Bagaimana itu bekerja

Tujuan dari algoritma pencarian adalah untuk menemukan rangkaian gerakan yang optimal sehingga mereka dapat mencapai tujuan akhir dan menang. Algoritme ini menggunakan serangkaian kondisi pemenang, berbeda untuk setiap game, untuk menemukan gerakan terbaik.

Visualisasikan permainan komputer sebagai pohon. Kita tahu bahwa pohon memiliki simpul. Mulai dari root, kita bisa sampai ke node pemenang terakhir, tetapi dengan gerakan yang optimal. Itu adalah hasil kerja algoritma pencarian. Setiap node di pohon tersebut mewakili keadaan masa depan. Algoritma pencarian mencari melalui pohon ini untuk membuat keputusan di setiap langkah atau node permainan.

Pencarian Kombinasional

Kerugian utama menggunakan algoritme penelusuran adalah sifatnya yang lengkap, itulah sebabnya mereka menjelajahi seluruh ruang penelusuran untuk menemukan solusi yang mengarah pada pemborosan sumber daya. Akan lebih merepotkan jika algoritme ini perlu mencari seluruh ruang pencarian untuk menemukan solusi akhir.

Untuk menghilangkan masalah seperti itu, kita dapat menggunakan pencarian kombinasional yang menggunakan heuristik untuk menjelajahi ruang pencarian dan mengurangi ukurannya dengan menghilangkan kemungkinan gerakan yang salah. Karenanya, algoritme semacam itu dapat menghemat sumber daya. Beberapa algoritma yang menggunakan heuristik untuk mencari ruang dan menghemat sumber daya dibahas di sini -

Algoritma Minimax

Ini adalah strategi yang digunakan oleh pencarian kombinasional yang menggunakan heuristik untuk mempercepat strategi pencarian. Konsep strategi Minimax dapat dipahami dengan contoh permainan dua pemain, di mana setiap pemain mencoba memprediksi gerakan lawan selanjutnya dan mencoba meminimalkan fungsi itu. Selain itu, untuk menang, pemain selalu berusaha memaksimalkan fungsinya sendiri berdasarkan situasi saat ini.

Heuristik memainkan peran penting dalam jenis strategi seperti Minimax. Setiap simpul pohon akan memiliki fungsi heuristik yang terkait dengannya. Berdasarkan heuristik tersebut, maka akan diambil keputusan untuk bergerak menuju node yang paling menguntungkan mereka.

Pemangkasan Alfa-Beta

Masalah utama dengan algoritma Minimax adalah ia dapat menjelajahi bagian-bagian pohon yang tidak relevan, yang mengarah pada pemborosan sumber daya. Oleh karena itu, harus ada strategi untuk memutuskan bagian mana dari pohon yang relevan dan mana yang tidak relevan dan membiarkan bagian yang tidak relevan tidak dieksplorasi. Pemangkasan alfa-beta adalah salah satu jenis strategi tersebut.

Tujuan utama dari algoritma pemangkasan Alpha-Beta adalah untuk menghindari pencarian bagian-bagian pohon yang tidak memiliki solusi apapun. Konsep utama pemangkasan Alfa-Beta adalah menggunakan dua batas bernamaAlpha, batas bawah maksimum, dan Beta, batas atas minimum. Kedua parameter ini adalah nilai yang membatasi kumpulan solusi yang memungkinkan. Ini membandingkan nilai node saat ini dengan nilai parameter alfa dan beta, sehingga dapat berpindah ke bagian pohon yang memiliki solusi dan membuang sisanya.

Algoritma Negamax

Algoritma ini tidak berbeda dengan algoritma Minimax, tetapi memiliki implementasi yang lebih elegan. Kerugian utama penggunaan algoritma Minimax adalah kita perlu mendefinisikan dua fungsi heuristik yang berbeda. Hubungan antara heuristik ini adalah bahwa, semakin baik sebuah game untuk satu pemain, semakin buruk untuk pemain lainnya. Dalam algoritma Negamax, pekerjaan yang sama dari dua fungsi heuristik dilakukan dengan bantuan fungsi heuristik tunggal.

Membangun Bot untuk Memainkan Game

Untuk membuat bot untuk memainkan game dua pemain di AI, kita perlu menginstal easyAIPerpustakaan. Ini adalah kerangka kerja kecerdasan buatan yang menyediakan semua fungsi untuk membangun game dua pemain. Anda dapat mengunduhnya dengan bantuan perintah berikut -

pip install easyAI

Bot untuk Memainkan Koin Terakhir

Dalam game ini, akan ada tumpukan koin. Setiap pemain harus mengambil sejumlah koin dari tumpukan itu. Tujuan permainan ini adalah untuk menghindari pengambilan koin terakhir di tumpukan. Kami akan menggunakan kelasLastCoinStanding diwarisi dari TwoPlayersGame kelas dari easyAIPerpustakaan. Kode berikut menunjukkan kode Python untuk game ini -

Impor paket yang diperlukan seperti yang ditunjukkan -

from easyAI import TwoPlayersGame, id_solve, Human_Player, AI_Player
from easyAI.AI import TT

Sekarang, mewarisi kelas dari TwoPlayerGame kelas untuk menangani semua operasi game -

class LastCoin_game(TwoPlayersGame):
   def __init__(self, players):

Sekarang, tentukan pemain dan pemain yang akan memulai permainan.

self.players = players
self.nplayer = 1

Sekarang, tentukan jumlah koin dalam game, di sini kami menggunakan 15 koin untuk game tersebut.

self.num_coins = 15

Tentukan jumlah maksimum koin yang dapat diambil pemain dalam suatu gerakan.

self.max_coins = 4

Sekarang ada beberapa hal yang perlu didefinisikan seperti yang ditunjukkan pada kode berikut. Tentukan kemungkinan gerakan.

def possible_moves(self):
   return [str(a) for a in range(1, self.max_coins + 1)]

Tentukan penghapusan koin

def make_move(self, move):
   self.num_coins -= int(move)

Tentukan siapa yang mengambil koin terakhir.

def win_game(self):
   return self.num_coins <= 0

Tentukan kapan harus menghentikan permainan, yaitu saat seseorang menang.

def is_over(self):
   return self.win()

Tentukan cara menghitung skor.

def score(self):
   return 100 if self.win_game() else 0

Tentukan jumlah koin yang tersisa di tumpukan.

def show(self):
   print(self.num_coins, 'coins left in the pile')
if __name__ == "__main__":
   tt = TT()
   LastCoin_game.ttentry = lambda self: self.num_coins

Memecahkan permainan dengan blok kode berikut -

r, d, m = id_solve(LastCoin_game,
   range(2, 20), win_score=100, tt=tt)
print(r, d, m)

Memutuskan siapa yang akan memulai permainan

game = LastCoin_game([AI_Player(tt), Human_Player()])
game.play()

Anda dapat menemukan output berikut dan permainan sederhana dari game ini -

d:2, a:0, m:1
d:3, a:0, m:1
d:4, a:0, m:1
d:5, a:0, m:1
d:6, a:100, m:4
1 6 4
15 coins left in the pile
Move #1: player 1 plays 4 :
11 coins left in the pile
Player 2 what do you play ? 2
Move #2: player 2 plays 2 :
9 coins left in the pile
Move #3: player 1 plays 3 :
6 coins left in the pile
Player 2 what do you play ? 1
Move #4: player 2 plays 1 :
5 coins left in the pile
Move #5: player 1 plays 4 :
1 coins left in the pile
Player 2 what do you play ? 1
Move #6: player 2 plays 1 :
0 coins left in the pile

Bot untuk Bermain Tic Tac Toe

Tic-Tac-Toe sangat familiar dan salah satu game paling populer. Mari kita buat game ini dengan menggunakaneasyAIperpustakaan dengan Python. Kode berikut adalah kode Python dari game ini -

Impor paket seperti yang ditunjukkan -

from easyAI import TwoPlayersGame, AI_Player, Negamax
from easyAI.Player import Human_Player

Mewarisi kelas dari TwoPlayerGame kelas untuk menangani semua operasi game -

class TicTacToe_game(TwoPlayersGame):
   def __init__(self, players):

Sekarang, tentukan pemain dan pemain yang akan memulai permainan -

self.players = players
self.nplayer = 1

Tentukan jenis papan -

self.board = [0] * 9

Sekarang ada beberapa hal yang perlu didefinisikan sebagai berikut -

Tentukan kemungkinan gerakan

def possible_moves(self):
   return [x + 1 for x, y in enumerate(self.board) if y == 0]

Tentukan langkah pemain -

def make_move(self, move):
   self.board[int(move) - 1] = self.nplayer

Untuk meningkatkan AI, tentukan kapan pemain membuat gerakan -

def umake_move(self, move):
   self.board[int(move) - 1] = 0

Tentukan kondisi kalah dimana lawan memiliki tiga dalam satu baris

def condition_for_lose(self):
   possible_combinations = [[1,2,3], [4,5,6], [7,8,9],
      [1,4,7], [2,5,8], [3,6,9], [1,5,9], [3,5,7]]
   return any([all([(self.board[z-1] == self.nopponent)
      for z in combination]) for combination in possible_combinations])

Tentukan cek untuk penyelesaian permainan

def is_over(self):
   return (self.possible_moves() == []) or self.condition_for_lose()

Tunjukkan posisi para pemain dalam game saat ini

def show(self):
   print('\n'+'\n'.join([' '.join([['.', 'O', 'X'][self.board[3*j + i]]
      for i in range(3)]) for j in range(3)]))

Hitung skornya.

def scoring(self):
   return -100 if self.condition_for_lose() else 0

Tentukan metode utama untuk menentukan algoritme dan memulai permainan -

if __name__ == "__main__":
   algo = Negamax(7)
   TicTacToe_game([Human_Player(), AI_Player(algo)]).play()

Anda dapat melihat output berikut dan permainan sederhana dari game ini -

. . .
. . .
. . .
Player 1 what do you play ? 1
Move #1: player 1 plays 1 :
O . .
. . .
. . .
Move #2: player 2 plays 5 :
O . .
. X .
121
. . .
Player 1 what do you play ? 3
Move #3: player 1 plays 3 :
O . O
. X .
. . .
Move #4: player 2 plays 2 :
O X O
. X .
. . .
Player 1 what do you play ? 4
Move #5: player 1 plays 4 :
O X O
O X .
. . .
Move #6: player 2 plays 8 :
O X O
O X .
. X .