switch rand provider
This commit is contained in:
parent
d2408b2468
commit
391a771792
3 changed files with 90 additions and 14 deletions
56
simulator/Cargo.lock
generated
56
simulator/Cargo.lock
generated
|
|
@ -65,6 +65,17 @@ version = "1.0.5"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4e7648175b45a9a48536d676f68d918270699102aa8dab5496df06904c914600"
|
||||
|
||||
[[package]]
|
||||
name = "chacha20"
|
||||
version = "0.10.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "65c35e4b699c7e15ccbe7ee35c005e4fc0a278d22238a2857e6ce2dadeda1b06"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"cpufeatures",
|
||||
"rand_core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "color_quant"
|
||||
version = "1.1.0"
|
||||
|
|
@ -80,6 +91,15 @@ dependencies = [
|
|||
"libm",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cpufeatures"
|
||||
version = "0.3.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5ca28b0ae3115b884660db4118d803791fd6756b6e88f39c0f3f7859060d7566"
|
||||
dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crc32fast"
|
||||
version = "1.5.4"
|
||||
|
|
@ -158,6 +178,18 @@ dependencies = [
|
|||
"ttf-parser",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "getrandom"
|
||||
version = "0.4.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"r-efi",
|
||||
"rand_core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "glam"
|
||||
version = "0.27.0"
|
||||
|
|
@ -432,6 +464,29 @@ dependencies = [
|
|||
"proc-macro2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "r-efi"
|
||||
version = "6.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
|
||||
|
||||
[[package]]
|
||||
name = "rand"
|
||||
version = "0.10.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "65c9fb96cbc91e3478eaae79a69fcd3f1ae4ad052e471fe6732fff548984b4af"
|
||||
dependencies = [
|
||||
"chacha20",
|
||||
"getrandom",
|
||||
"rand_core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand_core"
|
||||
version = "0.10.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69"
|
||||
|
||||
[[package]]
|
||||
name = "robust"
|
||||
version = "1.2.0"
|
||||
|
|
@ -472,6 +527,7 @@ dependencies = [
|
|||
"glam 0.34.3",
|
||||
"macroquad",
|
||||
"parry2d",
|
||||
"rand",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
|
|
|||
|
|
@ -7,3 +7,4 @@ edition = "2024"
|
|||
glam = "0.34.3"
|
||||
macroquad = "0.4.16"
|
||||
parry2d = "0.31.1"
|
||||
rand_gen = { package = "rand", version = "0.10.3" }
|
||||
|
|
|
|||
|
|
@ -15,6 +15,12 @@ use parry2d::shape::Ball;
|
|||
use parry2d::shape::Segment;
|
||||
use parry2d::shape::Shape;
|
||||
|
||||
use rand_gen::RngExt;
|
||||
use rand_gen::SeedableRng;
|
||||
use rand_gen::distr::Distribution;
|
||||
use rand_gen::distr::Uniform;
|
||||
use rand_gen::rngs::SmallRng;
|
||||
|
||||
const VIEW_DIST: f32 = 180.0;
|
||||
const BOT_RADIUS: f32 = 16.0;
|
||||
const KILL_RADIUS: f32 = 140.0;
|
||||
|
|
@ -57,9 +63,7 @@ impl Mortal for Robot {
|
|||
}
|
||||
|
||||
impl Robot {
|
||||
fn new(position: Vec2, team: Color) -> Self {
|
||||
let rand_angle = rand::gen_range(0, 1000) as f32 * TAU / 1000.0;
|
||||
let pose:Pose = Pose::from_parts(position.to_array().into(), Rot2::from_angle(rand_angle));
|
||||
fn new(pose: Pose, team: Color) -> Self {
|
||||
Self { pose, alive: AtomicBool::new(true), collider: Ball::new(BOT_RADIUS), sensor: Sensor::None, team}
|
||||
}
|
||||
|
||||
|
|
@ -177,7 +181,8 @@ struct Simulation {
|
|||
}
|
||||
|
||||
impl Simulation {
|
||||
fn new() -> Self {
|
||||
fn new(seed: u64) -> Self {
|
||||
let mut rng = SmallRng::seed_from_u64(seed);
|
||||
let watchdog = 0; // iterations since something interesting
|
||||
let mut robots = Vec::new();
|
||||
|
||||
|
|
@ -187,15 +192,21 @@ impl Simulation {
|
|||
let score = HashMap::new();
|
||||
|
||||
for i in 5..20 {
|
||||
robots.push(Robot::new(Vec2 { x: 100.0, y: i as f32*50.0 }, BLUE));
|
||||
robots.push(Robot::new(Vec2 { x: 1200.0, y: i as f32*50.0 }, RED));
|
||||
let angle = Uniform::new(0.0, TAU).unwrap();
|
||||
let rand_angle = angle.sample(&mut rng);
|
||||
let pose:Pose = Pose::from_parts(Vec2 { x: 100.0, y: i as f32*50.0 }, Rot2::from_angle(rand_angle));
|
||||
robots.push(Robot::new(pose, BLUE));
|
||||
|
||||
let rand_angle = angle.sample(&mut rng);
|
||||
let pose:Pose = Pose::from_parts(Vec2 { x: 1200.0, y: i as f32*50.0 }, Rot2::from_angle(rand_angle));
|
||||
robots.push(Robot::new(pose, RED));
|
||||
}
|
||||
|
||||
let mut food = Vec::new();
|
||||
|
||||
for _ in 0..120 {
|
||||
let x = rand::gen_range(200, 1100) as f32;
|
||||
let y = rand::gen_range(200, 900) as f32;
|
||||
let x = rng.random_range(200.0 .. 1100.0);
|
||||
let y = rng.random_range(200.0 .. 900.0);
|
||||
food.push(Food::new(Vec2 { x, y }));
|
||||
}
|
||||
Self { robots, food, craters, new_craters, watchdog, score }
|
||||
|
|
@ -295,10 +306,8 @@ impl Simulation {
|
|||
}
|
||||
}
|
||||
|
||||
async fn run_simulation() -> (i32, i32) {
|
||||
let mut sim = Simulation::new();
|
||||
|
||||
|
||||
async fn run_simulation(seed: u64) -> (i32, i32) {
|
||||
let mut sim = Simulation::new(seed);
|
||||
|
||||
let mut loo = 1;
|
||||
loop {
|
||||
|
|
@ -317,6 +326,17 @@ async fn run_simulation() -> (i32, i32) {
|
|||
}
|
||||
}
|
||||
|
||||
async fn run_headless_simulation(seed: u64) -> (i32, i32) {
|
||||
let mut sim = Simulation::new(seed);
|
||||
|
||||
loop {
|
||||
if let Some(result) = sim.sim_step() {
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#[macroquad::main("Adversarial Foraging Simulator")]
|
||||
async fn main() {
|
||||
|
|
@ -324,9 +344,8 @@ async fn main() {
|
|||
let mut rtot = 0;
|
||||
let mut btot = 0;
|
||||
for i in 0..100 {
|
||||
rand::srand(i);
|
||||
|
||||
let (red, blu) = run_simulation().await;
|
||||
let (red, blu) = run_headless_simulation(i).await;
|
||||
|
||||
rtot += red;
|
||||
btot += blu;
|
||||
|
|
|
|||
Loading…
Reference in a new issue