改造のヒント


作成者(棋士別成績一覧管理人)のExcel作成のスキルはあまり高くないので、改造することでパフォーマンス向上等、改善の余地はいろいろとあるものと思われる。

なお、誤操作防止のため、シートを保護し入力可能なセルを限定しているので、改造は「シートの保護」を解除してから行う。(「ホーム」タグ→「セル」の中の「書式」→「シートの保護の解除」)

1.全数試行の際にシミュレーションの対象となる対局数の上限

 現在は再計算の際の実行時間やExcelシート自体の大きさから全数試行15局を上限としている。
 15局だと、それぞれの棋戦で扱える範囲は次のようになる。
タイプ 棋戦 範囲
王位戦型 王位戦・女流王位戦 全局
王将戦型 王将戦 3回戦~7回戦
順位戦A型 順位戦A級・女流名人位戦A級 6回戦~9回戦
順位戦B型 順位戦B1~C2・女流名人位戦B級 残り2~3回戦(状況による)
 現行のやり方だと、対象を1局増やすごとにExcelシートのサイズが約2倍になる。
 1枚のシートで扱えるのは20局までであるが、複数枚のシートを使えばより多くの対局数を扱えるようになるが、環境によっては動作させるのも難しくなる。

2.全数試行の実行方式

 現在はシート上に計算の対象となる全パターンを列挙し計算する方式にしている。
 これを「反復計算」の機能を使う方式で計算することは可能である。
 ただし、処理時間が非常にかかってしまうので、この方式は採用しなかった。
 なお、Excel2007では反復処理は32,767回(=2^15-1)が上限なので、対象局数を増やすためには何らかの工夫が必要である。

3.乱数による試行のシートcの計算順序
 乱数による試行の方はシートcで計算を行っているが、計算順序が横方向(A1→B1→C1→…→A2→B2→C2→…)なので、それに合わせて作成している。
 反復計算の機能を使うと、計算順序に従って計算が行われるので、配置の仕方によっては思った通りの計算結果が得られないケースがある。例えば、セルD1に”=E1+F1”という計算式をセットすると、まずD1の値が計算される。その後、E1とF1の値が変わっても反映されないのである。そうしないと、乱数による試行を行っているシートcで共通して持っている「試行回数」のカウンターであるセルB2は計算式が”=B2+1”なので永久に計算が終わらなくなってしまうからである。
 とはいえ、そのためにシートの作成時に、縦に並んでいるものを横に並べ替えたり逆に横に並んでいるものを縦に並べ替えたりする必要が生じ、作成にやや手間がかかる構成になってしまったのは事実である。
 計算順序を縦にすると、よりすっきりしたシートを作成できるのだが、Excel2007での計算順序の設定変更の手順がわからず、そのままにしている。
 これも改善すべき点である。


タグ:

+ タグ編集
  • タグ:
最終更新:2010年01月04日 11:52