use crate::error::{TspError, TspResult};
use crate::solver::TspAlgorithm;
use std::io::{Read, Write};
use std::path::Path;
const MAGIC: &[u8; 4] = b"APR\x00";
const VERSION: u32 = 1;
const MODEL_TYPE_TSP: u32 = 0x54_53_50_00;
#[derive(Debug, Clone)]
pub enum TspParams {
Aco {
alpha: f64,
beta: f64,
rho: f64,
q0: f64,
num_ants: usize,
},
Tabu { tenure: usize, max_neighbors: usize },
Ga {
population_size: usize,
crossover_rate: f64,
mutation_rate: f64,
},
Hybrid {
ga_fraction: f64,
tabu_fraction: f64,
aco_fraction: f64,
},
}
impl Default for TspParams {
fn default() -> Self {
Self::Aco {
alpha: 1.0,
beta: 2.5,
rho: 0.1,
q0: 0.9,
num_ants: 20,
}
}
}
#[derive(Debug, Clone)]
pub struct TspModelMetadata {
pub trained_instances: u32,
pub avg_instance_size: u32,
pub best_known_gap: f64,
pub training_time_secs: f64,
}
impl Default for TspModelMetadata {
fn default() -> Self {
Self {
trained_instances: 0,
avg_instance_size: 0,
best_known_gap: 0.0,
training_time_secs: 0.0,
}
}
}
#[derive(Debug, Clone)]
pub struct TspModel {
pub algorithm: TspAlgorithm,
pub params: TspParams,
pub metadata: TspModelMetadata,
}
include!("payload_reader.rs");
include!("model_model.rs");