mirror of
https://github.com/Z3Prover/z3
synced 2025-04-23 17:15:31 +00:00
mbo
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
d12efb6097
commit
339cd6e537
8 changed files with 317 additions and 19 deletions
|
@ -216,6 +216,77 @@ static void test4() {
|
|||
std::cout << "u: " << mbo.get_value(u) << "\n";
|
||||
}
|
||||
|
||||
static void test5() {
|
||||
opt::model_based_opt mbo;
|
||||
unsigned x = mbo.add_var(rational(2));
|
||||
unsigned y = mbo.add_var(rational(3));
|
||||
unsigned z = mbo.add_var(rational(4));
|
||||
unsigned u = mbo.add_var(rational(5));
|
||||
|
||||
add_ineq(mbo, x, 1, y, -1, 0, opt::t_le);
|
||||
add_ineq(mbo, x, 1, z, -1, 0, opt::t_le);
|
||||
add_ineq(mbo, y, 1, u, -1, 0, opt::t_le);
|
||||
add_ineq(mbo, z, 1, u, -1, 1, opt::t_le);
|
||||
|
||||
unsigned vars[2] = { y, z };
|
||||
mbo.project(1, vars);
|
||||
mbo.display(std::cout);
|
||||
|
||||
mbo.project(1, vars);
|
||||
mbo.display(std::cout);
|
||||
|
||||
mbo.project(1, vars+1);
|
||||
mbo.display(std::cout);
|
||||
|
||||
vector<opt::model_based_opt::row> rows;
|
||||
mbo.get_live_rows(rows);
|
||||
}
|
||||
|
||||
|
||||
static void test6() {
|
||||
opt::model_based_opt mbo;
|
||||
unsigned x0 = mbo.add_var(rational(1));
|
||||
unsigned x = mbo.add_var(rational(2));
|
||||
unsigned y = mbo.add_var(rational(3));
|
||||
unsigned z = mbo.add_var(rational(4));
|
||||
unsigned u = mbo.add_var(rational(5));
|
||||
unsigned v = mbo.add_var(rational(6));
|
||||
unsigned w = mbo.add_var(rational(6));
|
||||
|
||||
add_ineq(mbo, x0, 1, y, -1, 0, opt::t_le);
|
||||
add_ineq(mbo, x, 1, y, -1, 0, opt::t_le);
|
||||
add_ineq(mbo, y, 1, u, -1, 0, opt::t_le);
|
||||
add_ineq(mbo, y, 1, z, -1, 1, opt::t_le);
|
||||
add_ineq(mbo, y, 1, v, -1, 1, opt::t_le);
|
||||
add_ineq(mbo, y, 1, w, -1, 1, opt::t_le);
|
||||
|
||||
mbo.display(std::cout);
|
||||
mbo.project(1, &y);
|
||||
mbo.display(std::cout);
|
||||
}
|
||||
|
||||
static void test7() {
|
||||
opt::model_based_opt mbo;
|
||||
unsigned x0 = mbo.add_var(rational(2));
|
||||
unsigned x = mbo.add_var(rational(1));
|
||||
unsigned y = mbo.add_var(rational(3));
|
||||
unsigned z = mbo.add_var(rational(4));
|
||||
unsigned u = mbo.add_var(rational(5));
|
||||
unsigned v = mbo.add_var(rational(6));
|
||||
unsigned w = mbo.add_var(rational(6));
|
||||
|
||||
add_ineq(mbo, x0, 1, y, -1, 0, opt::t_le);
|
||||
add_ineq(mbo, x, 1, y, -1, 0, opt::t_lt);
|
||||
add_ineq(mbo, y, 1, u, -1, 0, opt::t_le);
|
||||
add_ineq(mbo, y, 1, z, -1, 1, opt::t_le);
|
||||
add_ineq(mbo, y, 1, v, -1, 1, opt::t_le);
|
||||
add_ineq(mbo, y, 1, w, -1, 1, opt::t_lt);
|
||||
|
||||
mbo.display(std::cout);
|
||||
mbo.project(1, &y);
|
||||
mbo.display(std::cout);
|
||||
}
|
||||
|
||||
// test with mix of upper and lower bounds
|
||||
|
||||
void tst_model_based_opt() {
|
||||
|
@ -224,4 +295,8 @@ void tst_model_based_opt() {
|
|||
test2();
|
||||
test3();
|
||||
test4();
|
||||
test5();
|
||||
test6();
|
||||
test7();
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue