pub fn ridge(x: &Array1<f64>) -> f64Expand description
Ridge function - challenging unimodal function Global minimum: f(x) = 0 at x = (0, 0, …, 0) Bounds: x_i in [-5, 5]
Examples found in repository?
examples/test_additional_functions.rs (line 68)
8fn main() {
9 println!("Testing additional optimization functions:");
10 println!("{}", "=".repeat(60));
11
12 // Test Xin-She Yang N.1 Function - 2D
13 let x_xsy1 = Array1::from_vec(vec![0.0, 0.0]);
14 let f_xsy1 = xin_she_yang_n1(&x_xsy1);
15 println!("Xin-She Yang N.1 Function:");
16 println!(" x = [{:.1}, {:.1}]", x_xsy1[0], x_xsy1[1]);
17 println!(" f(x) = {:.6} (expected = 0.0)", f_xsy1);
18 println!();
19
20 // Test Discus Function - 2D
21 let x_discus = Array1::from_vec(vec![0.0, 0.0]);
22 let f_discus = discus(&x_discus);
23 println!("Discus Function:");
24 println!(" x = [{:.1}, {:.1}]", x_discus[0], x_discus[1]);
25 println!(" f(x) = {:.6} (expected = 0.0)", f_discus);
26
27 // Test with non-zero to see ill-conditioning
28 let x_discus2 = Array1::from_vec(vec![0.1, 0.1]);
29 let f_discus2 = discus(&x_discus2);
30 println!(" x = [{:.1}, {:.1}]", x_discus2[0], x_discus2[1]);
31 println!(" f(x) = {:.6} (1e6*0.1² + 0.1² = 10000.01)", f_discus2);
32 println!();
33
34 // Test Elliptic Function - 2D
35 let x_elliptic = Array1::from_vec(vec![0.0, 0.0]);
36 let f_elliptic = elliptic(&x_elliptic);
37 println!("Elliptic Function:");
38 println!(" x = [{:.1}, {:.1}]", x_elliptic[0], x_elliptic[1]);
39 println!(" f(x) = {:.6} (expected = 0.0)", f_elliptic);
40 println!();
41
42 // Test Cigar Function - 2D
43 let x_cigar = Array1::from_vec(vec![0.0, 0.0]);
44 let f_cigar = cigar(&x_cigar);
45 println!("Cigar Function:");
46 println!(" x = [{:.1}, {:.1}]", x_cigar[0], x_cigar[1]);
47 println!(" f(x) = {:.6} (expected = 0.0)", f_cigar);
48 println!();
49
50 // Test Tablet Function - 2D
51 let x_tablet = Array1::from_vec(vec![0.0, 0.0]);
52 let f_tablet = tablet(&x_tablet);
53 println!("Tablet Function:");
54 println!(" x = [{:.1}, {:.1}]", x_tablet[0], x_tablet[1]);
55 println!(" f(x) = {:.6} (expected = 0.0)", f_tablet);
56 println!();
57
58 // Test Different Powers Function - 2D
59 let x_diffpow = Array1::from_vec(vec![0.0, 0.0]);
60 let f_diffpow = different_powers(&x_diffpow);
61 println!("Different Powers Function:");
62 println!(" x = [{:.1}, {:.1}]", x_diffpow[0], x_diffpow[1]);
63 println!(" f(x) = {:.6} (expected = 0.0)", f_diffpow);
64 println!();
65
66 // Test Ridge Function - 2D
67 let x_ridge = Array1::from_vec(vec![0.0, 0.0]);
68 let f_ridge = ridge(&x_ridge);
69 println!("Ridge Function:");
70 println!(" x = [{:.1}, {:.1}]", x_ridge[0], x_ridge[1]);
71 println!(" f(x) = {:.6} (expected = 0.0)", f_ridge);
72 println!();
73
74 // Test Sharp Ridge Function - 2D
75 let x_sharpridge = Array1::from_vec(vec![0.0, 0.0]);
76 let f_sharpridge = sharp_ridge(&x_sharpridge);
77 println!("Sharp Ridge Function:");
78 println!(" x = [{:.1}, {:.1}]", x_sharpridge[0], x_sharpridge[1]);
79 println!(" f(x) = {:.6} (expected = 0.0)", f_sharpridge);
80 println!();
81
82 // Test Katsuura Function - 2D
83 let x_katsuura = Array1::from_vec(vec![0.0, 0.0]);
84 let f_katsuura = katsuura(&x_katsuura);
85 println!("Katsuura Function:");
86 println!(" x = [{:.1}, {:.1}]", x_katsuura[0], x_katsuura[1]);
87 println!(" f(x) = {:.6} (expected ≈ 1.0)", f_katsuura);
88 println!();
89
90 // Test HappyCat Function - 2D
91 let x_happycat = Array1::from_vec(vec![-1.0, -1.0]);
92 let f_happycat = happycat(&x_happycat);
93 println!("HappyCat Function:");
94 println!(" x = [{:.1}, {:.1}]", x_happycat[0], x_happycat[1]);
95 println!(" f(x) = {:.6} (expected = 0.0)", f_happycat);
96 println!();
97
98 // Test Expanded Griewank-Rosenbrock Function - 2D
99 let x_egr = Array1::from_vec(vec![1.0, 1.0]);
100 let f_egr = expanded_griewank_rosenbrock(&x_egr);
101 println!("Expanded Griewank-Rosenbrock Function:");
102 println!(" x = [{:.1}, {:.1}]", x_egr[0], x_egr[1]);
103 println!(" f(x) = {:.6} (expected ≈ 0.0)", f_egr);
104 println!();
105
106 // Test Alternative Gramacy & Lee Function - 1D
107 let x_gramacy_alt = Array1::from_vec(vec![0.3]);
108 let f_gramacy_alt = gramacy_lee_function(&x_gramacy_alt);
109 println!("Alternative Gramacy & Lee Function:");
110 println!(" x = [{:.1}]", x_gramacy_alt[0]);
111 println!(" f(x) = {:.6}", f_gramacy_alt);
112 println!();
113
114 // Test function metadata retrieval for new functions
115 println!("Testing function metadata for additional functions:");
116 let metadata = get_function_metadata();
117
118 let new_functions = [
119 "xin_she_yang_n1",
120 "discus",
121 "elliptic",
122 "cigar",
123 "tablet",
124 "different_powers",
125 "ridge",
126 "sharp_ridge",
127 "katsuura",
128 "happycat",
129 "expanded_griewank_rosenbrock",
130 ];
131
132 for func_name in &new_functions {
133 if let Some(meta) = metadata.get(*func_name) {
134 println!(
135 " {}: {} ({} dimensions available)",
136 meta.name,
137 if meta.multimodal {
138 "multimodal"
139 } else {
140 "unimodal"
141 },
142 meta.dimensions.len()
143 );
144 }
145 }
146
147 println!("\nTotal functions in metadata: {}", metadata.len());
148}