Eşleştirme algoritması nasıl yapılır?

MBerat

Hectopat
Katılım
26 Şubat 2017
Mesajlar
96
Merhaba arkadaşlar,
Mobil uygulamam LoL ve diğer birçok oyununda yaptığı gibi kullanıcıları eşleştirme yapması gerekiyor. Fakat internette bakındığımda buna benzer hiçbir algoritmaya rastlamadım. Sizin de bir fikrinizi almak istedim. Arama yapan kullanıcıların belirli kriterlere göre eşleştirmesini sağlayacak algoritmayı nasıl yazarım veya internetten yardım alabileceğim bir kaynak vb. bir sayfa var mıdır? Eğer yoksa kısaca bahseder misiniz algoritmayı nasıl yazacağım hakkında?
Şimdiden yardımlarınız için teşekkür ederim.
 
Puan aralığına göre eşleştirecekseniz kullanıcıları puan aralıklarına göre Array'a koyup eşleştirebilirsiniz.
Rastgele eşleştirme için ise Array'ı birkaç kere çevirirsiniz.
 
Matematiksel bir formül belirle ve formüle girilen değerler sonucunda en yakın çıkanları birbiri ile eşleştir. Formülün en basitinden (win sayısı x 2) + (rank değeri x 5) / 10 gibi bir şey olabilir. Testler yaparak hangi formülün en iyi eşleştirme sonucu verdiğini bulabilirsin.

Bu içeriği görüntülemek için üçüncü taraf çerezlerini yerleştirmek için izninize ihtiyacımız olacak.
Daha detaylı bilgi için, çerezler sayfamıza bakınız.
Matchmaking: Frequently Asked Questions

Bu linklerde Paladins oyununun matchmaking sistemi anlatılmış. Bunlar da sana yardımcı olabilir.
 
Yapmasi kolay, mukellestirmesi cok zor bir olay bu. Blizzard'da yalnizca bunun uzerine calisan ML ekibi var.
Kisinin yetenekleri - takimin yetenekleri - ping degerleri - queue da bekleme suresi gibi faktorleri de dahil ettiginde isler karismaya basliyor.

Tum bunlara oyun ici mekanikler ( her takimda healer olmali ya da hic birinde olmamali vs ) gib seyleri de eklersen dedigim gibi mukemmellestirmesi cok zor oluyor.

Ayrica coldstart problemi ya da smurfing problemi gibi detaylar da var. Bir oyuncu sistemin atadigi ratingden daha iyi ya da daha kotu oynuyor olabilir. Bununla bas etmek icin gizli bir baska rating daha var sunucuda saklanan.

Sisteme yeni katilan yeni bir oyuncunun ratingini belirlemek de mesele. Genelde yeni gelenin ortalama oldugunu varsayman gerekiyor.

Nitekim dedigim gibi cok kapsamli bir is profesyonelce yapmak istersen ama baslangic icin bence en uygunu:

oyuncunun ratingi : X
oyuncunun ping degeri: Y
β => Rating makasi
θ=> Ping makasi
X ± β degerindeki oyuncular kumesi -> S1
y ± θ degerindeki oyuncular kumesi -> S2
S1 ∩ S2 -> Kesisim kumesindeki oyuncular yakin rating ve ping'deki oyuncular. Bu cocuklar arasindan FIFO yontemiyle ( en uzun suredir sira bekleyen ) secilim yapip bir araya getirebilirsin.

Bekleme suresi arttikca β ve θ degerlerini arttirmalisin. ( Yoksa sonsuza kadar sira bekleyebilir uzak bir yerden baglaniyorsa )

Bu algoritmanin en buyuk sorunu, 9 tane dusuk pingli oyuncuyla 1 tane yuksek pingli oyuncunun bir araya gelme ihtimali ama buna bir cozum yok.

 

Geri
Yukarı