Cách sửa đổi thuật toán ELO khi số lượng trò chơi thấp để giảm tỷ lệ ngoại lệ


8

Tôi đã phát triển triển khai ELO tiêu chuẩn có thể tìm thấy ở đây , nhưng vấn đề tôi gặp phải là người chơi của tôi sẽ chỉ có từ 10 đến 40 trò chơi trong một "mùa". Vì mùa đầu tiên của tôi đã hoàn thành (tôi mới bắt đầu hệ thống xếp hạng OWN cho trò chơi của mình), tôi biết thứ hạng xếp hạng ELO của người chơi của tôi sẽ là bao nhiêu, hoặc ít nhất là rất gần với điều đó. Vấn đề của tôi là, sau khi thực hiện thuật toán cơ sở đó, tôi có một số ngoại lệ đang tắt.

Vì tôi chỉ có 10 đến 40 trò chơi, nên suy nghĩ đầu tiên của tôi để khắc phục tình trạng này là thực hiện một vòng lặp xung quanh quá trình này, lấy xếp hạng ELO kết quả cuối cùng từ một chu kỳ và sử dụng làm điểm bắt đầu cho chu kỳ tiếp theo (cho mỗi cá nhân người chơi). Sau đó, lặp lại các chu kỳ này cho đến khi độ lệch trung bình hoặc tối đa của xếp hạng ELO từ các chu kỳ trước đến chu kỳ hiện tại không lớn hơn X. Điều này giúp giải quyết một số ngoại lệ lớn. Vẫn còn một số ngoại lệ nhỏ hơn mà tôi vẫn không thoải mái với ...

Ví dụ, tôi có 7 bộ phận, đối với phân khu 1, anh chàng nên được xếp hạng 1 dựa trên ELO của anh ta, cuối cùng được xếp hạng 5, đối với phân khu 2, anh chàng nên được xếp hạng 1 là thứ 3. Top 10 hoặc hơn cho mỗi bộ phận thực sự khá gần, ngoại trừ các loại ngoại lệ này.

Làm cách nào tôi có thể sửa đổi thuật toán của mình hoặc cách tiếp cận nào tôi có thể thực hiện để thử và giảm các ngoại lệ?

Lưu ý phụ # 1. Đối với phân khu 1, anh chàng nên là số 1, kết thúc ở vị trí số 5, thực sự được xếp hạng số 1 cho toàn bộ mùa giải bởi hệ thống xếp hạng khác. Tôi chỉ không biết cách tính toán của một người (và nó có thể không được tính toán, nó có thể dựa trên, tôi biết x người chơi này tốt như vậy, vì vậy anh ta được xếp hạng # 1).

Lưu ý phụ # 2. Tôi đã thực hiện một sửa đổi cho thuật toán. Tôi muốn "cân" các trận thắng / thua bằng cách họ chiếm ưu thế. Nếu người chơi A đánh bại người chơi B 20-0, tôi muốn điều đó có trọng số nặng hơn, đặc biệt là nếu xếp hạng của họ rất gần, nhưng nếu xếp hạng của họ cách xa nhau hơn (trong đó a đã lớn hơn B), thì thay đổi ELO không nên dù sao thì họ cũng sẽ giành chiến thắng ngay từ đầu. Vì vậy, những gì tôi đã làm là thay vì sử dụng hệ số k / giá trị 400 như công thức ban đầu sử dụng, tôi đã thay đổi nó thành 100 + ((score difference) * 2). Vì vậy, hệ số k tối đa sẽ là 140 (20-0 là chiến thắng lớn nhất, nhân với 2, cộng với 100).

Chiến lược nào khác tôi có thể thực hiện để bao gồm kết quả trọng lượng, cũng như sửa một số ngoại lệ đó?


Không có dữ liệu trước mặt tôi (mọi thứ đều ở nhà), tôi sẽ thử và tổng hợp kịch bản ...

Sư đoàn I

#1 Elo Rating of 2250
#2 Elo Rating of 2200
#3 Elo rating of 2190
#4 Elo rating of 2175
#5 Elo rating of 2170

Trong đó anh chàng số 5 chỉ cần đánh bại số 1 để giành chiến thắng trong giải đấu, và "cơ thể làm việc" của anh ta dường như hoàn thiện hơn anh chàng số 1 (hay còn gọi là anh ta đã thi đấu và đánh bại các đối thủ mạnh hơn anh chàng số 1 đã làm). Có thể đó là do yếu tố k "có trọng số" đang loại bỏ điều này bởi vì Số 5 có rất nhiều chiến thắng chỉ bằng 2 đến 5 điểm, trong đó chiến thắng # 1 là do tỷ lệ cao hơn, giả sử 5 đến 10 điểm.

Có lẽ tôi chỉ cần chơi xung quanh với yếu tố k "có trọng số" của mình để xem liệu tôi có thể nhận được kết quả tính toán của mình gần hơn với kết quả thực tế không ...


Điều gì nếu bạn chỉ xác định và ném ra các ngoại lệ?
Robert Harvey

@RobertHarvey Tôi muốn có quy trình hoàn toàn tự động .... nếu tôi hiểu chính xác đề xuất của bạn.
ganders

@RobertHarvey và tôi không thể "ném" một người chơi, anh ta được xếp hạng hợp pháp và NÊN là số 1 (anh chàng ví dụ đầu tiên)
ganders

1
Vậy thì anh ta không phải là một ngoại lệ ... phải không? Tôi thấy câu hỏi của bạn trên Meta. FWIW, vấn đề với này câu hỏi là thật khó để hình dung những gì bạn đang nói về. Có lẽ bạn có thể đăng một số dữ liệu bảng để chúng tôi xem xét?
Robert Harvey

MS đã xuất bản một chút trên hệ thống xếp hạng Xbox của họ: Research.microsoft.com/en-us/projects/trueskill . Có lẽ một số trong số đó có thể được áp dụng cho trò chơi của bạn.
Patrick

Câu trả lời:


1

Đây là những gì tôi đã làm để thử và giải quyết kịch bản của các ngoại lệ. Mô phỏng lại toàn bộ mùa giải của tôi, biết những gì mỗi người chơi NÊN được xếp hạng vào cuối mùa giải thông thường và giải đấu kết thúc mùa giải. Rõ ràng là khi có "sự đảo lộn" trong giải đấu kết thúc mùa giải, nó sẽ không chính xác, nhưng tôi cảm thấy điều này mang lại cho tôi kết quả gần nhất phù hợp với TẤT CẢ người chơi.

private double GetKFactor(double winnerRating, double scoreDifference, int winningPlayerMatchCount)
    {
        var kFactor = 32.0;

        if (winningPlayerMatchCount >= 11 && winningPlayerMatchCount < 21)
            kFactor = kFactor * .75;
        else if (winningPlayerMatchCount < 11)
            kFactor = kFactor * .5;

        return kFactor + scoreDifference;
    }

1
+1 để trả lời câu hỏi của riêng bạn và đánh dấu nó tốt. Điều đó đưa nó ra khỏi danh sách "chưa được trả lời", cho phép tôi chuyển sang một người khác cần giúp đỡ.
Guy Schalnat
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.