X-Git-Url: http://plrg.eecs.uci.edu/git/?p=c11tester.git;a=blobdiff_plain;f=funcnode.cc;h=26e8f59e84cb22a20f18576b29bd23c13c2011c9;hp=94ef8c93b6b1baf96737d36029a65c5872c8947c;hb=9b15b68fbaea67b36fa99bcadb60a010eb4e131f;hpb=5d3037f7280786b48caa804d92aa360a6dea846d diff --git a/funcnode.cc b/funcnode.cc index 94ef8c93..26e8f59e 100644 --- a/funcnode.cc +++ b/funcnode.cc @@ -22,6 +22,7 @@ FuncNode::FuncNode(ModelHistory * history) : predicate_leaves(), leaves_tmp_storage(), weight_debug_vec(), + failed_predicates(), edge_table(32), out_edges() { @@ -761,6 +762,11 @@ int FuncNode::compute_distance(FuncNode * target, int max_step) return -1; } +void FuncNode::add_failed_predicate(Predicate * pred) +{ + failed_predicates.add(pred); +} + /* Implement quick sort to sort leaves before assigning base scores */ template static int partition(ModelVector<_Tp *> * arr, int low, int high) @@ -803,7 +809,7 @@ void FuncNode::assign_initial_weight() while (it->hasNext()) { Predicate * pred = it->next(); - double weight = 100.0 / sqrt(pred->get_expl_count() + 1); + double weight = 100.0 / sqrt(pred->get_expl_count() + pred->get_fail_count() + 1); pred->set_weight(weight); leaves_tmp_storage.push_back(pred); } @@ -861,10 +867,18 @@ void FuncNode::update_predicate_tree_weight() weight_debug_vec.clear(); + PredSetIter * it = failed_predicates.iterator(); + while (it->hasNext()) { + Predicate * pred = it->next(); + leaves_tmp_storage.push_back(pred); + } + delete it; + failed_predicates.reset(); + quickSort(&leaves_tmp_storage, 0, leaves_tmp_storage.size() - 1); for (uint i = 0; i < leaves_tmp_storage.size(); i++) { Predicate * pred = leaves_tmp_storage[i]; - double weight = 100.0 / sqrt(pred->get_expl_count() + 1); + double weight = 100.0 / sqrt(pred->get_expl_count() + pred->get_fail_count() + 1); pred->set_weight(weight); }