RL: Önceki eyleme koşullandırılan kodlama eylemi

Dec 27 2020

Bir oyuncunun sırası geldiğinde oyuncunun sırayla iki kart çektiği bir kart oyunum var. Her kart başka bir oyuncunun atılan destesinden (yüz yukarı) veya desteden (yüz aşağı) çekilebilir.

Bunu bir eylem alanı olarak nasıl kodlayacağımı düşünerek, safça iki çekilişin bağımsız olduğunu varsayabilirim. Eylem alanı basitçe 2 * (1 + (oyuncu_sayısı - 1)) 'nin ikili bir vektörü olurdu; bu, boş çizim yığınlarını sınırlamak için sonradan filtre uygulayabilirim (ve kendi yığınından çizim yapamam).

Bununla birlikte, oyunu kendim oynarken, desteden ilk kartı çekmenin, ardından çekilen ilk kartın değerine göre ikinci kart için çekiliş destesini seçmenin bazen avantajlı olduğunu fark ettim. Ama bu bir eylem alanına nasıl kodlanacak? Aynı "dönüşün" parçası olduklarını düşünseler bile, bunların iki ayrı eylem olduğunu düşünmek daha iyi olur muydu?

Yanıtlar

2 NeilSlater Dec 27 2020 at 22:31

Deneylerin tüm detaylarını ve sonuçlarını bilmeden kesin olarak söylemek zor.

Bununla birlikte, oyun kararların bölünmesine izin veriyorsa, temsilcinin çekiliş yığınından yeni alınmış önceden gizlenmiş herhangi bir kartın değerine ilişkin ekstra bilgiden faydalanması daha iyi olacaktır.

Genel olarak, her bir oyuncu kararı sırayla alınır ve durum değişiklikleri ile sonuçlanırsa, bu, pekiştirmeli öğrenmede (RL) kullanılan MDP teorik modeline göre ayrı bir zaman adımında ayrı bir eylemdir. Oyunun ilerleyişiyle eşleşmeleri için zaman adımlarını farklı şekilde tanımlamak / not etmek isteyebilirsiniz. Bununla birlikte, RL amaçları için, her karar noktası yeni bir zaman adımında olmalı ve yeni bir durum, yeni değer tahminleri vb. İle sonuçlanmalıdır.

Benzer şekilde, mevcut seçimin oyuncunun ilk kartı veya çekilecek ikinci kartı olup olmadığı da durumun bir parçası olmalıdır. Durumun bu ayrıntısı, mantıksal olarak her aşamada kart sayısı her zaman aynı ise, oyuncunun elindeki kart sayısı tarafından zaten kapsanmış olabilir . Bununla birlikte, el boyutu başka nedenlerle değişebilirse, temsilcinin bilgileri kullanabilmesi için "ilk çizim seçeneği" veya benzeri için açık bir işaret eklemeye değer.

Eylem alanını kodlamak için biraz özgürlüğünüz var. Bu oyunda tüm aşamalarda mümkün olan tek eylem kart çekmekse, 1 + (oyuncu_sayısı - 1) boyutlarında bir ikili çıktı vektörü uygun olacaktır. Diğer kodlamalar da iyi çalışabilir, seçimlerde herhangi bir mantıksal yapı olup olmadığına veya yararlı oyun bilgilerini kodlayan bazı türetilmiş verilerin olup olmadığına bağlıdır.

Her oyuncunun kazık atmak gelen çizim için indeks olarak kabul edilir, böylece eylem seçimler düzenlemek için yararlı olabilir nispeten geçerli oyuncunun dönüşe. Yani, düzenlenmiş eylemler yerine$[draw, discard P1, discard P3, discard P4, discard P5]$ P2 için düzenleneceklerdi $[draw, discard P3, discard P4, discard P5, discard P1]$ ve P3 için farklı olurdu: $[draw, discard P4, discard P5, discard P1, discard P2]$. . . bu doğal olarak dönüşlerin döngüsel doğasına izin verirdi. Eyalet temsilinin buna uyması için her oyuncu hakkındaki bilgileri benzer şekilde döndürmesi gerekecektir. Bunu yapmanız gerekmeyebilir, ancak yararlanabileceğiniz dönüş pozisyonuna göre eylem seçenekleriyle ilgili birçok ortak mantığın olduğu oyunlar için bunu tavsiye ederim. Oyun boyunca P1, P2, P3 vb. Olmak arasında önemli farklılıklar olsaydı, bunun tersi geçerli olurdu (ve mutlak oyuncu pozisyonlarını kullanırdın).