trueskill 0.1.0 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. data/HISTORY.md +4 -0
  2. data/LICENSE +1 -1
  3. data/README.md +66 -0
  4. data/Rakefile +14 -36
  5. data/lib/saulabs/gauss/distribution.rb +13 -11
  6. data/lib/saulabs/trueskill/factor_graph.rb +64 -4
  7. data/lib/saulabs/trueskill/factors/base.rb +3 -0
  8. data/lib/saulabs/trueskill/factors/greater_than.rb +2 -0
  9. data/lib/saulabs/trueskill/factors/likelihood.rb +2 -0
  10. data/lib/saulabs/trueskill/factors/prior.rb +2 -0
  11. data/lib/saulabs/trueskill/factors/weighted_sum.rb +2 -2
  12. data/lib/saulabs/trueskill/factors/within.rb +2 -0
  13. data/lib/saulabs/trueskill/layers/base.rb +2 -0
  14. data/lib/saulabs/trueskill/layers/iterated_team_performances.rb +3 -1
  15. data/lib/saulabs/trueskill/layers/performances_to_team_performances.rb +3 -1
  16. data/lib/saulabs/trueskill/layers/prior_to_skills.rb +3 -1
  17. data/lib/saulabs/trueskill/layers/skills_to_performances.rb +3 -1
  18. data/lib/saulabs/trueskill/layers/team_difference_comparision.rb +3 -1
  19. data/lib/saulabs/trueskill/layers/team_performance_differences.rb +3 -1
  20. data/lib/saulabs/trueskill/rating.rb +7 -1
  21. data/lib/saulabs/trueskill/schedules/base.rb +2 -0
  22. data/lib/saulabs/trueskill/schedules/loop.rb +2 -0
  23. data/lib/saulabs/trueskill/schedules/sequence.rb +2 -0
  24. data/lib/saulabs/trueskill/schedules/step.rb +2 -0
  25. data/spec/saulabs/gauss/distribution_spec.rb +0 -1
  26. data/spec/saulabs/trueskill/factor_graph_spec.rb +11 -7
  27. data/spec/saulabs/trueskill/factors/weighted_sum_spec.rb +0 -5
  28. data/spec/spec.opts +3 -0
  29. metadata +17 -50
  30. data/.document +0 -5
  31. data/.gitignore +0 -21
  32. data/CHANGELOG +0 -0
  33. data/README.rdoc +0 -17
  34. data/VERSION +0 -1
  35. data/trueskill.gemspec +0 -99
@@ -0,0 +1,4 @@
1
+ v0.1.0
2
+ ------
3
+
4
+ * Initial release of the trueskill gem
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2009 Lars Kuhnt
1
+ Copyright (c) 2010 Lars Kuhnt
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
@@ -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
- begin
5
- require 'jeweler'
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
- require 'rake/rdoctask'
39
- Rake::RDocTask.new do |rdoc|
40
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
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
- rdoc.rdoc_dir = 'rdoc'
43
- rdoc.title = "trueskill #{version}"
44
- rdoc.rdoc_files.include('README*')
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
- SQRT2 = Math.sqrt(2).freeze
6
- INV_SQRT_2PI = (1 / Math.sqrt(2 * Math::PI)).freeze
7
- LOG_SQRT_2PI = Math.log(Math.sqrt(2 * Math::PI)).freeze
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
- @@standard ||= Distribution.new(0.0, 1.0)
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
- -LOG_SQRT_2PI - (Math.log(variance_sum) / 2.0) - (mean_diff**2 / (2.0 * variance_sum))
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) + LOG_SQRT_2PI - (Math.log(variance_diff) / 2.0) + (mean_diff**2 / (2.0 * variance_diff))
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 / SQRT2))
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
- INV_SQRT_2PI * Math.exp(-0.5 * (x**2))
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
- -SQRT2 * Math.erfc(2.0 * x)
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) * INV_SQRT_2PI * Math.exp(exp)
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
- attr_reader :teams, :beta, :beta_squared, :draw_probability, :epsilon, :layers
6
+ # @return [Array<Array<TrueSkill::Rating>>]
7
+ attr_reader :teams
7
8
 
8
- # teams: 2 dimensional array of ratings
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
- def evaluate
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
- [ranking_probability, updated_skills]
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
@@ -1,7 +1,10 @@
1
1
  module Saulabs
2
2
  module TrueSkill
3
+
4
+ # @private
3
5
  module Factors
4
6
 
7
+ # @private
5
8
  class Base
6
9
 
7
10
  def initialize
@@ -1,7 +1,9 @@
1
1
  module Saulabs
2
2
  module TrueSkill
3
+ # @private
3
4
  module Factors
4
5
 
6
+ # @private
5
7
  class GreaterThan < Base
6
8
 
7
9
  def initialize(epsilon, variable)
@@ -1,7 +1,9 @@
1
1
  module Saulabs
2
2
  module TrueSkill
3
+ # @private
3
4
  module Factors
4
5
 
6
+ # @private
5
7
  class Likelihood < Base
6
8
 
7
9
  def initialize(beta_squared, variable1, variable2)
@@ -1,7 +1,9 @@
1
1
  module Saulabs
2
2
  module TrueSkill
3
+ # @private
3
4
  module Factors
4
5
 
6
+ # @private
5
7
  class Prior < Base
6
8
 
7
9
  def initialize(mean, variance, variable)
@@ -1,9 +1,9 @@
1
- require 'pp'
2
-
3
1
  module Saulabs
4
2
  module TrueSkill
3
+ # @private
5
4
  module Factors
6
5
 
6
+ # @private
7
7
  class WeightedSum < Base
8
8
 
9
9
  attr_reader :weights, :weights_squared, :index_order
@@ -1,7 +1,9 @@
1
1
  module Saulabs
2
2
  module TrueSkill
3
+ # @private
3
4
  module Factors
4
5
 
6
+ # @private
5
7
  class Within < Base
6
8
 
7
9
  def initialize(epsilon, variable)
@@ -1,7 +1,9 @@
1
1
  module Saulabs
2
2
  module TrueSkill
3
+ # @private
3
4
  module Layers
4
5
 
6
+ # @private
5
7
  class Base
6
8
 
7
9
  attr_accessor :graph, :factors, :output, :input
@@ -1,7 +1,9 @@
1
1
  module Saulabs
2
2
  module TrueSkill
3
+ # @private
3
4
  module Layers
4
-
5
+
6
+ # @private
5
7
  class IteratedTeamPerformances < Base
6
8
 
7
9
  def initialize(graph, team_perf_diff, team_diff_comp)
@@ -1,7 +1,9 @@
1
1
  module Saulabs
2
2
  module TrueSkill
3
+ # @private
3
4
  module Layers
4
-
5
+
6
+ # @private
5
7
  class PerformancesToTeamPerformances < Base
6
8
 
7
9
  def build
@@ -1,7 +1,9 @@
1
1
  module Saulabs
2
2
  module TrueSkill
3
+ # @private
3
4
  module Layers
4
-
5
+
6
+ # @private
5
7
  class PriorToSkills < Base
6
8
 
7
9
  def initialize(graph, teams)
@@ -1,7 +1,9 @@
1
1
  module Saulabs
2
2
  module TrueSkill
3
+ # @private
3
4
  module Layers
4
-
5
+
6
+ # @private
5
7
  class SkillsToPerformances < Base
6
8
 
7
9
  def build
@@ -1,7 +1,9 @@
1
1
  module Saulabs
2
2
  module TrueSkill
3
+ # @private
3
4
  module Layers
4
-
5
+
6
+ # @private
5
7
  class TeamDifferenceComparision < Base
6
8
 
7
9
  def initialize(graph, ranks)
@@ -1,7 +1,9 @@
1
1
  module Saulabs
2
2
  module TrueSkill
3
+ # @private
3
4
  module Layers
4
-
5
+
6
+ # @private
5
7
  class TeamPerformanceDifferences < Base
6
8
 
7
9
  def initialize(graph)
@@ -3,7 +3,8 @@ module Saulabs
3
3
 
4
4
  class Rating < Gauss::Distribution
5
5
 
6
- attr_reader :activity, :tau, :tau_squared
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
@@ -1,7 +1,9 @@
1
1
  module Saulabs
2
2
  module TrueSkill
3
+ # @private
3
4
  module Schedules
4
5
 
6
+ # @private
5
7
  class Base
6
8
 
7
9
  def visit(depth = -1, max_depth = 0)
@@ -1,7 +1,9 @@
1
1
  module Saulabs
2
2
  module TrueSkill
3
+ # @private
3
4
  module Schedules
4
5
 
6
+ # @private
5
7
  class Loop < Base
6
8
 
7
9
  def initialize(schedule, max_delta)
@@ -1,7 +1,9 @@
1
1
  module Saulabs
2
2
  module TrueSkill
3
+ # @private
3
4
  module Schedules
4
5
 
6
+ # @private
5
7
  class Sequence < Base
6
8
 
7
9
  def initialize(schedules)
@@ -1,7 +1,9 @@
1
1
  module Saulabs
2
2
  module TrueSkill
3
+ # @private
3
4
  module Schedules
4
5
 
6
+ # @private
5
7
  class Step < Base
6
8
 
7
9
  def initialize(factor, index)
@@ -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 "#evaluate" do
11
+ describe "#update_skills" do
11
12
 
12
- it "should do something" do
13
- result = @graph.evaluate
14
- puts "[#{result.last.flatten.map(&:to_s).join(', ')}]<br>"
15
- result.last[0][0].mean.should be_close(29.61452, tolerance)
16
- result.last[0][0].deviation.should be_close(3.5036, tolerance)
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
 
@@ -1 +1,4 @@
1
1
  --color
2
+ --format specdoc
3
+ --loadby mtime
4
+ --reverse
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 1
7
+ - 9
8
8
  - 0
9
- version: 0.1.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
- - !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
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
- - LICENSE
57
- - README.rdoc
27
+ extra_rdoc_files: []
28
+
58
29
  files:
59
- - .document
60
- - .gitignore
61
- - CHANGELOG
62
- - LICENSE
63
- - README.rdoc
30
+ - README.md
31
+ - HISTORY.md
64
32
  - Rakefile
65
- - VERSION
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/trueskill.rb
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
- - trueskill.gemspec
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
- - --charset=UTF-8
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
@@ -1,5 +0,0 @@
1
- README.rdoc
2
- lib/**/*.rb
3
- bin/*
4
- features/**/*.feature
5
- LICENSE
data/.gitignore DELETED
@@ -1,21 +0,0 @@
1
- ## MAC OS
2
- .DS_Store
3
-
4
- ## TEXTMATE
5
- *.tmproj
6
- tmtags
7
-
8
- ## EMACS
9
- *~
10
- \#*
11
- .\#*
12
-
13
- ## VIM
14
- *.swp
15
-
16
- ## PROJECT::GENERAL
17
- coverage
18
- rdoc
19
- pkg
20
-
21
- ## PROJECT::SPECIFIC
data/CHANGELOG DELETED
File without changes
@@ -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
@@ -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
-