trueskill 0.1.0 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- data/HISTORY.md +4 -0
- data/LICENSE +1 -1
- data/README.md +66 -0
- data/Rakefile +14 -36
- data/lib/saulabs/gauss/distribution.rb +13 -11
- data/lib/saulabs/trueskill/factor_graph.rb +64 -4
- data/lib/saulabs/trueskill/factors/base.rb +3 -0
- data/lib/saulabs/trueskill/factors/greater_than.rb +2 -0
- data/lib/saulabs/trueskill/factors/likelihood.rb +2 -0
- data/lib/saulabs/trueskill/factors/prior.rb +2 -0
- data/lib/saulabs/trueskill/factors/weighted_sum.rb +2 -2
- data/lib/saulabs/trueskill/factors/within.rb +2 -0
- data/lib/saulabs/trueskill/layers/base.rb +2 -0
- data/lib/saulabs/trueskill/layers/iterated_team_performances.rb +3 -1
- data/lib/saulabs/trueskill/layers/performances_to_team_performances.rb +3 -1
- data/lib/saulabs/trueskill/layers/prior_to_skills.rb +3 -1
- data/lib/saulabs/trueskill/layers/skills_to_performances.rb +3 -1
- data/lib/saulabs/trueskill/layers/team_difference_comparision.rb +3 -1
- data/lib/saulabs/trueskill/layers/team_performance_differences.rb +3 -1
- data/lib/saulabs/trueskill/rating.rb +7 -1
- data/lib/saulabs/trueskill/schedules/base.rb +2 -0
- data/lib/saulabs/trueskill/schedules/loop.rb +2 -0
- data/lib/saulabs/trueskill/schedules/sequence.rb +2 -0
- data/lib/saulabs/trueskill/schedules/step.rb +2 -0
- data/spec/saulabs/gauss/distribution_spec.rb +0 -1
- data/spec/saulabs/trueskill/factor_graph_spec.rb +11 -7
- data/spec/saulabs/trueskill/factors/weighted_sum_spec.rb +0 -5
- data/spec/spec.opts +3 -0
- metadata +17 -50
- data/.document +0 -5
- data/.gitignore +0 -21
- data/CHANGELOG +0 -0
- data/README.rdoc +0 -17
- data/VERSION +0 -1
- data/trueskill.gemspec +0 -99
data/HISTORY.md
ADDED
data/LICENSE
CHANGED
data/README.md
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
trueskill
|
2
|
+
=========
|
3
|
+
|
4
|
+
trueskill is a rating-system for games with an arbitrary number of teams and players developed by Microsoft Research. It is based on the Glicko rating system and solves some major flaws of the ELO system.
|
5
|
+
|
6
|
+
Usage
|
7
|
+
-----
|
8
|
+
|
9
|
+
Example:
|
10
|
+
|
11
|
+
require 'rubygems'
|
12
|
+
require 'saulabs/trueskill'
|
13
|
+
|
14
|
+
include Saulabs::TrueSkill
|
15
|
+
|
16
|
+
# team 1 has just one player with a mean skill of 27.1, a skill-deviation of 2.13
|
17
|
+
# and an play activity of 100 %
|
18
|
+
team1 = [Rating.new(27.1, 2.13, 1.0)]
|
19
|
+
|
20
|
+
# team 2 has two players
|
21
|
+
team2 = [Rating.new(22.0, 0.98, 0.8), Rating.new(31.1, 5.33, 0.9)]
|
22
|
+
|
23
|
+
# team 1 finished first and team 2 second
|
24
|
+
graph = FactorGraph.new([team1, team2], [1,2])
|
25
|
+
|
26
|
+
# update the Ratings
|
27
|
+
graph.update_skills
|
28
|
+
|
29
|
+
Installation
|
30
|
+
------------
|
31
|
+
|
32
|
+
To install the TrueSkill gem, simply run
|
33
|
+
|
34
|
+
[sudo] gem install trueskill
|
35
|
+
|
36
|
+
Add the following to your script:
|
37
|
+
|
38
|
+
require 'saulabs/trueskill'
|
39
|
+
|
40
|
+
Known issues
|
41
|
+
------------
|
42
|
+
|
43
|
+
* The calculation of the ranking probability is not yet implemented
|
44
|
+
|
45
|
+
Plans
|
46
|
+
-----
|
47
|
+
|
48
|
+
*
|
49
|
+
|
50
|
+
Note on Patches/Pull Requests
|
51
|
+
-----------------------------
|
52
|
+
|
53
|
+
* Fork the project.
|
54
|
+
* Make your feature addition or bug fix.
|
55
|
+
* Add tests for it. This is important so I don't break it in a
|
56
|
+
future version unintentionally.
|
57
|
+
* Commit, do not mess with rakefile, version, or history.
|
58
|
+
(if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
59
|
+
* Send me a pull request. Bonus points for topic branches.
|
60
|
+
|
61
|
+
Copyright
|
62
|
+
---------
|
63
|
+
|
64
|
+
© 2010 Lars Kuhnt (<http://saulabs.net>).
|
65
|
+
|
66
|
+
See LICENSE for details.
|
data/Rakefile
CHANGED
@@ -1,46 +1,24 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'rake'
|
3
|
+
require 'bundler'
|
3
4
|
|
4
|
-
|
5
|
-
|
6
|
-
Jeweler::Tasks.new do |gem|
|
7
|
-
gem.name = "trueskill"
|
8
|
-
gem.summary = %Q{A ruby library for the trueskill rating system}
|
9
|
-
gem.description = %Q{A ruby library for the trueskill rating system}
|
10
|
-
gem.email = "lars.kuhnt@gmail.com"
|
11
|
-
gem.homepage = "http://github.com/saulabs/trueskill"
|
12
|
-
gem.authors = ["Lars Kuhnt"]
|
13
|
-
gem.add_development_dependency "rspec", ">= 1.2.9"
|
14
|
-
gem.add_dependency('narray', '>= 0.5.9.7')
|
15
|
-
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
16
|
-
end
|
17
|
-
Jeweler::GemcutterTasks.new
|
18
|
-
rescue LoadError
|
19
|
-
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
20
|
-
end
|
5
|
+
Bundler.setup
|
6
|
+
Bundler.require
|
21
7
|
|
22
8
|
require 'spec/rake/spectask'
|
23
|
-
Spec::Rake::SpecTask.new(:spec) do |spec|
|
24
|
-
spec.libs << 'lib' << 'spec'
|
25
|
-
spec.spec_files = FileList['spec/**/*_spec.rb']
|
26
|
-
end
|
27
|
-
|
28
|
-
Spec::Rake::SpecTask.new(:rcov) do |spec|
|
29
|
-
spec.libs << 'lib' << 'spec'
|
30
|
-
spec.pattern = 'spec/**/*_spec.rb'
|
31
|
-
spec.rcov = true
|
32
|
-
end
|
33
|
-
|
34
|
-
task :spec => :check_dependencies
|
35
9
|
|
10
|
+
desc 'Default: run specs.'
|
36
11
|
task :default => :spec
|
37
12
|
|
38
|
-
|
39
|
-
Rake::
|
40
|
-
|
13
|
+
desc 'Run the specs'
|
14
|
+
Spec::Rake::SpecTask.new(:spec) do |t|
|
15
|
+
t.rcov_opts << '--exclude "gems/*,spec/*"'
|
16
|
+
t.rcov = true
|
17
|
+
t.rcov_dir = 'doc/coverage'
|
18
|
+
t.spec_files = FileList['spec/**/*_spec.rb']
|
19
|
+
end
|
41
20
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
21
|
+
YARD::Rake::YardocTask.new(:doc) do |t|
|
22
|
+
t.files = ['lib/**/*.rb', 'HISTORY.md']
|
23
|
+
t.options = ['--no-private', '--title', 'trueskill Documentation', '--readme', 'README.md']
|
46
24
|
end
|
@@ -1,10 +1,13 @@
|
|
1
1
|
module Saulabs
|
2
2
|
module Gauss
|
3
|
+
|
4
|
+
# Implementation of a gaussian distribution
|
5
|
+
#
|
3
6
|
class Distribution
|
4
7
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
+
@@sqrt2 = Math.sqrt(2).freeze
|
9
|
+
@@inv_sqrt_2pi = (1 / Math.sqrt(2 * Math::PI)).freeze
|
10
|
+
@@log_sqrt_2pi = Math.log(Math.sqrt(2 * Math::PI)).freeze
|
8
11
|
|
9
12
|
# gaussian normal distribution values
|
10
13
|
attr_accessor :mean, :deviation, :variance, :precision, :precision_mean
|
@@ -22,8 +25,7 @@ module Saulabs
|
|
22
25
|
class << self
|
23
26
|
|
24
27
|
def standard
|
25
|
-
|
26
|
-
@@standard
|
28
|
+
Distribution.new(0.0, 1.0)
|
27
29
|
end
|
28
30
|
|
29
31
|
def with_deviation(mean, deviation)
|
@@ -46,7 +48,7 @@ module Saulabs
|
|
46
48
|
return 0.0 if x.precision == 0.0 || y.precision == 0.0
|
47
49
|
variance_sum = x.variance + y.variance
|
48
50
|
mean_diff = x.mean - y.mean
|
49
|
-
|
51
|
+
-@@log_sqrt_2pi - (Math.log(variance_sum) / 2.0) - (mean_diff**2 / (2.0 * variance_sum))
|
50
52
|
end
|
51
53
|
|
52
54
|
def log_ratio_normalization(x, y)
|
@@ -54,24 +56,24 @@ module Saulabs
|
|
54
56
|
variance_diff = y.variance - x.variance
|
55
57
|
return 0.0 if variance_diff == 0.0
|
56
58
|
mean_diff = x.mean - y.mean
|
57
|
-
Math.log(y.variance) +
|
59
|
+
Math.log(y.variance) + @@log_sqrt_2pi - (Math.log(variance_diff) / 2.0) + (mean_diff**2 / (2.0 * variance_diff))
|
58
60
|
end
|
59
61
|
|
60
62
|
# Computes the cummulative Gaussian distribution at a specified point of interest
|
61
63
|
def cumulative_distribution_function(x)
|
62
|
-
0.5 * (1 + Math.erf(x /
|
64
|
+
0.5 * (1 + Math.erf(x / @@sqrt2))
|
63
65
|
end
|
64
66
|
alias_method :cdf, :cumulative_distribution_function
|
65
67
|
|
66
68
|
# Computes the Gaussian density at a specified point of interest
|
67
69
|
def probability_density_function(x)
|
68
|
-
|
70
|
+
@@inv_sqrt_2pi * Math.exp(-0.5 * (x**2))
|
69
71
|
end
|
70
72
|
alias_method :pdf, :probability_density_function
|
71
73
|
|
72
74
|
# The inverse of the cummulative Gaussian distribution function
|
73
75
|
def quantile_function(x)
|
74
|
-
|
76
|
+
-@@sqrt2 * Math.erfc(2.0 * x)
|
75
77
|
end
|
76
78
|
alias_method :inv_cdf, :quantile_function
|
77
79
|
|
@@ -79,7 +81,7 @@ module Saulabs
|
|
79
81
|
|
80
82
|
def value_at(x)
|
81
83
|
exp = -(x - @mean)**2.0 / (2.0 * @variance)
|
82
|
-
(1.0/@deviation) *
|
84
|
+
(1.0/@deviation) * @@inv_sqrt_2pi * Math.exp(exp)
|
83
85
|
end
|
84
86
|
|
85
87
|
# copy values from other distribution
|
@@ -3,9 +3,60 @@ module Saulabs
|
|
3
3
|
|
4
4
|
class FactorGraph
|
5
5
|
|
6
|
-
|
6
|
+
# @return [Array<Array<TrueSkill::Rating>>]
|
7
|
+
attr_reader :teams
|
7
8
|
|
8
|
-
#
|
9
|
+
# @return [Float]
|
10
|
+
attr_reader :beta
|
11
|
+
|
12
|
+
# @return [Float]
|
13
|
+
attr_reader :beta_squared
|
14
|
+
|
15
|
+
# @return [Float]
|
16
|
+
attr_reader:draw_probability
|
17
|
+
|
18
|
+
# @return [Float]
|
19
|
+
attr_reader:epsilon
|
20
|
+
|
21
|
+
# @private
|
22
|
+
attr_reader:layers
|
23
|
+
|
24
|
+
|
25
|
+
# Creates a new trueskill factor graph for calculating the new skills based on the given game parameters
|
26
|
+
#
|
27
|
+
# @param [Array<Array<TrueSkill::Rating>>] teams
|
28
|
+
# player-ratings grouped in Arrays by teams
|
29
|
+
# @param [Array<Integer>] ranks
|
30
|
+
# team rankings, example: [2,1,3] first team in teams finished 2nd, second team 1st and third team 3rd
|
31
|
+
# @param [Hash] options
|
32
|
+
# the options hash to configure the factor graph constants beta and draw_probability
|
33
|
+
#
|
34
|
+
# @option options [Float] :beta (4.166667)
|
35
|
+
# the length of the skill-chain. Use a low value for games with a small amount of chance (Go, Chess, etc.) and
|
36
|
+
# a high value for games with a high amount of chance (Uno, Bridge, etc.)
|
37
|
+
# @option options [Float] :draw_probability (0.1)
|
38
|
+
# how probable is a draw in the game outcome [0.0,1.0]
|
39
|
+
#
|
40
|
+
# @example Calculating new skills of a two team game, where one team has one player and the other two
|
41
|
+
#
|
42
|
+
# require 'rubygems'
|
43
|
+
# require 'saulabs/trueskill'
|
44
|
+
#
|
45
|
+
# include Saulabs::TrueSkill
|
46
|
+
#
|
47
|
+
# # team 1 has just one player with a mean skill of 27.1, a skill-deviation of 2.13
|
48
|
+
# # and an play activity of 100 %
|
49
|
+
# team1 = [Rating.new(27.1, 2.13, 1.0)]
|
50
|
+
#
|
51
|
+
# # team 2 has two players
|
52
|
+
# team2 = [Rating.new(22.0, 0.98, 0.8), Rating.new(31.1, 5.33, 0.9)]
|
53
|
+
#
|
54
|
+
# # team 1 finished first and team 2 second
|
55
|
+
# graph = FactorGraph.new([team1, team2], [1,2])
|
56
|
+
#
|
57
|
+
# # update the Ratings
|
58
|
+
# graph.update_skills
|
59
|
+
#
|
9
60
|
def initialize(teams, ranks, options = {})
|
10
61
|
@teams = teams
|
11
62
|
@ranks = ranks
|
@@ -30,10 +81,18 @@ module Saulabs
|
|
30
81
|
Gauss::Distribution.inv_cdf(0.5*(@draw_probability + 1)) * Math.sqrt(1 + 1) * @beta
|
31
82
|
end
|
32
83
|
|
33
|
-
|
84
|
+
# Updates the skills of the players inplace
|
85
|
+
#
|
86
|
+
# @return [Float] the probability of the games outcome
|
87
|
+
def update_skills
|
34
88
|
build_layers
|
35
89
|
run_schedule
|
36
|
-
|
90
|
+
@teams.each_with_index do |team, i|
|
91
|
+
team.each_with_index do |player, j|
|
92
|
+
player.replace(@prior_layer.output[i][j])
|
93
|
+
end
|
94
|
+
end
|
95
|
+
ranking_probability
|
37
96
|
end
|
38
97
|
|
39
98
|
private
|
@@ -49,6 +108,7 @@ module Saulabs
|
|
49
108
|
# end
|
50
109
|
# end
|
51
110
|
# Math.exp(sum_log_z + sum_log_s)
|
111
|
+
0.0
|
52
112
|
end
|
53
113
|
|
54
114
|
def updated_skills
|
@@ -3,7 +3,8 @@ module Saulabs
|
|
3
3
|
|
4
4
|
class Rating < Gauss::Distribution
|
5
5
|
|
6
|
-
|
6
|
+
attr_accessor :activity
|
7
|
+
attr_reader :tau, :tau_squared
|
7
8
|
|
8
9
|
def initialize(mean, deviation, activity = 1.0, tau = 25/300.0)
|
9
10
|
super(mean, deviation)
|
@@ -12,6 +13,11 @@ module Saulabs
|
|
12
13
|
@tau_squared = @tau**2
|
13
14
|
end
|
14
15
|
|
16
|
+
def tau=(value)
|
17
|
+
@tau = value
|
18
|
+
@tau_squared = value**2
|
19
|
+
end
|
20
|
+
|
15
21
|
end
|
16
22
|
|
17
23
|
end
|
@@ -140,7 +140,6 @@ describe Gauss::Distribution, "functions" do
|
|
140
140
|
|
141
141
|
it "#quantile_function should return -0.62941" do
|
142
142
|
Gauss::Distribution.quantile_function(0.27).should be_close(-0.62941, 0.00001)
|
143
|
-
Gauss::Distribution.quantile_function(0.9).should be_close(1.281551, tolerance)
|
144
143
|
end
|
145
144
|
|
146
145
|
end
|
@@ -4,23 +4,27 @@ describe Saulabs::TrueSkill::FactorGraph do
|
|
4
4
|
|
5
5
|
before :each do
|
6
6
|
@teams = create_teams
|
7
|
+
@skill = @teams.first.first
|
7
8
|
@graph = TrueSkill::FactorGraph.new(@teams, [1,2,3])
|
8
9
|
end
|
9
10
|
|
10
|
-
describe "#
|
11
|
+
describe "#update_skills" do
|
11
12
|
|
12
|
-
it "should
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
13
|
+
it "should update the mean of the first player in team1 to 29.61452" do
|
14
|
+
@graph.update_skills
|
15
|
+
@skill.mean.should be_close(29.61452, tolerance)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should update the deviation of the first player in team1 to 3.5036" do
|
19
|
+
@graph.update_skills
|
20
|
+
@skill.deviation.should be_close(3.5036, tolerance)
|
17
21
|
end
|
18
22
|
|
19
23
|
end
|
20
24
|
|
21
25
|
describe "#draw_margin" do
|
22
26
|
|
23
|
-
it "should be " do
|
27
|
+
it "should be -0.998291" do
|
24
28
|
@graph.draw_margin.should be_close(-0.998291, tolerance)
|
25
29
|
end
|
26
30
|
|
@@ -56,11 +56,6 @@ describe TrueSkill::Factors::Prior do
|
|
56
56
|
it "should return a difference of 4.50116 for message 0" do
|
57
57
|
@factor.update_message_at(0).should be_close(4.50116, tolerance)
|
58
58
|
end
|
59
|
-
|
60
|
-
it "should return a difference of 4.50116 for message 1" do
|
61
|
-
@factor.update_message_at(0)
|
62
|
-
@factor.update_message_at(1).should be_close(4.0, tolerance)
|
63
|
-
end
|
64
59
|
|
65
60
|
end
|
66
61
|
|
data/spec/spec.opts
CHANGED
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
7
|
+
- 9
|
8
8
|
- 0
|
9
|
-
version: 0.
|
9
|
+
version: 0.9.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Lars Kuhnt
|
@@ -16,57 +16,24 @@ cert_chain: []
|
|
16
16
|
|
17
17
|
date: 2010-04-21 00:00:00 +02:00
|
18
18
|
default_executable:
|
19
|
-
dependencies:
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
-
requirements:
|
25
|
-
- - ">="
|
26
|
-
- !ruby/object:Gem::Version
|
27
|
-
segments:
|
28
|
-
- 1
|
29
|
-
- 2
|
30
|
-
- 9
|
31
|
-
version: 1.2.9
|
32
|
-
type: :development
|
33
|
-
version_requirements: *id001
|
34
|
-
- !ruby/object:Gem::Dependency
|
35
|
-
name: narray
|
36
|
-
prerelease: false
|
37
|
-
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
-
requirements:
|
39
|
-
- - ">="
|
40
|
-
- !ruby/object:Gem::Version
|
41
|
-
segments:
|
42
|
-
- 0
|
43
|
-
- 5
|
44
|
-
- 9
|
45
|
-
- 7
|
46
|
-
version: 0.5.9.7
|
47
|
-
type: :runtime
|
48
|
-
version_requirements: *id002
|
49
|
-
description: A ruby library for the trueskill rating system
|
50
|
-
email: lars.kuhnt@gmail.com
|
19
|
+
dependencies: []
|
20
|
+
|
21
|
+
description: ""
|
22
|
+
email: lars@sauspiel.de
|
51
23
|
executables: []
|
52
24
|
|
53
25
|
extensions: []
|
54
26
|
|
55
|
-
extra_rdoc_files:
|
56
|
-
|
57
|
-
- README.rdoc
|
27
|
+
extra_rdoc_files: []
|
28
|
+
|
58
29
|
files:
|
59
|
-
- .
|
60
|
-
- .
|
61
|
-
- CHANGELOG
|
62
|
-
- LICENSE
|
63
|
-
- README.rdoc
|
30
|
+
- README.md
|
31
|
+
- HISTORY.md
|
64
32
|
- Rakefile
|
65
|
-
-
|
66
|
-
- lib/saulabs/gauss.rb
|
33
|
+
- LICENSE
|
67
34
|
- lib/saulabs/gauss/distribution.rb
|
68
35
|
- lib/saulabs/gauss/truncated_correction.rb
|
69
|
-
- lib/saulabs/
|
36
|
+
- lib/saulabs/gauss.rb
|
70
37
|
- lib/saulabs/trueskill/factor_graph.rb
|
71
38
|
- lib/saulabs/trueskill/factors/base.rb
|
72
39
|
- lib/saulabs/trueskill/factors/greater_than.rb
|
@@ -86,6 +53,7 @@ files:
|
|
86
53
|
- lib/saulabs/trueskill/schedules/loop.rb
|
87
54
|
- lib/saulabs/trueskill/schedules/sequence.rb
|
88
55
|
- lib/saulabs/trueskill/schedules/step.rb
|
56
|
+
- lib/saulabs/trueskill.rb
|
89
57
|
- spec/saulabs/gauss/distribution_spec.rb
|
90
58
|
- spec/saulabs/gauss/truncated_correction_spec.rb
|
91
59
|
- spec/saulabs/trueskill/factor_graph_spec.rb
|
@@ -96,16 +64,14 @@ files:
|
|
96
64
|
- spec/saulabs/trueskill/factors/within_spec.rb
|
97
65
|
- spec/saulabs/trueskill/layers/prior_to_skills_spec.rb
|
98
66
|
- spec/saulabs/trueskill/schedules_spec.rb
|
99
|
-
- spec/spec.opts
|
100
67
|
- spec/spec_helper.rb
|
101
|
-
|
102
|
-
has_rdoc: true
|
68
|
+
has_rdoc: false
|
103
69
|
homepage: http://github.com/saulabs/trueskill
|
104
70
|
licenses: []
|
105
71
|
|
106
72
|
post_install_message:
|
107
|
-
rdoc_options:
|
108
|
-
|
73
|
+
rdoc_options: []
|
74
|
+
|
109
75
|
require_paths:
|
110
76
|
- lib
|
111
77
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -141,3 +107,4 @@ test_files:
|
|
141
107
|
- spec/saulabs/trueskill/layers/prior_to_skills_spec.rb
|
142
108
|
- spec/saulabs/trueskill/schedules_spec.rb
|
143
109
|
- spec/spec_helper.rb
|
110
|
+
- spec/spec.opts
|
data/.document
DELETED
data/.gitignore
DELETED
data/CHANGELOG
DELETED
File without changes
|
data/README.rdoc
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
= trueskill
|
2
|
-
|
3
|
-
Description goes here.
|
4
|
-
|
5
|
-
== Note on Patches/Pull Requests
|
6
|
-
|
7
|
-
* Fork the project.
|
8
|
-
* Make your feature addition or bug fix.
|
9
|
-
* Add tests for it. This is important so I don't break it in a
|
10
|
-
future version unintentionally.
|
11
|
-
* Commit, do not mess with rakefile, version, or history.
|
12
|
-
(if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
13
|
-
* Send me a pull request. Bonus points for topic branches.
|
14
|
-
|
15
|
-
== Copyright
|
16
|
-
|
17
|
-
Copyright (c) 2010 Lars Kuhnt. See LICENSE for details.
|
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
0.1.0
|
data/trueskill.gemspec
DELETED
@@ -1,99 +0,0 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
-
# -*- encoding: utf-8 -*-
|
5
|
-
|
6
|
-
Gem::Specification.new do |s|
|
7
|
-
s.name = %q{trueskill}
|
8
|
-
s.version = "0.1.0"
|
9
|
-
|
10
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = ["Lars Kuhnt"]
|
12
|
-
s.date = %q{2010-04-21}
|
13
|
-
s.description = %q{A ruby library for the trueskill rating system}
|
14
|
-
s.email = %q{lars.kuhnt@gmail.com}
|
15
|
-
s.extra_rdoc_files = [
|
16
|
-
"LICENSE",
|
17
|
-
"README.rdoc"
|
18
|
-
]
|
19
|
-
s.files = [
|
20
|
-
".document",
|
21
|
-
".gitignore",
|
22
|
-
"CHANGELOG",
|
23
|
-
"LICENSE",
|
24
|
-
"README.rdoc",
|
25
|
-
"Rakefile",
|
26
|
-
"VERSION",
|
27
|
-
"lib/saulabs/gauss.rb",
|
28
|
-
"lib/saulabs/gauss/distribution.rb",
|
29
|
-
"lib/saulabs/gauss/truncated_correction.rb",
|
30
|
-
"lib/saulabs/trueskill.rb",
|
31
|
-
"lib/saulabs/trueskill/factor_graph.rb",
|
32
|
-
"lib/saulabs/trueskill/factors/base.rb",
|
33
|
-
"lib/saulabs/trueskill/factors/greater_than.rb",
|
34
|
-
"lib/saulabs/trueskill/factors/likelihood.rb",
|
35
|
-
"lib/saulabs/trueskill/factors/prior.rb",
|
36
|
-
"lib/saulabs/trueskill/factors/weighted_sum.rb",
|
37
|
-
"lib/saulabs/trueskill/factors/within.rb",
|
38
|
-
"lib/saulabs/trueskill/layers/base.rb",
|
39
|
-
"lib/saulabs/trueskill/layers/iterated_team_performances.rb",
|
40
|
-
"lib/saulabs/trueskill/layers/performances_to_team_performances.rb",
|
41
|
-
"lib/saulabs/trueskill/layers/prior_to_skills.rb",
|
42
|
-
"lib/saulabs/trueskill/layers/skills_to_performances.rb",
|
43
|
-
"lib/saulabs/trueskill/layers/team_difference_comparision.rb",
|
44
|
-
"lib/saulabs/trueskill/layers/team_performance_differences.rb",
|
45
|
-
"lib/saulabs/trueskill/rating.rb",
|
46
|
-
"lib/saulabs/trueskill/schedules/base.rb",
|
47
|
-
"lib/saulabs/trueskill/schedules/loop.rb",
|
48
|
-
"lib/saulabs/trueskill/schedules/sequence.rb",
|
49
|
-
"lib/saulabs/trueskill/schedules/step.rb",
|
50
|
-
"spec/saulabs/gauss/distribution_spec.rb",
|
51
|
-
"spec/saulabs/gauss/truncated_correction_spec.rb",
|
52
|
-
"spec/saulabs/trueskill/factor_graph_spec.rb",
|
53
|
-
"spec/saulabs/trueskill/factors/greater_than_spec.rb",
|
54
|
-
"spec/saulabs/trueskill/factors/likelihood_spec.rb",
|
55
|
-
"spec/saulabs/trueskill/factors/prior_spec.rb",
|
56
|
-
"spec/saulabs/trueskill/factors/weighted_sum_spec.rb",
|
57
|
-
"spec/saulabs/trueskill/factors/within_spec.rb",
|
58
|
-
"spec/saulabs/trueskill/layers/prior_to_skills_spec.rb",
|
59
|
-
"spec/saulabs/trueskill/schedules_spec.rb",
|
60
|
-
"spec/spec.opts",
|
61
|
-
"spec/spec_helper.rb",
|
62
|
-
"trueskill.gemspec"
|
63
|
-
]
|
64
|
-
s.homepage = %q{http://github.com/saulabs/trueskill}
|
65
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
66
|
-
s.require_paths = ["lib"]
|
67
|
-
s.rubygems_version = %q{1.3.6}
|
68
|
-
s.summary = %q{A ruby library for the trueskill rating system}
|
69
|
-
s.test_files = [
|
70
|
-
"spec/saulabs/gauss/distribution_spec.rb",
|
71
|
-
"spec/saulabs/gauss/truncated_correction_spec.rb",
|
72
|
-
"spec/saulabs/trueskill/factor_graph_spec.rb",
|
73
|
-
"spec/saulabs/trueskill/factors/greater_than_spec.rb",
|
74
|
-
"spec/saulabs/trueskill/factors/likelihood_spec.rb",
|
75
|
-
"spec/saulabs/trueskill/factors/prior_spec.rb",
|
76
|
-
"spec/saulabs/trueskill/factors/weighted_sum_spec.rb",
|
77
|
-
"spec/saulabs/trueskill/factors/within_spec.rb",
|
78
|
-
"spec/saulabs/trueskill/layers/prior_to_skills_spec.rb",
|
79
|
-
"spec/saulabs/trueskill/schedules_spec.rb",
|
80
|
-
"spec/spec_helper.rb"
|
81
|
-
]
|
82
|
-
|
83
|
-
if s.respond_to? :specification_version then
|
84
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
85
|
-
s.specification_version = 3
|
86
|
-
|
87
|
-
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
88
|
-
s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
|
89
|
-
s.add_runtime_dependency(%q<narray>, [">= 0.5.9.7"])
|
90
|
-
else
|
91
|
-
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
92
|
-
s.add_dependency(%q<narray>, [">= 0.5.9.7"])
|
93
|
-
end
|
94
|
-
else
|
95
|
-
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
96
|
-
s.add_dependency(%q<narray>, [">= 0.5.9.7"])
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|