今後の予定
今後の予定などをにらんだメモです。あくまでもメモなので、自分にしか理解できない略語で記されていたり、自問していたりする箇所もありますがご了承ください。
Thell "azure"
azureとは、version 3.0〜4.0をにらんだリファクタリング計画。
インターフェース
- タイマ処理を変更。これまでUndoするたびに元の時間に変更していた仕様を破棄し、仕様合計時間は元に戻さないようにする。
- WTLの導入とKeynoteライブラリの破棄
- OS依存コードを抽象化して切り離す
- 石を返す描画をフェード/フリップで切り替えられるように。将来的にはさらに他の描画パターンを追加できるような設計を。
- メッセージを格好良く。
- キーボード操作のサポート
内部ユーティリティ
- 設定をxmlファイル化
- ThellGameのリファクタリング
各ウィンドウへの処理の委譲とPlayerオブジェクトの作成を軸に、ThellGameを再構築する。
各ウィンドウへの処理の委譲とは、コントロールの状態などを各ウィンドウに自主的に判断させることである。現在ThellGameは全てのウィンドウの全てのコントロールに対して細かな指令を出して全体を制御している。この方式は単純ではあるが、ThellGameの肥大化と、似たようなコードの羅列を招いている。よって、ThellGameは各ウィンドウにイベントの通知(ゲームの開始/停止etc...)だけを行い、各ウィンドウがそれに応じてメッセージを表示したり、コントロールの状態を変更したりする。あるいは、ThellGameと各ウィンドウの間に、イベントを各ウィンドウへの細かな指令に変換するクラスを挟むのも良い考えだ。
Playerオブジェクトの作成とは、現在ThellGameが行っているユーザの入力待ち、コンピュータ思考終了待ちなどの処理を抽象的なPlayerクラスにまとめて、ThellGameからその詳細を隠蔽することである。ThellGameは手番のPlayerオブジェクトに手番が回ってきたことを知らせ、オブジェクトが思考を終えるのを待ち、結果を受け取って手番を次にまわす。この仕組みでは、ThellGameは思考を行っているのが人間なのかコンピュータなのかといった情報は一切気にせずに統一的にゲームを進行することができる。そのため、コードが簡潔になるほか、将来的にネットワーク対戦などへの対応も簡単に行えるというメリットがある。
- Configureオブジェクト
設定情報を統一的に管理するConfigureオブジェクトを設ける。ConfigureオブジェクトはSingletonパターンを用いて実装され、Thellの起動時に全設定を読み込んで内部のデータベースに格納する。情報を受け取る側は、文字列で定義されたキーを渡し、対応する値を得る。設定の物理的格納方法は隠蔽され、レジストリ/INIファイル/独自の設定ファイルなどの形態をとることができる。
また、設定を利用するオブジェクトはConfigureのClientインターフェースを継承することでクライアントとなることができ、自らのアドレスをConfigureオブジェクトに登録しておくことで設定変更の通知を受けることができる。これはObserverパターンそのものである。
Configureオブジェクトが扱う設定のタイプとして、文字列/整数/色のサポートが考えられる。
研究・評価課題
探索
- 並列αβでデュアルコア対応。スレッドセーフなボードや置換表の実装。
- ProbCutの実装
- 終盤専用に別のboard表現を使うか?
評価関数
- 300万棋譜による再学習
- 欠損パターンの得点をニューラルネットワーク等から推測して使用
- move ordering専用の高速古典評価関数の検討←再学習の結果不要になるかもしれない
定石