trueskill 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. data/.document +5 -0
  2. data/.gitignore +21 -0
  3. data/CHANGELOG +0 -0
  4. data/LICENSE +20 -0
  5. data/README.rdoc +17 -0
  6. data/Rakefile +46 -0
  7. data/VERSION +1 -0
  8. data/lib/saulabs/gauss.rb +3 -0
  9. data/lib/saulabs/gauss/distribution.rb +125 -0
  10. data/lib/saulabs/gauss/truncated_correction.rb +62 -0
  11. data/lib/saulabs/trueskill.rb +7 -0
  12. data/lib/saulabs/trueskill/factor_graph.rb +75 -0
  13. data/lib/saulabs/trueskill/factors/base.rb +50 -0
  14. data/lib/saulabs/trueskill/factors/greater_than.rb +45 -0
  15. data/lib/saulabs/trueskill/factors/likelihood.rb +45 -0
  16. data/lib/saulabs/trueskill/factors/prior.rb +35 -0
  17. data/lib/saulabs/trueskill/factors/weighted_sum.rb +80 -0
  18. data/lib/saulabs/trueskill/factors/within.rb +45 -0
  19. data/lib/saulabs/trueskill/layers/base.rb +32 -0
  20. data/lib/saulabs/trueskill/layers/iterated_team_performances.rb +72 -0
  21. data/lib/saulabs/trueskill/layers/performances_to_team_performances.rb +31 -0
  22. data/lib/saulabs/trueskill/layers/prior_to_skills.rb +32 -0
  23. data/lib/saulabs/trueskill/layers/skills_to_performances.rb +31 -0
  24. data/lib/saulabs/trueskill/layers/team_difference_comparision.rb +27 -0
  25. data/lib/saulabs/trueskill/layers/team_performance_differences.rb +22 -0
  26. data/lib/saulabs/trueskill/rating.rb +18 -0
  27. data/lib/saulabs/trueskill/schedules/base.rb +15 -0
  28. data/lib/saulabs/trueskill/schedules/loop.rb +26 -0
  29. data/lib/saulabs/trueskill/schedules/sequence.rb +23 -0
  30. data/lib/saulabs/trueskill/schedules/step.rb +20 -0
  31. data/spec/saulabs/gauss/distribution_spec.rb +162 -0
  32. data/spec/saulabs/gauss/truncated_correction_spec.rb +41 -0
  33. data/spec/saulabs/trueskill/factor_graph_spec.rb +29 -0
  34. data/spec/saulabs/trueskill/factors/greater_than_spec.rb +26 -0
  35. data/spec/saulabs/trueskill/factors/likelihood_spec.rb +32 -0
  36. data/spec/saulabs/trueskill/factors/prior_spec.rb +26 -0
  37. data/spec/saulabs/trueskill/factors/weighted_sum_spec.rb +67 -0
  38. data/spec/saulabs/trueskill/factors/within_spec.rb +26 -0
  39. data/spec/saulabs/trueskill/layers/prior_to_skills_spec.rb +39 -0
  40. data/spec/saulabs/trueskill/schedules_spec.rb +14 -0
  41. data/spec/spec.opts +1 -0
  42. data/spec/spec_helper.rb +29 -0
  43. data/trueskill.gemspec +99 -0
  44. metadata +143 -0
@@ -0,0 +1,26 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper'
2
+
3
+ describe TrueSkill::Factors::Prior do
4
+
5
+ before :each do
6
+ @variable = Gauss::Distribution.new
7
+ @factor = TrueSkill::Factors::Prior.new(22.0, 0.3, @variable)
8
+ end
9
+
10
+ describe "#update_message_at" do
11
+
12
+ it "should return a difference of 73.33333" do
13
+ @factor.update_message_at(0).should be_close(73.33333, tolerance)
14
+ end
15
+
16
+ end
17
+
18
+ describe "#log_normalization" do
19
+
20
+ it "should be 0.0" do
21
+ @factor.log_normalization.should == 0.0
22
+ end
23
+
24
+ end
25
+
26
+ end
@@ -0,0 +1,67 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper'
2
+
3
+ describe TrueSkill::Factors::Prior do
4
+
5
+ before :each do
6
+ @variable = Gauss::Distribution.with_variance(0.0, 0.0)
7
+ @variables = [
8
+ Gauss::Distribution.new(22, 1.6),
9
+ Gauss::Distribution.new(26, 2.5),
10
+ Gauss::Distribution.new(31, 3.6)
11
+ ]
12
+ @factor = TrueSkill::Factors::WeightedSum.new(@variable, @variables, [0.5, 0.7, 0.8])
13
+ end
14
+
15
+ describe "weights" do
16
+
17
+ it "should setup the weights correctly" do
18
+ @factor.weights[0][0].should be_close(0.5, tolerance)
19
+ @factor.weights[1][0].should be_close(-1.4, tolerance)
20
+ @factor.weights[2][0].should be_close(-0.7142, tolerance)
21
+ @factor.weights[2][1].should be_close(-1.14285, tolerance)
22
+ @factor.weights[3][0].should be_close(-0.625, tolerance)
23
+ @factor.weights[3][2].should be_close(1.25, tolerance)
24
+ end
25
+
26
+ end
27
+
28
+ describe "weights_squared" do
29
+
30
+ it "should setup the squared weights correctly" do
31
+ @factor.weights_squared[0][0].should be_close(0.25, tolerance)
32
+ @factor.weights_squared[1][0].should be_close(1.96, tolerance)
33
+ @factor.weights_squared[2][0].should be_close(0.51, tolerance)
34
+ @factor.weights_squared[2][1].should be_close(1.3061, tolerance)
35
+ @factor.weights_squared[3][0].should be_close(0.3906, tolerance)
36
+ @factor.weights_squared[3][2].should be_close(1.5625, tolerance)
37
+ end
38
+
39
+ end
40
+
41
+ describe "index_order" do
42
+
43
+ it "should setup the index order correctly" do
44
+ @factor.index_order[0][0].should == 0
45
+ @factor.index_order[1][0].should == 1
46
+ @factor.index_order[2][0].should == 2
47
+ @factor.index_order[2][1].should == 1
48
+ @factor.index_order[2][2].should == 3
49
+ @factor.index_order[3][1].should == 1
50
+ end
51
+
52
+ end
53
+
54
+ describe "#update_message_at" do
55
+
56
+ it "should return a difference of 4.50116 for message 0" do
57
+ @factor.update_message_at(0).should be_close(4.50116, tolerance)
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
+
65
+ end
66
+
67
+ end
@@ -0,0 +1,26 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper'
2
+
3
+ describe TrueSkill::Factors::Within do
4
+
5
+ before :each do
6
+ @variable = Gauss::Distribution.new(1.0, 1.1)
7
+ @factor = TrueSkill::Factors::Within.new(0.01, @variable)
8
+ end
9
+
10
+ describe "#update_message_at" do
11
+
12
+ it "should return a difference of 173.2048" do
13
+ @factor.update_message_at(0).should be_close(173.2048, tolerance)
14
+ end
15
+
16
+ end
17
+
18
+ describe "#log_normalization" do
19
+
20
+ it "should be -5.339497" do
21
+ @factor.log_normalization.should be_close(-5.339497, tolerance)
22
+ end
23
+
24
+ end
25
+
26
+ end
@@ -0,0 +1,39 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper'
2
+
3
+ describe TrueSkill::Layers::PriorToSkills do
4
+
5
+ before :each do
6
+ @teams = create_teams
7
+ @graph = TrueSkill::FactorGraph.new(@teams, [1,2,3])
8
+ @layer = TrueSkill::Layers::PriorToSkills.new(@graph, @teams)
9
+ end
10
+
11
+ describe "#build" do
12
+
13
+ it "should add 4 factors" do
14
+ lambda {
15
+ @layer.build
16
+ }.should change(@layer.factors, :size).by(4)
17
+ end
18
+
19
+ it "should add 3 output variables" do
20
+ lambda {
21
+ @layer.build
22
+ }.should change(@layer.output, :size).by(3)
23
+ end
24
+
25
+ end
26
+
27
+ describe "#prior_schedule" do
28
+
29
+ before :each do
30
+ @layer.build
31
+ end
32
+
33
+ it "should return a sequence-schedule" do
34
+ @layer.prior_schedule.should be_kind_of(TrueSkill::Schedules::Sequence)
35
+ end
36
+
37
+ end
38
+
39
+ end
@@ -0,0 +1,14 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe "Schedules" do
4
+
5
+ before :each do
6
+ @factor = TrueSkill::Factors::Prior.new(25.0, (25/3.0)**2, Gauss::Distribution.new)
7
+ @step = TrueSkill::Schedules::Step.new(@factor, 0)
8
+ end
9
+
10
+ it "should do something" do
11
+ @step.visit
12
+ end
13
+
14
+ end
@@ -0,0 +1 @@
1
+ --color
@@ -0,0 +1,29 @@
1
+ require 'rubygems'
2
+ require 'spec'
3
+ require 'spec/autorun'
4
+ require "#{File.dirname(__FILE__)}/../lib/saulabs/trueskill.rb"
5
+
6
+ include Saulabs
7
+
8
+ Spec::Runner.configure do |config|
9
+
10
+ end
11
+
12
+ def tolerance
13
+ 0.001
14
+ end
15
+
16
+ def create_teams
17
+ [
18
+ [
19
+ TrueSkill::Rating.new(25, 4.1)
20
+ ],
21
+ [
22
+ TrueSkill::Rating.new(27, 3.1),
23
+ TrueSkill::Rating.new(10, 1.0)
24
+ ],
25
+ [
26
+ TrueSkill::Rating.new(32, 0.2)
27
+ ]
28
+ ]
29
+ end
@@ -0,0 +1,99 @@
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
+
metadata ADDED
@@ -0,0 +1,143 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: trueskill
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 0
9
+ version: 0.1.0
10
+ platform: ruby
11
+ authors:
12
+ - Lars Kuhnt
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-04-21 00:00:00 +02:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: rspec
22
+ prerelease: false
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
51
+ executables: []
52
+
53
+ extensions: []
54
+
55
+ extra_rdoc_files:
56
+ - LICENSE
57
+ - README.rdoc
58
+ files:
59
+ - .document
60
+ - .gitignore
61
+ - CHANGELOG
62
+ - LICENSE
63
+ - README.rdoc
64
+ - Rakefile
65
+ - VERSION
66
+ - lib/saulabs/gauss.rb
67
+ - lib/saulabs/gauss/distribution.rb
68
+ - lib/saulabs/gauss/truncated_correction.rb
69
+ - lib/saulabs/trueskill.rb
70
+ - lib/saulabs/trueskill/factor_graph.rb
71
+ - lib/saulabs/trueskill/factors/base.rb
72
+ - lib/saulabs/trueskill/factors/greater_than.rb
73
+ - lib/saulabs/trueskill/factors/likelihood.rb
74
+ - lib/saulabs/trueskill/factors/prior.rb
75
+ - lib/saulabs/trueskill/factors/weighted_sum.rb
76
+ - lib/saulabs/trueskill/factors/within.rb
77
+ - lib/saulabs/trueskill/layers/base.rb
78
+ - lib/saulabs/trueskill/layers/iterated_team_performances.rb
79
+ - lib/saulabs/trueskill/layers/performances_to_team_performances.rb
80
+ - lib/saulabs/trueskill/layers/prior_to_skills.rb
81
+ - lib/saulabs/trueskill/layers/skills_to_performances.rb
82
+ - lib/saulabs/trueskill/layers/team_difference_comparision.rb
83
+ - lib/saulabs/trueskill/layers/team_performance_differences.rb
84
+ - lib/saulabs/trueskill/rating.rb
85
+ - lib/saulabs/trueskill/schedules/base.rb
86
+ - lib/saulabs/trueskill/schedules/loop.rb
87
+ - lib/saulabs/trueskill/schedules/sequence.rb
88
+ - lib/saulabs/trueskill/schedules/step.rb
89
+ - spec/saulabs/gauss/distribution_spec.rb
90
+ - spec/saulabs/gauss/truncated_correction_spec.rb
91
+ - spec/saulabs/trueskill/factor_graph_spec.rb
92
+ - spec/saulabs/trueskill/factors/greater_than_spec.rb
93
+ - spec/saulabs/trueskill/factors/likelihood_spec.rb
94
+ - spec/saulabs/trueskill/factors/prior_spec.rb
95
+ - spec/saulabs/trueskill/factors/weighted_sum_spec.rb
96
+ - spec/saulabs/trueskill/factors/within_spec.rb
97
+ - spec/saulabs/trueskill/layers/prior_to_skills_spec.rb
98
+ - spec/saulabs/trueskill/schedules_spec.rb
99
+ - spec/spec.opts
100
+ - spec/spec_helper.rb
101
+ - trueskill.gemspec
102
+ has_rdoc: true
103
+ homepage: http://github.com/saulabs/trueskill
104
+ licenses: []
105
+
106
+ post_install_message:
107
+ rdoc_options:
108
+ - --charset=UTF-8
109
+ require_paths:
110
+ - lib
111
+ required_ruby_version: !ruby/object:Gem::Requirement
112
+ requirements:
113
+ - - ">="
114
+ - !ruby/object:Gem::Version
115
+ segments:
116
+ - 0
117
+ version: "0"
118
+ required_rubygems_version: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ segments:
123
+ - 0
124
+ version: "0"
125
+ requirements: []
126
+
127
+ rubyforge_project:
128
+ rubygems_version: 1.3.6
129
+ signing_key:
130
+ specification_version: 3
131
+ summary: A ruby library for the trueskill rating system
132
+ test_files:
133
+ - spec/saulabs/gauss/distribution_spec.rb
134
+ - spec/saulabs/gauss/truncated_correction_spec.rb
135
+ - spec/saulabs/trueskill/factor_graph_spec.rb
136
+ - spec/saulabs/trueskill/factors/greater_than_spec.rb
137
+ - spec/saulabs/trueskill/factors/likelihood_spec.rb
138
+ - spec/saulabs/trueskill/factors/prior_spec.rb
139
+ - spec/saulabs/trueskill/factors/weighted_sum_spec.rb
140
+ - spec/saulabs/trueskill/factors/within_spec.rb
141
+ - spec/saulabs/trueskill/layers/prior_to_skills_spec.rb
142
+ - spec/saulabs/trueskill/schedules_spec.rb
143
+ - spec/spec_helper.rb