ABK-GOFAI: Abak Evolution Backgammon Oynamak İçin Geleneksel Bir Yapay Zeka.
Sinir Ağı yardımı olmadan, Abak için bir Yapay Zeka (AI) geliştirmek zorlu bir görev oldu ve zamanla belirgin bir sınıra ulaştı. Ancak geliştirmek eğlenceli bir süreçti ve hâlâ "kolay", "normal" ve "ileri seviye"de oynamak için görev başında. Bu, nasıl çalıştığı ve nasıl yapıldığı hakkında bir yazı.
Faz 1, GOFAI PHP
Abak'ın ilk AI sürümü PHP ile yazılmıştı ve sistemi 'bellek yetersiz' hatalarıyla çökertmeye mahkumdu, ancak bir C++ sürümünün yolunu açtı. Benim için yapay zekanın nasıl yapılacağını anlamaya çalıştığım prototipleme alanıydı. İlk kez web sunucusuna bağlayarak çalıştırdığımda (yani etkin bir şekilde ona karşı oynuyordum), bir hamle seçmesi çok uzun 15 saniye aldı ve sunucunun kendi kendine hareket ettiğini gördüğümde çıldırdım ve küçük bir dans etmiş olabilirim. Emin değilim.
Faz 2, GOFAI C
Yani, AI'ın C/C++ Sürümü, üretim ortamına çıkan ilk sürüm, sevgili GOFAI motoruma, PHP küllerinin üzerinde doğdu. Nanosaniyeler içinde binlerce pozisyon üzerinde 29 analiz algoritması çalıştırır ve şöyle ilerler:
- Bir tahta pozisyonu ve bir zar seti verildiğinde.
- Bir durum hesapla
- Olası her hareketi al.
- Her hareketi analiz et ve bir puan ver.
- "En iyi" Puanı seç.
İşte sürecin bir diyagramı.
Dört ana fonksiyondan oluşur:
- Aksiyonları Al (Geçerli Hareketleri Hesapla):
Bir Tahta Pozisyonu ve bir zar atışı verildiğinde, olası her geçerli hareketi hesaplar.
Geçerli hareketler 0'dan on binlerce harekete kadar olabilir.
Bunu yazdığım her dilde, kodu hata ayıklamayı çok zorlaştıran gereksiz bir özyinelemeli yaklaşım benimsedim, ama çok güzel. Birkaç yüz satır koddan oluşuyor ama yazmam haftalar sürdü, ardından C'ye çevirmem daha fazla haftalar sürdü.
- Durum Al (Tahta Durumunu Hesapla):
Bir Tahta Pozisyonu verildiğinde, anlamsal bir durum hesaplar, oldukça açıklayıcıdırlar:
- Başlangıç
- Orta Oyun
- Umutsuz Koşu
- Umutlu Koşu
- Son Oyun
- Eve Giriş
-
Hareketi Analiz Et (Bir Tahta Pozisyonu İçin Puanları Hesapla):
Bu, açık ara en kapsamlı algoritmadır. Tahta özelliklerini analiz eder, her biri bir puan döndürür ve ardından daha önce hesaplanan duruma göre bunlara faktörler uygular, böylece oyun durumuna göre analizin farklı yönlerine önem verebilirsiniz.
AI 8 algoritmayla başladı ve 29'a çıktı, kısa bir bakış:
- Sütun Yüksekliği
- Vurulma Riski
- Tuzağa Düşürülme Riski
- Ev Gücü
- Kaçış Pivotları
- Çubuktaki Pullar
- Güvenli Pullar
Bu algoritmaların çoğu başlangıçta çok basitti veya mevcut bile değildi.
Zamanla üzerlerinde çalıştım, özellikler ekledim ve faktörleri ince ayarladım.
-
Aksiyonu Seç ("En İyi" Hareketi Seç):
Sadece en yüksek puanı istiyorsanız (İleri Seviye'nin yaptığı gibi) bu algoritma nispeten önemsizdir.
Normal ve Kolay Seviye için, en iyi aksiyonlar listesinden rastgele bir hamle seçer; bunun boyutu (veya zayıf hamlelere toleransı) seviye tarafından belirlenir.
C sayesinde bu motor ışık hızında hızlıdır, bu yüzden onu her zaman birincil aksiyon alma fonksiyonu olarak kullanacağım.
Faz 3, GOFAI C İnce Ayar
Bu motoru hata ayıklamak, sorun gidermek ve ince ayar yapmak için karar alma sürecini izleyecek birçok araç oluşturmam gerekti. Sinir Ağı'nın aksine, buradaki her karar denetlenebilirdi, en azından bu avantajınız vardı.
Süreç eğlenceliydi ama acı verici derecede yavaştı. Bilgisayara karşı çok oynadım ve zayıf bir hamle gördüğümde, neyin yanlış gittiğini kontrol etmek için bu araçlara geldim. Bazen bu beni bir algoritmayı düzeltmeye, bir faktörü ayarlamaya veya yeni bir analiz modeli oluşturmaya yönlendirdi. Bazen de, ve bu güzeldi, Abak Evolution Stratejilerimi yeniden değerlendirmeme yol açtı.
Zamanla oldukça sağlam bir AI'ım oldu, ancak onu daha fazla mükemmelleştirmek giderek zorlaşıyordu. O kadar çok kod satırı, o kadar çok senaryo, o kadar büyük operasyonlar vardı ki, kod düzeyinde hata ayıklama ağır bir görevdi ve faktörleri manuel olarak ince ayarlamak sonuç vermiyordu.
Faz 4, Çaresizlik
Ama daha fazlasını istiyordum çünkü Abak oynuyorum ve eğlenmek için sağlam bir oyuncuya ihtiyacım vardı, ve o sırada (ve hatta bunu yazarken bile) onu oynayan çok fazla insan yoktu.
Ve bu yaklaşımın birçok dezavantajı vardı:
- Tahtanın mevcut pozisyonuna göre durumunu hesaplar ve bu durum, her geçerli aksiyon için analiz algoritmalarının faktörlerini değiştirmek için kullanılır. Ancak o aksiyon durumu değiştirmiş olabilir, ama motor bunu hesaba katmaz.
- Faktörlerin manuel ince ayarı muazzam bir zaman gerektiriyordu. Eğlenceli zamanlar olsa da, yine de tonlarcaydı.
- Olası senaryoların sayısı göz önüne alındığında, durumu hesaplamak son derece zordur. Her zaman kusurlu bir algoritma olmuştur.
- Oyun Eşitliğini hassas bir şekilde hesaplamak imkansızdır, çünkü bu motor her analiz algoritması için keyfi bir puan sistemine sahiptir ve nihai puan bir kazanma olasılığını yansıtmaz, yalnızca farklı tahta pozisyonları arasında karşılaştırılabilir bir puan olarak çalışır. Mutlak bir değer yerine göreceli bir değere sahip olduğunu söyleyebilirsiniz.
Faz 5, Uyanış
Ve sonra, bir gün, 2018'de, Google AlphaGo Sinir Ağı ile GO Şampiyonunu yendi ve çok fazla gürültü koptu, yeni harika açık kaynak Makine Öğrenme kütüphaneleri erişilebilir hale geldi ve eğitim sürecini hızlandırmak için ev-GPU'larını kullanıyorlardı.
Tabii ki, Sinir Ağları hakkında biraz bilgim vardı, ama hiç birini oluşturmamıştım ve dürüst olmak gerekirse, onları yeteneklerimin ötesinde bir görev olarak görüyordum.
Dayanamadım ve uzman seviyesi artık GOFAI motorunda çalışmıyor, aksiyon alma kısmı hariç.
Ama bu hikaye burada bitiyor.
Buraya kadar tamamını okuduysanız, hayretler içindeyim.
Bu metin, dürüst Abak Evolution Ekibi tarafından SEO amaçlı yazılmıştır,
Namıdiğer Samy Garib.