()
| 49 | #[test] |
| 50 | #[allow(non_snake_case)] |
| 51 | fn test_GD_quadratic_makes_progress() { |
| 52 | let x = seq(0, 10, 0.1); |
| 53 | let y = x.fmap(|t| P_TRUE[0] * t.powi(2) + P_TRUE[1] * t + P_TRUE[2]); |
| 54 | let data = hstack!(x, y); |
| 55 | let p_init = [1f64, 1f64, 1f64]; |
| 56 | |
| 57 | let mut opt = Optimizer::new(data, quadratic); |
| 58 | let p = opt |
| 59 | .set_init_param(p_init.to_vec()) |
| 60 | .set_max_iter(1000) |
| 61 | .set_method(GradientDescent) |
| 62 | .set_lr(1e-6) |
| 63 | .optimize(); |
| 64 | |
| 65 | let init_total: f64 = (0..3).map(|i| (p_init[i] - P_TRUE[i]).abs()).sum(); |
| 66 | let final_total: f64 = (0..3).map(|i| (p[i] - P_TRUE[i]).abs()).sum(); |
| 67 | assert!(final_total < init_total); |
| 68 | for i in [1usize, 2] { |
| 69 | assert!((p[i] - P_TRUE[i]).abs() < (p_init[i] - P_TRUE[i]).abs()); |
| 70 | } |
| 71 | } |
| 72 | |
| 73 | #[test] |
| 74 | #[allow(non_snake_case)] |
nothing calls this directly
no test coverage detected