Trait usiagent::player::USIPlayer [−][src]
pub trait USIPlayer<E>: Debug where
E: PlayerError, {
const ID: &'static str;
const AUTHOR: &'static str;
Show 17 methods
fn get_option_kinds(
&mut self
) -> Result<BTreeMap<String, SysEventOptionKind>, E>;
fn get_options(&mut self) -> Result<BTreeMap<String, UsiOptType>, E>;
fn take_ready<W, L>(
&mut self,
on_keep_alive: OnKeepAlive<W, L>
) -> Result<(), E>
where
W: USIOutputWriter + Send + 'static,
L: Logger + Send + 'static;
fn set_option(
&mut self,
name: String,
value: SysEventOption
) -> Result<(), E>;
fn newgame(&mut self) -> Result<(), E>;
fn set_position(
&mut self,
teban: Teban,
ban: Banmen,
ms: Mochigoma,
mg: Mochigoma,
n: u32,
m: Vec<Move>
) -> Result<(), E>;
fn think<L, S, P>(
&mut self,
think_start_time: Instant,
limit: &UsiGoTimeLimit,
event_queue: Arc<Mutex<UserEventQueue>>,
info_sender: S,
periodically_info: P,
on_error_handler: Arc<Mutex<OnErrorHandler<L>>>
) -> Result<BestMove, E>
where
L: Logger + Send + 'static,
S: InfoSender,
P: PeriodicallyInfo;
fn think_ponder<L, S, P>(
&mut self,
limit: &UsiGoTimeLimit,
event_queue: Arc<Mutex<UserEventQueue>>,
info_sender: S,
periodically_info: P,
on_error_handler: Arc<Mutex<OnErrorHandler<L>>>
) -> Result<BestMove, E>
where
L: Logger + Send + 'static,
S: InfoSender + Send + 'static,
P: PeriodicallyInfo;
fn think_mate<L, S, P>(
&mut self,
limit: &UsiGoMateTimeLimit,
event_queue: Arc<Mutex<UserEventQueue>>,
info_sender: S,
periodically_info: P,
on_error_handler: Arc<Mutex<OnErrorHandler<L>>>
) -> Result<CheckMate, E>
where
L: Logger + Send + 'static,
S: InfoSender,
P: PeriodicallyInfo;
fn on_stop(&mut self, e: &UserEvent) -> Result<(), E>
where
E: PlayerError;
fn on_ponderhit(&mut self, e: &UserEvent) -> Result<(), E>
where
E: PlayerError;
fn gameover<L>(
&mut self,
s: &GameEndState,
event_queue: Arc<Mutex<UserEventQueue>>,
on_error_handler: Arc<Mutex<OnErrorHandler<L>>>
) -> Result<(), E>
where
L: Logger,
Arc<Mutex<OnErrorHandler<L>>>: Send + 'static;
fn on_quit(&mut self, e: &UserEvent) -> Result<(), E>
where
E: PlayerError;
fn quit(&mut self) -> Result<(), E>;
fn handle_events<'a, L>(
&mut self,
event_queue: &'a Mutex<UserEventQueue>,
on_error_handler: &Mutex<OnErrorHandler<L>>
) -> Result<bool, E>
where
L: Logger,
E: Error + Debug,
Arc<Mutex<OnErrorHandler<L>>>: Send + 'static,
EventHandlerError<UserEventKind, E>: From<E>,
{ ... }
fn dispatch_events<'a, L>(
&mut self,
event_queue: &'a Mutex<UserEventQueue>,
on_error_handler: &Mutex<OnErrorHandler<L>>
) -> Result<(), EventDispatchError<'a, UserEventQueue, UserEvent, E>>
where
L: Logger,
E: Error + Debug,
Arc<Mutex<OnErrorHandler<L>>>: Send + 'static,
EventHandlerError<UserEventKind, E>: From<E>,
{ ... }
fn apply_moves<T, F>(
&self,
state: State,
teban: Teban,
mc: MochigomaCollections,
m: &Vec<AppliedMove>,
r: T,
f: F
) -> (Teban, State, MochigomaCollections, T)
where
F: FnMut(&Self, Teban, &Banmen, &MochigomaCollections, &Option<AppliedMove>, &Option<MochigomaKind>, T) -> T,
{ ... }
}
Expand description
プレイヤー(AI本体)の実装
Associated Constants
Required methods
fn get_option_kinds(
&mut self
) -> Result<BTreeMap<String, SysEventOptionKind>, E>
fn get_option_kinds(
&mut self
) -> Result<BTreeMap<String, SysEventOptionKind>, E>
サポートしているオブションの一覧をオプション名をキーとしたマップで返す
fn get_options(&mut self) -> Result<BTreeMap<String, UsiOptType>, E>
fn get_options(&mut self) -> Result<BTreeMap<String, UsiOptType>, E>
サポートしているオプションに関する設定情報(maxとminの値など)をオプション名をキーとしたマップで返す
fn take_ready<W, L>(
&mut self,
on_keep_alive: OnKeepAlive<W, L>
) -> Result<(), E> where
W: USIOutputWriter + Send + 'static,
L: Logger + Send + 'static,
fn take_ready<W, L>(
&mut self,
on_keep_alive: OnKeepAlive<W, L>
) -> Result<(), E> where
W: USIOutputWriter + Send + 'static,
L: Logger + Send + 'static,
プレイヤーの機能で必要な時間のかかる前処理などをここで行う
Arguments
on_keep_alive
- 定期的にGUIに空行を送信してエンジンがフリーズしていないことを通知するためのオブジェクト
fn set_option(&mut self, name: String, value: SysEventOption) -> Result<(), E>
fn set_option(&mut self, name: String, value: SysEventOption) -> Result<(), E>
局面の初期化。毎回初期局面と現在の局面までの全ての指し手のリストが送られてくる。
Arguments
teban
- 初期局面時の手番ban
- 盤面ms
- 先手の持ち駒mg
- 後手の持ち駒n
- 次の手が何手目か。(USIプロトコルのSFENの原案にあるために存在するが、現在固定で1が送られてくるため無視してかまわない)m
- 指し手のリスト
fn think<L, S, P>(
&mut self,
think_start_time: Instant,
limit: &UsiGoTimeLimit,
event_queue: Arc<Mutex<UserEventQueue>>,
info_sender: S,
periodically_info: P,
on_error_handler: Arc<Mutex<OnErrorHandler<L>>>
) -> Result<BestMove, E> where
L: Logger + Send + 'static,
S: InfoSender,
P: PeriodicallyInfo,
fn think<L, S, P>(
&mut self,
think_start_time: Instant,
limit: &UsiGoTimeLimit,
event_queue: Arc<Mutex<UserEventQueue>>,
info_sender: S,
periodically_info: P,
on_error_handler: Arc<Mutex<OnErrorHandler<L>>>
) -> Result<BestMove, E> where
L: Logger + Send + 'static,
S: InfoSender,
P: PeriodicallyInfo,
思考開始。この関数の戻り値が指し手となる。AIの実装の核となる部分
Arguments
think_start_time
- 思考開始時の時間。通常は現在の時刻だが、go ponderの後に予想した指し手が外れた場合などはstopコマンドを受け取った時刻となる。limit
- 持ち時間event_queue
- ユーザーイベントが格納されているキュー。stopコマンドを受信した時やgo ponderの指し手が当たった時,エンジンの終了時などに送られてくる。info_sender
- infoコマンドを送信するためのオブジェクト。pinfo_sender
- あらかじめスケジュールされた一定の間隔でinfoコマンドを送信するための機能を持つオブジェクトon_error_handler
- エラーをログファイルなどに出力するためのオブジェクト
fn think_ponder<L, S, P>(
&mut self,
limit: &UsiGoTimeLimit,
event_queue: Arc<Mutex<UserEventQueue>>,
info_sender: S,
periodically_info: P,
on_error_handler: Arc<Mutex<OnErrorHandler<L>>>
) -> Result<BestMove, E> where
L: Logger + Send + 'static,
S: InfoSender + Send + 'static,
P: PeriodicallyInfo,
fn think_ponder<L, S, P>(
&mut self,
limit: &UsiGoTimeLimit,
event_queue: Arc<Mutex<UserEventQueue>>,
info_sender: S,
periodically_info: P,
on_error_handler: Arc<Mutex<OnErrorHandler<L>>>
) -> Result<BestMove, E> where
L: Logger + Send + 'static,
S: InfoSender + Send + 'static,
P: PeriodicallyInfo,
思考開始。この関数の戻り値が指し手となる。AIの実装の核となる部分
Arguments
limit
- 持ち時間event_queue
- ユーザーイベントが格納されているキュー。stopコマンドを受信した時やgo ponderの指し手が当たった時,エンジンの終了時などに送られてくる。info_sender
- infoコマンドを送信するためのオブジェクト。pinfo_sender
- あらかじめスケジュールされた一定の間隔でinfoコマンドを送信するための機能を持つオブジェクトon_error_handler
- エラーをログファイルなどに出力するためのオブジェクト
fn think_mate<L, S, P>(
&mut self,
limit: &UsiGoMateTimeLimit,
event_queue: Arc<Mutex<UserEventQueue>>,
info_sender: S,
periodically_info: P,
on_error_handler: Arc<Mutex<OnErrorHandler<L>>>
) -> Result<CheckMate, E> where
L: Logger + Send + 'static,
S: InfoSender,
P: PeriodicallyInfo,
fn think_mate<L, S, P>(
&mut self,
limit: &UsiGoMateTimeLimit,
event_queue: Arc<Mutex<UserEventQueue>>,
info_sender: S,
periodically_info: P,
on_error_handler: Arc<Mutex<OnErrorHandler<L>>>
) -> Result<CheckMate, E> where
L: Logger + Send + 'static,
S: InfoSender,
P: PeriodicallyInfo,
詰め将棋回答時に呼ばれる関数
Arguments
limit
- 持ち時間event_queue
- ユーザーイベントが格納されているキュー。stopコマンドを受信した時やgo ponderの指し手が当たった時,エンジンの終了時などに送られてくる。info_sender
- infoコマンドを送信するためのオブジェクト。pinfo_sender
- あらかじめスケジュールされた一定の間隔でinfoコマンドを送信するための機能を持つオブジェクトon_error_handler
- エラーをログファイルなどに出力するためのオブジェクト
UserEvent::Stop
イベントがキューに追加されている状態でdispatch_events
でイベントを処理すると呼ばれる。
fn on_ponderhit(&mut self, e: &UserEvent) -> Result<(), E> where
E: PlayerError,
fn on_ponderhit(&mut self, e: &UserEvent) -> Result<(), E> where
E: PlayerError,
UserEvent::PonderHit
イベントがキューに追加されている状態でdispatch_events
でイベントを処理すると呼ばれる。
fn gameover<L>(
&mut self,
s: &GameEndState,
event_queue: Arc<Mutex<UserEventQueue>>,
on_error_handler: Arc<Mutex<OnErrorHandler<L>>>
) -> Result<(), E> where
L: Logger,
Arc<Mutex<OnErrorHandler<L>>>: Send + 'static,
fn gameover<L>(
&mut self,
s: &GameEndState,
event_queue: Arc<Mutex<UserEventQueue>>,
on_error_handler: Arc<Mutex<OnErrorHandler<L>>>
) -> Result<(), E> where
L: Logger,
Arc<Mutex<OnErrorHandler<L>>>: Send + 'static,
対局終了時に呼ばれる
Arguments
s
- 勝敗を表すオブジェクトevent_queue
- ユーザーイベントが格納されているキュー。stopコマンドを受信した時やgo ponderの指し手が当たった時,エンジンの終了時などに送られてくる。on_error_handler
- エラーをログファイルなどに出力するためのオブジェクト
UserEvent::Quit
イベントがキューに追加されている状態でdispatch_events
でイベントを処理すると呼ばれる。
Provided methods
fn handle_events<'a, L>(
&mut self,
event_queue: &'a Mutex<UserEventQueue>,
on_error_handler: &Mutex<OnErrorHandler<L>>
) -> Result<bool, E> where
L: Logger,
E: Error + Debug,
Arc<Mutex<OnErrorHandler<L>>>: Send + 'static,
EventHandlerError<UserEventKind, E>: From<E>,
fn handle_events<'a, L>(
&mut self,
event_queue: &'a Mutex<UserEventQueue>,
on_error_handler: &Mutex<OnErrorHandler<L>>
) -> Result<bool, E> where
L: Logger,
E: Error + Debug,
Arc<Mutex<OnErrorHandler<L>>>: Send + 'static,
EventHandlerError<UserEventKind, E>: From<E>,
イベントを処理する関数。これにイベントキューを渡すかEventDispatcher
を実装したオブジェクトのdispatch_events
にイベントキューを渡すまでイベントは処理されない。
Arguments
event_queue
- ユーザーイベントが格納されているキュー。stopコマンドを受信した時やgo ponderの指し手が当たった時,エンジンの終了時などに送られてくる。on_error_handler
- エラーをログファイルなどに出力するためのオブジェクト
fn dispatch_events<'a, L>(
&mut self,
event_queue: &'a Mutex<UserEventQueue>,
on_error_handler: &Mutex<OnErrorHandler<L>>
) -> Result<(), EventDispatchError<'a, UserEventQueue, UserEvent, E>> where
L: Logger,
E: Error + Debug,
Arc<Mutex<OnErrorHandler<L>>>: Send + 'static,
EventHandlerError<UserEventKind, E>: From<E>,
fn dispatch_events<'a, L>(
&mut self,
event_queue: &'a Mutex<UserEventQueue>,
on_error_handler: &Mutex<OnErrorHandler<L>>
) -> Result<(), EventDispatchError<'a, UserEventQueue, UserEvent, E>> where
L: Logger,
E: Error + Debug,
Arc<Mutex<OnErrorHandler<L>>>: Send + 'static,
EventHandlerError<UserEventKind, E>: From<E>,
USIPlayer::handle_events
から呼ばれる内部関数。イベントキュー内のイベントを処理する。
Arguments
event_queue
- ユーザーイベントが格納されているキュー。stopコマンドを受信した時やgo ponderの指し手が当たった時,エンジンの終了時などに送られてくる。on_error_handler
- エラーをログファイルなどに出力するためのオブジェクト
fn apply_moves<T, F>(
&self,
state: State,
teban: Teban,
mc: MochigomaCollections,
m: &Vec<AppliedMove>,
r: T,
f: F
) -> (Teban, State, MochigomaCollections, T) where
F: FnMut(&Self, Teban, &Banmen, &MochigomaCollections, &Option<AppliedMove>, &Option<MochigomaKind>, T) -> T,
fn apply_moves<T, F>(
&self,
state: State,
teban: Teban,
mc: MochigomaCollections,
m: &Vec<AppliedMove>,
r: T,
f: F
) -> (Teban, State, MochigomaCollections, T) where
F: FnMut(&Self, Teban, &Banmen, &MochigomaCollections, &Option<AppliedMove>, &Option<MochigomaKind>, T) -> T,
手のリストを現在の局面に適用した結果を返す
Arguments
state
- 手の列挙に使うビットボードと盤面などの内部状態を持つオブジェクトteban
- 局面開始時の手番mc
- 局面開始時の持ち駒m
- 開始局面から現在までの指し手のリストr
- コールバック関数に渡され関数の戻り値の一部となるオブジェクト(任意の型)f
- 手の適用のたびに呼ばれるコールバック関数