summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Cargo.toml1
-rw-r--r--src/lib.rs2
-rw-r--r--src/strategy/monte_carlo.rs11
3 files changed, 10 insertions, 4 deletions
diff --git a/Cargo.toml b/Cargo.toml
index 86a4b95..264b2a9 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -9,6 +9,7 @@ serde_json = "1.0.16"
rand = "0.4.2"
time = "0.1.4"
+rayon = "1.0.1"
[dev-dependencies]
criterion = "0.2"
diff --git a/src/lib.rs b/src/lib.rs
index 728f747..6bcfc00 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -7,6 +7,8 @@ extern crate serde_derive;
extern crate rand;
extern crate time;
+extern crate rayon;
+
pub mod json;
pub mod engine;
pub mod strategy;
diff --git a/src/strategy/monte_carlo.rs b/src/strategy/monte_carlo.rs
index 6f0f681..b7025c5 100644
--- a/src/strategy/monte_carlo.rs
+++ b/src/strategy/monte_carlo.rs
@@ -8,16 +8,19 @@ const MAX_MOVES: u16 = 400;
use time::{Duration, PreciseTime};
+use rayon::prelude::*;
+
pub fn choose_move(settings: &GameSettings, state: &GameState, start_time: &PreciseTime, max_time: Duration) -> Command {
println!("Using MONTE_CARLO strategy");
- let mut rng = thread_rng();
let mut command_scores = CommandScore::init_command_scores(settings, state);
loop {
- for mut score in &mut command_scores {
- simulate_to_endstate(score, settings, state, &mut rng);
- }
+ command_scores.par_iter_mut()
+ .for_each(|score| {
+ let mut rng = thread_rng();
+ simulate_to_endstate(score, settings, state, &mut rng);
+ });
if start_time.to(PreciseTime::now()) > max_time {
break;
}