Skip to main content

mono_objective_experiment/
mono_objective_experiment.rs

1use 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}