test_new_sfu_functions/
test_new_sfu_functions.rs1use math_audio_test_functions::*;
6use ndarray::Array1;
7
8fn main() {
9 println!("Testing newly implemented SFU optimization functions:");
10 println!("{}", "=".repeat(60));
11
12 let x_gramacy = Array1::from_vec(vec![0.548563444114526]);
14 let f_gramacy = gramacy_lee_2012(&x_gramacy);
15 println!("Gramacy & Lee (2012) Function:");
16 println!(" x = [{:.6}]", x_gramacy[0]);
17 println!(" f(x) = {:.6} (expected ≈ -0.869011)", f_gramacy);
18 println!();
19
20 let x_perm0 = Array1::from_vec(vec![1.0, 0.5]); let f_perm0 = perm_0_d_beta(&x_perm0);
23 println!("Perm Function (0, d, β):");
24 println!(" x = [{:.3}, {:.3}]", x_perm0[0], x_perm0[1]);
25 println!(" f(x) = {:.6} (expected ≈ 0.0)", f_perm0);
26 println!();
27
28 let x_sum_sq = Array1::from_vec(vec![0.0, 0.0]);
30 let f_sum_sq = sum_squares(&x_sum_sq);
31 println!("Sum Squares Function:");
32 println!(" x = [{:.1}, {:.1}]", x_sum_sq[0], x_sum_sq[1]);
33 println!(" f(x) = {:.6} (expected = 0.0)", f_sum_sq);
34
35 let x_sum_sq2 = Array1::from_vec(vec![1.0, 1.0]);
37 let f_sum_sq2 = sum_squares(&x_sum_sq2);
38 println!(" x = [{:.1}, {:.1}]", x_sum_sq2[0], x_sum_sq2[1]);
39 println!(" f(x) = {:.6} (1*1² + 2*1² = 3.0)", f_sum_sq2);
40 println!();
41
42 let x_power = Array1::from_vec(vec![2.0, 1.3199]);
44 let f_power = power_sum(&x_power);
45 println!("Power Sum Function:");
46 println!(" x = [{:.4}, {:.4}]", x_power[0], x_power[1]);
47 println!(" f(x) = {:.6}", f_power);
48 println!();
49
50 let x_forrester = Array1::from_vec(vec![0.757249]);
52 let f_forrester = forrester_2008(&x_forrester);
53 println!("Forrester et al. (2008) Function:");
54 println!(" x = [{:.6}]", x_forrester[0]);
55 println!(" f(x) = {:.6} (expected ≈ -6.02074)", f_forrester);
56 println!();
57
58 let x_hart4d = Array1::from_vec(vec![0.1873, 0.1936, 0.5576, 0.2647]);
60 let f_hart4d = hartman_4d(&x_hart4d);
61 println!("Hartmann 4-D Function:");
62 println!(
63 " x = [{:.4}, {:.4}, {:.4}, {:.4}]",
64 x_hart4d[0], x_hart4d[1], x_hart4d[2], x_hart4d[3]
65 );
66 println!(" f(x) = {:.6} (expected ≈ -3.72983)", f_hart4d);
67 println!();
68
69 let x_permd = Array1::from_vec(vec![1.0, 0.5]);
71 let f_permd = perm_d_beta(&x_permd);
72 println!("Perm Function (d, β):");
73 println!(" x = [{:.3}, {:.3}]", x_permd[0], x_permd[1]);
74 println!(" f(x) = {:.6} (expected ≈ 0.0)", f_permd);
75 println!();
76
77 let x_shekel = Array1::from_vec(vec![4.0, 4.0, 4.0, 4.0]);
79 let f_shekel = shekel(&x_shekel);
80 println!("Shekel Function:");
81 println!(
82 " x = [{:.1}, {:.1}, {:.1}, {:.1}]",
83 x_shekel[0], x_shekel[1], x_shekel[2], x_shekel[3]
84 );
85 println!(" f(x) = {:.6} (expected ≈ -10.5364)", f_shekel);
86 println!();
87
88 println!("Testing function metadata:");
90 let metadata = get_function_metadata();
91 for func_name in ["gramacy_lee_2012", "sum_squares", "power_sum", "shekel"] {
92 if let Some(meta) = metadata.get(func_name) {
93 println!(
94 " {}: {} ({} dimensions)",
95 meta.name,
96 if meta.multimodal {
97 "multimodal"
98 } else {
99 "unimodal"
100 },
101 meta.dimensions.len()
102 );
103 }
104 }
105}