Skip to content

Commit 011b676

Browse files
authored
Merge pull request #207 from plaans/feat/views
feat(solver): Provide variable views
2 parents efac01c + 08bd402 commit 011b676

File tree

54 files changed

+573
-499
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+573
-499
lines changed

aries_fzn/src/aries/constraint/abs.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ impl Abs {
3232

3333
impl<Lbl: Label> Post<Lbl> for Abs {
3434
fn post(&self, model: &mut Model<Lbl>) {
35-
let (lb, ub) = model.state.bounds(self.a.into());
35+
let (lb, ub) = model.state.bounds(self.a);
3636

3737
let minus_a = model.state.new_var(-ub, -lb);
3838
let minus_a = IVar::new(minus_a);

examples/knapsack/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#![allow(clippy::needless_range_loop)]
22

33
use aries::core::{IntCst, Lit, INT_CST_MAX};
4-
use aries::model::extensions::AssignmentExt;
4+
use aries::model::extensions::DomainsExt;
55
use aries::model::lang::linear::LinearSum;
66
use aries::model::lang::{IVar, Rational};
77
use aries::solver::search::combinators::WithGeomRestart;

examples/scheduling/src/main.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ mod search;
55
use crate::problem::{Encoding, OperationId, Problem, ProblemKind};
66
use crate::search::{SearchStrategy, Solver, Var};
77
use anyhow::*;
8-
use aries::model::extensions::AssignmentExt;
8+
use aries::model::extensions::DomainsExt;
99
use aries::model::lang::IVar;
1010
use aries::solver::parallel::{Solution, SolverResult};
1111
use std::fmt::Write;
@@ -92,7 +92,7 @@ fn solve(kind: ProblemKind, instance: &str, opt: &Opt) {
9292

9393
let result = solver.minimize_with(
9494
makespan,
95-
|s| println!("New solution with makespan: {}", s.domain_of(makespan).0),
95+
|s| println!("New solution with makespan: {}", s.bounds(makespan).0),
9696
None,
9797
deadline,
9898
);

examples/scheduling/src/search/greedy.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use crate::Var;
66
use aries::backtrack::{Backtrack, DecLvl, DecisionLevelTracker};
77
use aries::core::state::{OptDomain, Term};
88
use aries::core::{IntCst, Lit, VarRef};
9-
use aries::model::extensions::AssignmentExt;
9+
use aries::model::extensions::DomainsExt;
1010
use aries::solver::search::{Decision, SearchControl};
1111
use aries::solver::stats::Stats;
1212

examples/smt/tests/smt.rs

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use aries::backtrack::Backtrack;
22
use aries::core::state::{OptDomain, Term};
33
use aries::core::Lit;
4-
use aries::model::extensions::AssignmentExt;
4+
use aries::model::extensions::DomainsExt;
55
use aries::model::lang::alternative::Alternative;
66
use aries::model::lang::expr::*;
77
use aries::model::lang::max::{EqMax, EqMin};
@@ -124,7 +124,7 @@ fn int_bounds() {
124124
solver.enforce_all(constraints, []);
125125
assert!(solver.propagate_and_backtrack_to_consistent().is_ok());
126126
let check_dom = |v, lb, ub| {
127-
assert_eq!(solver.model.domain_of(v), (lb, ub));
127+
assert_eq!(solver.model.bounds(v), (lb, ub));
128128
};
129129
check_dom(a, 2, 8);
130130
check_dom(b, 2, 8);
@@ -152,13 +152,13 @@ fn bools_as_ints() {
152152

153153
assert!(solver.propagate_and_backtrack_to_consistent().is_ok());
154154
assert_eq!(solver.model.boolean_value_of(a), None);
155-
assert_eq!(solver.model.domain_of(ia), (0, 1));
155+
assert_eq!(solver.model.bounds(ia), (0, 1));
156156
assert_eq!(solver.model.boolean_value_of(a), None);
157-
assert_eq!(solver.model.domain_of(ia), (0, 1));
157+
assert_eq!(solver.model.bounds(ia), (0, 1));
158158
assert_eq!(solver.model.boolean_value_of(a), None);
159-
assert_eq!(solver.model.domain_of(ia), (0, 1));
159+
assert_eq!(solver.model.bounds(ia), (0, 1));
160160
assert_eq!(solver.model.boolean_value_of(a), None);
161-
assert_eq!(solver.model.domain_of(ia), (0, 1));
161+
assert_eq!(solver.model.bounds(ia), (0, 1));
162162

163163
solver.enforce(a.true_lit(), []);
164164
solver.enforce(b.false_lit(), []);
@@ -167,13 +167,13 @@ fn bools_as_ints() {
167167

168168
solver.propagate().unwrap();
169169
assert_eq!(solver.model.boolean_value_of(a), Some(true));
170-
assert_eq!(solver.model.domain_of(ia), (1, 1));
170+
assert_eq!(solver.model.bounds(ia), (1, 1));
171171
assert_eq!(solver.model.boolean_value_of(b), Some(false));
172-
assert_eq!(solver.model.domain_of(ib), (0, 0));
172+
assert_eq!(solver.model.bounds(ib), (0, 0));
173173
assert_eq!(solver.model.boolean_value_of(c), Some(true));
174-
assert_eq!(solver.model.domain_of(ic), (1, 1));
174+
assert_eq!(solver.model.bounds(ic), (1, 1));
175175
assert_eq!(solver.model.boolean_value_of(d), Some(false));
176-
assert_eq!(solver.model.domain_of(id), (0, 0));
176+
assert_eq!(solver.model.bounds(id), (0, 0));
177177
}
178178

179179
#[test]
@@ -186,26 +186,26 @@ fn ints_and_bools() {
186186
let mut solver = Solver::new(model);
187187

188188
assert!(solver.propagate_and_backtrack_to_consistent().is_ok());
189-
assert_eq!(solver.model.domain_of(i), (-10, 10));
190-
assert_eq!(solver.model.domain_of(ia), (0, 1));
189+
assert_eq!(solver.model.bounds(i), (-10, 10));
190+
assert_eq!(solver.model.bounds(ia), (0, 1));
191191
assert_eq!(solver.model.boolean_value_of(a), None);
192192

193193
solver.enforce(leq(i, ia), []);
194194
assert!(solver.propagate_and_backtrack_to_consistent().is_ok());
195-
assert_eq!(solver.model.domain_of(i), (-10, 1));
196-
assert_eq!(solver.model.domain_of(ia), (0, 1));
195+
assert_eq!(solver.model.bounds(i), (-10, 1));
196+
assert_eq!(solver.model.bounds(ia), (0, 1));
197197
assert_eq!(solver.model.boolean_value_of(a), None);
198198

199199
solver.enforce(gt(ia, i), []);
200200
assert!(solver.propagate_and_backtrack_to_consistent().is_ok());
201-
assert_eq!(solver.model.domain_of(i), (-10, 0));
202-
assert_eq!(solver.model.domain_of(ia), (0, 1));
201+
assert_eq!(solver.model.bounds(i), (-10, 0));
202+
assert_eq!(solver.model.bounds(ia), (0, 1));
203203
assert_eq!(solver.model.boolean_value_of(a), None);
204204

205205
solver.enforce(geq(i, 0), []);
206206
assert!(solver.propagate_and_backtrack_to_consistent().is_ok());
207-
assert_eq!(solver.model.domain_of(i), (0, 0));
208-
assert_eq!(solver.model.domain_of(ia), (1, 1));
207+
assert_eq!(solver.model.bounds(i), (0, 0));
208+
assert_eq!(solver.model.bounds(ia), (1, 1));
209209
assert_eq!(solver.model.boolean_value_of(a), Some(true));
210210
}
211211

planning/engine/src/repair.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use std::{
1212
use aries::{
1313
core::{INT_CST_MAX, Lit, literals::ConjunctionBuilder},
1414
model::{
15-
extensions::AssignmentExt,
15+
extensions::DomainsExt,
1616
lang::{
1717
FAtom, IAtom,
1818
expr::{and, eq, neq},

planning/grpc/server/src/bin/server.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use anyhow::{bail, ensure, Context, Error};
2-
use aries::model::extensions::SavedAssignment;
2+
3+
use aries::core::state::Domains;
34
use aries_grpc_server::chronicles::problem_to_chronicles;
45
use aries_grpc_server::serialize::{engine, serialize_plan};
56
use aries_grpc_server::warm_up::plan_from_option_upf;
@@ -196,7 +197,7 @@ fn solve_blocking(
196197
let warm_up_plan = plan_from_option_upf(warm_up_plan, &base_problem)?;
197198

198199
// callback that will be invoked each time an intermediate solution is found
199-
let on_new_solution = |pb: &FiniteProblem, ass: Arc<SavedAssignment>| {
200+
let on_new_solution = |pb: &FiniteProblem, ass: Arc<Domains>| {
200201
let plan = serialize_plan(&problem, pb, &ass);
201202
match plan {
202203
Ok(plan) => on_new_sol(plan),

planning/grpc/server/src/serialize.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use anyhow::{ensure, Context, Result};
22
use aries::core::state::Domains;
3-
use aries::model::extensions::AssignmentExt;
3+
use aries::model::extensions::DomainsExt;
44
use aries::model::lang::{Atom, FAtom};
55
use aries_planners::encoding::ChronicleId;
66
use aries_planners::fmt::{extract_plan_actions, format_atom};

planning/planners/src/encode.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use crate::Model;
1111
use anyhow::{Context, Result};
1212
use aries::core::state::Conflict;
1313
use aries::core::*;
14-
use aries::model::extensions::{AssignmentExt, Shaped};
14+
use aries::model::extensions::{DomainsExt, Shaped};
1515
use aries::model::lang::linear::LinearSum;
1616
use aries::model::lang::mul::EqVarMulLit;
1717
use aries::model::lang::{expr::*, IVar};

planning/planners/src/encode/numeric.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use aries::backtrack::Backtrack;
77
use aries::backtrack::DecLvl;
88
use aries::core::state::Conflict;
99
use aries::core::*;
10-
use aries::model::extensions::AssignmentExt;
10+
use aries::model::extensions::DomainsExt;
1111
use aries::model::lang::FAtom;
1212
use aries::model::lang::{expr::*, Atom, Type};
1313
use aries_planning::chronicles::*;
@@ -100,7 +100,7 @@ fn lit_to_ivar(model: &mut Model, lit: Lit) -> IVar {
100100
IVar::ONE
101101
} else if model.entails(!lit) {
102102
IVar::ZERO
103-
} else if model.domain_of(lit.variable()) == (0, 1) {
103+
} else if model.bounds(lit.variable()) == (0, 1) {
104104
IVar::new(lit.variable())
105105
} else {
106106
let lbl = model
@@ -130,8 +130,8 @@ pub fn iatom_mul_lit(model: &mut Model, atom: IAtom, lit: Lit) -> LinearSum {
130130
}
131131
} else {
132132
// Real variable
133-
let lb = model.lower_bound(atom.var);
134-
let ub = model.upper_bound(atom.var);
133+
let lb = model.lb(atom.var);
134+
let ub = model.ub(atom.var);
135135
let lbl = model
136136
.get_label(atom.var)
137137
.unwrap_or(&(Container::Base / VarType::Reification))

0 commit comments

Comments
 (0)