mirror of
https://github.com/sockspls/badfish
synced 2025-07-11 19:49:14 +00:00
Simplified source code to estimate the winning ratio from an eval value.
We need to adjust the eta again after this commit is pushed.
This commit is contained in:
parent
cb8accada2
commit
87c8b324f8
1 changed files with 5 additions and 22 deletions
|
@ -1028,24 +1028,10 @@ double sigmoid(double x)
|
|||
// 評価値を勝率[0,1]に変換する関数
|
||||
double winning_percentage(double value)
|
||||
{
|
||||
// In Maxima,
|
||||
// load("C:/maxima-5.44.0/cform.lisp");
|
||||
// PawnValueEg = 206;
|
||||
// cform(1.0 / (1.0 + 10.0 ^ (-value / PawnValueEg / 4.0)));
|
||||
constexpr double PawnValue = PawnValueEg;
|
||||
return 1.0 * pow(pow(10.0, -0.25 * pow(PawnValue, -1) * value) + 1.0, -1);
|
||||
}
|
||||
|
||||
double delta_winning_percentage(double value)
|
||||
{
|
||||
// In Maxima,
|
||||
// load("C:/maxima-5.44.0/cform.lisp");
|
||||
// PawnValueEg = 206;
|
||||
// cform(diff(1.0/(1.0+10.0^(-value/PawnValue/4.0)),value));
|
||||
constexpr double PawnValue = PawnValueEg;
|
||||
return
|
||||
0.5756462732485115 * pow(PawnValue, -1) * pow(10.0, -0.25 * pow(PawnValue, -1) * value) *
|
||||
pow(pow(10.0, -0.25 * pow(PawnValue, -1) * value) + 1.0, -2);
|
||||
// 1/(1+10^(-Eval/4))
|
||||
// = 1/(1+e^(-Eval/4*ln(10))
|
||||
// = sigmoid(Eval/4*ln(10))
|
||||
return sigmoid(value / PawnValueEg / 4.0 * log(10.0));
|
||||
}
|
||||
|
||||
// 普通のシグモイド関数の導関数。
|
||||
|
@ -1145,7 +1131,6 @@ double calc_grad(Value deep, Value shallow , const PackedSfenValue& psv)
|
|||
|
||||
const double q = winning_percentage(shallow);
|
||||
const double p = winning_percentage(deep);
|
||||
const double dq = delta_winning_percentage(shallow);
|
||||
|
||||
// 期待勝率を勝っていれば1、負けていれば 0、引き分けなら0.5として補正項として用いる。
|
||||
// game_result = 1,0,-1なので1足して2で割る。
|
||||
|
@ -1156,9 +1141,7 @@ double calc_grad(Value deep, Value shallow , const PackedSfenValue& psv)
|
|||
|
||||
// 実際の勝率を補正項として使っている。
|
||||
// これがelmo(WCSC27)のアイデアで、現代のオーパーツ。
|
||||
const double pp = (q - p) * dq / q / (1.0 - q);
|
||||
const double tt = (q - t) * dq / q / (1.0 - q);
|
||||
const double grad = lambda * pp + (1.0 - lambda) * tt;
|
||||
const double grad = lambda * (q - p) + (1.0 - lambda) * (q - t);
|
||||
|
||||
return grad;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue