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); }
// test strict static void test4() { opt::model_based_opt mbo; vector<var> vars; 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_lt); add_ineq(mbo, x, 1, z, -1, 0, opt::t_lt); add_ineq(mbo, y, 1, u, -1, 0, opt::t_le); add_ineq(mbo, z, 1, u, -1, 1, opt::t_le); add_ineq(mbo, u, 1, -6, opt::t_le); vars.reset(); vars.push_back(var(x, rational(2))); mbo.set_objective(vars, rational(0)); opt::inf_eps value = mbo.maximize(); std::cout << value << "\n"; std::cout << "x: " << mbo.get_value(x) << "\n"; std::cout << "y: " << mbo.get_value(y) << "\n"; std::cout << "z: " << mbo.get_value(z) << "\n"; std::cout << "u: " << mbo.get_value(u) << "\n"; }
void fuzz_round(unsigned& num_rounds, unsigned lvl) { unsigned num_rounds2 = 0; lbool is_sat = l_true; std::cout << "(push)\n"; ctx.push(); unsigned r = 0; while (is_sat == l_true && r <= num_rounds + 1) { add_ineq(); std::cout << "(check-sat)\n"; is_sat = ctx.check(); if (lvl > 0 && is_sat == l_true) { fuzz_round(num_rounds2, lvl-1); } ++r; } num_rounds = r; std::cout << "; number of rounds: " << num_rounds << " level: " << lvl << "\n"; ctx.pop(1); std::cout << "(pop)\n"; }
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); }