当前位置: 首页>>代码示例>>C++>>正文


C++ config::get_vis_cell方法代码示例

本文整理汇总了C++中config::get_vis_cell方法的典型用法代码示例。如果您正苦于以下问题:C++ config::get_vis_cell方法的具体用法?C++ config::get_vis_cell怎么用?C++ config::get_vis_cell使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在config的用法示例。


在下文中一共展示了config::get_vis_cell方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: process_main

int process_main(OpenSMTContext & ctx,
                 config const & config,
                 vector<Enode *> const & costs,
                 unordered_map<string, Enode*> var_map,
                 vector<Enode *> const & ctrs_X) {
    // minimize cost_i(x)
    // satisfying ctr_j(x)
    //
    // exists x. ctr(x) /\ forall y. [ctr(y) -> (cost(x) <= cost(y))]
    // exists x. ctr(x) /\ forall y. [!ctr(y) \/ (cost(x) <= cost(y))]
    // exists x, min_1, ..., min_n.
    //              /\ cost_i(x) = min_i
    //               i
    //
    //              /\ ctr_j(x)
    //               j
    //
    //              /\ forall y. [\/ !ctr_j(y) \/ min_i <= cost_i(y))]
    //                             j            i
    vector<Enode *> or_ctrs;
    for (Enode * ctr_X : ctrs_X) {
        Enode * ctr_not_Y = ctx.mkNot(ctx.mkCons(subst_exist_vars_to_univerally_quantified(ctx, var_map, ctr_X)));  // ctr(y)
        or_ctrs.push_back(ctr_not_Y);
    }

    vector<Enode*> eq_costs;
    for (unsigned i = 0; i < costs.size(); ++i) {
        Enode * min_var_i = make_min_var(ctx, var_map, i);                      // min
        Enode * eq_cost  = make_eq_cost(ctx, costs[i], min_var_i);              // cost_i(x) = min_i
        Enode * leq_cost = make_leq_cost(ctx, var_map, costs[i], min_var_i);    // min <= costs[0](y)
        eq_costs.push_back(eq_cost);
        or_ctrs.push_back(leq_cost);
    }

    // !ctr_1(y) \/ ... \/ !ctr_m(y) \/ (min_1 <= costs_1(y) ... \/ (min_n <= costs_n(y)
    Enode * or_term = ctx.mkOr(make_vec_to_list(ctx, or_ctrs));
    vector<pair<string, Snode *>> sorted_var_list;
    for (Enode * e : or_term->get_forall_vars()) {
        pair<string, Snode *> p = make_pair(e->getCar()->getName(), e->getSort());
        sorted_var_list.push_back(p);
    }
    Enode * quantified = ctx.mkForall(sorted_var_list, or_term);
    cout << "Precision  : " << ctx.getPrecision() << endl;
    for (auto var : var_map) {
        cout << "Variable   : " << var.first
             << " in [" << var.second->getDomainLowerBound() << ", "
             << var.second->getDomainUpperBound() << "]" << endl;
    }
    for (Enode * cost : costs) {
        cout << "Minimize   : " << cost << endl;
    }
    for (Enode * ctr_X : ctrs_X) {
        cout << "Constraint : " << ctr_X << endl;
    }
    for (Enode * eq_cost : eq_costs) {
        ctx.Assert(eq_cost);
    }
    for (Enode * ctr_X : ctrs_X) {
        ctx.Assert(ctr_X);
    }
    ctx.Assert(quantified);
    auto result = ctx.CheckSAT();
    cout << "Result     : ";
    if (result == l_True) {
        cout << "delta-sat" << endl;
        print_result(var_map);
        if (config.get_save_visualization()) {
            string vis_filename = config.get_filename() + ".py";
            ofstream of(vis_filename);
            // TODO(soonhok): generalize for a multi-obj case
            save_visualization_code(of, costs[0], var_map, config.get_vis_cell(), "min_0");
            cout << "Visualization Code is saved at " << vis_filename << endl;
        }
        if (config.get_run_visualization()) {
            // TODO(soonhok): generalize for a multi-obj case
            run_visualization(costs[0], var_map, config.get_vis_cell(), "min_0");
        }
    } else {
        cout << "unsat" << endl;
    }
    return 0;
}
开发者ID:fran-penedo,项目名称:dreal3,代码行数:82,代码来源:process.cpp


注:本文中的config::get_vis_cell方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。