diff --git a/OpenSkillSharp.Tests/Models/Data/plackettluce.json b/OpenSkillSharp.Tests/Models/Data/plackettluce.json index 2b8d58e..41fe81e 100644 --- a/OpenSkillSharp.Tests/Models/Data/plackettluce.json +++ b/OpenSkillSharp.Tests/Models/Data/plackettluce.json @@ -86,21 +86,21 @@ ], "team_2": [ { - "mu": 23.083700519022745, + "mu": 20.599656070925114, "sigma": 8.222674397835641 }, { - "mu": 21.717476072569045, + "mu": 20.47545384852023, "sigma": 8.277466291367071 } ], "team_3": [ { - "mu": 21.717476072569045, + "mu": 20.47545384852023, "sigma": 8.277466291367071 }, { - "mu": 23.083700519022745, + "mu": 20.599656070925114, "sigma": 8.222674397835641 } ], @@ -160,7 +160,7 @@ "ties": { "team_1": [ { - "mu": 23.241111866333558, + "mu": 21.63766806988004, "sigma": 8.310709773172306 } ], @@ -176,15 +176,15 @@ ], "team_3": [ { - "mu": 21.479966996534408, + "mu": 19.87652320008089, "sigma": 8.237522411103104 }, { - "mu": 21.479966996534408, + "mu": 19.87652320008089, "sigma": 8.237522411103104 }, { - "mu": 21.479966996534408, + "mu": 19.87652320008089, "sigma": 8.237522411103104 } ] @@ -261,4 +261,4 @@ } ] } -} \ No newline at end of file +} diff --git a/OpenSkillSharp.Tests/Models/PlackettLuceTests.cs b/OpenSkillSharp.Tests/Models/PlackettLuceTests.cs index 549b03c..b199fa8 100644 --- a/OpenSkillSharp.Tests/Models/PlackettLuceTests.cs +++ b/OpenSkillSharp.Tests/Models/PlackettLuceTests.cs @@ -149,4 +149,16 @@ public void Rate_Balance() // Assert Assertions.RatingResultsEqual(expectedRatings, results); } + + [Fact] + public void Rate_AllScoresTied() + { + PlackettLuce model = new PlackettLuce { Mu = 30, Sigma = 30.0 / 3 }; + + ITeam[] teams = [new Team { Players = [model.Rating()] }, new Team { Players = [model.Rating()] }]; + ITeam[] result = model.Rate(teams, scores: [0, 0]).ToArray(); + + Assert.Equal(30, result[0].Players.Single().Mu); + Assert.Equal(30, result[1].Players.Single().Mu); + } } \ No newline at end of file diff --git a/OpenSkillSharp/Models/PlackettLuce.cs b/OpenSkillSharp/Models/PlackettLuce.cs index 88e4703..f8358d0 100644 --- a/OpenSkillSharp/Models/PlackettLuce.cs +++ b/OpenSkillSharp/Models/PlackettLuce.cs @@ -40,7 +40,7 @@ protected override IEnumerable Compute( return ( sumOmega: acc.sumOmega + ( iTeamIndex == qTeamIndex - ? 1 - (iMuOverCeOverSumQ / rankOccurrences[qTeamIndex]) + ? (1 - iMuOverCeOverSumQ) / rankOccurrences[qTeamIndex] : -1 * iMuOverCeOverSumQ / rankOccurrences[qTeamIndex] ), sumDelta: acc.sumDelta + diff --git a/OpenSkillSharp/OpenSkillModelBase.cs b/OpenSkillSharp/OpenSkillModelBase.cs index 05c8c85..3ef8f0b 100644 --- a/OpenSkillSharp/OpenSkillModelBase.cs +++ b/OpenSkillSharp/OpenSkillModelBase.cs @@ -289,6 +289,7 @@ protected IEnumerable CalculateMarginAdjustedMu( double sign = qTeamScore > iTeamScore ? 1D : -1D; return (qTeam.Mu - iTeam.Mu) * (marginFactor - 1) * sign; }) + .DefaultIfEmpty(0) .Average(); return qTeam.Mu + muAdjustment;