mono_objective_experiment/
mono_objective_experiment.rs1use roma_lib::algorithms::{
2 GeneticAlgorithmParameters,
3 HillClimbingParameters,
4 PSOParameters,
5 SimulatedAnnealingParameters,
6 TerminationCriteria,
7 TerminationCriterion,
8};
9use roma_lib::experiment::Experiment;
10use roma_lib::operator::{BinaryTournamentSelection, BitFlipMutation, SinglePointCrossover};
11use roma_lib::problem::KnapsackBuilder;
12
13fn main() {
14 let problem = KnapsackBuilder::new()
15 .with_capacity(150.0)
16 .add_item(1.0, 2.0)
17 .add_item(1.0, 2.0)
18 .add_item(2.0, 6.0)
19 .add_item(2.0, 6.5)
20 .add_item(3.0, 7.0)
21 .add_item(10.0, 20.0)
22 .add_item(20.0, 30.0)
23 .add_item(30.0, 60.0)
24 .add_item(35.0, 65.0)
25 .add_item(45.0, 100.0)
26 .add_item(55.0, 120.0)
27 .add_item(75.0, 211.0)
28 .add_item(75.0, 211.0)
29 .add_item(80.0, 160.0)
30 .add_item(90.0, 301.0)
31 .add_item(150.0, 301.0)
32 .build();
33
34 let hill_climbing_case = HillClimbingParameters::new(
35 BitFlipMutation::new(),
36 0.12,
37 TerminationCriteria::new(vec![TerminationCriterion::MaxIterations(180)]),
38 );
39
40 let genetic_algorithm_case = GeneticAlgorithmParameters::new(
41 80,
42 0.90,
43 0.06,
44 SinglePointCrossover::new(),
45 BitFlipMutation::new(),
46 BinaryTournamentSelection::new(),
47 TerminationCriteria::new(vec![TerminationCriterion::MaxIterations(60)]),
48 )
49 .with_elite_size(1)
50 .with_threads(4);
51
52 let simulated_annealing_case = SimulatedAnnealingParameters::new(
53 BitFlipMutation::new(),
54 0.10,
55 45.0,
56 0.985,
57 TerminationCriteria::new(vec![TerminationCriterion::MaxIterations(220)]),
58 )
59 .with_seed(777);
60
61 let pso_case = PSOParameters::new(
62 50,
63 0.72,
64 1.49,
65 1.49,
66 TerminationCriteria::new(vec![TerminationCriterion::MaxIterations(120)]),
67 )
68 .with_velocity_clamp(4.0)
69 .with_seed(999);
70
71 let report = Experiment::new(problem)
72 .with_runs(24)
73 .add_case(hill_climbing_case)
74 .add_case(genetic_algorithm_case)
75 .add_case(simulated_annealing_case)
76 .add_case(pso_case)
77 .execute();
78
79 match report {
80 Ok(report) => println!("{}", report.to_text_table()),
81 Err(error) => eprintln!("Experiment execution failed: {}", error),
82 }
83}