Refactor for clean root module and documentation
This commit is contained in:
committed by
Guillaume P
parent
eb3c60678c
commit
5db1b7d4df
@@ -1,75 +1,6 @@
|
||||
use cp_sat::builder::CpModelBuilder;
|
||||
use cp_sat::proto::CpSolverStatus;
|
||||
|
||||
#[test]
|
||||
fn or() {
|
||||
let mut model = CpModelBuilder::default();
|
||||
let x = model.new_bool_var();
|
||||
let y = model.new_bool_var();
|
||||
model.add_or([x, y]);
|
||||
let response = model.solve();
|
||||
assert_eq!(response.status(), CpSolverStatus::Optimal);
|
||||
assert!(x.solution_value(&response) || y.solution_value(&response));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn and() {
|
||||
let mut model = CpModelBuilder::default();
|
||||
let x = model.new_bool_var();
|
||||
let y = model.new_bool_var();
|
||||
model.add_and([x, y]);
|
||||
let response = model.solve();
|
||||
assert_eq!(response.status(), CpSolverStatus::Optimal);
|
||||
assert!(x.solution_value(&response));
|
||||
assert!(y.solution_value(&response));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn at_most_one() {
|
||||
let mut model = CpModelBuilder::default();
|
||||
let vars: Vec<_> = (0..10).map(|_| model.new_bool_var()).collect();
|
||||
model.add_at_most_one(vars.iter().copied());
|
||||
let response = model.solve();
|
||||
assert_eq!(response.status(), CpSolverStatus::Optimal);
|
||||
assert!(
|
||||
vars.iter()
|
||||
.map(|v| v.solution_value(&response) as u32)
|
||||
.sum::<u32>()
|
||||
<= 1
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn exactly_one() {
|
||||
let mut model = CpModelBuilder::default();
|
||||
let vars: Vec<_> = (0..10).map(|_| model.new_bool_var()).collect();
|
||||
model.add_exactly_one(vars.iter().copied());
|
||||
let response = model.solve();
|
||||
assert_eq!(response.status(), CpSolverStatus::Optimal);
|
||||
assert!(
|
||||
vars.iter()
|
||||
.map(|v| v.solution_value(&response) as u32)
|
||||
.sum::<u32>()
|
||||
== 1
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn xor() {
|
||||
let mut model = CpModelBuilder::default();
|
||||
let vars: Vec<_> = (0..10).map(|_| model.new_bool_var()).collect();
|
||||
model.add_xor(vars.iter().copied());
|
||||
let response = model.solve();
|
||||
assert_eq!(response.status(), CpSolverStatus::Optimal);
|
||||
assert!(
|
||||
vars.iter()
|
||||
.map(|v| v.solution_value(&response) as u32)
|
||||
.sum::<u32>()
|
||||
% 2
|
||||
== 1
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn not_infeasible() {
|
||||
let mut model = CpModelBuilder::default();
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
use cp_sat::builder::CpModelBuilder;
|
||||
use cp_sat::proto::CpSolverStatus;
|
||||
|
||||
#[test]
|
||||
fn min() {
|
||||
let mut model = CpModelBuilder::default();
|
||||
let x = model.new_int_var([(0, 10)]);
|
||||
let y = model.new_int_var([(5, 15)]);
|
||||
let m = model.new_int_var([(-100, 100)]);
|
||||
model.add_min_eq(m, [x, y]);
|
||||
model.maximize(m);
|
||||
|
||||
println!("{:#?}", model.proto());
|
||||
let response = model.solve();
|
||||
assert_eq!(response.status(), CpSolverStatus::Optimal);
|
||||
assert_eq!(10., response.objective_value);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn max() {
|
||||
let mut model = CpModelBuilder::default();
|
||||
let x = model.new_int_var([(0, 10)]);
|
||||
let y = model.new_int_var([(5, 15)]);
|
||||
let m = model.new_int_var([(-100, 100)]);
|
||||
model.add_max_eq(m, [x, y]);
|
||||
model.minimize(m);
|
||||
|
||||
println!("{:#?}", model.proto());
|
||||
let response = model.solve();
|
||||
assert_eq!(response.status(), CpSolverStatus::Optimal);
|
||||
assert_eq!(5., response.objective_value);
|
||||
}
|
||||
+26
-1
@@ -1,5 +1,5 @@
|
||||
use cp_sat::builder::CpModelBuilder;
|
||||
use cp_sat::proto::CpSolverStatus;
|
||||
use cp_sat::proto::{CpSolverStatus, SatParameters};
|
||||
|
||||
#[test]
|
||||
fn presentation_problem() {
|
||||
@@ -57,3 +57,28 @@ fn solving_a_cp_problem() {
|
||||
assert!(3 * x_val - 5 * y_val + 7 * z_val <= 45);
|
||||
assert!(5 * x_val + 2 * y_val - 6 * z_val <= 37);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn solve_with_time_limit_sample_sat() {
|
||||
let mut model = CpModelBuilder::default();
|
||||
let domain = [(0, 2)];
|
||||
let x = model.new_int_var_with_name(domain, "x");
|
||||
let y = model.new_int_var_with_name(domain, "y");
|
||||
let z = model.new_int_var_with_name(domain, "z");
|
||||
|
||||
model.add_ne(x, y);
|
||||
|
||||
let mut params = SatParameters::default();
|
||||
params.max_time_in_seconds = Some(10.);
|
||||
|
||||
let response = model.solve_with_parameters(¶ms);
|
||||
println!("{:?}", response);
|
||||
|
||||
assert_eq!(response.status(), CpSolverStatus::Optimal);
|
||||
let x_val = x.solution_value(&response);
|
||||
let y_val = y.solution_value(&response);
|
||||
let z_val = z.solution_value(&response);
|
||||
println!("x = {}", x_val);
|
||||
println!("y = {}", y_val);
|
||||
println!("z = {}", z_val);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user