Table of Contents †
内部仕様 †
UML (2009/9/3) †
Client Class †

Client State †

Sequence †

AI実装における仕様 †
ゲーム共通で使えるAIコンポーネントを抽出し、common/ai.rb にまとめてある。*1
- 手探索アルゴリズム
- move (Multi-threadとSingle-thread双方対応済み) AI着手メインメソッド
- children 有効手リスト作成
- label ノード判定
- 局面評価
- value 基本評価
- value_custom 個別評価用テンプレートmethod
- 深度調整method
- extendable? 深度延長の評価テンプレートmethod
- dynamic_max_depth 局面による深度調整テンプレートmethod
性能評価 †
評価環境について †
- 環境1
- Ubuntu 9.04 32bit, Core Duo 2GHz, Mem 3.5GB
- 環境2
- CentOS x64 5.3, Xeon 3GHz dual core, Mem 8GB
Marshalsの性能 Ruby 1.8 †
局面複製のためのオブジェクトDeep Copyに関する調査
環境1 †
単位(sec)
# | w/o Marshal | w/ Marshal |
1 | 95 | 96 |
2 | 93 | 99 |
3 | 92 | 90 |
4 | 93 | 91 |
5 | 95 | 91 |
平均 | 93.6 | 93.4 |
標準偏差 | 1.3 | 3.9 |
環境2 †
単位(sec)
# | w/o Marshal | w/ Marshal |
1 | 70 | 74 |
2 | 73 | 72 |
3 | 74 | 71 |
4 | 75 | 72 |
5 | 70 | 77 |
平均 | 72.4 | 73.2 |
標準偏差 | 2.3 | 2.4 |
Threadの性能 †
- Ruby 1.9で比較
- threadを使った方が30%近くも遅い!!
- マルチコアであっても、一つのプロセッサーしか使わない
- JRubyとの比較が必要 (2009/9)
環境1 †
単位(sec)
# | nonthread | thread |
1 | 87 | 99 | 61 | 42 | 106 | 106 | 79 | 100 |
| 289 | 391 |
2 | 85 | 99 | 60 | 42 | 106 | 103 | 77 | 90 |
| 286 | 377 |
3 | 85 | 78 | 62 | 70 | 103 | 105 | 78 | 89 |
| 295 | 375 |
4 | 85 | 99 | 61 | 42 | 101 | 131 | 76 | 61 |
| 287 | 369 |
平均 | 289.3 | 378.0 |
標準偏差 | 4.0 | 9.3 |
環境2 †
単位(sec)
# | nonthread | thread |
1 | 42 | 37 | 28 | 32 | 52 | 48 | 33 | 36 |
| 139 | 169 |
2 | 42 | 46 | 28 | 20 | 52 | 45 | 34 | 38 |
| 136 | 169 |
3 | 42 | 37 | 28 | 33 | 52 | 56 | 33 | 22 |
| 140 | 163 |
4 | 42 | 36 | 29 | 32 | 52 | 57 | 33 | 22 |
| 139 | 164 |
平均 | 138.5 | 166.3 |
標準偏差 | 1.7 | 3.2 |
Ruby 1.8 vs 1.9 †
- テストに使用したプログラム
- ver.2
- main.rb rinne 2 2 4
- ruby1.9はruby1.8より50%程度高速
環境1 †
単位(sec)
# | 1.8 | 1.9 |
1 | 57 | 38 |
2 | 56 | 39 |
3 | 57 | 38 |
4 | 57 | 38 |
5 | 58 | 38 |
平均 | 57 | 38.2 |
標準偏差 | 0.71 | 0.45 |
Ruby vs JRuby (1) - Single Thread †
- 2009/9/16
- テストに使用したプログラム
- ver.2 ActiveRecord対応バージョン / Single-Thread
- main.rb rinne 3 3 4
Active Recordを使うようにプログラムの修正をおこなっているため、
既に測定した環境でのテストも、再度計測した。
環境1 †
Ruby1.9ではActiveRecord版が動作しない。
単位(sec)
# | 1.8 | JRuby |
1 | 595 | 332 |
2 | 537 | 327 |
3 | 553 | 338 |
4 | 533 | 338 |
5 | 552 | 339 |
平均 | 554 | 334.8 |
標準偏差 | 24.58 | 5.17 |
性能比 | 1.00 | 0.604 |
性能比は、環境1 Ruby1.8 Single-Threadを1として...数値が小さいほど高速
環境2 †
単位(sec)
# | 1.8 | 1.9 | JRuby |
1 | 339 | 179 | 152 |
2 | 339 | 174 | 151 |
3 | 338 | 173 | 156 |
4 | 338 | 179 | 156 |
5 | 328 | 175 | 155 |
平均 | 336.4 | 176 | 153.75 |
標準偏差 | 4.72 | 2.83 | 2.63 |
性能比 | 0.607 | 0.318 | 0.278 |
性能比は、環境1 Ruby1.8 Single-Threadを1として...数値が小さいほど高速
Ruby vs JRuby (2) Multi-Thread †
- 2009/9/16
- テストに使用したプログラム
- ver.2 ActiveRecord対応バージョン / Multi-Thread
- main.rb rinne 3 3 4
- JRuby環境が圧倒的に早い
Active Recordを使うようにプログラムの修正をおこなっているため、
既に測定した環境でのテストも、再度計測した。
環境1 †
Ruby1.9ではActiveRecord版が動作しない。
単位(sec)
# | 1.8 | JRuby |
1 | 640 | 248 |
2 | 634 | 253 |
3 | 653 | 251 |
4 | 656 | 244 |
5 | 658 | 255 |
平均 | 648.2 | 250.2 |
標準偏差 | 10.59 | 4.32 |
性能比 | 1.170 | 0.452 |
性能比は、環境1 Ruby1.8 Single-Threadを1として...数値が小さいほど高速
環境2 †
単位(sec)
# | 1.8 | 1.9 | JRuby |
1 | 480 | 199 | 93 |
2 | 483 | 200 | 93 |
3 | 494 | 200 | 91 |
4 | 495 | 202 | 101 |
5 | 497 | 208 | 100 |
平均 | 489.8 | 201.8 | 95.6 |
標準偏差 | 7.73 | 3.63 | 4.56 |
性能比 | 0.884 | 0.364 | 0.173 |
性能比は、環境1 Ruby1.8 Single-Threadを1として...数値が小さいほど高速
Ruby vs. JRuby 性能比較まとめ †
上記実験結果の比較 †
性能対比。比較は、処理時間による性能比。
環境 | Single 1.8 (2) | Single 1.9 (2) | Single J (2) | Multi 1.8 (2) | Multi 1.9 (2) | Multi J (2) |
結果(sec) | 336.4 | 176.0 | 154.0 | 489.8 | 201.8 | 95.6 |
Single 1.8 (2) | 1.000 | 0.523 | 0.458 | 1.456 | 0.600 | 0.284 |
Single 1.9 (2) | 1.911 | 1.000 | 0.875 | 2.783 | 1.147 | 0.543 |
Single J (2) | 2.184 | 1.143 | 1.000 | 3.181 | 1.310 | 0.621 |
Multi 1.8 (2) | 0.687 | 0.359 | 0.314 | 1.000 | 0.412 | 0.195 |
Multi 1.9 (2) | 1.667 | 0.872 | 0.763 | 2.427 | 1.000 | 0.474 |
Multi J (2) | 3.519 | 1.841 | 1.611 | 5.123 | 2.111 | 1.000 |
システム時間での比較 †
- time ruby main.rb r 3 3 1
- 実時間では、JVMの起動コストがかなりのインパクトがある
| real | user | sys |
Single 1.8 (2) | 140.863 | 047.189 | 053.553 |
Single 1.9 (2) | 055.651 | 055.541 | 000.049 |
Single J (2) | 052.475 | 058.730 | 000.317 |
Multi 1.8 (2) | 231.588 | 132.856 | 058.655 |
Multi 1.9 (2) | 010.553 | 010.451 | 000.075 |
Multi J (2) | 034.570 | 015.846 | 000.594 |
Flexに関すること †
URLLoaderとタイムアウト †
URLLoaderは、デフォルトでは、30secでタイムアウト。
URLLoaderWithTimeoutクラスを使うことでデフォルト120secに指定。
ただし、Flashplayerのバージョン、環境によってTimeout値が異なることがある。
SEE ALSO †
以下、開発者専用のページです
Feedback †