simple_model/
simple_model.rs1use soplex_rs::{Model, Status};
2
3fn main() {
4 let mut lp = Model::new();
5 let col1 = lp.add_col(vec![], 1.0, 0.0, 5.0);
6 let _col2 = lp.add_col(vec![], 1.0, 0.0, 10.0);
7 let row = lp.add_row(vec![1.0, 1.0], 1.0, 5.0);
8 assert_eq!(lp.num_cols(), 2);
9 assert_eq!(lp.num_rows(), 1);
10
11 let lp = lp.optimize();
12 let result = lp.status();
13 assert_eq!(result, Status::Optimal);
14 assert!((lp.obj_val() - 5.0).abs() < 1e-6);
15 let dual_sol = lp.dual_solution();
16 assert_eq!(dual_sol.len(), 1);
17 assert!((dual_sol[0] - 1.0).abs() < 1e-6);
18
19 let mut lp = Model::from(lp);
20 lp.remove_row(row);
21 assert_eq!(lp.num_rows(), 0);
22 let lp = lp.optimize();
23 let new_result = lp.status();
24 assert_eq!(new_result, Status::Optimal);
25 assert!((lp.obj_val() - 15.0).abs() < 1e-6);
26 let primal_sol = lp.primal_solution();
27 assert_eq!(primal_sol.len(), 2);
28 assert!((primal_sol[0] - 5.0).abs() < 1e-6);
29 assert!((primal_sol[1] - 10.0).abs() < 1e-6);
30
31 let mut lp = Model::from(lp);
32 lp.remove_col(col1);
33 assert_eq!(lp.num_cols(), 1);
34 let lp = lp.optimize();
35 let new_result = lp.status();
36 assert_eq!(new_result, Status::Optimal);
37 assert!((lp.obj_val() - 10.0).abs() < 1e-6);
38
39 assert!(lp.solving_time() >= 0.0);
40}