1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
//! Predefined policy for agent to play game.
//!
//! Policy represents algorithm that make choice in given situation.
//! This module provides 5 predefined policies, AlphaZero policy, random policy, io policy, multi-policy and pure MCTS policy.
//!
//! - Policy : trait for playing game with `Agent`.
//! - AlphaZero : implementation of policy [AlphaZero](https://arxiv.org/abs/1712.01815).
//! - RandomPolicy : select possible position with randomness.
//! - IoPolicy : read user input.
//! - MultiPolicy : Black-White seperable policy, pass two different policies as initialize parameter.
//! - DefaultPolicy : Pure Monte Carlo tree search implementation.
//!
//! # Examples
//! ```rust
//! # extern crate connect6;
//! # use connect6::{agent::Agent, game::Game, policy::Policy};
//! struct ZeroPolicy {}
//! impl Policy for ZeroPolicy {
//!     fn next(&mut self, game: &Game) -> Option<(usize, usize)> {
//!         Some((0, 0))
//!     }
//! }
//!
//! let mut policy = ZeroPolicy {};
//! let result = Agent::new(&mut policy).play();
//! assert!(result.is_err());
//! ```
pub use self::alphazero_policy::*;
pub use self::default_policy::*;
pub use self::io_policy::*;
pub use self::multi_policy::*;
pub use self::random_policy::*;
pub use self::simulate::*;

mod alphazero_policy;
mod default_policy;
mod io_policy;
mod multi_policy;
mod random_policy;
mod simulate;

use game::Game;

/// trait for playing game with Agent.
pub trait Policy {
    /// generate next selection
    fn next(&mut self, game: &Game) -> Option<(usize, usize)>;
}