From 62ad30ff63d52c1075d2bea89901b5c4aa7e95d3 Mon Sep 17 00:00:00 2001 From: Daigo Moriwaki Date: Sat, 19 Jul 2014 11:49:33 +0900 Subject: [PATCH] [mk_rate] - Added a new option, --abnormal-threshold n: Games that end with the 'abnormal' status are counted in win/lost games for the rating calculation if a game plays more than n plies. Otherwise (or if n is zero), abnormal games are counted out of rating games. --- changelog | 9 +++++++++ mk_rate | 40 ++++++++++++++++++++++++++++------------ utils/csa-filter.rb | 11 ++++++++++- 3 files changed, 47 insertions(+), 13 deletions(-) diff --git a/changelog b/changelog index 69e6b33..c00f7e4 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,12 @@ +2014-07-19 Daigo Moriwaki + + * [mk_rate] + - Added a new option, --abnormal-threshold n: + Games that end with the 'abnormal' status are counted in + win/lost games for the rating calculation if a game plays more + than n plies. Otherwise (or if n is zero), abnormal games are + counted out of rating games. + 2013-12-29 Daigo Moriwaki * [shogi-server] diff --git a/mk_rate b/mk_rate index 1f9e54a..b540963 100755 --- a/mk_rate +++ b/mk_rate @@ -35,12 +35,18 @@ # ./mk_rate [options] # # GAME_RESULTS_FILE:: -# a path to a file listing results of games, which is genrated by the +# a path to a file listing results of games, which is generated by the # mk_game_results command. # In the second style above, the file content can be read from the stdin. # +# --abnormal-threshold:: +# n [plies] (default 30) +# Games that end with the 'abnormal' status are counted in win/lost games +# for the rating calculation if a game plays more than n plies. Otherwise +# (or if n is zero), abnormal games are counted out of rating games. +# # --base-date:: -# a base time point for this calicuration (default now). Ex. '2009-10-31' +# a base time point for this calculation (default now). Ex. '2009-10-31' # # --half-life:: # n [days] (default 60) @@ -68,7 +74,7 @@ # # == PREREQUIRE # -# Sample Command lines that isntall prerequires will work on Debian. +# Sample Command lines that install prerequires will work on Debian. # # * Ruby 1.9.3 or 1.8.7 (including Rubygems) # @@ -101,6 +107,8 @@ # * (Rated) players, who played more than $GAMES_LIMIT [15] (rated) games. # +$:.unshift(File.dirname(File.expand_path(__FILE__))) +require 'utils/csa-filter' require 'yaml' require 'time' require 'getoptlong' @@ -670,7 +678,12 @@ def parse(line) return end - return if state == "abnormal" + if state == "abnormal" + csa = CsaFileReader.new file + if $options["abnormal-threshold"] == 0 || csa.ply <= $options["abnormal-threshold"] + return + end + end time = Time.parse(time) return if $options["base-date"] < time how_long_days = ($options["base-date"] - time)/(3600*24) @@ -728,14 +741,15 @@ end def main $options = Hash::new parser = GetoptLong.new( - ["--base-date", GetoptLong::REQUIRED_ARGUMENT], - ["--half-life", GetoptLong::REQUIRED_ARGUMENT], - ["--half-life-ignore", GetoptLong::REQUIRED_ARGUMENT], - ["--help", "-h", GetoptLong::NO_ARGUMENT], - ["--ignore", GetoptLong::REQUIRED_ARGUMENT], - ["--fixed-rate-player", GetoptLong::REQUIRED_ARGUMENT], - ["--fixed-rate", GetoptLong::REQUIRED_ARGUMENT], - ["--skip-draw-games", GetoptLong::NO_ARGUMENT]) + ["--abnormal-threshold", GetoptLong::REQUIRED_ARGUMENT], + ["--base-date", GetoptLong::REQUIRED_ARGUMENT], + ["--half-life", GetoptLong::REQUIRED_ARGUMENT], + ["--half-life-ignore", GetoptLong::REQUIRED_ARGUMENT], + ["--help", "-h", GetoptLong::NO_ARGUMENT], + ["--ignore", GetoptLong::REQUIRED_ARGUMENT], + ["--fixed-rate-player", GetoptLong::REQUIRED_ARGUMENT], + ["--fixed-rate", GetoptLong::REQUIRED_ARGUMENT], + ["--skip-draw-games", GetoptLong::NO_ARGUMENT]) parser.quiet = true begin parser.each_option do |name, arg| @@ -761,6 +775,8 @@ def main else $options["base-date"] = Time.now end + $options["abnormal-threshold"] ||= 30 + $options["abnormal-threshold"] = $options["abnormal-threshold"].to_i $options["half-life"] ||= 60 $options["half-life"] = $options["half-life"].to_i $options["half-life-ignore"] ||= 7 diff --git a/utils/csa-filter.rb b/utils/csa-filter.rb index 6c29bbd..0a863fe 100755 --- a/utils/csa-filter.rb +++ b/utils/csa-filter.rb @@ -42,9 +42,11 @@ class CsaFileReader attr_reader :winner, :loser attr_reader :state attr_reader :start_time, :end_time + attr_reader :ply def initialize(file_name) @file_name = file_name + @ply = 0 grep end @@ -92,6 +94,12 @@ class CsaFileReader end end end + + @str.each_line do |line| + if /^[\+\-]\d{4}[A-Z]{2}/ =~ line + @ply += 1 + end + end end def movetimes @@ -107,7 +115,8 @@ class CsaFileReader "BlackName #{@black_name}, WhiteName #{@white_name}\n" + "BlackId #{@black_id}, WhiteId #{@white_id}\n" + "Winner #{@winner}, Loser #{@loser}\n" + - "Start #{@start_time}, End #{@end_time}\n" + "Start #{@start_time}, End #{@end_time}\n" + + "Ply #{@ply}" end def identify_id(id) -- 2.11.0