@@ -4,6 +4,7 @@ use crate::optimizer::separator::Separator;
44use jagua_rs:: probs:: spp:: entities:: { SPInstance , SPSolution } ;
55use rand:: { RngCore , SeedableRng } ;
66use std:: time:: Duration ;
7+ use log:: info;
78use rand_xoshiro:: Xoshiro256PlusPlus ;
89use crate :: consts:: LBF_SAMPLE_CONFIG ;
910use crate :: optimizer:: compress:: compression_phase;
@@ -18,12 +19,31 @@ pub mod explore;
1819pub mod compress;
1920
2021///Algorithm 11 from https://doi.org/10.48550/arXiv.2509.13329
21- pub fn optimize ( instance : SPInstance , mut rng : Xoshiro256PlusPlus , sol_listener : & mut impl SolutionListener , terminator : & mut impl Terminator , expl_config : & ExplorationConfig , cmpr_config : & CompressionConfig ) -> SPSolution {
22+ pub fn optimize (
23+ instance : SPInstance ,
24+ mut rng : Xoshiro256PlusPlus ,
25+ sol_listener : & mut impl SolutionListener ,
26+ terminator : & mut impl Terminator ,
27+ expl_config : & ExplorationConfig ,
28+ cmpr_config : & CompressionConfig ,
29+ initial_solution : Option < & SPSolution >
30+ ) -> SPSolution {
2231 let mut next_rng = || Xoshiro256PlusPlus :: seed_from_u64 ( rng. next_u64 ( ) ) ;
23- let builder = LBFBuilder :: new ( instance. clone ( ) , next_rng ( ) , LBF_SAMPLE_CONFIG ) . construct ( ) ;
32+ let start_prob = match initial_solution {
33+ None => {
34+ let builder = LBFBuilder :: new ( instance. clone ( ) , next_rng ( ) , LBF_SAMPLE_CONFIG ) . construct ( ) ;
35+ builder. prob
36+ }
37+ Some ( init_sol) => {
38+ info ! ( "[OPT] warm starting from provided initial solution" ) ;
39+ let mut prob = jagua_rs:: probs:: spp:: entities:: SPProblem :: new ( instance. clone ( ) ) ;
40+ prob. restore ( init_sol) ;
41+ prob
42+ }
43+ } ;
2444
2545 terminator. new_timeout ( expl_config. time_limit ) ;
26- let mut expl_separator = Separator :: new ( builder . instance , builder . prob , next_rng ( ) , expl_config. separator_config ) ;
46+ let mut expl_separator = Separator :: new ( instance. clone ( ) , start_prob , next_rng ( ) , expl_config. separator_config ) ;
2747 let solutions = exploration_phase (
2848 & instance,
2949 & mut expl_separator,
0 commit comments