Hatena::Grouptumblr

saitamanodoruji

くこかー
saitamanodoruji.tumblr.com
 | 

2013-08-31

Exponential Endless Summer version 2013.08

23:59 | Exponential Endless Summer version 2013.08 - saitamanodoruji を含むブックマーク はてなブックマーク - Exponential Endless Summer version 2013.08 - saitamanodoruji

EES の第 3 版です.

2006 年後半から 2007 年前半のポスト選択がよりランダムになりました. 前回の更新に比べると影響は小さいです.

ポスト ID に対するフィッティングのやり直し

2006-06 から 2007-07 までの期間を細かく分割して, ポスト ID に対するフィッティングをやり直しました (Fig. 1, Fig. 2). フィッティングパラメータを Table 1 に示します.

Fig. 1 EES2013.08 と EES2013 の f(t) の比較

http://cdn-ak.f.st-hatena.com/images/fotolife/s/saitamanodoruji/20130831/20130831232537_original.png

Fig. 2 EES2013.08 と EES2013 の f(t) の比較 (拡大)

http://cdn-ak.f.st-hatena.com/images/fotolife/s/saitamanodoruji/20130831/20130831232538_original.png

Table. 1 EES2013.08 のフィッティングパラメータ. フィッティング関数 f_i(t) = \alpha_i \exp\[\beta_i(t-t_0)\],\hspace{10}t_0=1136073600000\[msec\],\hspace{10}{\text{\rm{if} \it{t_{i-1}} < \it{t} \leq \it{t_i}}.

iα_iβ_it_it_i の決め方t_i の日付
11.211E-011.571E-10f_i = f_(i+1) となる t11600127893592006-10-05T10:46:29+09:00
23.619E-131.266E-09f_i = f_(i+1) となる t11632695419242006-11-12T03:25:41+09:00
32.120E+001.846E-10f_i = f_(i+1) となる t11721207918932007-02-22T14:06:31+09:00
41.179E-493.331E-09f_i = f_(i+1) となる t11733925612652007-03-09T07:22:41+09:00
54.702E-077.024E-10f_i = f_(i+1) となる t11764053232192007-04-13T04:15:23+09:00
65.338E+012.425E-10f_i = f_(i+1) となる t11829303008502007-06-27T16:45:00+09:00
78.255E+031.349E-10f_i = f_(i+1) となる t11932993598282007-10-25T17:02:39+09:00
82.496E+063.509E-11f_i = f_(i+1) となる t12416226168062009-05-07T00:10:16+09:00
92.907E+055.546E-11f_i = f_(i+1) となる t12830880651162010-08-29T22:21:05+09:00
105.206E+046.716E-11Post ID の不連続12910752000002010-11-30T09:00:00+09:00
118.329E+046.521E-11Post ID の不連続12922416000002010-12-13T21:00:00+09:00
128.396E+046.541E-11f_i = f_(i+1) となる t13075762373762011-06-09T08:37:17+09:00
137.746E+046.588E-11f_i = f_(i+1) となる t13135860501872011-08-17T22:00:50+09:00
148.798E+063.922E-11f_i = f_(i+1) となる t13405725429282012-06-25T06:15:42+09:00
152.693E+082.249E-11

EES2013 で A, B としていたパラメータ名を EES2013.08 で α, β に変えているのは, 桁あふれを避ける目的で t の原点をずらしたためです. α = A exp[B*t_0], β = B という関係があります. i = 8, ... , 15 については EES2013.08 と EES2013 で関数の形は同じですが, パラメータの互換性がありません.

ランダムさの評価

EES2013.08, EES2013 のそれぞれを使って 10000 回の Post ID 選択を行い, ヒストグラム化しました(Fig. 3). 2006-10 から 2007-07 の範囲のランダム性が向上しているのがわかります.

Fig. 3 EES2013.08 (上) 及び EES2013 (下) で引いた Post ID のヒストグラム

http://cdn-ak.f.st-hatena.com/images/fotolife/s/saitamanodoruji/20130831/20130831232539_original.png

2006-06 の度数が他の月に比べて 4 倍程度大きいです. これは 2006-06 から 2006-09 までの 4 ヶ月間ポスト ID が増えていないために, その 4 ヶ月間の時刻を選択した場合にすべて 2006-06 のポストを選んでしまうためです.

コード

ID の下限はだいたい 200000 よりも大きくした方がいいと思います.

// Exponential Endless Summer 2013.08
var draw = function(oldestID, newestID) {
  var oldestUTime = getUnixTimeFromPostID(oldestID);
  var newestUTime = getUnixTimeFromPostID(newestID);
  var drawnUTime = oldestUTime + Math.floor((newestUTime - oldestUTime) * Math.random());
  return getPostIDFromUnixTime(drawnUTime);
}

var getPostIDFromUnixTime = function(utime) {
  if ( utime < 1149465600000 ) {
    return;
  } else if ( utime === Number.POSITIVE_INFINITY ) {
    return Number.POSITIVE_INFINITY;
  }
  for (var i = 0; i < params.length; i++) {
    if ( utime <= params[i].upperBound ) {
      return Math.ceil(params[i].coefAlpha * Math.exp(params[i].coefBeta * (utime - 1136073600000)));
    }
  }
}

var getUnixTimeFromPostID = function(postID) {
  if ( postID < 1 ) { return; }
  for (var i = 0; i < params.length; i++) {
    if ( postID <= getPostIDFromUnixTime(params[i].upperBound) ) {
      return Math.floor(Math.log(postID/params[i].coefAlpha)/params[i].coefBeta) + 1136073600000;
    }
  }
}

var params = [
  // f_i(t) = Alpha_i * exp[Beta_i * (t - t_0)]
  // t: Unix time [msec]
  // t_0 = 1136073600000 [msec] (2006-01-01T00:00:00+09:00)
  {coefAlpha: 1.211 * Math.pow(10,  -1), coefBeta: 1.571 * Math.pow(10, -10), upperBound: 1160012789359},
  {coefAlpha: 3.619 * Math.pow(10, -13), coefBeta: 1.266 * Math.pow(10,  -9), upperBound: 1163269541924},
  {coefAlpha: 2.120 * Math.pow(10,   0), coefBeta: 1.846 * Math.pow(10, -10), upperBound: 1172120791893},
  {coefAlpha: 1.179 * Math.pow(10, -49), coefBeta: 3.331 * Math.pow(10,  -9), upperBound: 1173392561265},
  {coefAlpha: 4.702 * Math.pow(10,  -7), coefBeta: 7.024 * Math.pow(10, -10), upperBound: 1176405323219},
  {coefAlpha: 5.338 * Math.pow(10,   1), coefBeta: 2.425 * Math.pow(10, -10), upperBound: 1182930300850},
  {coefAlpha: 8.255 * Math.pow(10,   3), coefBeta: 1.349 * Math.pow(10, -10), upperBound: 1193299359828},
  {coefAlpha: 2.496 * Math.pow(10,   6), coefBeta: 3.509 * Math.pow(10, -11), upperBound: 1241622616806},
  {coefAlpha: 2.907 * Math.pow(10,   5), coefBeta: 5.546 * Math.pow(10, -11), upperBound: 1283088065116},
  {coefAlpha: 5.206 * Math.pow(10,   4), coefBeta: 6.716 * Math.pow(10, -11), upperBound: 1291075200000},
  {coefAlpha: 8.329 * Math.pow(10,   4), coefBeta: 6.521 * Math.pow(10, -11), upperBound: 1292241600000},
  {coefAlpha: 8.396 * Math.pow(10,   4), coefBeta: 6.541 * Math.pow(10, -11), upperBound: 1307576237376},
  {coefAlpha: 7.746 * Math.pow(10,   4), coefBeta: 6.588 * Math.pow(10, -11), upperBound: 1313586050187},
  {coefAlpha: 8.798 * Math.pow(10,   6), coefBeta: 3.922 * Math.pow(10, -11), upperBound: 1340572542928},
  {coefAlpha: 2.693 * Math.pow(10,   8), coefBeta: 2.249 * Math.pow(10, -11), upperBound: Number.POSITIVE_INFINITY},
]

http://saitamanodoruji.tumblr.com/exponentialEndlessSummer2013.08 にテストページを作りました.

 |