reduce target latency
This commit is contained in:
parent
d1b0ef3ccf
commit
ac4c2d6f72
@ -87,8 +87,20 @@ pub fn end(game: &Game, turn: i32, _board: &Board, you: &Battlesnake) {
|
||||
// move is called on every turn and returns your next move
|
||||
// Valid moves are "up", "down", "left", or "right"
|
||||
// See https://docs.battlesnake.com/api/example-move for available data
|
||||
pub fn get_move(game: &Game, turn: i32, board: &Board, you: &Battlesnake) -> Option<Action> {
|
||||
let start = Instant::now();
|
||||
pub fn get_move(
|
||||
game: &Game,
|
||||
turn: i32,
|
||||
board: &Board,
|
||||
you: &Battlesnake,
|
||||
start: &Instant,
|
||||
) -> Option<Action> {
|
||||
let calc_start = Instant::now();
|
||||
if calc_start - *start > Duration::from_millis(10) {
|
||||
error!(
|
||||
"The calculation was started long after the request ({}ms)",
|
||||
(calc_start - *start).as_millis()
|
||||
);
|
||||
}
|
||||
let game_info = GAME_INFOS
|
||||
.lock()
|
||||
.ok()
|
||||
@ -115,7 +127,7 @@ pub fn get_move(game: &Game, turn: i32, board: &Board, you: &Battlesnake) -> Opt
|
||||
);
|
||||
let possible_actions = board.possible_actions().get(&game_info.my_token).cloned()?;
|
||||
if possible_actions.len() == 1 {
|
||||
info!("Only one movement option exists. Skipping Tree evaluation");
|
||||
info!("Only one movement option exists in turn {turn}. Skipping Tree evaluation");
|
||||
return possible_actions.first().map(|direction| Action {
|
||||
r#move: *direction,
|
||||
shout: None,
|
||||
@ -123,11 +135,11 @@ pub fn get_move(game: &Game, turn: i32, board: &Board, you: &Battlesnake) -> Opt
|
||||
}
|
||||
|
||||
// do some latency compensation
|
||||
let deadline = start
|
||||
let deadline = *start
|
||||
+ game_info.calculation_time.lock().map_or_else(
|
||||
|_| Duration::from_millis(u64::from(game.timeout) / 2),
|
||||
|mut guard| {
|
||||
let target_latency = game.timeout * 3 / 4;
|
||||
let target_latency = game.timeout / 2;
|
||||
let latency = you.latency.parse().unwrap_or_else(|e| {
|
||||
error!("Unable to parse latency: {e}");
|
||||
target_latency
|
||||
|
@ -6,7 +6,7 @@ use rocket::{
|
||||
fairing::AdHoc, get, http::Status, launch, post, routes, serde::json::Json, tokio::task,
|
||||
};
|
||||
use serde_json::Value;
|
||||
use std::env;
|
||||
use std::{env, time::Instant};
|
||||
|
||||
#[get("/")]
|
||||
fn handle_index() -> Json<Value> {
|
||||
@ -27,12 +27,14 @@ fn handle_start(start_req: Json<GameState>) -> Status {
|
||||
|
||||
#[post("/move", format = "json", data = "<move_req>")]
|
||||
async fn handle_move(move_req: Json<GameState>) -> Option<Json<Action>> {
|
||||
let start = Instant::now();
|
||||
let response = task::spawn_blocking(move || {
|
||||
logic::get_move(
|
||||
&move_req.game,
|
||||
move_req.turn,
|
||||
&move_req.board,
|
||||
&move_req.you,
|
||||
&start,
|
||||
)
|
||||
})
|
||||
.await
|
||||
|
Loading…
Reference in New Issue
Block a user