[Chess]

Table of Contents


内部仕様

UML (2009/9/3)

Client Class

Client Class

Client State

Client State Chart

Sequence

Sequence newgame Sequence com_move Sequence man_move Sequence resign

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に関する調査

  • Marshalsを使っても大きな違いはない

環境1

単位(sec)

#w/o Marshalw/ Marshal
19596
29399
39290
49391
59591
平均93.693.4
標準偏差1.33.9

環境2

単位(sec)

#w/o Marshalw/ Marshal
17074
27372
37471
47572
57077
平均72.473.2
標準偏差2.32.4

Threadの性能

  • Ruby 1.9で比較
  • threadを使った方が30%近くも遅い!!
  • マルチコアであっても、一つのプロセッサーしか使わない
  • JRubyとの比較が必要 (2009/9)

環境1

単位(sec)

#nonthreadthread
18799614210610679100
289391
2859960421061037790
286377
3857862701031057889
295375
4859961421011317661
287369
平均289.3378.0
標準偏差4.09.3

環境2

単位(sec)

#nonthreadthread
14237283252483336
139169
24246282052453438
136169
34237283352563322
140163
44236293252573322
139164
平均138.5166.3
標準偏差1.73.2

Ruby 1.8 vs 1.9

  • テストに使用したプログラム
    • ver.2
    • main.rb rinne 2 2 4
  • ruby1.9はruby1.8より50%程度高速

環境1

単位(sec)

#1.81.9
15738
25639
35738
45738
55838
平均5738.2
標準偏差0.710.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.8JRuby
1595332
2537327
3553338
4533338
5552339
平均554334.8
標準偏差24.585.17
性能比1.000.604

性能比は、環境1 Ruby1.8 Single-Threadを1として...数値が小さいほど高速

環境2

単位(sec)

#1.81.9JRuby
1339179152
2339174151
3338173156
4338179156
5328175155
平均336.4176153.75
標準偏差4.722.832.63
性能比0.6070.3180.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.8JRuby
1640248
2634253
3653251
4656244
5658255
平均648.2250.2
標準偏差10.594.32
性能比1.1700.452

性能比は、環境1 Ruby1.8 Single-Threadを1として...数値が小さいほど高速

環境2

単位(sec)

#1.81.9JRuby
148019993
248320093
349420091
4495202101
5497208100
平均489.8201.895.6
標準偏差7.733.634.56
性能比0.8840.3640.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.4176.0154.0489.8201.895.6
Single 1.8 (2)1.0000.5230.4581.4560.6000.284
Single 1.9 (2)1.9111.0000.8752.7831.1470.543
Single J (2)2.1841.1431.0003.1811.3100.621
Multi 1.8 (2)0.6870.3590.3141.0000.4120.195
Multi 1.9 (2)1.6670.8720.7632.4271.0000.474
Multi J (2)3.5191.8411.6115.1232.1111.000

システム時間での比較

  • time ruby main.rb r 3 3 1
  • 実時間では、JVMの起動コストがかなりのインパクトがある
realusersys
Single 1.8 (2)140.863047.189053.553
Single 1.9 (2)055.651055.541000.049
Single J (2)052.475058.730000.317
Multi 1.8 (2)231.588132.856058.655
Multi 1.9 (2)010.553010.451000.075
Multi J (2)034.570015.846000.594

Flexに関すること

URLLoaderとタイムアウト

URLLoaderは、デフォルトでは、30secでタイムアウト。 URLLoaderWithTimeoutクラスを使うことでデフォルト120secに指定。

ただし、Flashplayerのバージョン、環境によってTimeout値が異なることがある。

SEE ALSO

以下、開発者専用のページです

Feedback

選択肢 投票
おもしろい 1  
役に立つ 4  
興味ない 0  
理解できない 0  
やってみたい 0  
食べてみたい 0  

*1 参考文献/コンピューターゲームのアルゴリズム&ネットワーキングなどを参照

TOP   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS   [Privacy Policy]  
Last-modified: 2014-08-23 (土) 17:41:14 (3202d)