Trueskill с командами infer.netC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Trueskill с командами infer.net

Сообщение Anonymous »

Я пытаюсь создать модель TrueSkill с двумя командами и 5 игроками с anfer.net. Однако при выводе навыков, средства распространения становятся слишком большими или маленькими. Несмотря на то, что я использую выдуманные игроки и матчи здесь, я получаю аналогичные результаты с данными из реального мира. < /P>

Код: Выделить всё

using Microsoft.ML.Probabilistic.Distributions;
using Microsoft.ML.Probabilistic.Factors;
using Microsoft.ML.Probabilistic.Models;
using Microsoft.ML.Probabilistic.Collections;
using Microsoft.Data.Analysis;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Numerics;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
using System.Security.Cryptography;
using System.IO;
using System.Security.Policy;
using System.Reflection;

namespace ConsoleApp3
{
internal class infernetDemo5
{
static void Main(string[] args)
{

int[][] winnerData = {
new[] { 0, 1, 2, 3, 4 },
new[] { 0, 1, 2, 3, 5 },
new[] { 5, 6, 7, 8, 9 },
new[] { 5, 6, 7, 8, 9 },
new[] { 0, 1, 2, 3, 4 },
new[] { 0, 1, 2, 3, 5 },
new[] { 5, 6, 7, 8, 9 },
new[] { 5, 6, 7, 8, 9 },
new[] { 0, 1, 2, 3, 4 },
new[] { 0, 1, 2, 3, 5 },
new[] { 5, 6, 7, 8, 9 },
new[] { 5, 6, 7, 8, 9 },
new[] { 0, 1, 2, 3, 4 },
new[] { 0, 1, 2, 3, 5 },
new[] { 5, 6, 7, 8, 9 },
new[] { 5, 6, 7, 8, 9 },
new[] { 0, 1, 2, 3, 4 },
new[] { 0, 1, 2, 3, 5 },
new[] { 5, 6, 7, 8, 9 },
new[] { 5, 6, 7, 8, 9 },
new[] { 0, 1, 2, 3, 4 },
new[] { 0, 1, 2, 3, 5 },
new[] { 5, 6, 7, 8, 9 },
new[] { 5, 6, 7, 8, 9 },
new[] { 0, 1, 2, 3, 4 },
new[] { 0, 1, 2, 3, 5 },
new[] { 5, 6, 7, 8, 9 },
new[] { 5, 6, 7, 8, 9 },
new[] { 0, 1, 2, 3, 4 },
new[] { 0, 1, 2, 3, 5 },
new[] { 5, 6, 7, 8, 9 },
new[] { 5, 6, 7, 8, 9 },
};
int[][] loserData = {
new[] { 5, 6, 7, 8, 9 },
new[] { 6, 7, 8, 9, 4 },
new[] { 0, 1, 2, 3, 4 },
new[] { 0, 1, 2, 3, 4 },
new[] { 5, 6, 7, 8, 9 },
new[] { 6, 7, 8, 9, 4 },
new[] { 0, 1, 2, 3, 4 },
new[] { 0, 1, 2, 3, 4 },
new[] { 5, 6, 7, 8, 9 },
new[] { 6, 7, 8, 9, 4 },
new[] { 0, 1, 2, 3, 4 },
new[] { 0, 1, 2, 3, 4 },
new[] { 5, 6, 7, 8, 9 },
new[] { 6, 7, 8, 9, 4 },
new[] { 0, 1, 2, 3, 4 },
new[] { 0, 1, 2, 3, 4 },
new[] { 5, 6, 7, 8, 9 },
new[] { 6, 7, 8, 9, 4 },
new[] { 0, 1, 2, 3, 4 },
new[] { 0, 1, 2, 3, 4 },
new[] { 5, 6, 7, 8, 9 },
new[] { 6, 7, 8, 9, 4 },
new[] { 0, 1, 2, 3, 4 },
new[] { 0, 1, 2, 3, 4 },
new[] { 5, 6, 7, 8, 9 },
new[] { 6, 7, 8, 9, 4 },
new[] { 0, 1, 2, 3, 4 },
new[] { 0, 1, 2, 3, 4 },
new[] { 5, 6, 7, 8, 9 },
new[] { 6, 7, 8, 9, 4 },
new[] { 0, 1, 2, 3, 4 },
new[] { 0, 1, 2, 3, 4 },
};

var nGames = 32;
var nPlayers = 10;
var mu = 25.0;
var sigma = 8.333;
var beta = 4.1667;

var teamSize = new Range(5).Named("TeamSize");
var games = new Range(nGames).Named("Game");
var players = new Range(nPlayers).Named("Player");

var playerSkills = Variable.Array(players).Named("Skill");

var winner_lineups = Variable.Array(Variable.Array(teamSize), games).Named("t1Lineups");
var loser_lineups = Variable.Array(Variable.Array(teamSize), games).Named("t2Lineups");

var w_performances = Variable.Array(Variable.Array(teamSize), games);
var l_performances = Variable.Array(Variable.Array(teamSize), games);

using (Variable.ForEach(players))
{
playerSkills[players] = Variable.GaussianFromMeanAndPrecision(mu,  1 / (sigma* sigma));

}

using (var game = Variable.ForEach(games))
{
var gameIndex = game.Index;
using (var n = Variable.ForEach(teamSize))
{
var playerIndex = n.Index;
w_performances[gameIndex][playerIndex] = Variable.GaussianFromMeanAndPrecision(playerSkills[winner_lineups[gameIndex][playerIndex]], 1 / (beta* beta)).Named("w_player_performance");
l_performances[gameIndex][playerIndex] = Variable.GaussianFromMeanAndPrecision(playerSkills[loser_lineups[gameIndex][playerIndex]], 1 / (beta* beta)).Named("l_player_perfomance");
}

}

var w_performance = Variable.Sum(w_performances[games]);
var l_performance = Variable.Sum(l_performances[games]);
Variable.ConstrainTrue(w_performance > l_performance);

winner_lineups.ObservedValue = winnerData;
loser_lineups.ObservedValue = loserData;

var inferenceEngine = new InferenceEngine();
inferenceEngine.NumberOfIterations = 10;
var inferredSkills = inferenceEngine.Infer(playerSkills);

foreach(var playerSkill in inferredSkills)
{
Console.WriteLine(playerSkill);
}

}

}
}
< /code>
output: < /p>
Compiling model...done.
Iterating:
.........| 10
Gaussian(25, 69,44)
Gaussian(25, 69,44)
Gaussian(25, 69,44)
Gaussian(25, 69,44)
Gaussian(-6,574e+04, 26,68)
Gaussian(-4,68e+04, 14,8)
Gaussian(-4,889e+04, 10,78)
Gaussian(-4,889e+04, 10,78)
Gaussian(-4,889e+04, 10,78)
Gaussian(-4,889e+04, 10,78)
Использование TrueSkillThroughtime https://github.com/glandfred/trueskillthroughtime.py с теми же образцами данных и значениями, которые должны соответствовать той же модели, дают следующие результаты:

Код: Выделить всё

N(mu=26.223, sigma=3.618)
N(mu=26.223, sigma=3.618)
N(mu=26.223, sigma=3.618)
N(mu=26.223, sigma=3.618)
N(mu=16.821, sigma=3.618)
N(mu=33.179, sigma=3.618)
N(mu=23.777, sigma=3.618)
N(mu=23.777, sigma=3.618)
N(mu=23.777, sigma=3.618)
N(mu=23.777, sigma=3.618)
Я подозреваю, что подводя выступления игроков команды - это проблема, поскольку при ограничении отдельных результатов в соответствии с результатами дают разумные оценки навыков.

Подробнее здесь: https://stackoverflow.com/questions/794 ... -infer-net
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Непостоянные оценки при рисовании с помощью Trueskill.
    Anonymous » » в форуме Python
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Непостоянные оценки при рисовании с помощью Trueskill.
    Anonymous » » в форуме Python
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Отсутствует класс com.facebook.infer.annotation.Nullsafe$Mode (ссылка: com.facebook.ads.NativeAdBase).
    Anonymous » » в форуме Android
    0 Ответы
    36 Просмотры
    Последнее сообщение Anonymous
  • Отсутствие класса com.facebook.infer.annotation.nullsafe $ mode (ссылка на: com.facebook.ads.nativeadbase
    Anonymous » » в форуме Android
    0 Ответы
    62 Просмотры
    Последнее сообщение Anonymous
  • Проблема отправителя сообщений Discord.py с командами
    Anonymous » » в форуме Python
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»