3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-23 17:15:31 +00:00
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2016-05-20 13:45:50 -07:00
parent d12efb6097
commit 339cd6e537
8 changed files with 317 additions and 19 deletions

View file

@ -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();
}