これまでの私のコードにはPythonのこのビットを変換する方法:私はGlicko rating systemのJS/HTMLの実装に取り組んでいると重くpyglickoから借りてい慣用Javascriptを
// The q constant of the Glicko system.
var q = Math.log(10)/400;
function Player(rating, rd) {
this.rating = rating || 1500;
this.rd = rd || 200;
}
Player.prototype.preRatingRD = function(this, t, c) {
// Set default values of t and c
this.t = t || 1;
this.c = c || 63.2;
// Calculate the new rating deviation
this.rd = Math.sqrt(Math.pow(this.rd, 2) + (Math.pow(c, 2) * t));
// Ensure RD doesn't rise above that of an unrated player
this.rd = Math.min(this.rd, 350);
// Ensure RD doesn't drop too low so that rating can still change
// appreciably
this.rd = Math.max(this.rd, 30);
};
Player.prototype.g = function(this, rd) {
return 1/Math.sqrt(1 + 3 * Math.pow(q, 2) * Math.pow(rd, 2)/Math.pow(Math.PI, 2));
};
Player.prototype.e = function(this, p2rating, p2rd) {
return 1/(1 + Math.pow(10, (-1 * this.g(p2rd) * (this.rating - p2rating)/400)));
};
- と言うことです、それを完全にリッピング。
これはかなり短く(コメントなしで100 LoC未満)、私の翻訳は正直なところ、私はJavaScriptのスコープとthis
が実際にどのように動作するのか分からないので、私の翻訳がうまくいくかどうか不安を感じています。あなたは上のリンクにあるものを見ることができます。
具体的には、私はこのビットのPythonコードをJavascriptでどのように表現するのだろうと思います。基本的に_d2
は、Player
のクラス定義の内部にあります。
def _d2(self, rating_list, RD_list):
tempSum = 0
for i in range(len(rating_list)):
tempE = self._E(rating_list[i], RD_list[i])
tempSum += math.pow(self._g(RD_list[1]), 2) * tempE * (1 - tempE)
return 1/(math.pow(self._q, 2) * tempSum)
私はそうのように定義された関数e
とg
を持っている、とq
が一定である:JavaScriptで
Player.prototype.e = function(this, ratingList, rdList) {
// Stuff goes here
}