2024-11-26 00:32:50 +00:00
|
|
|
use nalgebra::DMatrix;
|
|
|
|
|
|
|
|
use dyna3::engine::{Q, point, realize_gram, sphere, PartialMatrix};
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
let gram = {
|
|
|
|
let mut gram_to_be = PartialMatrix::new();
|
|
|
|
for j in 0..2 {
|
|
|
|
for k in j..2 {
|
|
|
|
gram_to_be.push_sym(j, k, if (j, k) == (1, 1) { 1.0 } else { 0.0 });
|
|
|
|
}
|
|
|
|
}
|
|
|
|
gram_to_be
|
|
|
|
};
|
|
|
|
let guess = DMatrix::from_columns(&[
|
|
|
|
point(0.0, 0.0, 2.0),
|
|
|
|
sphere(0.0, 0.0, 0.0, 1.0)
|
|
|
|
]);
|
|
|
|
let frozen = [(3, 0)];
|
|
|
|
println!();
|
2024-12-06 22:35:30 +00:00
|
|
|
let (config, _, success, history) = realize_gram(
|
2024-11-26 00:32:50 +00:00
|
|
|
&gram, guess, &frozen,
|
|
|
|
1.0e-12, 0.5, 0.9, 1.1, 200, 110
|
|
|
|
);
|
|
|
|
print!("\nCompleted Gram matrix:{}", config.tr_mul(&*Q) * &config);
|
|
|
|
print!("Configuration:{}", config);
|
|
|
|
if success {
|
|
|
|
println!("Target accuracy achieved!");
|
|
|
|
} else {
|
|
|
|
println!("Failed to reach target accuracy");
|
|
|
|
}
|
|
|
|
println!("Steps: {}", history.scaled_loss.len() - 1);
|
|
|
|
println!("Loss: {}", history.scaled_loss.last().unwrap());
|
|
|
|
println!("\nStep │ Loss\n─────┼────────────────────────────────");
|
|
|
|
for (step, scaled_loss) in history.scaled_loss.into_iter().enumerate() {
|
|
|
|
println!("{:<4} │ {}", step, scaled_loss);
|
|
|
|
}
|
|
|
|
}
|