From 85db763d9c29cb31e7d9b5c0b6bbb6e9130a6d2b Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Fri, 16 Nov 2012 22:38:14 +0000 Subject: [PATCH 01/42] small improvement in HorusYap --- packages/CLPBN/horus/HorusYap.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/CLPBN/horus/HorusYap.cpp b/packages/CLPBN/horus/HorusYap.cpp index 5810b2fff..586d5a170 100644 --- a/packages/CLPBN/horus/HorusYap.cpp +++ b/packages/CLPBN/horus/HorusYap.cpp @@ -189,13 +189,12 @@ runGroundSolver (void) taskList = YAP_TailOfTerm (taskList); } - std::set vids; - for (size_t i = 0; i < tasks.size(); i++) { - Util::addToSet (vids, tasks[i]); - } - FactorGraph* mfg = fg; if (fg->bayesianFactors()) { + std::set vids; + for (size_t i = 0; i < tasks.size(); i++) { + Util::addToSet (vids, tasks[i]); + } mfg = BayesBall::getMinimalFactorGraph ( *fg, VarIds (vids.begin(), vids.end())); } From 992d06656d8bdee45d077fba5da7b6500d9dcb6f Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Thu, 22 Nov 2012 15:54:30 +0000 Subject: [PATCH 02/42] refactor horus_ground.yap --- packages/CLPBN/clpbn/horus_ground.yap | 107 ++++++++------------------ 1 file changed, 33 insertions(+), 74 deletions(-) diff --git a/packages/CLPBN/clpbn/horus_ground.yap b/packages/CLPBN/clpbn/horus_ground.yap index 3cb9e14cc..a78ad1458 100644 --- a/packages/CLPBN/clpbn/horus_ground.yap +++ b/packages/CLPBN/clpbn/horus_ground.yap @@ -31,24 +31,16 @@ get_dist_params/2 ]). -:- use_module(library('clpbn/ground_factors'), - [generate_network/5 - ]). - :- use_module(library('clpbn/display'), [clpbn_bind_vals/3]). -:- use_module(library('clpbn/aggregates'), - [check_for_agg_vars/2]). - :- use_module(library(clpbn/numbers)). :- use_module(library(charsio), [term_to_atom/2]). :- use_module(library(pfl), - [skolem/2 - ]). + [skolem/2]). :- use_module(library(maplist)). @@ -60,32 +52,38 @@ call_horus_ground_solver(QueryVars, QueryKeys, AllKeys, Factors, Evidence, Output) :- - call_horus_ground_solver_for_probabilities([QueryKeys], AllKeys, Factors, Evidence, Solutions), - clpbn_bind_vals([QueryVars], Solutions, Output). + init_horus_ground_solver(QueryKeys, AllKeys, Factors, Evidence, Network), + run_solver(Network, [QueryKeys], Solutions), + clpbn_bind_vals([QueryVars], Solutions, Output), + finalize_horus_ground_solver(Network). -call_horus_ground_solver_for_probabilities(QueryKeys, AllKeys, Factors, Evidence, Solutions) :- - get_factors_type(Factors, Type), - keys_to_numbers(AllKeys, Factors, Evidence, Hash4, Id4, FactorIds, EvidenceIds), - %writeln(evidence:Evidence), writeln(''), - %writeln(evidenceIds:EvidenceIds), writeln(''), - %writeln(factorIds:FactorIds), writeln(''), - cpp_create_ground_network(Type, FactorIds, EvidenceIds, Network), - maplist(get_var_information, AllKeys, StatesNames), - maplist(term_to_atom, AllKeys, KeysAtoms), - %writeln(s1:KeysAtoms:KeysAtoms:StatesNames), - cpp_set_vars_information(KeysAtoms, StatesNames), - %writeln(network:(Type, FactorIds, EvidenceIds, Network)), writeln(''), - run_solver(ground(Network,Hash4,Id4), QueryKeys, Solutions), - cpp_free_ground_network(Network). + +init_horus_ground_solver(QueryKeys, AllKeys, Factors, Evidence, ground(Network,Hash4,Id4)) :- + get_factors_type(Factors, Type), + keys_to_numbers(AllKeys, Factors, Evidence, Hash4, Id4, FactorIds, EvidenceIds), + cpp_create_ground_network(Type, FactorIds, EvidenceIds, Network), + %writeln(network:(Type, FactorIds, EvidenceIds, Network)), writeln(''), + maplist(get_var_information, AllKeys, StatesNames), + maplist(term_to_atom, AllKeys, KeysAtoms), + cpp_set_vars_information(KeysAtoms, StatesNames). + + +run_horus_ground_solver(_QueryVars, Solutions, horus(GKeys, Keys, Factors, Evidence), Solver) :- + set_solver(Solver), + call_horus_ground_solver_for_probabilities(GKeys, Keys, Factors, Evidence, Solutions). + + +% TODO this is not beeing called! +finalize_horus_ground_solver(ground(Network,_Hash,_Id)) :- + cpp_free_ground_network(Network). run_solver(ground(Network,Hash,Id), QueryKeys, Solutions) :- - %get_dists_parameters(DistIds, DistsParams), - %cpp_set_factors_params(Network, DistsParams), - lists_of_keys_to_ids(QueryKeys, QueryIds, Hash, _, Id, _), - %writeln(queryKeys:QueryKeys), writeln(''), - % writeln(queryIds:QueryIds), writeln(''), - cpp_run_ground_solver(Network, QueryIds, Solutions). + %get_dists_parameters(DistIds, DistsParams), + %cpp_set_factors_params(Network, DistsParams), + lists_of_keys_to_ids(QueryKeys, QueryIds, Hash, _, Id, _), + cpp_run_ground_solver(Network, QueryIds, Solutions). + get_factors_type([f(bayes, _, _)|_], bayes) :- ! . get_factors_type([f(markov, _, _)|_], markov) :- ! . @@ -97,47 +95,8 @@ get_var_information(Key, Domain) :- skolem(Key, Domain). -finalize_horus_ground_solver(bp(Network, _)) :- - cpp_free_ground_network(Network). -finalize_horus_ground_solver(horus(_, _, _, _)). - -% -% QVars: all query variables? -% -% -init_horus_ground_solver(QueryKeys, AllKeys, Factors, Evidence, horus(QueryKeys, AllKeys, Factors, Evidence)). - -% -% just call horus solver. -% -run_horus_ground_solver(_QueryVars, Solutions, horus(GKeys, Keys, Factors, Evidence) , Solver) :- - set_solver(Solver), - call_horus_ground_solver_for_probabilities(GKeys, Keys, Factors, Evidence, Solutions). - -%bp([[]],_,_) :- !. -%bp([QueryVars], AllVars, Output) :- -% init_horus_ground_solver(_, AllVars, _, Network), -% run_horus_ground_solver([QueryVars], LPs, Network), -% finalize_horus_ground_solver(Network), -% clpbn_bind_vals([QueryVars], LPs, Output). -% -%init_horus_ground_solver(_, AllVars0, _, bp(BayesNet, DistIds)) :- -% %check_for_agg_vars(AllVars0, AllVars), -% get_vars_info(AllVars0, VarsInfo, DistIds0), -% sort(DistIds0, DistIds), -% cpp_create_ground_network(VarsInfo, BayesNet), -% true. -% -% -%run_horus_ground_solver(QueryVars, Solutions, bp(Network, DistIds)) :- -% get_dists_parameters(DistIds, DistsParams), -% cpp_set_factors_params(Network, DistsParams), -% vars_to_ids(QueryVars, QueryVarsIds), -% cpp_run_ground_solver(Network, QueryVarsIds, Solutions). - - -get_dists_parameters([],[]). -get_dists_parameters([Id|Ids], [dist(Id, Params)|DistsInfo]) :- - get_dist_params(Id, Params), - get_dists_parameters(Ids, DistsInfo). +%get_dists_parameters([],[]). +%get_dists_parameters([Id|Ids], [dist(Id, Params)|DistsInfo]) :- +% get_dist_params(Id, Params), +% get_dists_parameters(Ids, DistsInfo). From 4afe6c8161db7768e1ef6df89fc2480c0c74b122 Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Thu, 22 Nov 2012 16:33:22 +0000 Subject: [PATCH 03/42] refactor horus_ground and horus_lifted --- packages/CLPBN/clpbn/horus_ground.yap | 12 +++--- packages/CLPBN/clpbn/horus_lifted.yap | 62 +++++++++++++-------------- 2 files changed, 37 insertions(+), 37 deletions(-) diff --git a/packages/CLPBN/clpbn/horus_ground.yap b/packages/CLPBN/clpbn/horus_ground.yap index a78ad1458..993fea5df 100644 --- a/packages/CLPBN/clpbn/horus_ground.yap +++ b/packages/CLPBN/clpbn/horus_ground.yap @@ -52,13 +52,13 @@ call_horus_ground_solver(QueryVars, QueryKeys, AllKeys, Factors, Evidence, Output) :- - init_horus_ground_solver(QueryKeys, AllKeys, Factors, Evidence, Network), - run_solver(Network, [QueryKeys], Solutions), + init_horus_ground_solver(QueryKeys, AllKeys, Factors, Evidence, State), + run_solver(State, [QueryKeys], Solutions), clpbn_bind_vals([QueryVars], Solutions, Output), - finalize_horus_ground_solver(Network). + finalize_horus_ground_solver(State). -init_horus_ground_solver(QueryKeys, AllKeys, Factors, Evidence, ground(Network,Hash4,Id4)) :- +init_horus_ground_solver(QueryKeys, AllKeys, Factors, Evidence, state(Network,Hash4,Id4)) :- get_factors_type(Factors, Type), keys_to_numbers(AllKeys, Factors, Evidence, Hash4, Id4, FactorIds, EvidenceIds), cpp_create_ground_network(Type, FactorIds, EvidenceIds, Network), @@ -74,11 +74,11 @@ run_horus_ground_solver(_QueryVars, Solutions, horus(GKeys, Keys, Factors, Evide % TODO this is not beeing called! -finalize_horus_ground_solver(ground(Network,_Hash,_Id)) :- +finalize_horus_ground_solver(state(Network,_Hash,_Id)) :- cpp_free_ground_network(Network). -run_solver(ground(Network,Hash,Id), QueryKeys, Solutions) :- +run_solver(state(Network,Hash,Id), QueryKeys, Solutions) :- %get_dists_parameters(DistIds, DistsParams), %cpp_set_factors_params(Network, DistsParams), lists_of_keys_to_ids(QueryKeys, QueryIds, Hash, _, Id, _), diff --git a/packages/CLPBN/clpbn/horus_lifted.yap b/packages/CLPBN/clpbn/horus_lifted.yap index fae5a4d83..3de7d0481 100644 --- a/packages/CLPBN/clpbn/horus_lifted.yap +++ b/packages/CLPBN/clpbn/horus_lifted.yap @@ -1,8 +1,10 @@ /******************************************************* Interface to Horus Lifted Solvers. Used by: - - Lifted Variable Elimination + - Generalized Counting First-Order Variable Elimination (GC-FOVE) - Lifted First-Order Belief Propagation + - Lifted First-Order Knowledge Compilation + ********************************************************/ :- module(clpbn_horus_lifted, @@ -33,22 +35,33 @@ ]). -call_horus_lifted_solver([[]], _, _) :- !. -call_horus_lifted_solver([QueryVars], AllVars, Output) :- - init_horus_lifted_solver(_, AllVars, _, ParfactorList), - run_horus_lifted_solver([QueryVars], LPs, ParfactorList), - finalize_horus_lifted_solver(ParfactorList), - clpbn_bind_vals([QueryVars], LPs, Output). +call_horus_lifted_solver(QueryVars, AllVars, Output) :- + init_horus_lifted_solver(_, AllVars, _, State), + run_horus_lifted_solver(QueryVars, Solutions, State), + clpbn_bind_vals(QueryVars, Solutions, Output), + finalize_horus_lifted_solver(State). -init_horus_lifted_solver(_, AllAttVars, _, fove(ParfactorList, DistIds)) :- +init_horus_lifted_solver(_, AllVars, _, state(ParfactorList, DistIds)) :- get_parfactors(Parfactors), get_dist_ids(Parfactors, DistIds0), sort(DistIds0, DistIds), - get_observed_vars(AllAttVars, ObservedVars), + get_observed_vars(AllVars, ObservedVars), %writeln(parfactors:Parfactors:'\n'), %writeln(evidence:ObservedVars:'\n'), - cpp_create_lifted_network(Parfactors,ObservedVars,ParfactorList). + cpp_create_lifted_network(Parfactors, ObservedVars, ParfactorList). + + +run_horus_lifted_solver(QueryVars, Solutions, state(ParfactorList, DistIds)) :- + get_query_keys(QueryVars, QueryKeys), + get_dists_parameters(DistIds, DistsParams), + %writeln(dists:DistsParams), writeln(''), + cpp_set_parfactors_params(ParfactorList, DistsParams), + cpp_run_lifted_solver(ParfactorList, QueryKeys, Solutions). + + +finalize_horus_lifted_solver(state(ParfactorList, _)) :- + cpp_free_lifted_network(ParfactorList). :- table get_parfactors/1. @@ -76,7 +89,7 @@ is_factor(pf(Id, Ks, Rs, Phi, Tuples)) :- get_ranges([],[]). -get_ranges(K.Ks, Range.Rs) :- !, +get_ranges(K.Ks, Range.Rs) :- !, skolem(K,Domain), length(Domain,Range), get_ranges(Ks, Rs). @@ -116,16 +129,16 @@ get_observed_vars(V.AllAttVars, ObservedVars) :- get_observed_vars(AllAttVars, ObservedVars). -get_query_vars([], []). -get_query_vars(E1.L1, E2.L2) :- - get_query_vars_2(E1,E2), - get_query_vars(L1, L2). +get_query_keys([], []). +get_query_keys(E1.L1, E2.L2) :- + get_query_keys_2(E1,E2), + get_query_keys(L1, L2). -get_query_vars_2([], []). -get_query_vars_2(V.AttVars, [RV|RVs]) :- +get_query_keys_2([], []). +get_query_keys_2(V.AttVars, [RV|RVs]) :- clpbn:get_atts(V,[key(RV)]), !, - get_query_vars_2(AttVars, RVs). + get_query_keys_2(AttVars, RVs). get_dists_parameters([], []). @@ -133,16 +146,3 @@ get_dists_parameters([Id|Ids], [dist(Id, Params)|DistsInfo]) :- get_pfl_parameters(Id, Params), get_dists_parameters(Ids, DistsInfo). - -run_horus_lifted_solver(QueryVarsAtts, Solutions, fove(ParfactorList, DistIds)) :- - get_query_vars(QueryVarsAtts, QueryVars), - %writeln(queryVars:QueryVars), writeln(''), - get_dists_parameters(DistIds, DistsParams), - %writeln(dists:DistsParams), writeln(''), - cpp_set_parfactors_params(ParfactorList, DistsParams), - cpp_run_lifted_solver(ParfactorList, QueryVars, Solutions). - - -finalize_horus_lifted_solver(fove(ParfactorList, _)) :- - cpp_free_lifted_network(ParfactorList). - From e09c25bd59dc0028064419c5600b3c0a75add89b Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Thu, 22 Nov 2012 16:34:24 +0000 Subject: [PATCH 04/42] remove grounding stub form lifted knowledge compilation. its hard to implement --- packages/CLPBN/horus/LiftedCircuit.cpp | 42 -------------------------- packages/CLPBN/horus/LiftedCircuit.h | 2 -- 2 files changed, 44 deletions(-) diff --git a/packages/CLPBN/horus/LiftedCircuit.cpp b/packages/CLPBN/horus/LiftedCircuit.cpp index b3f5a653a..fb7cbbfae 100644 --- a/packages/CLPBN/horus/LiftedCircuit.cpp +++ b/packages/CLPBN/horus/LiftedCircuit.cpp @@ -18,11 +18,6 @@ AndNode::weight (void) const { double lw = leftBranch_->weight(); double rw = rightBranch_->weight(); - if (Globals::logDomain) { -// cout << "andw1 = " << std::exp(lw + rw) << endl; - } else { -// cout << "andw2 = " << lw * rw << endl; - } return Globals::logDomain ? lw + rw : lw * rw; } @@ -251,10 +246,6 @@ LiftedCircuit::compile ( return; } - if (tryGrounding (follow, clauses)) { - return; - } - // assert (false); *follow = new CompilationFailedNode (clauses); } @@ -266,11 +257,8 @@ LiftedCircuit::tryUnitPropagation ( CircuitNode** follow, Clauses& clauses) { - // cout << "ALL CLAUSES:" << endl; - // Clause::printClauses (clauses); for (size_t i = 0; i < clauses.size(); i++) { if (clauses[i].isUnit()) { - // cout << clauses[i] << " is unit!" << endl; Clauses newClauses; for (size_t j = 0; j < clauses.size(); j++) { if (i != j) { @@ -557,36 +545,6 @@ LiftedCircuit::tryAtomCounting ( -bool -LiftedCircuit::tryGrounding ( - CircuitNode**, - Clauses&) -{ - return false; - /* - size_t bestClauseIdx = 0; - size_t bestLogVarIdx = 0; - unsigned minNrSymbols = Util::maxUnsigned(); - for (size_t i = 0; i < clauses.size(); i++) { - LogVarSet lvs = clauses[i].constr().logVars(); - ConstraintTree ct = clauses[i].constr(); - for (unsigned j = 0; j < lvs.size(); j++) { - unsigned nrSymbols = ct.nrSymbols (lvs[j]); - if (nrSymbols < minNrSymbols) { - minNrSymbols = nrSymbols; - bestClauseIdx = i; - bestLogVarIdx = j; - } - } - } - LogVar bestLogVar = clauses[bestClauseIdx].constr().logVars()[bestLogVarIdx]; - ConstraintTrees cts = clauses[bestClauseIdx].constr().ground (bestLogVar); - return true; - */ -} - - - void LiftedCircuit::shatterCountedLogVars (Clauses& clauses) { diff --git a/packages/CLPBN/horus/LiftedCircuit.h b/packages/CLPBN/horus/LiftedCircuit.h index b040af3c5..12af4d6ee 100644 --- a/packages/CLPBN/horus/LiftedCircuit.h +++ b/packages/CLPBN/horus/LiftedCircuit.h @@ -234,8 +234,6 @@ class LiftedCircuit bool tryAtomCounting (CircuitNode** follow, Clauses& clauses); - bool tryGrounding (CircuitNode** follow, Clauses& clauses); - void shatterCountedLogVars (Clauses& clauses); bool shatterCountedLogVarsAux (Clauses& clauses); From 1f1d19432643fd6ece9fd4a996998c97c4d69341 Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Mon, 26 Nov 2012 14:46:00 +0000 Subject: [PATCH 05/42] remove unnecessary std set --- packages/CLPBN/horus/LiftedWCNF.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/CLPBN/horus/LiftedWCNF.cpp b/packages/CLPBN/horus/LiftedWCNF.cpp index 3d635b16b..3d5ac56ef 100644 --- a/packages/CLPBN/horus/LiftedWCNF.cpp +++ b/packages/CLPBN/horus/LiftedWCNF.cpp @@ -482,12 +482,10 @@ void LiftedWCNF::addIndicatorClauses (const ParfactorList& pfList) { ParfactorList::const_iterator it = pfList.begin(); - set allGroups; while (it != pfList.end()) { const ProbFormulas& formulas = (*it)->arguments(); for (size_t i = 0; i < formulas.size(); i++) { - if (Util::contains (allGroups, formulas[i].group()) == false) { - allGroups.insert (formulas[i].group()); + if (Util::contains (map_, formulas[i].group()) == false) { ConstraintTree tempConstr = *(*it)->constr(); tempConstr.project (formulas[i].logVars()); Clause clause (tempConstr); From 610e55a4a2eea76ac7c4f207d6e71adced9d0dbb Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Mon, 26 Nov 2012 14:46:45 +0000 Subject: [PATCH 06/42] Improve debbuging for lifted knowledge compilation --- packages/CLPBN/horus/LiftedCircuit.cpp | 13 ++++++------- packages/CLPBN/horus/LiftedWCNF.cpp | 24 ++++++++++++------------ 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/packages/CLPBN/horus/LiftedCircuit.cpp b/packages/CLPBN/horus/LiftedCircuit.cpp index fb7cbbfae..666d895e4 100644 --- a/packages/CLPBN/horus/LiftedCircuit.cpp +++ b/packages/CLPBN/horus/LiftedCircuit.cpp @@ -170,13 +170,12 @@ LiftedCircuit::LiftedCircuit (const LiftedWCNF* lwcnf) root_ = 0; Clauses clauses = lwcnf->clauses(); compile (&root_, clauses); - exportToGraphViz("circuit.dot"); - smoothCircuit (root_); - exportToGraphViz("circuit.smooth.dot"); - cout << "--------------------------------------------------" << endl; - cout << "--------------------------------------------------" << endl; - double wmc = LogAware::exp (getWeightedModelCount()); - cout << "WEIGHTED MODEL COUNT = " << wmc << endl; + if (Globals::verbosity > 1) { + smoothCircuit (root_); + exportToGraphViz("circuit.smooth.dot"); + double wmc = LogAware::exp (getWeightedModelCount()); + cout << "WEIGHTED MODEL COUNT: " << wmc << endl << endl; + } } diff --git a/packages/CLPBN/horus/LiftedWCNF.cpp b/packages/CLPBN/horus/LiftedWCNF.cpp index 3d5ac56ef..f92bf637c 100644 --- a/packages/CLPBN/horus/LiftedWCNF.cpp +++ b/packages/CLPBN/horus/LiftedWCNF.cpp @@ -388,18 +388,18 @@ LiftedWCNF::LiftedWCNF (const ParfactorList& pfList) addWeight (1, LogAware::log(2.0), LogAware::log(5.0)); freeLiteralId_ = 2; */ - - cout << "FORMULA INDICATORS:" << endl; - printFormulaIndicators(); - cout << endl; - - cout << "WEIGHTS:" << endl; - printWeights(); - cout << endl; - - cout << "CLAUSES:" << endl; - printClauses(); - cout << endl; + + if (Globals::verbosity > 1) { + cout << "FORMULA INDICATORS:" << endl; + printFormulaIndicators(); + cout << endl; + cout << "WEIGHTED INDICATORS:" << endl; + printWeights(); + cout << endl; + cout << "CLAUSES:" << endl; + printClauses(); + cout << endl; + } } From ee1b7dcd21ba728fcc9df7b8284b82193bd075a4 Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Tue, 27 Nov 2012 16:54:02 +0000 Subject: [PATCH 07/42] abort when compilation failed --- packages/CLPBN/horus/LiftedCircuit.cpp | 30 ++++++++++++++++++++------ packages/CLPBN/horus/LiftedCircuit.h | 5 ++++- packages/CLPBN/horus/LiftedKc.cpp | 4 ++++ 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/packages/CLPBN/horus/LiftedCircuit.cpp b/packages/CLPBN/horus/LiftedCircuit.cpp index 666d895e4..dd021bffb 100644 --- a/packages/CLPBN/horus/LiftedCircuit.cpp +++ b/packages/CLPBN/horus/LiftedCircuit.cpp @@ -156,10 +156,9 @@ TrueNode::weight (void) const double CompilationFailedNode::weight (void) const { - // we should not perform model counting - // in compilation failed nodes - // abort(); - return 0.0; + // weighted model counting in compilation + // failed nodes should give nan + return 0.0 / 0.0; } @@ -168,21 +167,33 @@ LiftedCircuit::LiftedCircuit (const LiftedWCNF* lwcnf) : lwcnf_(lwcnf) { root_ = 0; + compilationSucceeded_ = true; Clauses clauses = lwcnf->clauses(); compile (&root_, clauses); if (Globals::verbosity > 1) { smoothCircuit (root_); exportToGraphViz("circuit.smooth.dot"); - double wmc = LogAware::exp (getWeightedModelCount()); - cout << "WEIGHTED MODEL COUNT: " << wmc << endl << endl; + if (compilationSucceeded_) { + double wmc = LogAware::exp (getWeightedModelCount()); + cout << "WEIGHTED MODEL COUNT: " << wmc << endl << endl; + } } } +bool +LiftedCircuit::isCompilationSucceeded (void) const +{ + return compilationSucceeded_; +} + + + double LiftedCircuit::getWeightedModelCount (void) const { + assert (compilationSucceeded_); return root_->weight(); } @@ -211,6 +222,11 @@ LiftedCircuit::compile ( CircuitNode** follow, Clauses& clauses) { + if (compilationSucceeded_ == false + && Globals::verbosity <= 1) { + return; + } + if (clauses.empty()) { *follow = new TrueNode (); return; @@ -245,8 +261,8 @@ LiftedCircuit::compile ( return; } - // assert (false); *follow = new CompilationFailedNode (clauses); + compilationSucceeded_ = false; } diff --git a/packages/CLPBN/horus/LiftedCircuit.h b/packages/CLPBN/horus/LiftedCircuit.h index 12af4d6ee..cc0263d52 100644 --- a/packages/CLPBN/horus/LiftedCircuit.h +++ b/packages/CLPBN/horus/LiftedCircuit.h @@ -209,7 +209,9 @@ class CompilationFailedNode : public CircuitNode class LiftedCircuit { public: - LiftedCircuit (const LiftedWCNF* lwcnf); + LiftedCircuit (const LiftedWCNF* lwcnf); + + bool isCompilationSucceeded (void) const; double getWeightedModelCount (void) const; @@ -266,6 +268,7 @@ class LiftedCircuit CircuitNode* root_; const LiftedWCNF* lwcnf_; + bool compilationSucceeded_; }; #endif // HORUS_LIFTEDCIRCUIT_H diff --git a/packages/CLPBN/horus/LiftedKc.cpp b/packages/CLPBN/horus/LiftedKc.cpp index 6c0aba622..d9560f6df 100644 --- a/packages/CLPBN/horus/LiftedKc.cpp +++ b/packages/CLPBN/horus/LiftedKc.cpp @@ -21,6 +21,10 @@ LiftedKc::solveQuery (const Grounds& query) LiftedOperations::runWeakBayesBall (pfList_, query); lwcnf_ = new LiftedWCNF (pfList_); circuit_ = new LiftedCircuit (lwcnf_); + if (circuit_->isCompilationSucceeded() == false) { + cerr << "error: compilation failed" << endl; + abort(); + } vector groups; Ranges ranges; for (size_t i = 0; i < query.size(); i++) { From 73b3594c97ebc8a047d3eb3bf89b355c0bdaec3b Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Fri, 7 Dec 2012 11:47:50 +0000 Subject: [PATCH 08/42] lifted kc: when not debuging don't keep track of the origin clauses --- packages/CLPBN/horus/LiftedCircuit.cpp | 132 +++++++++++++++++++------ packages/CLPBN/horus/LiftedCircuit.h | 85 +++++++--------- 2 files changed, 137 insertions(+), 80 deletions(-) diff --git a/packages/CLPBN/horus/LiftedCircuit.cpp b/packages/CLPBN/horus/LiftedCircuit.cpp index dd021bffb..5f2e9db8c 100644 --- a/packages/CLPBN/horus/LiftedCircuit.cpp +++ b/packages/CLPBN/horus/LiftedCircuit.cpp @@ -77,9 +77,8 @@ IncExcNode::weight (void) const double LeafNode::weight (void) const { - assert (clauses().size() == 1); - assert (clauses()[0].isUnit()); - Clause c = clauses()[0]; + assert (clause_.isUnit()); + Clause c = clause_; double weight = c.literals()[0].isPositive() ? lwcnf_.posWeight (c.literals().front().lid()) : lwcnf_.negWeight (c.literals().front().lid()); @@ -261,7 +260,11 @@ LiftedCircuit::compile ( return; } - *follow = new CompilationFailedNode (clauses); + *follow = new CompilationFailedNode(); + if (Globals::verbosity > 1) { + originClausesMap_[*follow] = clauses; + explanationMap_[*follow] = "" ; + } compilationSucceeded_ = false; } @@ -272,6 +275,9 @@ LiftedCircuit::tryUnitPropagation ( CircuitNode** follow, Clauses& clauses) { + if (Globals::verbosity > 1) { + backupClauses_ = clauses; + } for (size_t i = 0; i < clauses.size(); i++) { if (clauses[i].isUnit()) { Clauses newClauses; @@ -294,9 +300,13 @@ LiftedCircuit::tryUnitPropagation ( } } } - stringstream explanation; - explanation << " UP on" << clauses[i].literals()[0]; - AndNode* andNode = new AndNode (clauses, explanation.str()); + AndNode* andNode = new AndNode(); + if (Globals::verbosity > 1) { + originClausesMap_[andNode] = backupClauses_; + stringstream explanation; + explanation << " UP on>" << clauses[i].literals()[0]; + explanationMap_[andNode] = explanation.str(); + } Clauses leftClauses = {clauses[i]}; compile (andNode->leftBranch(), leftClauses); compile (andNode->rightBranch(), newClauses); @@ -317,6 +327,9 @@ LiftedCircuit::tryIndependence ( if (clauses.size() == 1) { return false; } + if (Globals::verbosity > 1) { + backupClauses_ = clauses; + } Clauses depClauses = { clauses[0] }; Clauses indepClauses (clauses.begin() + 1, clauses.end()); bool finish = false; @@ -332,7 +345,11 @@ LiftedCircuit::tryIndependence ( } } if (indepClauses.empty() == false) { - AndNode* andNode = new AndNode (clauses, " Independence"); + AndNode* andNode = new AndNode (); + if (Globals::verbosity > 1) { + originClausesMap_[andNode] = backupClauses_; + explanationMap_[andNode] = " Independence" ; + } compile (andNode->leftBranch(), depClauses); compile (andNode->rightBranch(), indepClauses); (*follow) = andNode; @@ -348,6 +365,9 @@ LiftedCircuit::tryShannonDecomp ( CircuitNode** follow, Clauses& clauses) { + if (Globals::verbosity > 1) { + backupClauses_ = clauses; + } for (size_t i = 0; i < clauses.size(); i++) { const Literals& literals = clauses[i].literals(); for (size_t j = 0; j < literals.size(); j++) { @@ -364,9 +384,13 @@ LiftedCircuit::tryShannonDecomp ( Clauses rightClauses = { c2 }; leftClauses.insert (leftClauses.end(), clauses.begin(), clauses.end()); rightClauses.insert (rightClauses.end(), clauses.begin(), clauses.end()); - stringstream explanation; - explanation << " SD on " << literals[j]; - OrNode* orNode = new OrNode (clauses, explanation.str()); + OrNode* orNode = new OrNode(); + if (Globals::verbosity > 1) { + originClausesMap_[orNode] = backupClauses_; + stringstream explanation; + explanation << " SD on " << literals[j]; + explanationMap_[orNode] = explanation.str(); + } compile (orNode->leftBranch(), leftClauses); compile (orNode->rightBranch(), rightClauses); (*follow) = orNode; @@ -384,6 +408,9 @@ LiftedCircuit::tryInclusionExclusion ( CircuitNode** follow, Clauses& clauses) { + if (Globals::verbosity > 1) { + backupClauses_ = clauses; + } for (size_t i = 0; i < clauses.size(); i++) { Literals depLits = { clauses[i].literals().front() }; Literals indepLits (clauses[i].literals().begin() + 1, @@ -433,9 +460,13 @@ LiftedCircuit::tryInclusionExclusion ( plus2Clauses.push_back (c2); minusClauses.push_back (c1); minusClauses.push_back (c2); - stringstream explanation; - explanation << " IncExc on clause nº " << i + 1; - IncExcNode* ieNode = new IncExcNode (clauses, explanation.str()); + IncExcNode* ieNode = new IncExcNode(); + if (Globals::verbosity > 1) { + originClausesMap_[ieNode] = backupClauses_; + stringstream explanation; + explanation << " IncExc on clause nº " << i + 1; + explanationMap_[ieNode] = explanation.str(); + } compile (ieNode->plus1Branch(), plus1Clauses); compile (ieNode->plus2Branch(), plus2Clauses); compile (ieNode->minusBranch(), minusClauses); @@ -455,6 +486,9 @@ LiftedCircuit::tryIndepPartialGrounding ( { // assumes that all literals have logical variables // else, shannon decomp was possible + if (Globals::verbosity > 1) { + backupClauses_ = clauses; + } LogVars rootLogVars; LogVarSet lvs = clauses[0].ipgCandidates(); for (size_t i = 0; i < lvs.size(); i++) { @@ -466,9 +500,13 @@ LiftedCircuit::tryIndepPartialGrounding ( for (size_t j = 0; j < clauses.size(); j++) { newClauses[j].addIpgLogVar (rootLogVars[j]); } - SetAndNode* node = new SetAndNode (ct.size(), clauses); - *follow = node; - compile (node->follow(), newClauses); + SetAndNode* setAndNode = new SetAndNode (ct.size()); + if (Globals::verbosity > 1) { + originClausesMap_[setAndNode] = backupClauses_; + explanationMap_[setAndNode] = " IPG" ; + } + *follow = setAndNode; + compile (setAndNode->follow(), newClauses); return true; } } @@ -531,6 +569,9 @@ LiftedCircuit::tryAtomCounting ( return false; } } + if (Globals::verbosity > 1) { + backupClauses_ = clauses; + } for (size_t i = 0; i < clauses.size(); i++) { Literals literals = clauses[i].literals(); for (size_t j = 0; j < literals.size(); j++) { @@ -539,7 +580,11 @@ LiftedCircuit::tryAtomCounting ( && ! clauses[i].isCountedLogVar (literals[j].logVars().front())) { unsigned nrGroundings = clauses[i].constr().projectedCopy ( literals[j].logVars()).size(); - SetOrNode* setOrNode = new SetOrNode (nrGroundings, clauses); + SetOrNode* setOrNode = new SetOrNode (nrGroundings); + if (Globals::verbosity > 1) { + originClausesMap_[setOrNode] = backupClauses_; + explanationMap_[setOrNode] = " AC" ; + } Clause c1 (clauses[i].constr().projectedCopy (literals[j].logVars())); Clause c2 (clauses[i].constr().projectedCopy (literals[j].logVars())); c1.addLiteral (literals[j]); @@ -734,9 +779,10 @@ LiftedCircuit::smoothCircuit (CircuitNode* node) } case CircuitNodeType::LEAF_NODE: { + LeafNode* casted = dynamic_cast(node); propagLits.insert (LitLvTypes ( - node->clauses()[0].literals()[0].lid(), - node->clauses()[0].logVarTypes(0))); + casted->clause().literals()[0].lid(), + casted->clause().logVarTypes(0))); } default: @@ -754,6 +800,10 @@ LiftedCircuit::createSmoothNode ( CircuitNode** prev) { if (missingLits.empty() == false) { + if (Globals::verbosity > 1) { + // assert (Util::contains (originClausesMap_, prev)); + backupClauses_ = originClausesMap_[*prev]; + } Clauses clauses; for (size_t i = 0; i < missingLits.size(); i++) { LiteralId lid = missingLits[i].lid(); @@ -771,8 +821,11 @@ LiftedCircuit::createSmoothNode ( clauses.push_back (c); } SmoothNode* smoothNode = new SmoothNode (clauses, *lwcnf_); - *prev = new AndNode ((*prev)->clauses(), smoothNode, - *prev, " Smoothing"); + *prev = new AndNode (smoothNode, *prev); + if (Globals::verbosity > 1) { + originClausesMap_[*prev] = backupClauses_; + explanationMap_[*prev] = " Smoothing" ; + } } } @@ -879,7 +932,7 @@ LiftedCircuit::exportToGraphViz (CircuitNode* node, ofstream& os) os << auxNode << " [" << opStyle << "label=\"∨\"]" << endl; os << escapeNode (node) << " -> " << auxNode; - os << " [label=\"" << node->explanation() << "\"]" ; + os << " [label=\"" << getExplanationString (node) << "\"]" ; os << endl; os << auxNode << " -> " ; @@ -903,7 +956,7 @@ LiftedCircuit::exportToGraphViz (CircuitNode* node, ofstream& os) os << auxNode << " [" << opStyle << "label=\"∧\"]" << endl; os << escapeNode (node) << " -> " << auxNode; - os << " [label=\"" << node->explanation() << "\"]" ; + os << " [label=\"" << getExplanationString (node) << "\"]" ; os << endl; os << auxNode << " -> " ; @@ -927,7 +980,7 @@ LiftedCircuit::exportToGraphViz (CircuitNode* node, ofstream& os) os << auxNode << " [" << opStyle << "label=\"∨(X)\"]" << endl; os << escapeNode (node) << " -> " << auxNode; - os << " [label=\"" << node->explanation() << "\"]" ; + os << " [label=\"" << getExplanationString (node) << "\"]" ; os << endl; os << auxNode << " -> " ; @@ -945,7 +998,7 @@ LiftedCircuit::exportToGraphViz (CircuitNode* node, ofstream& os) os << auxNode << " [" << opStyle << "label=\"∧(X)\"]" << endl; os << escapeNode (node) << " -> " << auxNode; - os << " [label=\"" << node->explanation() << "\"]" ; + os << " [label=\"" << getExplanationString (node) << "\"]" ; os << endl; os << auxNode << " -> " ; @@ -964,7 +1017,7 @@ LiftedCircuit::exportToGraphViz (CircuitNode* node, ofstream& os) os << auxNode << " [" << opStyle << "label=\"+ - +\"]" ; os << endl; os << escapeNode (node) << " -> " << auxNode; - os << " [label=\"" << node->explanation() << "\"]" ; + os << " [label=\"" << getExplanationString (node) << "\"]" ; os << endl; os << auxNode << " -> " ; @@ -1027,14 +1080,31 @@ LiftedCircuit::escapeNode (const CircuitNode* node) const +string +LiftedCircuit::getExplanationString (CircuitNode* node) +{ + return Util::contains (explanationMap_, node) + ? explanationMap_[node] + : "" ; +} + + + void LiftedCircuit::printClauses ( - const CircuitNode* node, + CircuitNode* node, ofstream& os, string extraOptions) { - const Clauses& clauses = node->clauses(); - if (node->clauses().empty() == false) { + Clauses clauses; + if (Util::contains (originClausesMap_, node)) { + clauses = originClausesMap_[node]; + } else if (getCircuitNodeType (node) == CircuitNodeType::LEAF_NODE) { + clauses = { (dynamic_cast(node))->clause() } ; + } else if (getCircuitNodeType (node) == CircuitNodeType::SMOOTH_NODE) { + clauses = (dynamic_cast(node))->clauses(); + } + if (clauses.empty() == false) { os << escapeNode (node); os << " [shape=box," << extraOptions << "label=\"" ; for (size_t i = 0; i < clauses.size(); i++) { @@ -1043,6 +1113,8 @@ LiftedCircuit::printClauses ( } os << "\"]" ; os << endl; + } else { + os << " [shape=box]" << endl; } } diff --git a/packages/CLPBN/horus/LiftedCircuit.h b/packages/CLPBN/horus/LiftedCircuit.h index cc0263d52..979896b3a 100644 --- a/packages/CLPBN/horus/LiftedCircuit.h +++ b/packages/CLPBN/horus/LiftedCircuit.h @@ -23,20 +23,9 @@ enum CircuitNodeType { class CircuitNode { public: - CircuitNode (const Clauses& clauses, string explanation = "") - : clauses_(clauses), explanation_(explanation) { } - - const Clauses& clauses (void) const { return clauses_; } - - Clauses clauses (void) { return clauses_; } + CircuitNode (void) { } virtual double weight (void) const = 0; - - string explanation (void) const { return explanation_; } - - private: - Clauses clauses_; - string explanation_; }; @@ -44,9 +33,7 @@ class CircuitNode class OrNode : public CircuitNode { public: - OrNode (const Clauses& clauses, string explanation = "") - : CircuitNode (clauses, explanation), - leftBranch_(0), rightBranch_(0) { } + OrNode (void) : CircuitNode(), leftBranch_(0), rightBranch_(0) { } CircuitNode** leftBranch (void) { return &leftBranch_; } CircuitNode** rightBranch (void) { return &rightBranch_; } @@ -63,24 +50,10 @@ class OrNode : public CircuitNode class AndNode : public CircuitNode { public: - AndNode (const Clauses& clauses, string explanation = "") - : CircuitNode (clauses, explanation), - leftBranch_(0), rightBranch_(0) { } - - AndNode ( - const Clauses& clauses, - CircuitNode* leftBranch, - CircuitNode* rightBranch, - string explanation = "") - : CircuitNode (clauses, explanation), - leftBranch_(leftBranch), rightBranch_(rightBranch) { } - - AndNode ( - CircuitNode* leftBranch, - CircuitNode* rightBranch, - string explanation = "") - : CircuitNode ({}, explanation), - leftBranch_(leftBranch), rightBranch_(rightBranch) { } + AndNode (void) : CircuitNode(), leftBranch_(0), rightBranch_(0) { } + + AndNode (CircuitNode* leftBranch, CircuitNode* rightBranch) + : CircuitNode(), leftBranch_(leftBranch), rightBranch_(rightBranch) { } CircuitNode** leftBranch (void) { return &leftBranch_; } CircuitNode** rightBranch (void) { return &rightBranch_; } @@ -97,9 +70,8 @@ class AndNode : public CircuitNode class SetOrNode : public CircuitNode { public: - SetOrNode (unsigned nrGroundings, const Clauses& clauses) - : CircuitNode (clauses, " AC"), follow_(0), - nrGroundings_(nrGroundings) { } + SetOrNode (unsigned nrGroundings) + : CircuitNode(), follow_(0), nrGroundings_(nrGroundings) { } CircuitNode** follow (void) { return &follow_; } @@ -121,9 +93,8 @@ class SetOrNode : public CircuitNode class SetAndNode : public CircuitNode { public: - SetAndNode (unsigned nrGroundings, const Clauses& clauses) - : CircuitNode (clauses, " IPG"), follow_(0), - nrGroundings_(nrGroundings) { } + SetAndNode (unsigned nrGroundings) + : CircuitNode(), follow_(0), nrGroundings_(nrGroundings) { } CircuitNode** follow (void) { return &follow_; } @@ -139,9 +110,8 @@ class SetAndNode : public CircuitNode class IncExcNode : public CircuitNode { public: - IncExcNode (const Clauses& clauses, string explanation) - : CircuitNode (clauses, explanation), plus1Branch_(0), - plus2Branch_(0), minusBranch_(0) { } + IncExcNode (void) + : CircuitNode(), plus1Branch_(0), plus2Branch_(0), minusBranch_(0) { } CircuitNode** plus1Branch (void) { return &plus1Branch_; } CircuitNode** plus2Branch (void) { return &plus2Branch_; } @@ -161,11 +131,16 @@ class LeafNode : public CircuitNode { public: LeafNode (const Clause& clause, const LiftedWCNF& lwcnf) - : CircuitNode (Clauses() = {clause}), lwcnf_(lwcnf) { } + : CircuitNode(), clause_(clause), lwcnf_(lwcnf) { } + + const Clause& clause (void) const { return clause_; } + + Clause& clause (void) { return clause_; } double weight (void) const; private: + Clause clause_; const LiftedWCNF& lwcnf_; }; @@ -175,11 +150,16 @@ class SmoothNode : public CircuitNode { public: SmoothNode (const Clauses& clauses, const LiftedWCNF& lwcnf) - : CircuitNode (clauses), lwcnf_(lwcnf) { } - - double weight (void) const; + : CircuitNode(), clauses_(clauses), lwcnf_(lwcnf) { } + + const Clauses& clauses (void) const { return clauses_; } + Clauses clauses (void) { return clauses_; } + + double weight (void) const; + private: + Clauses clauses_; const LiftedWCNF& lwcnf_; }; @@ -188,7 +168,7 @@ class SmoothNode : public CircuitNode class TrueNode : public CircuitNode { public: - TrueNode (void) : CircuitNode ({}) { } + TrueNode (void) : CircuitNode() { } double weight (void) const; }; @@ -198,8 +178,7 @@ class TrueNode : public CircuitNode class CompilationFailedNode : public CircuitNode { public: - CompilationFailedNode (const Clauses& clauses) - : CircuitNode (clauses) { } + CompilationFailedNode (void) : CircuitNode() { } double weight (void) const; }; @@ -261,13 +240,19 @@ class LiftedCircuit void exportToGraphViz (CircuitNode* node, ofstream&); - void printClauses (const CircuitNode* node, ofstream&, + void printClauses (CircuitNode* node, ofstream&, string extraOptions = ""); string escapeNode (const CircuitNode* node) const; + + string getExplanationString (CircuitNode* node); CircuitNode* root_; const LiftedWCNF* lwcnf_; + + Clauses backupClauses_; + unordered_map originClausesMap_; + unordered_map explanationMap_; bool compilationSucceeded_; }; From 4edbcf86b8b58a107e3055ac70900e73591db47e Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Sat, 8 Dec 2012 19:17:19 +0000 Subject: [PATCH 09/42] Use pointers to refer to clauses for better performance --- packages/CLPBN/horus/LiftedCircuit.cpp | 279 ++++++++++++++----------- packages/CLPBN/horus/LiftedCircuit.h | 8 +- packages/CLPBN/horus/LiftedWCNF.cpp | 43 ++-- packages/CLPBN/horus/LiftedWCNF.h | 10 +- 4 files changed, 185 insertions(+), 155 deletions(-) diff --git a/packages/CLPBN/horus/LiftedCircuit.cpp b/packages/CLPBN/horus/LiftedCircuit.cpp index 5f2e9db8c..d89c5a572 100644 --- a/packages/CLPBN/horus/LiftedCircuit.cpp +++ b/packages/CLPBN/horus/LiftedCircuit.cpp @@ -77,28 +77,27 @@ IncExcNode::weight (void) const double LeafNode::weight (void) const { - assert (clause_.isUnit()); - Clause c = clause_; - double weight = c.literals()[0].isPositive() - ? lwcnf_.posWeight (c.literals().front().lid()) - : lwcnf_.negWeight (c.literals().front().lid()); - LogVarSet lvs = c.constr().logVarSet(); - lvs -= c.ipgLogVars(); - lvs -= c.posCountedLogVars(); - lvs -= c.negCountedLogVars(); + assert (clause_->isUnit()); + double weight = clause_->literals()[0].isPositive() + ? lwcnf_.posWeight (clause_->literals().front().lid()) + : lwcnf_.negWeight (clause_->literals().front().lid()); + LogVarSet lvs = clause_->constr().logVarSet(); + lvs -= clause_->ipgLogVars(); + lvs -= clause_->posCountedLogVars(); + lvs -= clause_->negCountedLogVars(); unsigned nrGroundings = 1; if (lvs.empty() == false) { - ConstraintTree ct = c.constr(); + ConstraintTree ct = clause_->constr(); ct.project (lvs); nrGroundings = ct.size(); } - if (c.posCountedLogVars().empty() == false) { + if (clause_->posCountedLogVars().empty() == false) { nrGroundings *= std::pow (SetOrNode::nrPositives(), - c.nrPosCountedLogVars()); + clause_->nrPosCountedLogVars()); } - if (c.negCountedLogVars().empty() == false) { + if (clause_->negCountedLogVars().empty() == false) { nrGroundings *= std::pow (SetOrNode::nrNegatives(), - c.nrNegCountedLogVars()); + clause_->nrNegCountedLogVars()); } return Globals::logDomain ? weight * nrGroundings @@ -113,25 +112,25 @@ SmoothNode::weight (void) const Clauses cs = clauses(); double totalWeight = LogAware::multIdenty(); for (size_t i = 0; i < cs.size(); i++) { - double posWeight = lwcnf_.posWeight (cs[i].literals()[0].lid()); - double negWeight = lwcnf_.negWeight (cs[i].literals()[0].lid()); - LogVarSet lvs = cs[i].constr().logVarSet(); - lvs -= cs[i].ipgLogVars(); - lvs -= cs[i].posCountedLogVars(); - lvs -= cs[i].negCountedLogVars(); + double posWeight = lwcnf_.posWeight (cs[i]->literals()[0].lid()); + double negWeight = lwcnf_.negWeight (cs[i]->literals()[0].lid()); + LogVarSet lvs = cs[i]->constr().logVarSet(); + lvs -= cs[i]->ipgLogVars(); + lvs -= cs[i]->posCountedLogVars(); + lvs -= cs[i]->negCountedLogVars(); unsigned nrGroundings = 1; if (lvs.empty() == false) { - ConstraintTree ct = cs[i].constr(); + ConstraintTree ct = cs[i]->constr(); ct.project (lvs); nrGroundings = ct.size(); } - if (cs[i].posCountedLogVars().empty() == false) { + if (cs[i]->posCountedLogVars().empty() == false) { nrGroundings *= std::pow (SetOrNode::nrPositives(), - cs[i].nrPosCountedLogVars()); + cs[i]->nrPosCountedLogVars()); } - if (cs[i].negCountedLogVars().empty() == false) { + if (cs[i]->negCountedLogVars().empty() == false) { nrGroundings *= std::pow (SetOrNode::nrNegatives(), - cs[i].nrNegCountedLogVars()); + cs[i]->nrNegCountedLogVars()); } if (Globals::logDomain) { totalWeight += Util::logSum (posWeight, negWeight) * nrGroundings; @@ -162,12 +161,14 @@ CompilationFailedNode::weight (void) const +Clauses copyClauses (const Clauses& clauses); + LiftedCircuit::LiftedCircuit (const LiftedWCNF* lwcnf) : lwcnf_(lwcnf) { root_ = 0; compilationSucceeded_ = true; - Clauses clauses = lwcnf->clauses(); + Clauses clauses = copyClauses (lwcnf->clauses()); compile (&root_, clauses); if (Globals::verbosity > 1) { smoothCircuit (root_); @@ -231,7 +232,7 @@ LiftedCircuit::compile ( return; } - if (clauses.size() == 1 && clauses[0].isUnit()) { + if (clauses.size() == 1 && clauses[0]->isUnit()) { *follow = new LeafNode (clauses[0], *lwcnf_); return; } @@ -269,6 +270,18 @@ LiftedCircuit::compile ( } +// TODO +Clauses copyClauses (const Clauses& clauses) +{ + Clauses copy; + copy.reserve (clauses.size()); + for (size_t i = 0; i < clauses.size(); i++) { + copy.push_back (new Clause (*clauses[i])); + } + return copy; +} + + bool LiftedCircuit::tryUnitPropagation ( @@ -276,40 +289,52 @@ LiftedCircuit::tryUnitPropagation ( Clauses& clauses) { if (Globals::verbosity > 1) { - backupClauses_ = clauses; + backupClauses_ = copyClauses (clauses); } for (size_t i = 0; i < clauses.size(); i++) { - if (clauses[i].isUnit()) { - Clauses newClauses; + if (clauses[i]->isUnit()) { + Clauses propagClauses; for (size_t j = 0; j < clauses.size(); j++) { if (i != j) { - LiteralId lid = clauses[i].literals()[0].lid(); - LogVarTypes types = clauses[i].logVarTypes (0); - if (clauses[i].literals()[0].isPositive()) { - if (clauses[j].containsPositiveLiteral (lid, types) == false) { - Clause newClause = clauses[j]; - newClause.removeNegativeLiterals (lid, types); - newClauses.push_back (newClause); - } - } else if (clauses[i].literals()[0].isNegative()) { - if (clauses[j].containsNegativeLiteral (lid, types) == false) { - Clause newClause = clauses[j]; - newClause.removePositiveLiterals (lid, types); - newClauses.push_back (newClause); + LiteralId lid = clauses[i]->literals()[0].lid(); + LogVarTypes types = clauses[i]->logVarTypes (0); + if (clauses[i]->literals()[0].isPositive()) { + if (clauses[j]->containsPositiveLiteral (lid, types) == false) { + clauses[j]->removeNegativeLiterals (lid, types); + if (clauses[j]->nrLiterals() > 0) { + propagClauses.push_back (clauses[j]); + } else { + delete clauses[j]; + } + } else { + delete clauses[j]; } + } else if (clauses[i]->literals()[0].isNegative()) { + if (clauses[j]->containsNegativeLiteral (lid, types) == false) { + clauses[j]->removePositiveLiterals (lid, types); + if (clauses[j]->nrLiterals() > 0) { + propagClauses.push_back (clauses[j]); + } else { + delete clauses[j]; + } + } else { + delete clauses[j]; + } } } } + AndNode* andNode = new AndNode(); if (Globals::verbosity > 1) { originClausesMap_[andNode] = backupClauses_; stringstream explanation; - explanation << " UP on>" << clauses[i].literals()[0]; + explanation << " UP on " << clauses[i]->literals()[0]; explanationMap_[andNode] = explanation.str(); } - Clauses leftClauses = {clauses[i]}; - compile (andNode->leftBranch(), leftClauses); - compile (andNode->rightBranch(), newClauses); + + Clauses unitClause = { clauses[i] }; + compile (andNode->leftBranch(), unitClause); + compile (andNode->rightBranch(), propagClauses); (*follow) = andNode; return true; } @@ -336,7 +361,7 @@ LiftedCircuit::tryIndependence ( while (finish == false) { finish = true; for (size_t i = 0; i < indepClauses.size(); i++) { - if (independentClause (indepClauses[i], depClauses) == false) { + if (independentClause (*indepClauses[i], depClauses) == false) { depClauses.push_back (indepClauses[i]); indepClauses.erase (indepClauses.begin() + i); finish = false; @@ -366,24 +391,22 @@ LiftedCircuit::tryShannonDecomp ( Clauses& clauses) { if (Globals::verbosity > 1) { - backupClauses_ = clauses; + backupClauses_ = copyClauses (clauses); } for (size_t i = 0; i < clauses.size(); i++) { - const Literals& literals = clauses[i].literals(); + const Literals& literals = clauses[i]->literals(); for (size_t j = 0; j < literals.size(); j++) { - if (literals[j].isGround (clauses[i].constr(),clauses[i].ipgLogVars())) { - Literal posLit (literals[j], false); - Literal negLit (literals[j], true); - ConstraintTree ct1 = clauses[i].constr(); - ConstraintTree ct2 = clauses[i].constr(); - Clause c1 (ct1); - Clause c2 (ct2); - c1.addLiteral (posLit); - c2.addLiteral (negLit); - Clauses leftClauses = { c1 }; - Clauses rightClauses = { c2 }; - leftClauses.insert (leftClauses.end(), clauses.begin(), clauses.end()); - rightClauses.insert (rightClauses.end(), clauses.begin(), clauses.end()); + if (literals[j].isGround ( + clauses[i]->constr(), clauses[i]->ipgLogVars())) { + + Clause* c1 = lwcnf_->createClause (literals[j].lid()); + Clause* c2 = new Clause (*c1); + c2->literals().front().complement(); + + Clauses otherClauses = copyClauses (clauses); + clauses.push_back (c1); + otherClauses.push_back (c2); + OrNode* orNode = new OrNode(); if (Globals::verbosity > 1) { originClausesMap_[orNode] = backupClauses_; @@ -391,8 +414,9 @@ LiftedCircuit::tryShannonDecomp ( explanation << " SD on " << literals[j]; explanationMap_[orNode] = explanation.str(); } - compile (orNode->leftBranch(), leftClauses); - compile (orNode->rightBranch(), rightClauses); + + compile (orNode->leftBranch(), clauses); + compile (orNode->rightBranch(), otherClauses); (*follow) = orNode; return true; } @@ -409,12 +433,12 @@ LiftedCircuit::tryInclusionExclusion ( Clauses& clauses) { if (Globals::verbosity > 1) { - backupClauses_ = clauses; + backupClauses_ = copyClauses (clauses); } for (size_t i = 0; i < clauses.size(); i++) { - Literals depLits = { clauses[i].literals().front() }; - Literals indepLits (clauses[i].literals().begin() + 1, - clauses[i].literals().end()); + Literals depLits = { clauses[i]->literals().front() }; + Literals indepLits (clauses[i]->literals().begin() + 1, + clauses[i]->literals().end()); bool finish = false; while (finish == false) { finish = true; @@ -432,34 +456,36 @@ LiftedCircuit::tryInclusionExclusion ( for (size_t j = 0; j < depLits.size(); j++) { lvs1 |= depLits[j].logVarSet(); } - if (clauses[i].constr().isCountNormalized (lvs1) == false) { + if (clauses[i]->constr().isCountNormalized (lvs1) == false) { break; } LogVarSet lvs2; for (size_t j = 0; j < indepLits.size(); j++) { lvs2 |= indepLits[j].logVarSet(); } - if (clauses[i].constr().isCountNormalized (lvs2) == false) { + if (clauses[i]->constr().isCountNormalized (lvs2) == false) { break; } - Clause c1 (clauses[i].constr().projectedCopy (lvs1)); + Clause* c1 = new Clause (clauses[i]->constr().projectedCopy (lvs1)); for (size_t j = 0; j < depLits.size(); j++) { - c1.addLiteral (depLits[j]); + c1->addLiteral (depLits[j]); } - Clause c2 (clauses[i].constr().projectedCopy (lvs2)); + Clause* c2 = new Clause (clauses[i]->constr().projectedCopy (lvs2)); for (size_t j = 0; j < indepLits.size(); j++) { - c2.addLiteral (indepLits[j]); + c2->addLiteral (indepLits[j]); } - Clauses plus1Clauses = clauses; - Clauses plus2Clauses = clauses; - Clauses minusClauses = clauses; + Clauses plus1Clauses = copyClauses (clauses); + Clauses plus2Clauses = copyClauses (clauses); + plus1Clauses.erase (plus1Clauses.begin() + i); plus2Clauses.erase (plus2Clauses.begin() + i); - minusClauses.erase (minusClauses.begin() + i); + clauses.erase (clauses.begin() + i); + plus1Clauses.push_back (c1); plus2Clauses.push_back (c2); - minusClauses.push_back (c1); - minusClauses.push_back (c2); + clauses.push_back (c1); + clauses.push_back (c2); + IncExcNode* ieNode = new IncExcNode(); if (Globals::verbosity > 1) { originClausesMap_[ieNode] = backupClauses_; @@ -469,7 +495,7 @@ LiftedCircuit::tryInclusionExclusion ( } compile (ieNode->plus1Branch(), plus1Clauses); compile (ieNode->plus2Branch(), plus2Clauses); - compile (ieNode->minusBranch(), minusClauses); + compile (ieNode->minusBranch(), clauses); *follow = ieNode; return true; } @@ -487,18 +513,17 @@ LiftedCircuit::tryIndepPartialGrounding ( // assumes that all literals have logical variables // else, shannon decomp was possible if (Globals::verbosity > 1) { - backupClauses_ = clauses; + backupClauses_ = copyClauses (clauses); } LogVars rootLogVars; - LogVarSet lvs = clauses[0].ipgCandidates(); + LogVarSet lvs = clauses[0]->ipgCandidates(); for (size_t i = 0; i < lvs.size(); i++) { rootLogVars.clear(); rootLogVars.push_back (lvs[i]); - ConstraintTree ct = clauses[0].constr().projectedCopy ({lvs[i]}); + ConstraintTree ct = clauses[0]->constr().projectedCopy ({lvs[i]}); if (tryIndepPartialGroundingAux (clauses, ct, rootLogVars)) { - Clauses newClauses = clauses; for (size_t j = 0; j < clauses.size(); j++) { - newClauses[j].addIpgLogVar (rootLogVars[j]); + clauses[j]->addIpgLogVar (rootLogVars[j]); } SetAndNode* setAndNode = new SetAndNode (ct.size()); if (Globals::verbosity > 1) { @@ -506,7 +531,7 @@ LiftedCircuit::tryIndepPartialGrounding ( explanationMap_[setAndNode] = " IPG" ; } *follow = setAndNode; - compile (setAndNode->follow(), newClauses); + compile (setAndNode->follow(), clauses); return true; } } @@ -522,9 +547,9 @@ LiftedCircuit::tryIndepPartialGroundingAux ( LogVars& rootLogVars) { for (size_t i = 1; i < clauses.size(); i++) { - LogVarSet lvs = clauses[i].ipgCandidates(); + LogVarSet lvs = clauses[i]->ipgCandidates(); for (size_t j = 0; j < lvs.size(); j++) { - ConstraintTree ct2 = clauses[i].constr().projectedCopy ({lvs[j]}); + ConstraintTree ct2 = clauses[i]->constr().projectedCopy ({lvs[j]}); if (ct.tupleSet() == ct2.tupleSet()) { rootLogVars.push_back (lvs[j]); break; @@ -537,7 +562,7 @@ LiftedCircuit::tryIndepPartialGroundingAux ( // verifies if the IPG logical vars appear in the same positions unordered_map positions; for (size_t i = 0; i < clauses.size(); i++) { - const Literals& literals = clauses[i].literals(); + const Literals& literals = clauses[i]->literals(); for (size_t j = 0; j < literals.size(); j++) { size_t idx = literals[j].indexOfLogVar (rootLogVars[i]); assert (idx != literals[j].nrLogVars()); @@ -563,34 +588,36 @@ LiftedCircuit::tryAtomCounting ( Clauses& clauses) { for (size_t i = 0; i < clauses.size(); i++) { - if (clauses[i].nrPosCountedLogVars() > 0 - || clauses[i].nrNegCountedLogVars() > 0) { + if (clauses[i]->nrPosCountedLogVars() > 0 + || clauses[i]->nrNegCountedLogVars() > 0) { // only allow one atom counting node per branch return false; } } if (Globals::verbosity > 1) { - backupClauses_ = clauses; + backupClauses_ = copyClauses (clauses); } for (size_t i = 0; i < clauses.size(); i++) { - Literals literals = clauses[i].literals(); + Literals literals = clauses[i]->literals(); for (size_t j = 0; j < literals.size(); j++) { if (literals[j].nrLogVars() == 1 - && ! clauses[i].isIpgLogVar (literals[j].logVars().front()) - && ! clauses[i].isCountedLogVar (literals[j].logVars().front())) { - unsigned nrGroundings = clauses[i].constr().projectedCopy ( + && ! clauses[i]->isIpgLogVar (literals[j].logVars().front()) + && ! clauses[i]->isCountedLogVar (literals[j].logVars().front())) { + unsigned nrGroundings = clauses[i]->constr().projectedCopy ( literals[j].logVars()).size(); SetOrNode* setOrNode = new SetOrNode (nrGroundings); if (Globals::verbosity > 1) { originClausesMap_[setOrNode] = backupClauses_; explanationMap_[setOrNode] = " AC" ; } - Clause c1 (clauses[i].constr().projectedCopy (literals[j].logVars())); - Clause c2 (clauses[i].constr().projectedCopy (literals[j].logVars())); - c1.addLiteral (literals[j]); - c2.addLiteralComplemented (literals[j]); - c1.addPosCountedLogVar (literals[j].logVars().front()); - c2.addNegCountedLogVar (literals[j].logVars().front()); + Clause* c1 = new Clause ( + clauses[i]->constr().projectedCopy (literals[j].logVars())); + Clause* c2 = new Clause ( + clauses[i]->constr().projectedCopy (literals[j].logVars())); + c1->addLiteral (literals[j]); + c2->addLiteralComplemented (literals[j]); + c1->addPosCountedLogVar (literals[j].logVars().front()); + c2->addNegCountedLogVar (literals[j].logVars().front()); clauses.push_back (c1); clauses.push_back (c2); shatterCountedLogVars (clauses); @@ -635,26 +662,26 @@ LiftedCircuit::shatterCountedLogVarsAux ( size_t idx1, size_t idx2) { - Literals lits1 = clauses[idx1].literals(); - Literals lits2 = clauses[idx2].literals(); + Literals lits1 = clauses[idx1]->literals(); + Literals lits2 = clauses[idx2]->literals(); for (size_t i = 0; i < lits1.size(); i++) { for (size_t j = 0; j < lits2.size(); j++) { if (lits1[i].lid() == lits2[j].lid()) { LogVars lvs1 = lits1[i].logVars(); LogVars lvs2 = lits2[j].logVars(); for (size_t k = 0; k < lvs1.size(); k++) { - if (clauses[idx1].isCountedLogVar (lvs1[k]) - && clauses[idx2].isCountedLogVar (lvs2[k]) == false) { - clauses.push_back (clauses[idx2]); - clauses[idx2].addPosCountedLogVar (lvs2[k]); - clauses.back().addNegCountedLogVar (lvs2[k]); + if (clauses[idx1]->isCountedLogVar (lvs1[k]) + && clauses[idx2]->isCountedLogVar (lvs2[k]) == false) { + clauses.push_back (new Clause (*clauses[idx2])); + clauses[idx2]->addPosCountedLogVar (lvs2[k]); + clauses.back()->addNegCountedLogVar (lvs2[k]); return true; } - if (clauses[idx2].isCountedLogVar (lvs2[k]) - && clauses[idx1].isCountedLogVar (lvs1[k]) == false) { - clauses.push_back (clauses[idx1]); - clauses[idx1].addPosCountedLogVar (lvs1[k]); - clauses.back().addNegCountedLogVar (lvs1[k]); + if (clauses[idx2]->isCountedLogVar (lvs2[k]) + && clauses[idx1]->isCountedLogVar (lvs1[k]) == false) { + clauses.push_back (new Clause (*clauses[idx1])); + clauses[idx1]->addPosCountedLogVar (lvs1[k]); + clauses.back()->addNegCountedLogVar (lvs1[k]); return true; } } @@ -672,7 +699,7 @@ LiftedCircuit::independentClause ( Clauses& otherClauses) const { for (size_t i = 0; i < otherClauses.size(); i++) { - if (Clause::independentClauses (clause, otherClauses[i]) == false) { + if (Clause::independentClauses (clause, *otherClauses[i]) == false) { return false; } } @@ -781,8 +808,8 @@ LiftedCircuit::smoothCircuit (CircuitNode* node) case CircuitNodeType::LEAF_NODE: { LeafNode* casted = dynamic_cast(node); propagLits.insert (LitLvTypes ( - casted->clause().literals()[0].lid(), - casted->clause().logVarTypes(0))); + casted->clause()->literals()[0].lid(), + casted->clause()->logVarTypes(0))); } default: @@ -802,22 +829,22 @@ LiftedCircuit::createSmoothNode ( if (missingLits.empty() == false) { if (Globals::verbosity > 1) { // assert (Util::contains (originClausesMap_, prev)); - backupClauses_ = originClausesMap_[*prev]; + backupClauses_ = originClausesMap_[*prev]; // TODO copyClauses ? } Clauses clauses; for (size_t i = 0; i < missingLits.size(); i++) { LiteralId lid = missingLits[i].lid(); const LogVarTypes& types = missingLits[i].logVarTypes(); - Clause c = lwcnf_->createClause (lid); + Clause* c = lwcnf_->createClause (lid); for (size_t j = 0; j < types.size(); j++) { - LogVar X = c.literals().front().logVars()[j]; + LogVar X = c->literals().front().logVars()[j]; if (types[j] == LogVarType::POS_LV) { - c.addPosCountedLogVar (X); + c->addPosCountedLogVar (X); } else if (types[j] == LogVarType::NEG_LV) { - c.addNegCountedLogVar (X); + c->addNegCountedLogVar (X); } } - c.addLiteralComplemented (c.literals()[0]); + c->addLiteralComplemented (c->literals()[0]); clauses.push_back (c); } SmoothNode* smoothNode = new SmoothNode (clauses, *lwcnf_); @@ -1109,7 +1136,7 @@ LiftedCircuit::printClauses ( os << " [shape=box," << extraOptions << "label=\"" ; for (size_t i = 0; i < clauses.size(); i++) { if (i != 0) os << "\\n" ; - os << clauses[i]; + os << *clauses[i]; } os << "\"]" ; os << endl; diff --git a/packages/CLPBN/horus/LiftedCircuit.h b/packages/CLPBN/horus/LiftedCircuit.h index 979896b3a..8303c797b 100644 --- a/packages/CLPBN/horus/LiftedCircuit.h +++ b/packages/CLPBN/horus/LiftedCircuit.h @@ -130,17 +130,17 @@ class IncExcNode : public CircuitNode class LeafNode : public CircuitNode { public: - LeafNode (const Clause& clause, const LiftedWCNF& lwcnf) + LeafNode (Clause* clause, const LiftedWCNF& lwcnf) : CircuitNode(), clause_(clause), lwcnf_(lwcnf) { } - const Clause& clause (void) const { return clause_; } + const Clause* clause (void) const { return clause_; } - Clause& clause (void) { return clause_; } + Clause* clause (void) { return clause_; } double weight (void) const; private: - Clause clause_; + Clause* clause_; const LiftedWCNF& lwcnf_; }; diff --git a/packages/CLPBN/horus/LiftedWCNF.cpp b/packages/CLPBN/horus/LiftedWCNF.cpp index f92bf637c..a4145b9d2 100644 --- a/packages/CLPBN/horus/LiftedWCNF.cpp +++ b/packages/CLPBN/horus/LiftedWCNF.cpp @@ -312,7 +312,7 @@ void Clause::printClauses (const Clauses& clauses) { for (size_t i = 0; i < clauses.size(); i++) { - cout << clauses[i] << endl; + cout << *clauses[i] << endl; } } @@ -448,23 +448,24 @@ LiftedWCNF::prvGroupLiterals (PrvGroup prvGroup) -Clause +Clause* LiftedWCNF::createClause (LiteralId lid) const { for (size_t i = 0; i < clauses_.size(); i++) { - const Literals& literals = clauses_[i].literals(); + const Literals& literals = clauses_[i]->literals(); for (size_t j = 0; j < literals.size(); j++) { if (literals[j].lid() == lid) { - ConstraintTree ct = clauses_[i].constr(); + // TODO projectedCopy ? + ConstraintTree ct = clauses_[i]->constr(); ct.project (literals[j].logVars()); - Clause clause (ct); - clause.addLiteral (literals[j]); - return clause; + Clause* c = new Clause (ct); + c->addLiteral (literals[j]); + return c; } } } abort(); // we should not reach this point - return Clause (ConstraintTree({})); + return 0; } @@ -488,10 +489,10 @@ LiftedWCNF::addIndicatorClauses (const ParfactorList& pfList) if (Util::contains (map_, formulas[i].group()) == false) { ConstraintTree tempConstr = *(*it)->constr(); tempConstr.project (formulas[i].logVars()); - Clause clause (tempConstr); + Clause* clause = new Clause (tempConstr); vector lids; for (size_t j = 0; j < formulas[i].range(); j++) { - clause.addLiteral (Literal (freeLiteralId_, formulas[i].logVars())); + clause->addLiteral (Literal (freeLiteralId_, formulas[i].logVars())); lids.push_back (freeLiteralId_); freeLiteralId_ ++; } @@ -500,9 +501,9 @@ LiftedWCNF::addIndicatorClauses (const ParfactorList& pfList) for (size_t k = j + 1; k < formulas[i].range(); k++) { ConstraintTree tempConstr2 = *(*it)->constr(); tempConstr2.project (formulas[i].logVars()); - Clause clause2 (tempConstr2); - clause2.addLiteralComplemented (Literal (clause.literals()[j])); - clause2.addLiteralComplemented (Literal (clause.literals()[k])); + Clause* clause2 = new Clause (tempConstr2); + clause2->addLiteralComplemented (Literal (clause->literals()[j])); + clause2->addLiteralComplemented (Literal (clause->literals()[k])); clauses_.push_back (clause2); } } @@ -532,22 +533,22 @@ LiftedWCNF::addParameterClauses (const ParfactorList& pfList) double posWeight = (**it)[indexer]; addWeight (paramVarLid, posWeight, 1.0); - Clause clause1 (*(*it)->constr()); + Clause* clause1 = new Clause (*(*it)->constr()); for (unsigned i = 0; i < groups.size(); i++) { LiteralId lid = getLiteralId (groups[i], indexer[i]); - clause1.addLiteralComplemented ( + clause1->addLiteralComplemented ( Literal (lid, (*it)->argument(i).logVars())); ConstraintTree ct = *(*it)->constr(); - Clause tempClause (ct); - tempClause.addLiteralComplemented (Literal ( + Clause* tempClause = new Clause (ct); + tempClause->addLiteralComplemented (Literal ( paramVarLid, (*it)->constr()->logVars())); - tempClause.addLiteral (Literal (lid, (*it)->argument(i).logVars())); + tempClause->addLiteral (Literal (lid, (*it)->argument(i).logVars())); clauses_.push_back (tempClause); } - clause1.addLiteral (Literal (paramVarLid, (*it)->constr()->logVars())); + clause1->addLiteral (Literal (paramVarLid, (*it)->constr()->logVars())); clauses_.push_back (clause1); freeLiteralId_ ++; ++ indexer; @@ -601,8 +602,6 @@ LiftedWCNF::printWeights (void) const void LiftedWCNF::printClauses (void) const { - for (unsigned i = 0; i < clauses_.size(); i++) { - cout << clauses_[i] << endl; - } + Clause::printClauses (clauses_); } diff --git a/packages/CLPBN/horus/LiftedWCNF.h b/packages/CLPBN/horus/LiftedWCNF.h index 4163b60d8..c038eeb25 100644 --- a/packages/CLPBN/horus/LiftedWCNF.h +++ b/packages/CLPBN/horus/LiftedWCNF.h @@ -74,6 +74,10 @@ class Clause void addLiteral (const Literal& l) { literals_.push_back (l); } const Literals& literals (void) const { return literals_; } + + Literals& literals (void) { return literals_; } + + size_t nrLiterals (void) const { return literals_.size(); } const ConstraintTree& constr (void) const { return constr_; } @@ -129,7 +133,7 @@ class Clause static bool independentClauses (Clause& c1, Clause& c2); - static void printClauses (const vector& clauses); + static void printClauses (const vector& clauses); friend std::ostream& operator<< (ostream &os, const Clause& clause); @@ -143,7 +147,7 @@ class Clause ConstraintTree constr_; }; -typedef vector Clauses; +typedef vector Clauses; @@ -199,7 +203,7 @@ class LiftedWCNF vector prvGroupLiterals (PrvGroup prvGroup); - Clause createClause (LiteralId lid) const; + Clause* createClause (LiteralId lid) const; void printFormulaIndicators (void) const; From 59f653aabd31fca888e6917adaf387a779902d26 Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Sat, 8 Dec 2012 19:32:19 +0000 Subject: [PATCH 10/42] move implementation of copyClauses to another file --- packages/CLPBN/horus/LiftedCircuit.cpp | 34 ++++++++------------------ packages/CLPBN/horus/LiftedWCNF.cpp | 13 ++++++++++ packages/CLPBN/horus/LiftedWCNF.h | 4 ++- 3 files changed, 26 insertions(+), 25 deletions(-) diff --git a/packages/CLPBN/horus/LiftedCircuit.cpp b/packages/CLPBN/horus/LiftedCircuit.cpp index d89c5a572..fd4c885ec 100644 --- a/packages/CLPBN/horus/LiftedCircuit.cpp +++ b/packages/CLPBN/horus/LiftedCircuit.cpp @@ -161,14 +161,12 @@ CompilationFailedNode::weight (void) const -Clauses copyClauses (const Clauses& clauses); - LiftedCircuit::LiftedCircuit (const LiftedWCNF* lwcnf) : lwcnf_(lwcnf) { root_ = 0; compilationSucceeded_ = true; - Clauses clauses = copyClauses (lwcnf->clauses()); + Clauses clauses = Clause::copyClauses (lwcnf->clauses()); compile (&root_, clauses); if (Globals::verbosity > 1) { smoothCircuit (root_); @@ -270,18 +268,6 @@ LiftedCircuit::compile ( } -// TODO -Clauses copyClauses (const Clauses& clauses) -{ - Clauses copy; - copy.reserve (clauses.size()); - for (size_t i = 0; i < clauses.size(); i++) { - copy.push_back (new Clause (*clauses[i])); - } - return copy; -} - - bool LiftedCircuit::tryUnitPropagation ( @@ -289,7 +275,7 @@ LiftedCircuit::tryUnitPropagation ( Clauses& clauses) { if (Globals::verbosity > 1) { - backupClauses_ = copyClauses (clauses); + backupClauses_ = Clause::copyClauses (clauses); } for (size_t i = 0; i < clauses.size(); i++) { if (clauses[i]->isUnit()) { @@ -391,7 +377,7 @@ LiftedCircuit::tryShannonDecomp ( Clauses& clauses) { if (Globals::verbosity > 1) { - backupClauses_ = copyClauses (clauses); + backupClauses_ = Clause::copyClauses (clauses); } for (size_t i = 0; i < clauses.size(); i++) { const Literals& literals = clauses[i]->literals(); @@ -403,7 +389,7 @@ LiftedCircuit::tryShannonDecomp ( Clause* c2 = new Clause (*c1); c2->literals().front().complement(); - Clauses otherClauses = copyClauses (clauses); + Clauses otherClauses = Clause::copyClauses (clauses); clauses.push_back (c1); otherClauses.push_back (c2); @@ -433,7 +419,7 @@ LiftedCircuit::tryInclusionExclusion ( Clauses& clauses) { if (Globals::verbosity > 1) { - backupClauses_ = copyClauses (clauses); + backupClauses_ = Clause::copyClauses (clauses); } for (size_t i = 0; i < clauses.size(); i++) { Literals depLits = { clauses[i]->literals().front() }; @@ -474,8 +460,8 @@ LiftedCircuit::tryInclusionExclusion ( for (size_t j = 0; j < indepLits.size(); j++) { c2->addLiteral (indepLits[j]); } - Clauses plus1Clauses = copyClauses (clauses); - Clauses plus2Clauses = copyClauses (clauses); + Clauses plus1Clauses = Clause::copyClauses (clauses); + Clauses plus2Clauses = Clause::copyClauses (clauses); plus1Clauses.erase (plus1Clauses.begin() + i); plus2Clauses.erase (plus2Clauses.begin() + i); @@ -513,7 +499,7 @@ LiftedCircuit::tryIndepPartialGrounding ( // assumes that all literals have logical variables // else, shannon decomp was possible if (Globals::verbosity > 1) { - backupClauses_ = copyClauses (clauses); + backupClauses_ = Clause::copyClauses (clauses); } LogVars rootLogVars; LogVarSet lvs = clauses[0]->ipgCandidates(); @@ -595,7 +581,7 @@ LiftedCircuit::tryAtomCounting ( } } if (Globals::verbosity > 1) { - backupClauses_ = copyClauses (clauses); + backupClauses_ = Clause::copyClauses (clauses); } for (size_t i = 0; i < clauses.size(); i++) { Literals literals = clauses[i]->literals(); @@ -829,7 +815,7 @@ LiftedCircuit::createSmoothNode ( if (missingLits.empty() == false) { if (Globals::verbosity > 1) { // assert (Util::contains (originClausesMap_, prev)); - backupClauses_ = originClausesMap_[*prev]; // TODO copyClauses ? + backupClauses_ = originClausesMap_[*prev]; // TODO Clause::copyClauses ? } Clauses clauses; for (size_t i = 0; i < missingLits.size(); i++) { diff --git a/packages/CLPBN/horus/LiftedWCNF.cpp b/packages/CLPBN/horus/LiftedWCNF.cpp index a4145b9d2..0f174b275 100644 --- a/packages/CLPBN/horus/LiftedWCNF.cpp +++ b/packages/CLPBN/horus/LiftedWCNF.cpp @@ -308,6 +308,19 @@ Clause::independentClauses (Clause& c1, Clause& c2) +Clauses +Clause::copyClauses (const Clauses& clauses) +{ + Clauses copy; + copy.reserve (clauses.size()); + for (size_t i = 0; i < clauses.size(); i++) { + copy.push_back (new Clause (*clauses[i])); + } + return copy; +} + + + void Clause::printClauses (const Clauses& clauses) { diff --git a/packages/CLPBN/horus/LiftedWCNF.h b/packages/CLPBN/horus/LiftedWCNF.h index c038eeb25..2296d9a28 100644 --- a/packages/CLPBN/horus/LiftedWCNF.h +++ b/packages/CLPBN/horus/LiftedWCNF.h @@ -132,9 +132,11 @@ class Clause void removeLiteral (size_t litIdx); static bool independentClauses (Clause& c1, Clause& c2); + + static vector copyClauses (const vector& clauses); static void printClauses (const vector& clauses); - + friend std::ostream& operator<< (ostream &os, const Clause& clause); private: From 57a31c2c367a0debf81b69a462d1c0ec3cf385b8 Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Sun, 9 Dec 2012 17:33:36 +0000 Subject: [PATCH 11/42] fix showing the weights on edge labels when there is a SetOrNode ancestor --- packages/CLPBN/horus/LiftedCircuit.cpp | 12 +++++++++++- packages/CLPBN/horus/LiftedCircuit.h | 4 +++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/CLPBN/horus/LiftedCircuit.cpp b/packages/CLPBN/horus/LiftedCircuit.cpp index fd4c885ec..d330f2a68 100644 --- a/packages/CLPBN/horus/LiftedCircuit.cpp +++ b/packages/CLPBN/horus/LiftedCircuit.cpp @@ -78,6 +78,16 @@ double LeafNode::weight (void) const { assert (clause_->isUnit()); + if (clause_->posCountedLogVars().empty() == false + || clause_->negCountedLogVars().empty() == false) { + if (SetOrNode::isSet() == false) { + // return a NaN if we have a SetOrNode + // ancester that is not set. This can only + // happen when calculating the weights + // for the edge labels in graphviz + return 0.0 / 0.0; + } + } double weight = clause_->literals()[0].isPositive() ? lwcnf_.posWeight (clause_->literals().front().lid()) : lwcnf_.negWeight (clause_->literals().front().lid()); @@ -226,7 +236,7 @@ LiftedCircuit::compile ( } if (clauses.empty()) { - *follow = new TrueNode (); + *follow = new TrueNode(); return; } diff --git a/packages/CLPBN/horus/LiftedCircuit.h b/packages/CLPBN/horus/LiftedCircuit.h index 8303c797b..070d0f8d9 100644 --- a/packages/CLPBN/horus/LiftedCircuit.h +++ b/packages/CLPBN/horus/LiftedCircuit.h @@ -75,9 +75,11 @@ class SetOrNode : public CircuitNode CircuitNode** follow (void) { return &follow_; } - static unsigned nrPositives (void) { return nrGrsStack.top().first; } + static unsigned nrPositives (void) { return nrGrsStack.top().first; } static unsigned nrNegatives (void) { return nrGrsStack.top().second; } + + static bool isSet (void) { return nrGrsStack.size() > 0; } double weight (void) const; From 907144db321ad3f0cd692b09f141601f64c71c6a Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Sun, 9 Dec 2012 19:46:14 +0000 Subject: [PATCH 12/42] don't use a stack for atom counting operator --- packages/CLPBN/horus/LiftedCircuit.cpp | 8 ++++++-- packages/CLPBN/horus/LiftedCircuit.h | 10 +++++----- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/packages/CLPBN/horus/LiftedCircuit.cpp b/packages/CLPBN/horus/LiftedCircuit.cpp index d330f2a68..4012aa8a8 100644 --- a/packages/CLPBN/horus/LiftedCircuit.cpp +++ b/packages/CLPBN/horus/LiftedCircuit.cpp @@ -23,7 +23,8 @@ AndNode::weight (void) const -stack> SetOrNode::nrGrsStack; +int SetOrNode::nrPos_ = -1; +int SetOrNode::nrNeg_ = -1; @@ -32,7 +33,8 @@ SetOrNode::weight (void) const { double weightSum = LogAware::addIdenty(); for (unsigned i = 0; i < nrGroundings_ + 1; i++) { - nrGrsStack.push (make_pair (nrGroundings_ - i, i)); + nrPos_ = nrGroundings_ - i; + nrNeg_ = i; if (Globals::logDomain) { double nrCombs = Util::nrCombinations (nrGroundings_, i); double w = follow_->weight(); @@ -42,6 +44,8 @@ SetOrNode::weight (void) const weightSum += Util::nrCombinations (nrGroundings_, i) * w; } } + nrPos_ = -1; + nrNeg_ = -1; return weightSum; } diff --git a/packages/CLPBN/horus/LiftedCircuit.h b/packages/CLPBN/horus/LiftedCircuit.h index 070d0f8d9..3acdf7285 100644 --- a/packages/CLPBN/horus/LiftedCircuit.h +++ b/packages/CLPBN/horus/LiftedCircuit.h @@ -75,19 +75,19 @@ class SetOrNode : public CircuitNode CircuitNode** follow (void) { return &follow_; } - static unsigned nrPositives (void) { return nrGrsStack.top().first; } + static unsigned nrPositives (void) { return nrPos_; } - static unsigned nrNegatives (void) { return nrGrsStack.top().second; } + static unsigned nrNegatives (void) { return nrNeg_; } - static bool isSet (void) { return nrGrsStack.size() > 0; } + static bool isSet (void) { return nrPos_ >= 0; } double weight (void) const; private: CircuitNode* follow_; unsigned nrGroundings_; - - static stack> nrGrsStack; + static int nrPos_; + static int nrNeg_; }; From e46d2177b71b4a40f7eee57c12b82f434d6e7b63 Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Sun, 9 Dec 2012 22:04:33 +0000 Subject: [PATCH 13/42] rework a bit the test infrastructure for lkc --- packages/CLPBN/horus/LiftedWCNF.cpp | 68 ++++++++++++++++++----------- 1 file changed, 42 insertions(+), 26 deletions(-) diff --git a/packages/CLPBN/horus/LiftedWCNF.cpp b/packages/CLPBN/horus/LiftedWCNF.cpp index 0f174b275..5394a51a8 100644 --- a/packages/CLPBN/horus/LiftedWCNF.cpp +++ b/packages/CLPBN/horus/LiftedWCNF.cpp @@ -367,41 +367,53 @@ LiftedWCNF::LiftedWCNF (const ParfactorList& pfList) { addIndicatorClauses (pfList); addParameterClauses (pfList); - - /* - // INCLUSION-EXCLUSION TEST - vector> names = { - // {"a1","b1"},{"a2","b2"},{"a1","b3"} - {"b1","a1"},{"b2","a2"},{"b3","a1"} - }; - Clause c1 (names); - c1.addLiteral (Literal (0, LogVars() = {0})); - c1.addLiteral (Literal (1, LogVars() = {1})); - clauses_.push_back(c1); - freeLiteralId_ ++ ; - freeLiteralId_ ++ ; - */ /* - // ATOM-COUNTING TEST + // INCLUSION-EXCLUSION TEST + clauses_.clear(); vector> names = { - {"p1","p1"},{"p1","p2"},{"p1","p3"}, + {"a1","b1"},{"a2","b2"} + }; + Clause* c1 = new Clause (names); + c1->addLiteral (Literal (0, LogVars() = {0})); + c1->addLiteral (Literal (1, LogVars() = {1})); + clauses_.push_back(c1); + */ + + /* + // INDEPENDENT PARTIAL GROUND TEST + clauses_.clear(); + vector> names = { + {"a1","b1"},{"a2","b2"} + }; + Clause* c1 = new Clause (names); + c1->addLiteral (Literal (0, LogVars() = {0,1})); + c1->addLiteral (Literal (1, LogVars() = {0,1})); + clauses_.push_back(c1); + Clause* c2 = new Clause (names); + c2->addLiteral (Literal (2, LogVars() = {0})); + c2->addLiteral (Literal (1, LogVars() = {0,1})); + clauses_.push_back(c2); + */ + + /* + // ATOM-COUNTING TEST + clauses_.clear(); + vector> names = { + {"p1","p1"},{"p1","p2"},{"p1","p3"}, {"p2","p1"},{"p2","p2"},{"p2","p3"}, {"p3","p1"},{"p3","p2"},{"p3","p3"} }; - Clause c1 (names); - c1.addLiteral (Literal (0, LogVars() = {0})); - c1.addLiteralComplemented (Literal (1, {0,1})); + Clause* c1 = new Clause (names); + c1->addLiteral (Literal (0, LogVars() = {0})); + c1->addLiteralComplemented (Literal (1, {0,1})); clauses_.push_back(c1); - Clause c2 (names); - c2.addLiteral (Literal (0, LogVars()={0})); - c2.addLiteralComplemented (Literal (1, {1,0})); + Clause* c2 = new Clause (names); + c2->addLiteral (Literal (0, LogVars()={0})); + c2->addLiteralComplemented (Literal (1, {1,0})); clauses_.push_back(c2); - addWeight (0, LogAware::log(3.0), LogAware::log(4.0)); - addWeight (1, LogAware::log(2.0), LogAware::log(5.0)); - freeLiteralId_ = 2; */ - + if (Globals::verbosity > 1) { cout << "FORMULA INDICATORS:" << endl; printFormulaIndicators(); @@ -571,9 +583,13 @@ LiftedWCNF::addParameterClauses (const ParfactorList& pfList) } + void LiftedWCNF::printFormulaIndicators (void) const { + if (map_.empty()) { + return; + } set allGroups; ParfactorList::const_iterator it = pfList_.begin(); while (it != pfList_.end()) { From 90736156ae1662902801eeb7f75b350d9717bcfd Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Sun, 9 Dec 2012 22:13:58 +0000 Subject: [PATCH 14/42] some clean ups --- packages/CLPBN/horus/LiftedCircuit.cpp | 64 ++++++++++++-------------- packages/CLPBN/horus/LiftedWCNF.cpp | 23 ++++----- 2 files changed, 38 insertions(+), 49 deletions(-) diff --git a/packages/CLPBN/horus/LiftedCircuit.cpp b/packages/CLPBN/horus/LiftedCircuit.cpp index 4012aa8a8..2edc0d2c9 100644 --- a/packages/CLPBN/horus/LiftedCircuit.cpp +++ b/packages/CLPBN/horus/LiftedCircuit.cpp @@ -101,9 +101,7 @@ LeafNode::weight (void) const lvs -= clause_->negCountedLogVars(); unsigned nrGroundings = 1; if (lvs.empty() == false) { - ConstraintTree ct = clause_->constr(); - ct.project (lvs); - nrGroundings = ct.size(); + nrGroundings = clause_->constr().projectedCopy (lvs).size(); } if (clause_->posCountedLogVars().empty() == false) { nrGroundings *= std::pow (SetOrNode::nrPositives(), @@ -113,7 +111,7 @@ LeafNode::weight (void) const nrGroundings *= std::pow (SetOrNode::nrNegatives(), clause_->nrNegCountedLogVars()); } - return Globals::logDomain + return Globals::logDomain ? weight * nrGroundings : std::pow (weight, nrGroundings); } @@ -134,9 +132,7 @@ SmoothNode::weight (void) const lvs -= cs[i]->negCountedLogVars(); unsigned nrGroundings = 1; if (lvs.empty() == false) { - ConstraintTree ct = cs[i]->constr(); - ct.project (lvs); - nrGroundings = ct.size(); + nrGroundings = cs[i]->constr().projectedCopy (lvs).size(); } if (cs[i]->posCountedLogVars().empty() == false) { nrGroundings *= std::pow (SetOrNode::nrPositives(), @@ -169,7 +165,7 @@ double CompilationFailedNode::weight (void) const { // weighted model counting in compilation - // failed nodes should give nan + // failed nodes should give NaN return 0.0 / 0.0; } @@ -474,13 +470,11 @@ LiftedCircuit::tryInclusionExclusion ( for (size_t j = 0; j < indepLits.size(); j++) { c2->addLiteral (indepLits[j]); } + + clauses.erase (clauses.begin() + i); Clauses plus1Clauses = Clause::copyClauses (clauses); Clauses plus2Clauses = Clause::copyClauses (clauses); - plus1Clauses.erase (plus1Clauses.begin() + i); - plus2Clauses.erase (plus2Clauses.begin() + i); - clauses.erase (clauses.begin() + i); - plus1Clauses.push_back (c1); plus2Clauses.push_back (c2); clauses.push_back (c1); @@ -744,7 +738,7 @@ LiftedCircuit::smoothCircuit (CircuitNode* node) propagLits |= lids2; break; } - + case CircuitNodeType::AND_NODE: { AndNode* casted = dynamic_cast(node); LitLvTypesSet lids1 = smoothCircuit (*casted->leftBranch()); @@ -785,13 +779,13 @@ LiftedCircuit::smoothCircuit (CircuitNode* node) } break; } - + case CircuitNodeType::SET_AND_NODE: { SetAndNode* casted = dynamic_cast(node); propagLits = smoothCircuit (*casted->follow()); break; } - + case CircuitNodeType::INC_EXC_NODE: { IncExcNode* casted = dynamic_cast(node); LitLvTypesSet lids1 = smoothCircuit (*casted->plus1Branch()); @@ -804,18 +798,18 @@ LiftedCircuit::smoothCircuit (CircuitNode* node) propagLits |= lids2; break; } - + case CircuitNodeType::LEAF_NODE: { LeafNode* casted = dynamic_cast(node); propagLits.insert (LitLvTypes ( casted->clause()->literals()[0].lid(), casted->clause()->logVarTypes(0))); } - + default: break; } - + return propagLits; } @@ -828,9 +822,14 @@ LiftedCircuit::createSmoothNode ( { if (missingLits.empty() == false) { if (Globals::verbosity > 1) { - // assert (Util::contains (originClausesMap_, prev)); - backupClauses_ = originClausesMap_[*prev]; // TODO Clause::copyClauses ? - } + unordered_map::iterator it; + it = originClausesMap_.find (*prev); + if (it != originClausesMap_.end()) { + backupClauses_ = it->second; + } else { + backupClauses_ = { ((dynamic_cast(*prev))->clause()) }; + } + } Clauses clauses; for (size_t i = 0; i < missingLits.size(); i++) { LiteralId lid = missingLits[i].lid(); @@ -1127,21 +1126,18 @@ LiftedCircuit::printClauses ( if (Util::contains (originClausesMap_, node)) { clauses = originClausesMap_[node]; } else if (getCircuitNodeType (node) == CircuitNodeType::LEAF_NODE) { - clauses = { (dynamic_cast(node))->clause() } ; + clauses = { (dynamic_cast(node))->clause() } ; } else if (getCircuitNodeType (node) == CircuitNodeType::SMOOTH_NODE) { - clauses = (dynamic_cast(node))->clauses(); + clauses = (dynamic_cast(node))->clauses(); } - if (clauses.empty() == false) { - os << escapeNode (node); - os << " [shape=box," << extraOptions << "label=\"" ; - for (size_t i = 0; i < clauses.size(); i++) { - if (i != 0) os << "\\n" ; - os << *clauses[i]; - } - os << "\"]" ; - os << endl; - } else { - os << " [shape=box]" << endl; + assert (clauses.empty() == false); + os << escapeNode (node); + os << " [shape=box," << extraOptions << "label=\"" ; + for (size_t i = 0; i < clauses.size(); i++) { + if (i != 0) os << "\\n" ; + os << *clauses[i]; } + os << "\"]" ; + os << endl; } diff --git a/packages/CLPBN/horus/LiftedWCNF.cpp b/packages/CLPBN/horus/LiftedWCNF.cpp index 5394a51a8..33d0c87ca 100644 --- a/packages/CLPBN/horus/LiftedWCNF.cpp +++ b/packages/CLPBN/horus/LiftedWCNF.cpp @@ -33,11 +33,6 @@ Literal::toString ( { stringstream ss; negated_ ? ss << "¬" : ss << "" ; - // if (negated_ == false) { - // posWeight_ < 0.0 ? ss << "λ" : ss << "Θ" ; - // } else { - // negWeight_ < 0.0 ? ss << "λ" : ss << "Θ" ; - // } ss << "λ" ; ss << lid_ ; if (logVars_.empty() == false) { @@ -480,16 +475,14 @@ LiftedWCNF::createClause (LiteralId lid) const const Literals& literals = clauses_[i]->literals(); for (size_t j = 0; j < literals.size(); j++) { if (literals[j].lid() == lid) { - // TODO projectedCopy ? - ConstraintTree ct = clauses_[i]->constr(); - ct.project (literals[j].logVars()); + ConstraintTree ct = clauses_[i]->constr().projectedCopy ( + literals[j].logVars()); Clause* c = new Clause (ct); c->addLiteral (literals[j]); return c; } } } - abort(); // we should not reach this point return 0; } @@ -512,8 +505,8 @@ LiftedWCNF::addIndicatorClauses (const ParfactorList& pfList) const ProbFormulas& formulas = (*it)->arguments(); for (size_t i = 0; i < formulas.size(); i++) { if (Util::contains (map_, formulas[i].group()) == false) { - ConstraintTree tempConstr = *(*it)->constr(); - tempConstr.project (formulas[i].logVars()); + ConstraintTree tempConstr = (*it)->constr()->projectedCopy( + formulas[i].logVars()); Clause* clause = new Clause (tempConstr); vector lids; for (size_t j = 0; j < formulas[i].range(); j++) { @@ -524,8 +517,8 @@ LiftedWCNF::addIndicatorClauses (const ParfactorList& pfList) clauses_.push_back (clause); for (size_t j = 0; j < formulas[i].range() - 1; j++) { for (size_t k = j + 1; k < formulas[i].range(); k++) { - ConstraintTree tempConstr2 = *(*it)->constr(); - tempConstr2.project (formulas[i].logVars()); + ConstraintTree tempConstr2 = (*it)->constr()->projectedCopy ( + formulas[i].logVars()); Clause* clause2 = new Clause (tempConstr2); clause2->addLiteralComplemented (Literal (clause->literals()[j])); clause2->addLiteralComplemented (Literal (clause->literals()[k])); @@ -598,8 +591,8 @@ LiftedWCNF::printFormulaIndicators (void) const if (Util::contains (allGroups, formulas[i].group()) == false) { allGroups.insert (formulas[i].group()); cout << formulas[i] << " | " ; - ConstraintTree tempCt = *(*it)->constr(); - tempCt.project (formulas[i].logVars()); + ConstraintTree tempCt = (*it)->constr()->projectedCopy ( + formulas[i].logVars()); cout << tempCt.tupleSet(); cout << " indicators => " ; vector indicators = From 9c8827c30996e475442a0ba7c473fefc461e4735 Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Sun, 9 Dec 2012 22:57:39 +0000 Subject: [PATCH 15/42] always copy clauses for backup --- packages/CLPBN/horus/LiftedCircuit.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/CLPBN/horus/LiftedCircuit.cpp b/packages/CLPBN/horus/LiftedCircuit.cpp index 2edc0d2c9..bbf1c3d02 100644 --- a/packages/CLPBN/horus/LiftedCircuit.cpp +++ b/packages/CLPBN/horus/LiftedCircuit.cpp @@ -349,7 +349,7 @@ LiftedCircuit::tryIndependence ( return false; } if (Globals::verbosity > 1) { - backupClauses_ = clauses; + backupClauses_ = Clause::copyClauses (clauses); } Clauses depClauses = { clauses[0] }; Clauses indepClauses (clauses.begin() + 1, clauses.end()); @@ -827,7 +827,8 @@ LiftedCircuit::createSmoothNode ( if (it != originClausesMap_.end()) { backupClauses_ = it->second; } else { - backupClauses_ = { ((dynamic_cast(*prev))->clause()) }; + backupClauses_ = Clause::copyClauses ( + {((dynamic_cast(*prev))->clause())}); } } Clauses clauses; From a25f4584c86e07af18ad0b3b488ed89a109558e3 Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Mon, 10 Dec 2012 18:48:54 +0000 Subject: [PATCH 16/42] support printing LitLvTypes objects --- packages/CLPBN/horus/LiftedWCNF.cpp | 27 +++++++++++++++++++++++---- packages/CLPBN/horus/LiftedWCNF.h | 2 ++ 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/packages/CLPBN/horus/LiftedWCNF.cpp b/packages/CLPBN/horus/LiftedWCNF.cpp index 33d0c87ca..9357311f6 100644 --- a/packages/CLPBN/horus/LiftedWCNF.cpp +++ b/packages/CLPBN/horus/LiftedWCNF.cpp @@ -60,7 +60,8 @@ Literal::toString ( -std::ostream& operator<< (ostream &os, const Literal& lit) +std::ostream& +operator<< (ostream &os, const Literal& lit) { os << lit.toString(); return os; @@ -256,7 +257,7 @@ LogVarTypes Clause::logVarTypes (size_t litIdx) const { LogVarTypes types; - const LogVars lvs = literals_[litIdx].logVars(); + const LogVars& lvs = literals_[litIdx].logVars(); for (size_t i = 0; i < lvs.size(); i++) { if (posCountedLvs_.contains (lvs[i])) { types.push_back (LogVarType::POS_LV); @@ -326,7 +327,8 @@ Clause::printClauses (const Clauses& clauses) -std::ostream& operator<< (ostream &os, const Clause& clause) +std::ostream& +operator<< (ostream &os, const Clause& clause) { for (unsigned i = 0; i < clause.literals_.size(); i++) { if (i != 0) os << " v " ; @@ -357,6 +359,23 @@ Clause::getLogVarSetExcluding (size_t idx) const +std::ostream& +operator<< (std::ostream &os, const LitLvTypes& lit) +{ + os << lit.lid_ << "<" ; + for (size_t i = 0; i < lit.lvTypes_.size(); i++) { + switch (lit.lvTypes_[i]) { + case LogVarType::FULL_LV: os << "F" ; break; + case LogVarType::POS_LV: os << "P" ; break; + case LogVarType::NEG_LV: os << "N" ; break; + } + } + os << ">" ; + return os; +} + + + LiftedWCNF::LiftedWCNF (const ParfactorList& pfList) : freeLiteralId_(0), pfList_(pfList) { @@ -494,7 +513,7 @@ LiftedWCNF::getLiteralId (PrvGroup prvGroup, unsigned range) assert (Util::contains (map_, prvGroup)); return map_[prvGroup][range]; } - + void diff --git a/packages/CLPBN/horus/LiftedWCNF.h b/packages/CLPBN/horus/LiftedWCNF.h index 2296d9a28..e360718a7 100644 --- a/packages/CLPBN/horus/LiftedWCNF.h +++ b/packages/CLPBN/horus/LiftedWCNF.h @@ -179,6 +179,8 @@ class LitLvTypes void setAllFullLogVars (void) { std::fill (lvTypes_.begin(), lvTypes_.end(), LogVarType::FULL_LV); } + friend std::ostream& operator<< (std::ostream &os, const LitLvTypes& lit); + private: LiteralId lid_; LogVarTypes lvTypes_; From 8371e395dd1f0ff2640a34e08355bf90cfeca31e Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Mon, 10 Dec 2012 19:37:41 +0000 Subject: [PATCH 17/42] fix typo --- packages/CLPBN/horus/LiftedWCNF.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/CLPBN/horus/LiftedWCNF.h b/packages/CLPBN/horus/LiftedWCNF.h index e360718a7..92f07d192 100644 --- a/packages/CLPBN/horus/LiftedWCNF.h +++ b/packages/CLPBN/horus/LiftedWCNF.h @@ -165,7 +165,10 @@ class LitLvTypes if (types1.lid_ < types2.lid_) { return true; } - return types1.lvTypes_ < types2.lvTypes_; + if (types1.lid_ == types2.lid_) { + return types1.lvTypes_ < types2.lvTypes_; + } + return false; } }; From 1d732594e2bbcdc4b4687e722af5c8b8a442e348 Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Mon, 10 Dec 2012 19:39:09 +0000 Subject: [PATCH 18/42] smooth circuit Smooth the circuit independent of the verbosity level, but don't smooth it when the compilation has fail. --- packages/CLPBN/horus/LiftedCircuit.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/CLPBN/horus/LiftedCircuit.cpp b/packages/CLPBN/horus/LiftedCircuit.cpp index bbf1c3d02..de7cd96b1 100644 --- a/packages/CLPBN/horus/LiftedCircuit.cpp +++ b/packages/CLPBN/horus/LiftedCircuit.cpp @@ -178,8 +178,10 @@ LiftedCircuit::LiftedCircuit (const LiftedWCNF* lwcnf) compilationSucceeded_ = true; Clauses clauses = Clause::copyClauses (lwcnf->clauses()); compile (&root_, clauses); - if (Globals::verbosity > 1) { + if (compilationSucceeded_) { smoothCircuit (root_); + } + if (Globals::verbosity > 1) { exportToGraphViz("circuit.smooth.dot"); if (compilationSucceeded_) { double wmc = LogAware::exp (getWeightedModelCount()); From bb68afe91ded1291ba419c8de804459d38a9a91c Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Tue, 11 Dec 2012 15:52:20 +0000 Subject: [PATCH 19/42] Fix an error caused by a temporary being out of scope --- packages/CLPBN/horus/LiftedCircuit.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/CLPBN/horus/LiftedCircuit.cpp b/packages/CLPBN/horus/LiftedCircuit.cpp index de7cd96b1..96ed62282 100644 --- a/packages/CLPBN/horus/LiftedCircuit.cpp +++ b/packages/CLPBN/horus/LiftedCircuit.cpp @@ -870,7 +870,8 @@ LiftedCircuit::getAllPossibleTypes (unsigned nrLogVars) const return {{LogVarType::POS_LV},{LogVarType::NEG_LV}}; } vector res; - Indexer indexer (vector (nrLogVars, 2)); + Ranges ranges (nrLogVars, 2); + Indexer indexer (ranges); while (indexer.valid()) { LogVarTypes types; for (size_t i = 0; i < nrLogVars; i++) { From a59c152962516c755bdf0142684bd94537bded0d Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Tue, 11 Dec 2012 16:02:48 +0000 Subject: [PATCH 20/42] Lkc: Fix smoothing in atom counting nodes --- packages/CLPBN/horus/LiftedCircuit.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/CLPBN/horus/LiftedCircuit.cpp b/packages/CLPBN/horus/LiftedCircuit.cpp index 96ed62282..5dd1bca2c 100644 --- a/packages/CLPBN/horus/LiftedCircuit.cpp +++ b/packages/CLPBN/horus/LiftedCircuit.cpp @@ -592,7 +592,7 @@ LiftedCircuit::tryAtomCounting ( } if (Globals::verbosity > 1) { backupClauses_ = Clause::copyClauses (clauses); - } + } for (size_t i = 0; i < clauses.size(); i++) { Literals literals = clauses[i]->literals(); for (size_t j = 0; j < literals.size(); j++) { @@ -765,7 +765,7 @@ LiftedCircuit::smoothCircuit (CircuitNode* node) bool typeFound = false; for (size_t k = 0; k < propagLits.size(); k++) { if (litSet[i].first == propagLits[k].lid() - && containsTypes (allTypes[j], propagLits[k].logVarTypes())) { + && containsTypes (propagLits[k].logVarTypes(), allTypes[j])) { typeFound = true; break; } @@ -776,8 +776,13 @@ LiftedCircuit::smoothCircuit (CircuitNode* node) } } createSmoothNode (missingLids, casted->follow()); - for (size_t i = 0; i < propagLits.size(); i++) { - propagLits[i].setAllFullLogVars(); + // setAllFullLogVars() can cause repeated elements in + // the set. Fix this by reconstructing the set again + LitLvTypesSet copy = propagLits; + propagLits.clear(); + for (size_t i = 0; i < copy.size(); i++) { + copy[i].setAllFullLogVars(); + propagLits.insert (copy[i]); } break; } From d8a7b7aad6fd4ae2dd8d14c30d887e81fad123fe Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Tue, 11 Dec 2012 16:19:59 +0000 Subject: [PATCH 21/42] Examples: change extension to pfl --- packages/CLPBN/examples/{city.yap => city.pfl} | 0 .../CLPBN/examples/{comp_workshops.yap => comp_workshops.pfl} | 0 .../CLPBN/examples/{social_domain1.yap => social_domain1.pfl} | 0 .../CLPBN/examples/{social_domain2.yap => social_domain2.pfl} | 0 .../CLPBN/examples/{workshop_attrs.yap => workshop_attrs.pfl} | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename packages/CLPBN/examples/{city.yap => city.pfl} (100%) rename packages/CLPBN/examples/{comp_workshops.yap => comp_workshops.pfl} (100%) rename packages/CLPBN/examples/{social_domain1.yap => social_domain1.pfl} (100%) rename packages/CLPBN/examples/{social_domain2.yap => social_domain2.pfl} (100%) rename packages/CLPBN/examples/{workshop_attrs.yap => workshop_attrs.pfl} (100%) diff --git a/packages/CLPBN/examples/city.yap b/packages/CLPBN/examples/city.pfl similarity index 100% rename from packages/CLPBN/examples/city.yap rename to packages/CLPBN/examples/city.pfl diff --git a/packages/CLPBN/examples/comp_workshops.yap b/packages/CLPBN/examples/comp_workshops.pfl similarity index 100% rename from packages/CLPBN/examples/comp_workshops.yap rename to packages/CLPBN/examples/comp_workshops.pfl diff --git a/packages/CLPBN/examples/social_domain1.yap b/packages/CLPBN/examples/social_domain1.pfl similarity index 100% rename from packages/CLPBN/examples/social_domain1.yap rename to packages/CLPBN/examples/social_domain1.pfl diff --git a/packages/CLPBN/examples/social_domain2.yap b/packages/CLPBN/examples/social_domain2.pfl similarity index 100% rename from packages/CLPBN/examples/social_domain2.yap rename to packages/CLPBN/examples/social_domain2.pfl diff --git a/packages/CLPBN/examples/workshop_attrs.yap b/packages/CLPBN/examples/workshop_attrs.pfl similarity index 100% rename from packages/CLPBN/examples/workshop_attrs.yap rename to packages/CLPBN/examples/workshop_attrs.pfl From 47bc8f22fc678c86b344621a6c5bafc83277689c Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Tue, 11 Dec 2012 16:20:55 +0000 Subject: [PATCH 22/42] Examples: sprinker was converted from clpbn to pfl --- packages/CLPBN/examples/sprinkler.yap | 33 --------------------------- 1 file changed, 33 deletions(-) delete mode 100644 packages/CLPBN/examples/sprinkler.yap diff --git a/packages/CLPBN/examples/sprinkler.yap b/packages/CLPBN/examples/sprinkler.yap deleted file mode 100644 index f0be31fee..000000000 --- a/packages/CLPBN/examples/sprinkler.yap +++ /dev/null @@ -1,33 +0,0 @@ - -:- style_check(all). - -:- ensure_loaded(library(clpbn)). - -wet_grass(W) :- - sprinkler(S), - rain(R), - { W = wet with p([f,t], - ([1.0,0.1,0.1,0.01, - 0.0,0.9,0.9,0.99]), - [S,R]) - }. - - -sprinkler(P) :- - cloudy(C), - { P = sprinkler with p([f,t], - [0.5,0.9, - 0.5,0.1], - [C]) - }. - -rain(R) :- - cloudy(C), - { R = rain with p([f,t], [0.8,0.2, - 0.2,0.8], - [C]) }. - -cloudy(C) :- - { C = cloudy with p([f,t],[0.5,0.5],[]) }. - - From 1641d1fa30097d8f1365583856b66dfc581d2b09 Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Tue, 11 Dec 2012 16:22:38 +0000 Subject: [PATCH 23/42] Remove files that souldn't be in the repository --- packages/CLPBN/examples/fail1.yap | 21 --------------------- packages/CLPBN/examples/fail2.yap | 21 --------------------- 2 files changed, 42 deletions(-) delete mode 100644 packages/CLPBN/examples/fail1.yap delete mode 100644 packages/CLPBN/examples/fail2.yap diff --git a/packages/CLPBN/examples/fail1.yap b/packages/CLPBN/examples/fail1.yap deleted file mode 100644 index 1646fd8ff..000000000 --- a/packages/CLPBN/examples/fail1.yap +++ /dev/null @@ -1,21 +0,0 @@ - -:- use_module(library(pfl)). - -:- set_pfl_flag(solver,lve). -%:- set_pfl_flag(solver,bp), clpbn_horus:set_horus_flag(inf_alg,ve). -%:- set_pfl_flag(solver,bp), clpbn_horus:set_horus_flag(inf_alg,bp). -%:- set_pfl_flag(solver,bp), clpbn_horus:set_horus_flag(inf_alg,cbp). - - -t(ann). -t(dave). - -% p(ann,t). - -markov p(X)::[t,f] ; [0.1, 0.3] ; [t(X)]. - -% use standard Prolog queries: provide evidence first. - -?- p(ann,t), p(ann,X). -% ?- p(ann,X). - diff --git a/packages/CLPBN/examples/fail2.yap b/packages/CLPBN/examples/fail2.yap deleted file mode 100644 index 342cc9c52..000000000 --- a/packages/CLPBN/examples/fail2.yap +++ /dev/null @@ -1,21 +0,0 @@ -:- use_module(library(pfl)). - -:- set_solver(lve). -%:- set_solver(hve). -%:- set_solver(bp). -%:- set_solver(cbp). - -:- yap_flag(write_strings, off). - -:- clpbn_horus:set_horus_flag(verbosity,5). - -people(p1,p1). -people(p1,p2). -people(p2,p1). -people(p2,p2). - -markov p(A,A)::[t,f] ; [1.0,4.5] ; [people(A,_)]. - -markov p(A,B)::[t,f] ; [1.0,4.5] ; [people(A,B)]. - -?- p(p1,p1,X). From ccba2d41770f0fcc5fd05246b8e65de475c7a6bb Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Tue, 11 Dec 2012 21:02:26 +0000 Subject: [PATCH 24/42] update Makefile to reflect the change of extension to .pfl --- packages/CLPBN/Makefile.in | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/packages/CLPBN/Makefile.in b/packages/CLPBN/Makefile.in index b8bcde77a..579ade735 100644 --- a/packages/CLPBN/Makefile.in +++ b/packages/CLPBN/Makefile.in @@ -106,13 +106,12 @@ CLPBN_EXAMPLES= \ $(CLPBN_EXDIR)/burglary-alarm.pfl \ $(CLPBN_EXDIR)/burglary-alarm.uai \ $(CLPBN_EXDIR)/cg.yap \ - $(CLPBN_EXDIR)/city.yap \ - $(CLPBN_EXDIR)/comp_workshops.yap \ - $(CLPBN_EXDIR)/social_domain1.yap \ - $(CLPBN_EXDIR)/social_domain2.yap \ + $(CLPBN_EXDIR)/city.pfl \ + $(CLPBN_EXDIR)/comp_workshops.pfl \ + $(CLPBN_EXDIR)/social_domain1.pfl \ + $(CLPBN_EXDIR)/social_domain2.pfl \ $(CLPBN_EXDIR)/sprinkler.pfl \ - $(CLPBN_EXDIR)/sprinkler.yap \ - $(CLPBN_EXDIR)/workshop_attrs.yap + $(CLPBN_EXDIR)/workshop_attrs.pfl install: $(CLBN_TOP) $(CLBN_PROGRAMS) $(CLPBN_PROGRAMS) From 4310e42562cd86902d8d108b74f9c7708428cfc9 Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Tue, 11 Dec 2012 23:06:09 +0000 Subject: [PATCH 25/42] rework examples --- packages/CLPBN/examples/burglary-alarm.pfl | 42 +++++-- packages/CLPBN/examples/city.pfl | 123 +++++++++++++-------- packages/CLPBN/examples/comp_workshops.pfl | 21 ++-- packages/CLPBN/examples/learning/train.yap | 4 +- packages/CLPBN/examples/social_domain1.pfl | 27 +++-- packages/CLPBN/examples/social_domain2.pfl | 27 +++-- packages/CLPBN/examples/sprinkler.pfl | 40 ++++--- packages/CLPBN/examples/workshop_attrs.pfl | 26 +++-- 8 files changed, 196 insertions(+), 114 deletions(-) diff --git a/packages/CLPBN/examples/burglary-alarm.pfl b/packages/CLPBN/examples/burglary-alarm.pfl index defbf83da..1583e3f1c 100644 --- a/packages/CLPBN/examples/burglary-alarm.pfl +++ b/packages/CLPBN/examples/burglary-alarm.pfl @@ -1,23 +1,45 @@ :- use_module(library(pfl)). -%:- set_solver(lve). -%:- set_solver(hve). +:- set_solver(hve). +%:- set_solver(ve). +%:- set_solver(jt). +%:- set_solver(bdd). %:- set_solver(bp). %:- set_solver(cbp). +%:- set_solver(gibbs). +%:- set_solver(lve). +%:- set_solver(lkc). +%:- set_solver(lbp). -:- yap_flag(write_strings, off). +bayes burglary ; burglary_table ; []. -bayes burglary::[t,f] ; [0.001, 0.999] ; []. +bayes earthquake ; earthquake_table ; []. -bayes earthquake::[t,f] ; [0.002, 0.998]; []. +bayes alarm, burglary, earthquake ; alarm_table ; []. -bayes alarm::[t,f], burglary, earthquake ; - [0.95, 0.94, 0.29, 0.001, 0.05, 0.06, 0.71, 0.999] ; - []. +bayes john_calls, alarm ; john_calls_table ; []. -bayes john_calls::[t,f], alarm ; [0.9, 0.05, 0.1, 0.95] ; []. +bayes mary_calls, alarm ; mary_calls_table ; []. -bayes mary_calls::[t,f], alarm ; [0.7, 0.01, 0.3, 0.99] ; []. +burglary_table( + [ 0.001, + 0.999 ]). + +earthquake_table( + [ 0.002, + 0.998 ]). + +alarm_table( + [ 0.95, 0.94, 0.29, 0.001, + 0.05, 0.06, 0.71, 0.999 ]). + +john_calls_table( + [ 0.9, 0.05, + 0.1, 0.95 ]). + +mary_calls_table( + [ 0.7, 0.01, + 0.3, 0.99 ]). % ?- john_calls(J), mary_calls(t). diff --git a/packages/CLPBN/examples/city.pfl b/packages/CLPBN/examples/city.pfl index a133b42c2..afa1c23bd 100644 --- a/packages/CLPBN/examples/city.pfl +++ b/packages/CLPBN/examples/city.pfl @@ -1,9 +1,15 @@ :- use_module(library(pfl)). -%:- set_solver(lve). -%:- set_solver(hve). +:- set_solver(hve). +%:- set_solver(ve). +%:- set_solver(jt). +%:- set_solver(bdd). %:- set_solver(bp). %:- set_solver(cbp). +%:- set_solver(gibbs). +%:- set_solver(lve). +%:- set_solver(lkc). +%:- set_solver(lbp). :- multifile people/2. :- multifile ev/1. @@ -14,74 +20,97 @@ people(p3, nyc). people(p4, nyc). people(p5, nyc). -ev(descn(p2, t)). -ev(descn(p3, t)). -ev(descn(p4, t)). -ev(descn(p5, t)). +ev(descn(p2, fits)). +ev(descn(p3, fits)). +ev(descn(p4, fits)). +ev(descn(p5, fits)). -bayes city_conservativeness(C)::[y,n] ; cons_table(C) ; [people(_,C)]. +bayes city_conservativeness(C)::[high,low] ; + cons_table(C) ; + [people(_,C)]. -bayes gender(P)::[m,f] ; gender_table(P) ; [people(P,_)]. +bayes gender(P)::[male,female] ; + gender_table(P) ; + [people(P,_)]. -bayes hair_color(P)::[t,f], city_conservativeness(C) ; hair_color_table(P) ; [people(P,C)]. +bayes hair_color(P)::[dark,bright], city_conservativeness(C) ; + hair_color_table(P) ; + [people(P,C)]. -bayes car_color(P)::[t,f], hair_color(P) ; car_color_table(P); [people(P,_)]. +bayes car_color(P)::[dark,bright], hair_color(P) ; + car_color_table(P) ; + [people(P,_)]. -bayes height(P)::[t,f], gender(P) ; height_table(P) ; [people(P,_)]. +bayes height(P)::[tall,short], gender(P) ; + height_table(P) ; + [people(P,_)]. -bayes shoe_size(P)::[t,f], height(P) ; shoe_size_table(P); [people(P,_)]. +bayes shoe_size(P)::[big,small], height(P) ; + shoe_size_table(P) ; + [people(P,_)]. -bayes guilty(P)::[y,n] ; guilty_table(P) ; [people(P,_)]. +bayes guilty(P)::[y,n] ; + guilty_table(P) ; + [people(P,_)]. -bayes descn(P)::[t,f], car_color(P), hair_color(P), height(P), guilty(P) ; descn_table(P) ; [people(P,_)]. +bayes descn(P)::[fits,dont_fit], car_color(P), + hair_color(P), height(P), guilty(P) ; + descn_table(P) ; + [people(P,_)]. -bayes witness(C)::[t,f], descn(Joe), descn(P2) ; wit_table ; [people(_,C), Joe=joe, P2=p2]. - -% FIXME -%cons_table(amsterdam, [0.2, 0.8]) :- !. -cons_table(_, [0.8, 0.2]). +bayes witness(C), descn(Joe), descn(P2) ; + witness_table ; + [people(_,C), Joe=joe, P2=p2]. -gender_table(_, [0.55, 0.45]). +cons_table(amsterdam, +% special case for amsterdam: amsterdam is +% less conservative than other cities (is it?) +/* y */ [ 0.2, +/* n */ 0.8 ]) :- !. % FIXME +cons_table(_, +/* y */ [ 0.8, +/* n */ 0.2 ]). +gender_table(_, +/* male */ [ 0.55, +/* female */ 0.45 ]). hair_color_table(_, - /* conservative_city */ - /* y n */ - [ 0.05, 0.1, - 0.95, 0.9 ]). +/* high low */ +/* dark */ [ 0.05, 0.1, +/* bright */ 0.95, 0.9 ]). - car_color_table(_, - /* t f */ - [ 0.9, 0.2, - 0.1, 0.8 ]). +/* dark bright */ +/* dark */ [ 0.9, 0.2, +/* bright */ 0.1, 0.8 ]). - height_table(_, - /* m f */ - [ 0.6, 0.4, - 0.4, 0.6 ]). +/* male female */ +/* tall */ [ 0.6, 0.4, +/* short */ 0.4, 0.6 ]). - shoe_size_table(_, - /* t f */ - [ 0.9, 0.1, - 0.1, 0.9 ]). - - -guilty_table(_, [0.23, 0.77]). +/* tall short */ +/* big */ [ 0.9, 0.1, +/* small */ 0.1, 0.9 ]). +guilty_table(_, +/* yes */ [ 0.23, +/* no */ 0.77 ]). descn_table(_, - /* color, hair, height, guilt */ - /* ttttt tttf ttft ttff tfttt tftf tfft tfff ttttt fttf ftft ftff ffttt fftf ffft ffff */ - [ 0.99, 0.5, 0.23, 0.88, 0.41, 0.3, 0.76, 0.87, 0.44, 0.43, 0.29, 0.72, 0.23, 0.91, 0.95, 0.92, - 0.01, 0.5, 0.77, 0.12, 0.59, 0.7, 0.24, 0.13, 0.56, 0.57, 0.71, 0.28, 0.77, 0.09, 0.05, 0.08]). +/* car_color(P), hair_color(P), height(P), guilty(P) */ +/* fits */ [ 0.99, 0.5, 0.23, 0.88, 0.41, 0.3, 0.76, 0.87, +/* fits */ 0.44, 0.43, 0.29, 0.72, 0.23, 0.91, 0.95, 0.92, +/* dont_fit */ 0.01, 0.5, 0.77, 0.12, 0.59, 0.7, 0.24, 0.13, +/* dont_fit */ 0.56, 0.57, 0.71, 0.28, 0.77, 0.09, 0.05, 0.08 ]). - -wit_table([0.2, 0.45, 0.24, 0.34, - 0.8, 0.55, 0.76, 0.66]). +witness_table( +/* descn(Joe), descn(P2) */ +/* t */ [ 0.2, 0.45, 0.24, 0.34, +/* f */ 0.8, 0.55, 0.76, 0.66 ]). runall(G, Wrapper) :- @@ -101,5 +130,5 @@ is_joe_guilty(Guilty) :- guilty(joe, Guilty). -% ?- is_joe_guilty(Guilty) +?- is_joe_guilty(Guilty). diff --git a/packages/CLPBN/examples/comp_workshops.pfl b/packages/CLPBN/examples/comp_workshops.pfl index 2ab7d2cd5..b14a0fba2 100644 --- a/packages/CLPBN/examples/comp_workshops.pfl +++ b/packages/CLPBN/examples/comp_workshops.pfl @@ -1,11 +1,14 @@ :- use_module(library(pfl)). -%:- set_solver(lve). -%:- set_solver(hve). +:- set_solver(hve). +%:- set_solver(ve). +%:- set_solver(jt). %:- set_solver(bp). %:- set_solver(cbp). - -:- yap_flag(write_strings, off). +%:- set_solver(gibbs). +%:- set_solver(lve). +%:- set_solver(lkc). +%:- set_solver(lbp). :- multifile c/2. @@ -25,9 +28,13 @@ c(p5,w1). c(p5,w2). c(p5,w3). -markov attends(P)::[t,f], hot(W)::[t,f] ; [0.2, 0.8, 0.8, 0.8] ; [c(P,W)]. +markov attends(P), hot(W) ; + [0.2, 0.8, 0.8, 0.8] ; + [c(P,W)]. -markov attends(P)::[t,f], series::[t,f] ; [0.501, 0.499, 0.499, 0.499] ; [c(P,_)]. +markov attends(P), series ; + [0.501, 0.499, 0.499, 0.499] ; + [c(P,_)]. -% ?- series(X). +?- series(X). diff --git a/packages/CLPBN/examples/learning/train.yap b/packages/CLPBN/examples/learning/train.yap index f6dda7aef..31179c919 100644 --- a/packages/CLPBN/examples/learning/train.yap +++ b/packages/CLPBN/examples/learning/train.yap @@ -1,5 +1,3 @@ - - professor_ability(p0,h). professor_ability(p1,h). professor_ability(p2,m). @@ -1250,6 +1248,7 @@ registration_grade(r854,c). registration_grade(r855,d). registration_grade(r856,c). + registration_satisfaction(r0,h). registration_satisfaction(r1,l). registration_satisfaction(r2,h). @@ -2431,3 +2430,4 @@ student_ranking(s252,b). student_ranking(s253,b). student_ranking(s254,b). student_ranking(s255,c). + diff --git a/packages/CLPBN/examples/social_domain1.pfl b/packages/CLPBN/examples/social_domain1.pfl index 348ac4bec..8330ebe84 100644 --- a/packages/CLPBN/examples/social_domain1.pfl +++ b/packages/CLPBN/examples/social_domain1.pfl @@ -1,11 +1,15 @@ :- use_module(library(pfl)). -%:- set_solver(lve). -%:- set_solver(hve). +:- set_solver(hve). +%:- set_solver(ve). +%:- set_solver(jt). +%:- set_solver(bdd). %:- set_solver(bp). %:- set_solver(cbp). - -:- yap_flag(write_strings, off). +%:- set_solver(gibbs). +%:- set_solver(lve). +%:- set_solver(lkc). +%:- set_solver(lbp). :- multifile people/1. @@ -16,16 +20,19 @@ people(X,Y) :- people(Y), X \== Y. -markov smokes(X)::[t,f]; [1.0, 4.0552]; [people(X)]. +markov smokes(X) ; [1.0, 4.0552]; [people(X)]. -markov cancer(X)::[t,f]; [1.0, 9.9742]; [people(X)]. +markov cancer(X) ; [1.0, 9.9742]; [people(X)]. -markov friends(X,Y)::[t,f] ; [1.0, 99.48432] ; [people(X,Y)]. +markov friends(X,Y) ; [1.0, 99.48432] ; [people(X,Y)]. -markov smokes(X)::[t,f], cancer(X)::[t,f] ; [4.48169, 4.48169, 1.0, 4.48169] ; [people(X)]. +markov smokes(X), cancer(X) ; + [4.48169, 4.48169, 1.0, 4.48169] ; + [people(X)]. -markov friends(X,Y)::[t,f], smokes(X)::[t,f], smokes(Y)::[t,f] ; - [3.004166, 3.004166, 3.004166, 3.004166, 3.004166, 1.0, 1.0, 3.004166] ; [people(X,Y)]. +markov friends(X,Y), smokes(X), smokes(Y) ; + [3.004166, 3.004166, 3.004166, 3.004166, 3.004166, 1.0, 1.0, 3.004166] ; + [people(X,Y)]. % ?- friends(p1,p2,X). diff --git a/packages/CLPBN/examples/social_domain2.pfl b/packages/CLPBN/examples/social_domain2.pfl index e02c2d9a1..fbafd04b7 100644 --- a/packages/CLPBN/examples/social_domain2.pfl +++ b/packages/CLPBN/examples/social_domain2.pfl @@ -1,11 +1,15 @@ :- use_module(library(pfl)). -%:- set_solver(lve). -%:- set_solver(hve). +:- set_solver(hve). +%:- set_solver(ve). +%:- set_solver(jt). +%:- set_solver(bdd). %:- set_solver(bp). %:- set_solver(cbp). - -:- yap_flag(write_strings, off). +%:- set_solver(gibbs). +%:- set_solver(lve). +%:- set_solver(lkc). +%:- set_solver(lbp). :- multifile people/1. @@ -16,16 +20,19 @@ people(X,Y) :- people(Y). % X \== Y. -markov smokes(X)::[t,f]; [1.0, 4.0552]; [people(X)]. +markov smokes(X); [1.0, 4.0552]; [people(X)]. -markov asthma(X)::[t,f]; [1.0, 9.9742] ; [people(X)]. +markov asthma(X); [1.0, 9.9742] ; [people(X)]. -markov friends(X,Y)::[t,f]; [1.0, 99.48432] ; [people(X,Y)]. +markov friends(X,Y); [1.0, 99.48432] ; [people(X,Y)]. -markov asthma(X)::[t,f], smokes(X)::[t,f]; [4.48169, 4.48169, 1.0, 4.48169] ; [people(X)]. +markov asthma(X), smokes(X); + [4.48169, 4.48169, 1.0, 4.48169] ; + [people(X)]. -markov asthma(X)::[t,f], friends(X,Y)::[t,f], smokes(Y)::[t,f]; - [3.004166, 3.004166, 3.004166, 3.004166, 3.004166, 1.0, 1.0, 3.004166] ; [people(X,Y)]. +markov asthma(X), friends(X,Y), smokes(Y); + [3.004166, 3.004166, 3.004166, 3.004166, 3.004166, 1.0, 1.0, 3.004166] ; + [people(X,Y)]. % ?- smokes(p1,t), smokes(p2,t), friends(p1,p2,X) diff --git a/packages/CLPBN/examples/sprinkler.pfl b/packages/CLPBN/examples/sprinkler.pfl index bc86dd776..daceb3786 100644 --- a/packages/CLPBN/examples/sprinkler.pfl +++ b/packages/CLPBN/examples/sprinkler.pfl @@ -1,12 +1,15 @@ - -:- style_check(all). - :- ensure_loaded(library(pfl)). -% 1. define domain of random variables -% not necessary if they are boolean. - -% 2. define parfactors +:- set_solver(hve). +%:- set_solver(ve). +%:- set_solver(jt). +%:- set_solver(bdd). +%:- set_solver(bp). +%:- set_solver(cbp). +%:- set_solver(gibbs). +%:- set_solver(lve). +%:- set_solver(lkc). +%:- set_solver(lbp). bayes cloudy ; cloudy_table ; []. @@ -16,18 +19,21 @@ bayes rain, cloudy ; rain_table ; []. bayes wet_grass, sprinkler, rain ; wet_grass_table ; []. +cloudy_table( + [ 0.5, + 0.5 ]). -% 3. define CPTs. +sprinkler_table( + [ 0.5, 0.9, + 0.5, 0.1 ]). -wet_grass_table([1.0,0.1,0.1,0.01, - 0.0,0.9,0.9,0.99]). +rain_table( + [ 0.8, 0.2, + 0.2, 0.8 ]). -sprinkler_table([0.5,0.9, - 0.5,0.1]). - -rain_table([0.8,0.2, - 0.2,0.8]). - -cloudy_table([0.5,0.5]). +wet_grass_table( + [ 1.0, 0.1, 0.1, 0.01, + 0.0, 0.9, 0.9, 0.99 ]). +% ?- wet_grass(X). diff --git a/packages/CLPBN/examples/workshop_attrs.pfl b/packages/CLPBN/examples/workshop_attrs.pfl index 05a97106f..c5e9d08f1 100644 --- a/packages/CLPBN/examples/workshop_attrs.pfl +++ b/packages/CLPBN/examples/workshop_attrs.pfl @@ -1,29 +1,33 @@ :- use_module(library(pfl)). -%:- set_solver(lve). -%:- set_solver(hve). +:- set_solver(hve). +%:- set_solver(ve). +%:- set_solver(jt). +%:- set_solver(bdd). %:- set_solver(bp). %:- set_solver(cbp). - -:- yap_flag(write_strings, off). +%:- set_solver(gibbs). +%:- set_solver(lve). +%:- set_solver(lkc). +%:- set_solver(lbp). :- multifile people/1. people @ 5. -markov attends(P)::[t,f], attr1::[t,f] ; [0.7, 0.3, 0.3, 0.3] ; [people(P)]. +markov attends(P), attr1 ; [0.7, 0.3, 0.3, 0.3] ; [people(P)]. -markov attends(P)::[t,f], attr2::[t,f] ; [0.7, 0.3, 0.3, 0.3] ; [people(P)]. +markov attends(P), attr2 ; [0.7, 0.3, 0.3, 0.3] ; [people(P)]. -markov attends(P)::[t,f], attr3::[t,f] ; [0.7, 0.3, 0.3, 0.3] ; [people(P)]. +markov attends(P), attr3 ; [0.7, 0.3, 0.3, 0.3] ; [people(P)]. -markov attends(P)::[t,f], attr4::[t,f] ; [0.7, 0.3, 0.3, 0.3] ; [people(P)]. +markov attends(P), attr4 ; [0.7, 0.3, 0.3, 0.3] ; [people(P)]. -markov attends(P)::[t,f], attr5::[t,f] ; [0.7, 0.3, 0.3, 0.3] ; [people(P)]. +markov attends(P), attr5 ; [0.7, 0.3, 0.3, 0.3] ; [people(P)]. -markov attends(P)::[t,f], attr6::[t,f] ; [0.7, 0.3, 0.3, 0.3] ; [people(P)]. +markov attends(P), attr6 ; [0.7, 0.3, 0.3, 0.3] ; [people(P)]. -markov attends(P)::[t,f], series::[t,f] ; [0.501, 0.499, 0.499, 0.499] ; [people(P)]. +markov attends(P), series ; [0.501, 0.499, 0.499, 0.499] ; [people(P)]. % ?- series(X). From 27a235f65bff7d1d67287774f75c303c506d093b Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Tue, 11 Dec 2012 23:36:10 +0000 Subject: [PATCH 26/42] Remove text explaning pfl. The text is badly written and explanaing pfl shouldn't be in *.pfl files, but rather in paper or README file --- packages/CLPBN/examples/School/parschema.yap | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/packages/CLPBN/examples/School/parschema.yap b/packages/CLPBN/examples/School/parschema.yap index 70be09835..7f39a9819 100644 --- a/packages/CLPBN/examples/School/parschema.yap +++ b/packages/CLPBN/examples/School/parschema.yap @@ -1,22 +1,7 @@ +/* Base file for school database. Supposed to be called from school_*.yap */ :- use_module(library(pfl)). -/* base file for school database. Supposed to be called from school_*.yap */ - -% -% bayes is a parfactor for a bayesian network, -% first argument is target of other arguments pop(K) <- abi(K) -% second argument is the name of a predicate to call for \phi (CPT) -% last argument is a list of goals defining the constraints over the elements -% of the -% - -% -% these states that skolem variables abi(K) are in a parametric factor with -% with \phi defined by abi_table(X) and whose domain and constraints -% is obtained from professor/1. -% - bayes abi(K)::[h,m,l] ; abi_table ; [professor(K)]. bayes pop(K)::[h,m,l], abi(K) ; pop_table ; [professor(K)]. From f128b6de7a79b22ce8b4d92d4001c797ca0ee4c3 Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Wed, 12 Dec 2012 00:27:32 +0000 Subject: [PATCH 27/42] school_32 should use clp(bn) --- packages/CLPBN/examples/School/README | 9 ++++----- packages/CLPBN/examples/School/school_32.yap | 14 ++++---------- 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/packages/CLPBN/examples/School/README b/packages/CLPBN/examples/School/README index 93265adf4..0dcd566c8 100644 --- a/packages/CLPBN/examples/School/README +++ b/packages/CLPBN/examples/School/README @@ -5,13 +5,13 @@ There are four main files: school_128.yap: a school with 128 professors, 256 courses and 4096 students. school_64.yap: medium size school -school_32.yap: small school (pfl) +school_32.yap: small school (clp(bn)) -sch32.yap: small school (clp(bn)) +sch32.yap: small school (pfl) -parschema.yap: the CLP(BN) schema +parschema.yap: the PFL schema -schema.yap: the PFL schema +schema.yap: the CLP(BN) schema tables: CPTs @@ -53,4 +53,3 @@ rank(s0,X). rank(s0,X), student_intelligence(s0,h). - diff --git a/packages/CLPBN/examples/School/school_32.yap b/packages/CLPBN/examples/School/school_32.yap index 00dc27a2c..cc9349460 100644 --- a/packages/CLPBN/examples/School/school_32.yap +++ b/packages/CLPBN/examples/School/school_32.yap @@ -1,5 +1,3 @@ - - /* total_professors(32). @@ -13,17 +11,13 @@ total_students(256). :- style_check(all). +:- yap_flag(unknown,error). + :- yap_flag(write_strings,on). -:- ensure_loaded(parschema). +:- use_module(library(clpbn)). -:- yap_flag(unknown,error). -%:- clpbn_horus:set_solver(lve). -%:- clpbn_horus:set_solver(hve). -:- clpbn_horus:set_solver(bp). -%:- clpbn_horus:set_solver(bdd). -:- clpbn_horus:set_solver(ve). -%:- clpbn_horus:set_solver(cbp). +:- [-schema]. :- ensure_loaded(school32_data). From 108e310a0f5e70ae600712fe33e3190f44fa0180 Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Wed, 12 Dec 2012 15:16:30 +0000 Subject: [PATCH 28/42] Rework the learning examples --- packages/CLPBN/examples/School/parschema.yap | 50 ++++++------ packages/CLPBN/examples/School/schema.yap | 5 +- packages/CLPBN/examples/School/school_64.yap | 2 - packages/CLPBN/examples/School/tables.yap | 81 ++++++++++--------- .../CLPBN/examples/learning/prof_params.pfl | 37 ++++----- .../CLPBN/examples/learning/school_params.pfl | 52 ++++++------ .../examples/learning/sprinkler_params.yap | 27 +++---- packages/CLPBN/examples/social_domain2.pfl | 10 +-- 8 files changed, 127 insertions(+), 137 deletions(-) diff --git a/packages/CLPBN/examples/School/parschema.yap b/packages/CLPBN/examples/School/parschema.yap index 7f39a9819..0e55dadc5 100644 --- a/packages/CLPBN/examples/School/parschema.yap +++ b/packages/CLPBN/examples/School/parschema.yap @@ -6,17 +6,21 @@ bayes abi(K)::[h,m,l] ; abi_table ; [professor(K)]. bayes pop(K)::[h,m,l], abi(K) ; pop_table ; [professor(K)]. -bayes diff(C) :: [h,m,l] ; diff_table ; [course(C,_)]. +bayes diff(C)::[h,m,l] ; diff_table ; [course(C,_)]. -bayes int(S) :: [h,m,l] ; int_table ; [student(S)]. +bayes int(S)::[h,m,l] ; int_table ; [student(S)]. -bayes grade(C,S)::[a,b,c,d], int(S), diff(C) ; grade_table ; [registration(_,C,S)]. +bayes grade(C,S)::[a,b,c,d], int(S), diff(C) ; + grade_table ; + [registration(_,C,S)]. -bayes satisfaction(C,S)::[h,m,l], abi(P), grade(C,S) ; sat_table ; [reg_satisfaction(C,S,P)]. +bayes satisfaction(C,S)::[h,m,l], abi(P), grade(C,S) ; + sat_table ; + [reg_satisfaction(C,S,P)]. -bayes rat(C) :: [h,m,l], Sats ; avg ; [course_rat(C, Sats)]. +bayes rat(C)::[h,m,l], Sats ; avg ; [course_rat(C, Sats)]. -bayes rank(S) :: [a,b,c,d], Grades ; avg ; [student_ranking(S,Grades)]. +bayes rank(S)::[a,b,c,d], Grades ; avg ; [student_ranking(S,Grades)]. grade(Key, Grade) :- @@ -30,19 +34,27 @@ reg_satisfaction(CKey, SKey, PKey) :- course_rat(CKey, Sats) :- course(CKey, _), setof(satisfaction(CKey,SKey), - PKey^reg_satisfaction(CKey, SKey, PKey), - Sats). + PKey^reg_satisfaction(CKey, SKey, PKey), + Sats). student_ranking(SKey, Grades) :- student(SKey), - setof(grade(CKey,SKey), RKey^registration(RKey,CKey,SKey), Grades). + setof(grade(CKey,SKey), + RKey^registration(RKey,CKey,SKey), + Grades). :- ensure_loaded(tables). % convert to longer names -professor_ability(P,A) :- abi(P, A). +professor_ability(P,A) :- abi(P,A). -professor_popularity(P,A) :- pop(P, A). +professor_popularity(P,A) :- pop(P,A). + +course_difficulty(P,A) :- diff(P,A). + +student_intelligence(P,A) :- int(P,A). + +course_rating(C,X) :- rat(C,X). registration_grade(R,A) :- registration(R,C,S), @@ -52,24 +64,14 @@ registration_satisfaction(R,A) :- registration(R,C,S), satisfaction(C,S,A). -student_intelligence(P,A) :- int(P, A). +registration_course(R,C) :- registration(R,C,_). -course_difficulty(P,A) :- diff(P, A). - - -registration_course(R,C) :- - registration(R, C, _). - -registration_student(R,S) :- - registration(R, _, S). - -course_rating(C,X) :- rat(C,X). +registration_student(R,S) :- registration(R,_,S). % -% evidence +% Evidence % %abi(p0, h). - %pop(p1, m). %pop(p2, h). diff --git a/packages/CLPBN/examples/School/schema.yap b/packages/CLPBN/examples/School/schema.yap index dfeb48ee1..d6eefb4e0 100644 --- a/packages/CLPBN/examples/School/schema.yap +++ b/packages/CLPBN/examples/School/schema.yap @@ -1,5 +1,4 @@ - -/* base file for school database. Supposed to be called from school_*.yap */ +/* Base file for school database. Supposed to be called from school_*.yap */ professor_key(Key) :- professor(Key). @@ -67,5 +66,3 @@ student_ranking(Key, Rank) :- :- ensure_loaded(tables). - - diff --git a/packages/CLPBN/examples/School/school_64.yap b/packages/CLPBN/examples/School/school_64.yap index b3084a96e..3b2df93d6 100644 --- a/packages/CLPBN/examples/School/school_64.yap +++ b/packages/CLPBN/examples/School/school_64.yap @@ -4702,5 +4702,3 @@ registration(r3457,c5,s1023). registration(r3458,c37,s1023). registration(r3459,c57,s1023). - - diff --git a/packages/CLPBN/examples/School/tables.yap b/packages/CLPBN/examples/School/tables.yap index 1bf6c14fa..a028aeb27 100644 --- a/packages/CLPBN/examples/School/tables.yap +++ b/packages/CLPBN/examples/School/tables.yap @@ -1,30 +1,49 @@ -int_table(_,T ,[h, m, l]) :- int_table(T). +abi_table( +/* h */ [ 0.50, +/* m */ 0.40, +/* l */ 0.10 ]). -int_table([0.5, - 0.4, - 0.1]). +abi_table(_, T) :- abi_table(T). - /* h h h m h l m h m m m l l h l m l l */ -grade_table([ - 0.2, 0.7, 0.85, 0.1, 0.2, 0.5, 0.01, 0.05,0.1 , - 0.6, 0.25, 0.12, 0.3, 0.6,0.35,0.04, 0.15, 0.4 , - 0.15,0.04, 0.02, 0.4,0.15,0.12, 0.5, 0.6, 0.4, - 0.05,0.01, 0.01, 0.2,0.05,0.03, 0.45, 0.2, 0.1 ]). +pop_table( +/* h m l */ +/* h */ [ 0.9, 0.2, 0.01, +/* m */ 0.09, 0.6, 0.09, +/* l */ 0.01, 0.2, 0.9 ]). + +pop_table(_, T) :- pop_table(T). + +diff_table( +/* h */ [ 0.25, +/* m */ 0.50, +/* l */ 0.25 ]). + +dif_table(_, T) :- diff_table(T). + +int_table( +/* h */ [ 0.5, +/* m */ 0.4, +/* l */ 0.1 ]). + +int_table(_,T ,[h,m,l]) :- int_table(T). + +grade_table( +/* h h h m h l m h m m m l l h l m l l */ +/* a */ [ 0.2, 0.7, 0.85, 0.1, 0.2, 0.5, 0.01, 0.05, 0.1, +/* b */ 0.6, 0.25, 0.12, 0.3, 0.6, 0.35, 0.04, 0.15, 0.4, +/* c */ 0.15, 0.04, 0.02, 0.4, 0.15, 0.12, 0.5, 0.6, 0.4, +/* d */ 0.05, 0.01, 0.01, 0.2, 0.05, 0.03, 0.45, 0.2, 0.1 ]). grade_table(I, D, - /* h h h m h l m h m m m l l h l m l l */ - p([a,b,c,d], T, [I,D])) :- grade_table(T). + p([a,b,c,d], T, [I,D])) :- grade_table(T). sat_table( - /* h a h b h c h d m a m b m c m d l a l b l c l d */ -/*h*/ [0.98, 0.9, 0.8 , 0.6, 0.9, 0.4, 0.2, 0.01, 0.5, 0.2, 0.01, 0.01, -/*m*/ 0.01, 0.09,0.15, 0.3, 0.05, 0.4, 0.3, 0.04, 0.35, 0.3, 0.09, 0.01 , -/*l*/ 0.01, 0.01,0.05, 0.1, 0.05, 0.2, 0.5, 0.95, 0.15, 0.5, 0.9, 0.98]). -/* - A: professor's ability; - B: student's grade (for course registration). -*/ +/* h a h b h c h d m a m b m c m d l a l b l c l d */ +/* h */ [ 0.98, 0.9, 0.8 , 0.6, 0.9, 0.4, 0.2, 0.01, 0.5, 0.2, 0.01, 0.01, +/* m */ 0.01, 0.09, 0.15, 0.3, 0.05, 0.4, 0.3, 0.04, 0.35, 0.3, 0.09, 0.01, +/* l */ 0.01, 0.01, 0.05, 0.1, 0.05, 0.2, 0.5, 0.95, 0.15, 0.5, 0.9, 0.98 ]). + satisfaction_table(A, G, p([h,m,l], T, [A,G])) :- sat_table(T). @@ -35,22 +54,8 @@ satisfaction_table(A, G, p([h,m,l], T, [A,G])) :- sat_table(T). % % add all and divide on the number of elements on the table! % -rating_prob_table([0.9,0.05,0.01, - 0.09,0.9,0.09, - 0.01,0.05,0.9]). - -abi_table( [0.50, 0.40, 0.10]). - -abi_table( _, T) :- abi_table(T). - - -pop_table( [0.9, 0.2, 0.01, - 0.09, 0.6, 0.09, - 0.01, 0.2, 0.9]). - -pop_table(_, T) :- pop_table(T). - -diff_table([0.25, 0.50, 0.25]). - -dif_table(_, T) :- diff_table(T). +rating_prob_table( + [ 0.9, 0.05, 0.01, + 0.09, 0.9, 0.09, + 0.01, 0.05, 0.9 ]). diff --git a/packages/CLPBN/examples/learning/prof_params.pfl b/packages/CLPBN/examples/learning/prof_params.pfl index bd555ce3e..43b822f4e 100644 --- a/packages/CLPBN/examples/learning/prof_params.pfl +++ b/packages/CLPBN/examples/learning/prof_params.pfl @@ -1,21 +1,31 @@ -% learn distribution for school database. +/* Learn distribution for professor database. */ :- use_module(library(pfl)). :- use_module(library(clpbn/learning/em)). +%:- clpbn:set_clpbn_flag(em_solver,gibbs). +%:- clpbn:set_clpbn_flag(em_solver,jt). +%:- clpbn:set_clpbn_flag(em_solver,hve). +:- clpbn:set_clpbn_flag(em_solver,ve). +%:- clpbn:set_clpbn_flag(em_solver,bp). +%:- clpbn:set_clpbn_flag(em_solver,bdd). + bayes abi(K)::[h,m,l] ; abi_table ; [professor(K)]. bayes pop(K)::[h,m,l], abi(K) ; pop_table ; [professor(K)]. -abi_table([0.3,0.3,0.4]). +abi_table([0.3, 0.3, 0.4]). -pop_table([0.3,0.3,0.4,0.3,0.3,0.4,0.3,0.3,0.4]). +pop_table([0.3, 0.3, 0.4, 0.3, 0.3, 0.4, 0.3, 0.3, 0.4]). -goal_list([/*abi(p0,h), +goal_list([ +/* + abi(p0,h), abi(p1,m), abi(p2,m), - abi(p3,m),*/ + abi(p3,m), +*/ abi(p4,l), pop(p5,h), abi(p5,_), @@ -32,13 +42,6 @@ professor(p6). professor(p7). professor(p8). -%:- clpbn:set_clpbn_flag(em_solver,gibbs). -%:- clpbn:set_clpbn_flag(em_solver,jt). -:- clpbn:set_clpbn_flag(em_solver,hve). -:- clpbn:set_clpbn_flag(em_solver,ve). -%:- clpbn:set_clpbn_flag(em_solver,bp). -%:- clpbn:set_clpbn_flag(em_solver,bdd). - timed_main :- statistics(runtime, _), main(Lik), @@ -47,13 +50,5 @@ timed_main :- main(Lik) :- goal_list(L), -% run_queries(L), - em(L,0.01,10,_,Lik). - -run_queries([]). -run_queries(Q.L) :- - call(Q), - run_queries(L). - - + em(L,0.01,10,_,Lik). diff --git a/packages/CLPBN/examples/learning/school_params.pfl b/packages/CLPBN/examples/learning/school_params.pfl index 983909832..912c9b714 100644 --- a/packages/CLPBN/examples/learning/school_params.pfl +++ b/packages/CLPBN/examples/learning/school_params.pfl @@ -1,6 +1,6 @@ -% learn distribution for school database. +/* Learn distribution for school database. */ -% we do not consider the aggregates yet. +/* We do not consider aggregates yet. */ :- [pos:train]. @@ -10,30 +10,25 @@ %:- clpbn:set_clpbn_flag(em_solver,gibbs). %:- clpbn:set_clpbn_flag(em_solver,jt). -% :- clpbn:set_clpbn_flag(em_solver,ve). -:- clpbn:set_clpbn_flag(em_solver,bp). + :- clpbn:set_clpbn_flag(em_solver,ve). +%:- clpbn:set_clpbn_flag(em_solver,bp). timed_main :- statistics(runtime, _), findall(X,goal(X),L), - em(L,0.01,10,_,Lik), + em(L,0.01,10,_,Lik), statistics(runtime, [T,_]), format('Took ~d msec and Lik ~3f~n',[T,Lik]). main :- - findall(X,goal(X),L), - em(L,0.001,10,CPTs,Lik), - writeln(Lik:CPTs). + findall(X,goal(X),L), + em(L,0.001,10,CPTs,Lik), + writeln(Lik:CPTs). debug_school :- graph(L), - em(L,0.01,10,CPTs,Lik), - writeln(Lik:CPTs). - -run_queries([]). -run_queries(Q.L) :- - call(Q), - run_queries(L). + em(L,0.01,10,CPTs,Lik), + writeln(Lik:CPTs). graph([professor_ability(p0,_G131367),professor_ability(p1,h),professor_ability(p2,_G131377),professor_ability(p3,_G131382),professor_ability(p4,_G131387),professor_ability(p5,_G131392),professor_ability(p6,_G131397),professor_ability(p7,l),professor_ability(p8,m),professor_ability(p9,h),professor_ability(p10,m),professor_ability(p11,_G131422),professor_ability(p12,_G131427),professor_ability(p13,_G131432),professor_ability(p14,_G131437),professor_ability(p15,_G131442),professor_ability(p16,_G131447),professor_ability(p17,m),professor_ability(p18,l),professor_ability(p19,h),professor_ability(p20,h),professor_ability(p21,_G131472),professor_ability(p22,m),professor_ability(p23,m),professor_ability(p24,l),professor_ability(p25,m),professor_ability(p26,_G131497),professor_ability(p27,h),professor_ability(p28,h),professor_ability(p29,_G131512),professor_ability(p30,_G131517),professor_ability(p31,_G131522),professor_popularity(p0,h),professor_popularity(p1,h),professor_popularity(p2,_G131537),professor_popularity(p3,h),professor_popularity(p4,h),professor_popularity(p5,h),professor_popularity(p6,l),professor_popularity(p7,l),professor_popularity(p8,_G131567),professor_popularity(p9,_G131572),professor_popularity(p10,l),professor_popularity(p11,_G131582),professor_popularity(p12,h),professor_popularity(p13,l),professor_popularity(p14,_G131597),professor_popularity(p15,h),professor_popularity(p16,m),professor_popularity(p17,_G131612),professor_popularity(p18,_G131617),professor_popularity(p19,_G131622),professor_popularity(p20,_G131627),professor_popularity(p21,h),professor_popularity(p22,_G131637),professor_popularity(p23,_G131642),professor_popularity(p24,l),professor_popularity(p25,_G131652),professor_popularity(p26,_G131657),professor_popularity(p27,h),professor_popularity(p28,h),professor_popularity(p29,_G131672),professor_popularity(p30,m),professor_popularity(p31,_G131682),registration_grade(r0,a),registration_grade(r1,_G131692),registration_grade(r2,_G131697),registration_grade(r3,c),registration_grade(r4,c),registration_grade(r5,c),registration_grade(r6,_G131717),registration_grade(r7,a),registration_grade(r8,b),registration_grade(r9,_G131732),registration_grade(r10,_G131737),registration_grade(r11,a),registration_grade(r12,_G131747),registration_grade(r13,a),registration_grade(r14,_G131757),registration_grade(r15,b),registration_grade(r16,a),registration_grade(r17,b),registration_grade(r18,_G131777),registration_grade(r19,_G131782),registration_grade(r20,c),registration_grade(r21,_G131792),registration_grade(r22,_G131797),registration_grade(r23,_G131802),registration_grade(r24,b),registration_grade(r25,a),registration_grade(r26,_G131817),registration_grade(r27,_G131822),registration_grade(r28,c),registration_grade(r29,b),registration_grade(r30,c),registration_grade(r31,b),registration_grade(r32,_G131847),registration_grade(r33,a),registration_grade(r34,c),registration_grade(r35,c),registration_grade(r36,a),registration_grade(r37,a),registration_grade(r38,c),registration_grade(r39,a),registration_grade(r40,_G131887),registration_grade(r41,_G131892),registration_grade(r42,_G131897),registration_grade(r43,a),registration_grade(r44,a),registration_grade(r45,a),registration_grade(r46,a),registration_grade(r47,_G131922),registration_grade(r48,_G131927),registration_grade(r49,b),registration_grade(r50,b),registration_grade(r51,b),registration_grade(r52,_G131947),registration_grade(r53,a),registration_grade(r54,_G131957),registration_grade(r55,a),registration_grade(r56,c),registration_grade(r57,_G131972),registration_grade(r58,_G131977),registration_grade(r59,_G131982),registration_grade(r60,_G131987),registration_grade(r61,a),registration_grade(r62,_G131997),registration_grade(r63,b),registration_grade(r64,b),registration_grade(r65,b),registration_grade(r66,_G132017),registration_grade(r67,b),registration_grade(r68,a),registration_grade(r69,_G132032),registration_grade(r70,_G132037),registration_grade(r71,_G132042),registration_grade(r72,_G132047),registration_grade(r73,_G132052),registration_grade(r74,a),registration_grade(r75,_G132062),registration_grade(r76,_G132067),registration_grade(r77,_G132072),registration_grade(r78,b),registration_grade(r79,_G132082),registration_grade(r80,_G132087),registration_grade(r81,_G132092),registration_grade(r82,_G132097),registration_grade(r83,_G132102),registration_grade(r84,_G132107),registration_grade(r85,b),registration_grade(r86,_G132117),registration_grade(r87,b),registration_grade(r88,_G132127),registration_grade(r89,_G132132),registration_grade(r90,_G132137),registration_grade(r91,a),registration_grade(r92,_G132147),registration_grade(r93,_G132152),registration_grade(r94,_G132157),registration_grade(r95,_G132162),registration_grade(r96,_G132167),registration_grade(r97,a),registration_grade(r98,b),registration_grade(r99,b),registration_grade(r100,a),registration_grade(r101,a),registration_grade(r102,a),registration_grade(r103,_G132202),registration_grade(r104,_G132207),registration_grade(r105,c),registration_grade(r106,b),registration_grade(r107,b),registration_grade(r108,_G132227),registration_grade(r109,_G132232),registration_grade(r110,a),registration_grade(r111,_G132242),registration_grade(r112,_G132247),registration_grade(r113,_G132252),registration_grade(r114,_G132257),registration_grade(r115,d),registration_grade(r116,b),registration_grade(r117,_G132272),registration_grade(r118,_G132277),registration_grade(r119,b),registration_grade(r120,b),registration_grade(r121,_G132292),registration_grade(r122,_G132297),registration_grade(r123,a),registration_grade(r124,a),registration_grade(r125,_G132312),registration_grade(r126,_G132317),registration_grade(r127,b),registration_grade(r128,a),registration_grade(r129,c),registration_grade(r130,a),registration_grade(r131,a),registration_grade(r132,b),registration_grade(r133,_G132352),registration_grade(r134,_G132357),registration_grade(r135,_G132362),registration_grade(r136,_G132367),registration_grade(r137,b),registration_grade(r138,a),registration_grade(r139,_G132382),registration_grade(r140,_G132387),registration_grade(r141,b),registration_grade(r142,_G132397),registration_grade(r143,b),registration_grade(r144,c),registration_grade(r145,b),registration_grade(r146,_G132417),registration_grade(r147,_G132422),registration_grade(r148,_G132427),registration_grade(r149,a),registration_grade(r150,_G132437),registration_grade(r151,a),registration_grade(r152,_G132447),registration_grade(r153,_G132452),registration_grade(r154,a),registration_grade(r155,c),registration_grade(r156,b),registration_grade(r157,b),registration_grade(r158,c),registration_grade(r159,b),registration_grade(r160,a),registration_grade(r161,_G132492),registration_grade(r162,_G132497),registration_grade(r163,_G132502),registration_grade(r164,b),registration_grade(r165,b),registration_grade(r166,_G132517),registration_grade(r167,a),registration_grade(r168,a),registration_grade(r169,_G132532),registration_grade(r170,_G132537),registration_grade(r171,a),registration_grade(r172,c),registration_grade(r173,b),registration_grade(r174,_G132557),registration_grade(r175,_G132562),registration_grade(r176,b),registration_grade(r177,c),registration_grade(r178,b),registration_grade(r179,d),registration_grade(r180,c),registration_grade(r181,a),registration_grade(r182,b),registration_grade(r183,a),registration_grade(r184,_G132607),registration_grade(r185,_G132612),registration_grade(r186,c),registration_grade(r187,a),registration_grade(r188,a),registration_grade(r189,_G132632),registration_grade(r190,_G132637),registration_grade(r191,_G132642),registration_grade(r192,b),registration_grade(r193,c),registration_grade(r194,b),registration_grade(r195,_G132662),registration_grade(r196,_G132667),registration_grade(r197,_G132672),registration_grade(r198,_G132677),registration_grade(r199,b),registration_grade(r200,_G132687),registration_grade(r201,c),registration_grade(r202,a),registration_grade(r203,_G132702),registration_grade(r204,_G132707),registration_grade(r205,_G132712),registration_grade(r206,a),registration_grade(r207,a),registration_grade(r208,_G132727),registration_grade(r209,b),registration_grade(r210,a),registration_grade(r211,d),registration_grade(r212,_G132747),registration_grade(r213,_G132752),registration_grade(r214,_G132757),registration_grade(r215,a),registration_grade(r216,_G132767),registration_grade(r217,_G132772),registration_grade(r218,_G132777),registration_grade(r219,_G132782),registration_grade(r220,_G132787),registration_grade(r221,b),registration_grade(r222,c),registration_grade(r223,_G132802),registration_grade(r224,_G132807),registration_grade(r225,b),registration_grade(r226,d),registration_grade(r227,b),registration_grade(r228,c),registration_grade(r229,b),registration_grade(r230,a),registration_grade(r231,_G132842),registration_grade(r232,_G132847),registration_grade(r233,b),registration_grade(r234,_G132857),registration_grade(r235,c),registration_grade(r236,b),registration_grade(r237,_G132872),registration_grade(r238,d),registration_grade(r239,b),registration_grade(r240,b),registration_grade(r241,_G132892),registration_grade(r242,b),registration_grade(r243,_G132902),registration_grade(r244,b),registration_grade(r245,a),registration_grade(r246,b),registration_grade(r247,_G132922),registration_grade(r248,b),registration_grade(r249,_G132932),registration_grade(r250,a),registration_grade(r251,_G132942),registration_grade(r252,b),registration_grade(r253,_G132952),registration_grade(r254,_G132957),registration_grade(r255,_G132962),registration_grade(r256,_G132967),registration_grade(r257,b),registration_grade(r258,_G132977),registration_grade(r259,a),registration_grade(r260,b),registration_grade(r261,a),registration_grade(r262,_G132997),registration_grade(r263,_G133002),registration_grade(r264,_G133007),registration_grade(r265,a),registration_grade(r266,_G133017),registration_grade(r267,_G133022),registration_grade(r268,c),registration_grade(r269,a),registration_grade(r270,_G133037),registration_grade(r271,_G133042),registration_grade(r272,_G133047),registration_grade(r273,b),registration_grade(r274,c),registration_grade(r275,a),registration_grade(r276,a),registration_grade(r277,_G133072),registration_grade(r278,_G133077),registration_grade(r279,_G133082),registration_grade(r280,_G133087),registration_grade(r281,b),registration_grade(r282,d),registration_grade(r283,_G133102),registration_grade(r284,b),registration_grade(r285,_G133112),registration_grade(r286,_G133117),registration_grade(r287,_G133122),registration_grade(r288,_G133127),registration_grade(r289,_G133132),registration_grade(r290,b),registration_grade(r291,c),registration_grade(r292,_G133147),registration_grade(r293,_G133152),registration_grade(r294,_G133157),registration_grade(r295,a),registration_grade(r296,b),registration_grade(r297,_G133172),registration_grade(r298,a),registration_grade(r299,a),registration_grade(r300,_G133187),registration_grade(r301,b),registration_grade(r302,b),registration_grade(r303,_G133202),registration_grade(r304,a),registration_grade(r305,_G133212),registration_grade(r306,_G133217),registration_grade(r307,_G133222),registration_grade(r308,c),registration_grade(r309,_G133232),registration_grade(r310,a),registration_grade(r311,a),registration_grade(r312,a),registration_grade(r313,_G133252),registration_grade(r314,_G133257),registration_grade(r315,c),registration_grade(r316,_G133267),registration_grade(r317,_G133272),registration_grade(r318,c),registration_grade(r319,c),registration_grade(r320,b),registration_grade(r321,b),registration_grade(r322,_G133297),registration_grade(r323,c),registration_grade(r324,b),registration_grade(r325,b),registration_grade(r326,_G133317),registration_grade(r327,c),registration_grade(r328,b),registration_grade(r329,_G133332),registration_grade(r330,_G133337),registration_grade(r331,_G133342),registration_grade(r332,_G133347),registration_grade(r333,_G133352),registration_grade(r334,_G133357),registration_grade(r335,d),registration_grade(r336,b),registration_grade(r337,b),registration_grade(r338,b),registration_grade(r339,_G133382),registration_grade(r340,_G133387),registration_grade(r341,_G133392),registration_grade(r342,_G133397),registration_grade(r343,a),registration_grade(r344,c),registration_grade(r345,_G133412),registration_grade(r346,b),registration_grade(r347,_G133422),registration_grade(r348,a),registration_grade(r349,a),registration_grade(r350,b),registration_grade(r351,b),registration_grade(r352,_G133447),registration_grade(r353,_G133452),registration_grade(r354,_G133457),registration_grade(r355,_G133462),registration_grade(r356,b),registration_grade(r357,b),registration_grade(r358,_G133477),registration_grade(r359,a),registration_grade(r360,_G133487),registration_grade(r361,_G133492),registration_grade(r362,c),registration_grade(r363,_G133502),registration_grade(r364,b),registration_grade(r365,_G133512),registration_grade(r366,b),registration_grade(r367,_G133522),registration_grade(r368,a),registration_grade(r369,c),registration_grade(r370,b),registration_grade(r371,_G133542),registration_grade(r372,_G133547),registration_grade(r373,_G133552),registration_grade(r374,b),registration_grade(r375,b),registration_grade(r376,a),registration_grade(r377,a),registration_grade(r378,a),registration_grade(r379,_G133582),registration_grade(r380,_G133587),registration_grade(r381,c),registration_grade(r382,_G133597),registration_grade(r383,_G133602),registration_grade(r384,b),registration_grade(r385,_G133612),registration_grade(r386,d),registration_grade(r387,_G133622),registration_grade(r388,_G133627),registration_grade(r389,a),registration_grade(r390,_G133637),registration_grade(r391,_G133642),registration_grade(r392,_G133647),registration_grade(r393,b),registration_grade(r394,c),registration_grade(r395,b),registration_grade(r396,_G133667),registration_grade(r397,a),registration_grade(r398,_G133677),registration_grade(r399,_G133682),registration_grade(r400,_G133687),registration_grade(r401,c),registration_grade(r402,_G133697),registration_grade(r403,_G133702),registration_grade(r404,a),registration_grade(r405,_G133712),registration_grade(r406,_G133717),registration_grade(r407,_G133722),registration_grade(r408,a),registration_grade(r409,a),registration_grade(r410,b),registration_grade(r411,b),registration_grade(r412,_G133747),registration_grade(r413,a),registration_grade(r414,_G133757),registration_grade(r415,_G133762),registration_grade(r416,_G133767),registration_grade(r417,_G133772),registration_grade(r418,a),registration_grade(r419,a),registration_grade(r420,a),registration_grade(r421,c),registration_grade(r422,b),registration_grade(r423,_G133802),registration_grade(r424,a),registration_grade(r425,b),registration_grade(r426,c),registration_grade(r427,c),registration_grade(r428,_G133827),registration_grade(r429,c),registration_grade(r430,_G133837),registration_grade(r431,_G133842),registration_grade(r432,c),registration_grade(r433,_G133852),registration_grade(r434,a),registration_grade(r435,_G133862),registration_grade(r436,_G133867),registration_grade(r437,c),registration_grade(r438,b),registration_grade(r439,_G133882),registration_grade(r440,c),registration_grade(r441,a),registration_grade(r442,c),registration_grade(r443,_G133902),registration_grade(r444,_G133907),registration_grade(r445,_G133912),registration_grade(r446,_G133917),registration_grade(r447,d),registration_grade(r448,_G133927),registration_grade(r449,b),registration_grade(r450,_G133937),registration_grade(r451,_G133942),registration_grade(r452,b),registration_grade(r453,_G133952),registration_grade(r454,_G133957),registration_grade(r455,_G133962),registration_grade(r456,c),registration_grade(r457,_G133972),registration_grade(r458,_G133977),registration_grade(r459,_G133982),registration_grade(r460,_G133987),registration_grade(r461,_G133992),registration_grade(r462,a),registration_grade(r463,d),registration_grade(r464,a),registration_grade(r465,_G134012),registration_grade(r466,_G134017),registration_grade(r467,b),registration_grade(r468,_G134027),registration_grade(r469,_G134032),registration_grade(r470,_G134037),registration_grade(r471,_G134042),registration_grade(r472,a),registration_grade(r473,c),registration_grade(r474,b),registration_grade(r475,_G134062),registration_grade(r476,_G134067),registration_grade(r477,b),registration_grade(r478,a),registration_grade(r479,b),registration_grade(r480,a),registration_grade(r481,_G134092),registration_grade(r482,b),registration_grade(r483,a),registration_grade(r484,_G134107),registration_grade(r485,_G134112),registration_grade(r486,_G134117),registration_grade(r487,_G134122),registration_grade(r488,a),registration_grade(r489,_G134132),registration_grade(r490,_G134137),registration_grade(r491,c),registration_grade(r492,b),registration_grade(r493,a),registration_grade(r494,_G134157),registration_grade(r495,_G134162),registration_grade(r496,_G134167),registration_grade(r497,c),registration_grade(r498,_G134177),registration_grade(r499,c),registration_grade(r500,b),registration_grade(r501,_G134192),registration_grade(r502,a),registration_grade(r503,_G134202),registration_grade(r504,_G134207),registration_grade(r505,_G134212),registration_grade(r506,c),registration_grade(r507,a),registration_grade(r508,_G134227),registration_grade(r509,_G134232),registration_grade(r510,_G134237),registration_grade(r511,_G134242),registration_grade(r512,b),registration_grade(r513,_G134252),registration_grade(r514,_G134257),registration_grade(r515,c),registration_grade(r516,_G134267),registration_grade(r517,_G134272),registration_grade(r518,_G134277),registration_grade(r519,a),registration_grade(r520,b),registration_grade(r521,a),registration_grade(r522,b),registration_grade(r523,_G134302),registration_grade(r524,b),registration_grade(r525,c),registration_grade(r526,c),registration_grade(r527,c),registration_grade(r528,a),registration_grade(r529,_G134332),registration_grade(r530,a),registration_grade(r531,_G134342),registration_grade(r532,a),registration_grade(r533,_G134352),registration_grade(r534,b),registration_grade(r535,c),registration_grade(r536,a),registration_grade(r537,_G134372),registration_grade(r538,_G134377),registration_grade(r539,_G134382),registration_grade(r540,_G134387),registration_grade(r541,c),registration_grade(r542,a),registration_grade(r543,a),registration_grade(r544,b),registration_grade(r545,a),registration_grade(r546,b),registration_grade(r547,_G134422),registration_grade(r548,c),registration_grade(r549,_G134432),registration_grade(r550,a),registration_grade(r551,_G134442),registration_grade(r552,c),registration_grade(r553,_G134452),registration_grade(r554,b),registration_grade(r555,_G134462),registration_grade(r556,_G134467),registration_grade(r557,_G134472),registration_grade(r558,_G134477),registration_grade(r559,b),registration_grade(r560,_G134487),registration_grade(r561,a),registration_grade(r562,_G134497),registration_grade(r563,_G134502),registration_grade(r564,_G134507),registration_grade(r565,d),registration_grade(r566,c),registration_grade(r567,a),registration_grade(r568,a),registration_grade(r569,_G134532),registration_grade(r570,_G134537),registration_grade(r571,_G134542),registration_grade(r572,b),registration_grade(r573,a),registration_grade(r574,_G134557),registration_grade(r575,a),registration_grade(r576,_G134567),registration_grade(r577,_G134572),registration_grade(r578,b),registration_grade(r579,a),registration_grade(r580,_G134587),registration_grade(r581,_G134592),registration_grade(r582,_G134597),registration_grade(r583,_G134602),registration_grade(r584,a),registration_grade(r585,c),registration_grade(r586,b),registration_grade(r587,_G134622),registration_grade(r588,_G134627),registration_grade(r589,c),registration_grade(r590,_G134637),registration_grade(r591,c),registration_grade(r592,b),registration_grade(r593,_G134652),registration_grade(r594,c),registration_grade(r595,b),registration_grade(r596,_G134667),registration_grade(r597,_G134672),registration_grade(r598,a),registration_grade(r599,_G134682),registration_grade(r600,a),registration_grade(r601,b),registration_grade(r602,_G134697),registration_grade(r603,d),registration_grade(r604,_G134707),registration_grade(r605,a),registration_grade(r606,_G134717),registration_grade(r607,_G134722),registration_grade(r608,a),registration_grade(r609,b),registration_grade(r610,_G134737),registration_grade(r611,_G134742),registration_grade(r612,c),registration_grade(r613,_G134752),registration_grade(r614,_G134757),registration_grade(r615,b),registration_grade(r616,_G134767),registration_grade(r617,a),registration_grade(r618,_G134777),registration_grade(r619,_G134782),registration_grade(r620,a),registration_grade(r621,_G134792),registration_grade(r622,b),registration_grade(r623,_G134802),registration_grade(r624,a),registration_grade(r625,_G134812),registration_grade(r626,a),registration_grade(r627,_G134822),registration_grade(r628,a),registration_grade(r629,_G134832),registration_grade(r630,_G134837),registration_grade(r631,_G134842),registration_grade(r632,a),registration_grade(r633,_G134852),registration_grade(r634,b),registration_grade(r635,_G134862),registration_grade(r636,d),registration_grade(r637,c),registration_grade(r638,a),registration_grade(r639,b),registration_grade(r640,_G134887),registration_grade(r641,_G134892),registration_grade(r642,c),registration_grade(r643,_G134902),registration_grade(r644,_G134907),registration_grade(r645,_G134912),registration_grade(r646,_G134917),registration_grade(r647,b),registration_grade(r648,a),registration_grade(r649,_G134932),registration_grade(r650,c),registration_grade(r651,b),registration_grade(r652,b),registration_grade(r653,_G134952),registration_grade(r654,b),registration_grade(r655,a),registration_grade(r656,_G134967),registration_grade(r657,a),registration_grade(r658,a),registration_grade(r659,a),registration_grade(r660,a),registration_grade(r661,c),registration_grade(r662,_G134997),registration_grade(r663,a),registration_grade(r664,_G135007),registration_grade(r665,a),registration_grade(r666,b),registration_grade(r667,_G135022),registration_grade(r668,d),registration_grade(r669,b),registration_grade(r670,a),registration_grade(r671,_G135042),registration_grade(r672,c),registration_grade(r673,a),registration_grade(r674,_G135057),registration_grade(r675,_G135062),registration_grade(r676,a),registration_grade(r677,a),registration_grade(r678,a),registration_grade(r679,a),registration_grade(r680,_G135087),registration_grade(r681,_G135092),registration_grade(r682,_G135097),registration_grade(r683,b),registration_grade(r684,_G135107),registration_grade(r685,_G135112),registration_grade(r686,b),registration_grade(r687,a),registration_grade(r688,c),registration_grade(r689,_G135132),registration_grade(r690,a),registration_grade(r691,_G135142),registration_grade(r692,_G135147),registration_grade(r693,b),registration_grade(r694,_G135157),registration_grade(r695,_G135162),registration_grade(r696,a),registration_grade(r697,_G135172),registration_grade(r698,_G135177),registration_grade(r699,_G135182),registration_grade(r700,a),registration_grade(r701,_G135192),registration_grade(r702,a),registration_grade(r703,_G135202),registration_grade(r704,c),registration_grade(r705,b),registration_grade(r706,_G135217),registration_grade(r707,a),registration_grade(r708,b),registration_grade(r709,_G135232),registration_grade(r710,_G135237),registration_grade(r711,b),registration_grade(r712,_G135247),registration_grade(r713,a),registration_grade(r714,_G135257),registration_grade(r715,a),registration_grade(r716,a),registration_grade(r717,a),registration_grade(r718,a),registration_grade(r719,_G135282),registration_grade(r720,_G135287),registration_grade(r721,_G135292),registration_grade(r722,_G135297),registration_grade(r723,_G135302),registration_grade(r724,_G135307),registration_grade(r725,c),registration_grade(r726,a),registration_grade(r727,_G135322),registration_grade(r728,b),registration_grade(r729,_G135332),registration_grade(r730,_G135337),registration_grade(r731,_G135342),registration_grade(r732,a),registration_grade(r733,a),registration_grade(r734,b),registration_grade(r735,_G135362),registration_grade(r736,a),registration_grade(r737,_G135372),registration_grade(r738,_G135377),registration_grade(r739,a),registration_grade(r740,_G135387),registration_grade(r741,_G135392),registration_grade(r742,_G135397),registration_grade(r743,_G135402),registration_grade(r744,a),registration_grade(r745,b),registration_grade(r746,_G135417),registration_grade(r747,_G135422),registration_grade(r748,b),registration_grade(r749,c),registration_grade(r750,_G135437),registration_grade(r751,c),registration_grade(r752,_G135447),registration_grade(r753,c),registration_grade(r754,_G135457),registration_grade(r755,c),registration_grade(r756,_G135467),registration_grade(r757,_G135472),registration_grade(r758,b),registration_grade(r759,_G135482),registration_grade(r760,_G135487),registration_grade(r761,a),registration_grade(r762,_G135497),registration_grade(r763,a),registration_grade(r764,a),registration_grade(r765,a),registration_grade(r766,_G135517),registration_grade(r767,c),registration_grade(r768,_G135527),registration_grade(r769,_G135532),registration_grade(r770,b),registration_grade(r771,_G135542),registration_grade(r772,a),registration_grade(r773,b),registration_grade(r774,b),registration_grade(r775,a),registration_grade(r776,_G135567),registration_grade(r777,c),registration_grade(r778,c),registration_grade(r779,b),registration_grade(r780,a),registration_grade(r781,_G135592),registration_grade(r782,a),registration_grade(r783,_G135602),registration_grade(r784,_G135607),registration_grade(r785,_G135612),registration_grade(r786,c),registration_grade(r787,a),registration_grade(r788,_G135627),registration_grade(r789,_G135632),registration_grade(r790,b),registration_grade(r791,b),registration_grade(r792,_G135647),registration_grade(r793,_G135652),registration_grade(r794,_G135657),registration_grade(r795,_G135662),registration_grade(r796,_G135667),registration_grade(r797,a),registration_grade(r798,_G135677),registration_grade(r799,_G135682),registration_grade(r800,_G135687),registration_grade(r801,b),registration_grade(r802,_G135697),registration_grade(r803,b),registration_grade(r804,_G135707),registration_grade(r805,_G135712),registration_grade(r806,_G135717),registration_grade(r807,a),registration_grade(r808,_G135727),registration_grade(r809,_G135732),registration_grade(r810,_G135737),registration_grade(r811,d),registration_grade(r812,c),registration_grade(r813,_G135752),registration_grade(r814,c),registration_grade(r815,_G135762),registration_grade(r816,_G135767),registration_grade(r817,a),registration_grade(r818,_G135777),registration_>grade(r819,b),registration_grade(r820,d),registration_grade(r821,b),registration_grade(r822,_G135797),registration_grade(r823,a),registration_grade(r824,_G135807),registration_grade(r825,b),registration_grade(r826,b),registration_grade(r827,_G135822),registration_grade(r828,_G135827),registration_grade(r829,b),registration_grade(r830,_G135837),registration_grade(r831,_G135842),registration_grade(r832,b),registration_grade(r833,b),registration_grade(r834,_G135857),registration_grade(r835,a),registration_grade(r836,a),registration_grade(r837,c),registration_grade(r838,_G135877),registration_grade(r839,b),registration_grade(r840,b),registration_grade(r841,a),registration_grade(r842,a),registration_grade(r843,b),registration_grade(r844,_G135907),registration_grade(r845,c),registration_grade(r846,b),registration_grade(r847,b),registration_grade(r848,_G135927),registration_grade(r849,_G135932),registration_grade(r850,_G135937),registration_grade(r851,_G135942),registration_grade(r852,_G135947),registration_grade(r853,_G135952),registration_grade(r854,_G135957),registration_grade(r855,_G135962),registration_grade(r856,_G135967),student_intelligence(s0,l),student_intelligence(s1,_G135977),student_intelligence(s2,_G135982),student_intelligence(s3,h),student_intelligence(s4,h),student_intelligence(s5,h),student_intelligence(s6,m),student_intelligence(s7,h),student_intelligence(s8,h),student_intelligence(s9,_G136017),student_intelligence(s10,m),student_intelligence(s11,_G136027),student_intelligence(s12,h),student_intelligence(s13,h),student_intelligence(s14,_G136042),student_intelligence(s15,_G136047),student_intelligence(s16,_G136052),student_intelligence(s17,m),student_intelligence(s18,m),student_intelligence(s19,_G136067),student_intelligence(s20,m),student_intelligence(s21,_G136077),student_intelligence(s22,h),student_intelligence(s23,_G136087),student_intelligence(s24,_G136092),student_intelligence(s25,h),student_intelligence(s26,_G136102),student_intelligence(s27,m),student_intelligence(s28,m),student_intelligence(s29,_G136117),student_intelligence(s30,h),student_intelligence(s31,m),student_intelligence(s32,m),student_intelligence(s33,_G136137),student_intelligence(s34,l),student_intelligence(s35,m),student_intelligence(s36,l),student_intelligence(s37,_G136157),student_intelligence(s38,_G136162),student_intelligence(s39,h),student_intelligence(s40,h),student_intelligence(s41,m),student_intelligence(s42,_G136182),student_intelligence(s43,_G136187),student_intelligence(s44,_G136192),student_intelligence(s45,_G136197),student_intelligence(s46,l),student_intelligence(s47,h),student_intelligence(s48,_G136212),student_intelligence(s49,_G136217),student_intelligence(s50,_G136222),student_intelligence(s51,_G136227),student_intelligence(s52,_G136232),student_intelligence(s53,m),student_intelligence(s54,_G136242),student_intelligence(s55,h),student_intelligence(s56,l),student_intelligence(s57,_G136257),student_intelligence(s58,h),student_intelligence(s59,_G136267),student_intelligence(s60,m),student_intelligence(s61,h),student_intelligence(s62,_G136282),student_intelligence(s63,_G136287),student_intelligence(s64,l),student_intelligence(s65,_G136297),student_intelligence(s66,h),student_intelligence(s67,m),student_intelligence(s68,_G136312),student_intelligence(s69,_G136317),student_intelligence(s70,_G136322),student_intelligence(s71,m),student_intelligence(s72,_G136332),student_intelligence(s73,_G136337),student_intelligence(s74,_G136342),student_intelligence(s75,h),student_intelligence(s76,h),student_intelligence(s77,h),student_intelligence(s78,_G136362),student_intelligence(s79,m),student_intelligence(s80,_G136372),student_intelligence(s81,_G136377),student_intelligence(s82,_G136382),student_intelligence(s83,_G136387),student_intelligence(s84,_G136392),student_intelligence(s85,_G136397),student_intelligence(s86,_G136402),student_intelligence(s87,h),student_intelligence(s88,h),student_intelligence(s89,_G136417),student_intelligence(s90,h),student_intelligence(s91,_G136427),student_intelligence(s92,h),student_intelligence(s93,_G136437),student_intelligence(s94,_G136442),student_intelligence(s95,_G136447),student_intelligence(s96,_G136452),student_intelligence(s97,_G136457),student_intelligence(s98,_G136462),student_intelligence(s99,l),student_intelligence(s100,h),student_intelligence(s101,_G136477),student_intelligence(s102,m),student_intelligence(s103,h),student_intelligence(s104,l),student_intelligence(s105,m),student_intelligence(s106,_G136502),student_intelligence(s107,l),student_intelligence(s108,m),student_intelligence(s109,_G136517),student_intelligence(s110,m),student_intelligence(s111,h),student_intelligence(s112,m),student_intelligence(s113,h),student_intelligence(s114,_G136542),student_intelligence(s115,h),student_intelligence(s116,_G136552),student_intelligence(s117,m),student_intelligence(s118,_G136562),student_intelligence(s119,h),student_intelligence(s120,h),student_intelligence(s121,_G136577),student_intelligence(s122,m),student_intelligence(s123,_G136587),student_intelligence(s124,h),student_intelligence(s125,_G136597),student_intelligence(s126,m),student_intelligence(s127,m),student_intelligence(s128,_G136612),student_intelligence(s129,h),student_intelligence(s130,_G136622),student_intelligence(s131,h),student_intelligence(s132,_G136632),student_intelligence(s133,_G136637),student_intelligence(s134,h),student_intelligence(s135,_G136647),student_intelligence(s136,m),student_intelligence(s137,m),student_intelligence(s138,l),student_intelligence(s139,h),student_intelligence(s140,_G136672),student_intelligence(s141,_G136677),student_intelligence(s142,_G136682),student_intelligence(s143,_G136687),student_intelligence(s144,h),student_intelligence(s145,h),student_intelligence(s146,m),student_intelligence(s147,m),student_intelligence(s148,_G136712),student_intelligence(s149,_G136717),student_intelligence(s150,l),student_intelligence(s151,h),student_intelligence(s152,h),student_intelligence(s153,_G136737),student_intelligence(s154,_G136742),student_intelligence(s155,_G136747),student_intelligence(s156,m),student_intelligence(s157,m),student_intelligence(s158,h),student_intelligence(s159,_G136767),student_intelligence(s160,_G136772),student_intelligence(s161,_G136777),student_intelligence(s162,h),student_intelligence(s163,m),student_intelligence(s164,_G136792),student_intelligence(s165,m),student_intelligence(s166,m),student_intelligence(s167,_G136807),student_intelligence(s168,_G136812),student_intelligence(s169,_G136817),student_intelligence(s170,_G136822),student_intelligence(s171,m),student_intelligence(s172,_G136832),student_intelligence(s173,h),student_intelligence(s174,h),student_intelligence(s175,_G136847),student_intelligence(s176,_G136852),student_intelligence(s177,m),student_intelligence(s178,_G136862),student_intelligence(s179,m),student_intelligence(s180,m),student_intelligence(s181,h),student_intelligence(s182,m),student_intelligence(s183,h),student_intelligence(s184,_G136892),student_intelligence(s185,m),student_intelligence(s186,m),student_intelligence(s187,m),student_intelligence(s188,_G136912),student_intelligence(s189,m),student_intelligence(s190,h),student_intelligence(s191,l),student_intelligence(s192,_G136932),student_intelligence(s193,m),student_intelligence(s194,m),student_intelligence(s195,_G136947),student_intelligence(s196,h),student_intelligence(s197,_G136957),student_intelligence(s198,h),student_intelligence(s199,m),student_intelligence(s200,h),student_intelligence(s201,_G136977),student_intelligence(s202,h),student_intelligence(s203,m),student_intelligence(s204,h),student_intelligence(s205,_G136997),student_intelligence(s206,_G137002),student_intelligence(s207,h),student_intelligence(s208,_G137012),student_intelligence(s209,h),student_intelligence(s210,_G137022),student_intelligence(s211,_G137027),student_intelligence(s212,m),student_intelligence(s213,h),student_intelligence(s214,h),student_intelligence(s215,_G137047),student_intelligence(s216,h),student_intelligence(s217,_G137057),student_intelligence(s218,h),student_intelligence(s219,_G137067),student_intelligence(s220,_G137072),student_intelligence(s221,h),student_intelligence(s222,_G137082),student_intelligence(s223,_G137087),student_intelligence(s224,l),student_intelligence(s225,l),student_intelligence(s226,m),student_intelligence(s227,_G137107),student_intelligence(s228,h),student_intelligence(s229,_G137117),student_intelligence(s230,_G137122),student_intelligence(s231,_G137127),student_intelligence(s232,m),student_intelligence(s233,_G137137),student_intelligence(s234,_G137142),student_intelligence(s235,_G137147),student_intelligence(s236,_G137152),student_intelligence(s237,h),student_intelligence(s238,h),student_intelligence(s239,h),student_intelligence(s240,_G137172),student_intelligence(s241,_G137177),student_intelligence(s242,l),student_intelligence(s243,_G137187),student_intelligence(s244,_G137192),student_intelligence(s245,l),student_intelligence(s246,_G137202),student_intelligence(s247,h),student_intelligence(s248,m),student_intelligence(s249,_G137217),student_intelligence(s250,m),student_intelligence(s251,_G137227),student_intelligence(s252,_G137232),student_intelligence(s253,m),student_intelligence(s254,_G137242),student_intelligence(s255,m),course_difficulty(c0,_G137252),course_difficulty(c1,m),course_difficulty(c2,_G137262),course_difficulty(c3,_G137267),course_difficulty(c4,_G137272),course_difficulty(c5,l),course_difficulty(c6,m),course_difficulty(c7,h),course_difficulty(c8,h),course_difficulty(c9,_G137297),course_difficulty(c10,m),course_difficulty(c11,_G137307),course_difficulty(c12,m),course_difficulty(c13,_G137317),course_difficulty(c14,m),course_difficulty(c15,_G137327),course_difficulty(c16,l),course_difficulty(c17,h),course_difficulty(c18,_G137342),course_difficulty(c19,l),course_difficulty(c20,_G137352),course_difficulty(c21,_G137357),course_difficulty(c22,_G137362),course_difficulty(c23,_G137367),course_difficulty(c24,_G137372),course_difficulty(c25,m),course_difficulty(c26,_G137382),course_difficulty(c27,_G137387),course_difficulty(c28,m),course_difficulty(c29,_G137397),course_difficulty(c30,_G137402),course_difficulty(c31,m),course_difficulty(c32,l),course_difficulty(c33,m),course_difficulty(c34,_G137422),course_difficulty(c35,_G137427),course_difficulty(c36,h),course_difficulty(c37,m),course_difficulty(c38,m),course_difficulty(c39,_G137447),course_difficulty(c40,h),course_difficulty(c41,_G137457),course_difficulty(c42,_G137462),course_difficulty(c43,m),course_difficulty(c44,m),course_difficulty(c45,_G137477),course_difficulty(c46,m),course_difficulty(c47,_G137487),course_difficulty(c48,m),course_difficulty(c49,l),course_difficulty(c50,_G137502),course_difficulty(c51,h),course_difficulty(c52,_G137512),course_difficulty(c53,_G137517),course_difficulty(c54,_G137522),course_difficulty(c55,h),course_difficulty(c56,_G137532),course_difficulty(c57,_G137537),course_difficulty(c58,_G137542),course_difficulty(c59,m),course_difficulty(c60,_G137552),course_difficulty(c61,m),course_difficulty(c62,l),course_difficulty(c63,_G137567),registration_satisfaction(r0,_G137572),registration_satisfaction(r1,l),registration_satisfaction(r2,_G137582),registration_satisfaction(r3,_G137587),registration_satisfaction(r4,h),registration_satisfaction(r5,h),registration_satisfaction(r6,_G137602),registration_satisfaction(r7,h),registration_satisfaction(r8,_G137612),registration_satisfaction(r9,h),registration_satisfaction(r10,_G137622),registration_satisfaction(r11,_G137627),registration_satisfaction(r12,_G137632),registration_satisfaction(r13,h),registration_satisfaction(r14,m),registration_satisfaction(r15,h),registration_satisfaction(r16,h),registration_satisfaction(r17,l),registration_satisfaction(r18,l),registration_satisfaction(r19,_G137667),registration_satisfaction(r20,_G137672),registration_satisfaction(r21,_G137677),registration_satisfaction(r22,h),registration_satisfaction(r23,_G137687),registration_satisfaction(r24,_G137692),registration_satisfaction(r25,_G137697),registration_satisfaction(r26,_G137702),registration_satisfaction(r27,_G137707),registration_satisfaction(r28,h),registration_satisfaction(r29,_G137717),registration_satisfaction(r30,l),registration_satisfaction(r31,_G137727),registration_satisfaction(r32,_G137732),registration_satisfaction(r33,h),registration_satisfaction(r34,_G137742),registration_satisfaction(r35,h),registration_satisfaction(r36,m),registration_satisfaction(r37,h),registration_satisfaction(r38,_G137762),registration_satisfaction(r39,h),registration_satisfaction(r40,_G137772),registration_satisfaction(r41,_G137777),registration_satisfaction(r42,_G137782),registration_satisfaction(r43,h),registration_satisfaction(r44,_G137792),registration_satisfaction(r45,h),registration_satisfaction(r46,m),registration_satisfaction(r47,_G137807),registration_satisfaction(r48,_G137812),registration_satisfaction(r49,h),registration_satisfaction(r50,_G137822),registration_satisfaction(r51,_G137827),registration_satisfaction(r52,h),registration_satisfaction(r53,_G137837),registration_satisfaction(r54,h),registration_satisfaction(r55,h),registration_satisfaction(r56,_G137852),registration_satisfaction(r57,h),registration_satisfaction(r58,_G137862),registration_satisfaction(r59,_G137867),registration_satisfaction(r60,h),registration_satisfaction(r61,h),registration_satisfaction(r62,h),registration_satisfaction(r63,h),registration_satisfaction(r64,h),registration_satisfaction(r65,h),registration_satisfaction(r66,h),registration_satisfaction(r67,_G137907),registration_satisfaction(r68,h),registration_satisfaction(r69,m),registration_satisfaction(r70,_G137922),registration_satisfaction(r71,_G137927),registration_satisfaction(r72,_G137932),registration_satisfaction(r73,h),registration_satisfaction(r74,h),registration_satisfaction(r75,h),registration_satisfaction(r76,_G137952),registration_satisfaction(r77,_G137957),registration_satisfaction(r78,m),registration_satisfaction(r79,h),registration_satisfaction(r80,h),registration_satisfaction(r81,h),registration_satisfaction(r82,l),registration_satisfaction(r83,_G137987),registration_satisfaction(r84,m),registration_satisfaction(r85,h),registration_satisfaction(r86,_G138002),registration_satisfaction(r87,_G138007),registration_satisfaction(r88,h),registration_satisfaction(r89,_G138017),registration_satisfaction(r90,_G138022),registration_satisfaction(r91,h),registration_satisfaction(r92,_G138032),registration_satisfaction(r93,_G138037),registration_satisfaction(r94,l),registration_satisfaction(r95,_G138047),registration_satisfaction(r96,h),registration_satisfaction(r97,_G138057),registration_satisfaction(r98,h),registration_satisfaction(r99,h),registration_satisfaction(r100,_G138072),registration_satisfaction(r101,_G138077),registration_satisfaction(r102,h),registration_satisfaction(r103,h),registration_satisfaction(r104,h),registration_satisfaction(r105,_G138097),registration_satisfaction(r106,_G138102),registration_satisfaction(r107,l),registration_satisfaction(r108,l),registration_satisfaction(r109,h),registration_satisfaction(r110,_G138122),registration_satisfaction(r111,h),registration_satisfaction(r112,_G138132),registration_satisfaction(r113,_G138137),registration_satisfaction(r114,m),registration_satisfaction(r115,_G138147),registration_satisfaction(r116,h),registration_satisfaction(r117,_G138157),registration_satisfaction(r118,h),registration_satisfaction(r119,h),registration_satisfaction(r120,l),registration_satisfaction(r121,_G138177),registration_satisfaction(r122,_G138182),registration_satisfaction(r123,l),registration_satisfaction(r124,_G138192),registration_satisfaction(r125,m),registration_satisfaction(r126,h),registration_satisfaction(r127,h),registration_satisfaction(r128,h),registration_satisfaction(r129,h),registration_satisfaction(r130,h),registration_satisfaction(r131,_G138227),registration_satisfaction(r132,m),registration_satisfaction(r133,_G138237),registration_satisfaction(r134,m),registration_satisfaction(r135,_G138247),registration_satisfaction(r136,h),registration_satisfaction(r137,h),registration_satisfaction(r138,h),registration_satisfaction(r139,_G138267),registration_satisfaction(r140,h),registration_satisfaction(r141,_G138277),registration_satisfaction(r142,h),registration_satisfaction(r143,h),registration_satisfaction(r144,h),registration_satisfaction(r145,l),registration_satisfaction(r146,_G138302),registration_satisfaction(r147,l),registration_satisfaction(r148,m),registration_satisfaction(r149,h),registration_satisfaction(r150,_G138322),registration_satisfaction(r151,_G138327),registration_satisfaction(r152,h),registration_satisfaction(r153,_G138337),registration_satisfaction(r154,_G138342),registration_satisfaction(r155,m),registration_satisfaction(r156,h),registration_satisfaction(r157,_G138357),registration_satisfaction(r158,l),registration_satisfaction(r159,m),registration_satisfaction(r160,h),registration_satisfaction(r161,_G138377),registration_satisfaction(r162,m),registration_satisfaction(r163,_G138387),registration_satisfaction(r164,m),registration_satisfaction(r165,m),registration_satisfaction(r166,l),registration_satisfaction(r167,_G138407),registration_satisfaction(r168,h),registration_satisfaction(r169,h),registration_satisfaction(r170,_G138422),registration_satisfaction(r171,_G138427),registration_satisfaction(r172,h),registration_satisfaction(r173,_G138437),registration_satisfaction(r174,_G138442),registration_satisfaction(r175,_G138447),registration_satisfaction(r176,h),registration_satisfaction(r177,h),registration_satisfaction(r178,h),registration_satisfaction(r179,l),registration_satisfaction(r180,_G138472),registration_satisfaction(r181,_G138477),registration_satisfaction(r182,_G138482),registration_satisfaction(r183,_G138487),registration_satisfaction(r184,_G138492),registration_satisfaction(r185,_G138497),registration_satisfaction(r186,_G138502),registration_satisfaction(r187,h),registration_satisfaction(r188,m),registration_satisfaction(r189,_G138517),registration_satisfaction(r190,h),registration_satisfaction(r191,h),registration_satisfaction(r192,m),registration_satisfaction(r193,h),registration_satisfaction(r194,_G138542),registration_satisfaction(r195,_G138547),registration_satisfaction(r196,_G138552),registration_satisfaction(r197,h),registration_satisfaction(r198,h),registration_satisfaction(r199,h),registration_satisfaction(r200,_G138572),registration_satisfaction(r201,h),registration_satisfaction(r202,_G138582),registration_satisfaction(r203,_G138587),registration_satisfaction(r204,_G138592),registration_satisfaction(r205,_G138597),registration_satisfaction(r206,h),registration_satisfaction(r207,h),registration_satisfaction(r208,h),registration_satisfaction(r209,h),registration_satisfaction(r210,_G138622),registration_satisfaction(r211,_G138627),registration_satisfaction(r212,h),registration_satisfaction(r213,_G138637),registration_satisfaction(r214,_G138642),registration_satisfaction(r215,h),registration_satisfaction(r216,h),registration_satisfaction(r217,h),registration_satisfaction(r218,m),registration_satisfaction(r219,h),registration_satisfaction(r220,h),registration_satisfaction(r221,_G138677),registration_satisfaction(r222,_G138682),registration_satisfaction(r223,h),registration_satisfaction(r224,h),registration_satisfaction(r225,_G138697),registration_satisfaction(r226,_G138702),registration_satisfaction(r227,h),registration_satisfaction(r228,_G138712),registration_satisfaction(r229,l),registration_satisfaction(r230,h),registration_satisfaction(r231,_G138727),registration_satisfaction(r232,h),registration_satisfaction(r233,m),registration_satisfaction(r234,_G138742),registration_satisfaction(r235,h),registration_satisfaction(r236,_G138752),registration_satisfaction(r237,_G138757),registration_satisfaction(r238,m),registration_satisfaction(r239,m),registration_satisfaction(r240,h),registration_satisfaction(r241,h),registration_satisfaction(r242,m),registration_satisfaction(r243,_G138787),registration_satisfaction(r244,_G138792),registration_satisfaction(r245,_G138797),registration_satisfaction(r246,h),registration_satisfaction(r247,_G138807),registration_satisfaction(r248,_G138812),registration_satisfaction(r249,h),registration_satisfaction(r250,h),registration_satisfaction(r251,h),registration_satisfaction(r252,h),registration_satisfaction(r253,h),registration_satisfaction(r254,h),registration_satisfaction(r255,h),registration_satisfaction(r256,_G138852),registration_satisfaction(r257,m),registration_satisfaction(r258,h),registration_satisfaction(r259,_G138867),registration_satisfaction(r260,_G138872),registration_satisfaction(r261,_G138877),registration_satisfaction(r262,h),registration_satisfaction(r263,m),registration_satisfaction(r264,_G138892),registration_satisfaction(r265,_G138897),registration_satisfaction(r266,l),registration_satisfaction(r267,_G138907),registration_satisfaction(r268,_G138912),registration_satisfaction(r269,_G138917),registration_satisfaction(r270,l),registration_satisfaction(r271,h),registration_satisfaction(r272,_G138932),registration_satisfaction(r273,h),registration_satisfaction(r274,h),registration_satisfaction(r275,_G138947),registration_satisfaction(r276,_G138952),registration_satisfaction(r277,h),registration_satisfaction(r278,h),registration_satisfaction(r279,_G138967),registration_satisfaction(r280,_G138972),registration_satisfaction(r281,_G138977),registration_satisfaction(r282,_G138982),registration_satisfaction(r283,_G138987),registration_satisfaction(r284,_G138992),registration_satisfaction(r285,m),registration_satisfaction(r286,h),registration_satisfaction(r287,_G139007),registration_satisfaction(r288,_G139012),registration_satisfaction(r289,l),registration_satisfaction(r290,m),registration_satisfaction(r291,h),registration_satisfaction(r292,m),registration_satisfaction(r293,_G139037),registration_satisfaction(r294,h),registration_satisfaction(r295,_G139047),registration_satisfaction(r296,_G139052),registration_satisfaction(r297,_G139057),registration_satisfaction(r298,_G139062),registration_satisfaction(r299,_G139067),registration_satisfaction(r300,l),registration_satisfaction(r301,_G139077),registration_satisfaction(r302,_G139082),registration_satisfaction(r303,h),registration_satisfaction(r304,h),registration_satisfaction(r305,_G139097),registration_satisfaction(r306,_G139102),registration_satisfaction(r307,_G139107),registration_satisfaction(r308,l),registration_satisfaction(r309,m),registration_satisfaction(r310,_G139122),registration_satisfaction(r311,_G139127),registration_satisfaction(r312,h),registration_satisfaction(r313,_G139137),registration_satisfaction(r314,h),registration_satisfaction(r315,h),registration_satisfaction(r316,l),registration_satisfaction(r317,l),registration_satisfaction(r318,_G139162),registration_satisfaction(r319,_G139167),registration_satisfaction(r320,_G139172),registration_satisfaction(r321,l),registration_satisfaction(r322,h),registration_satisfaction(r323,_G139187),registration_satisfaction(r324,h),registration_satisfaction(r325,h),registration_satisfaction(r326,_G139202),registration_satisfaction(r327,m),registration_satisfaction(r328,h),registration_satisfaction(r329,h),registration_satisfaction(r330,_G139222),registration_satisfaction(r331,h),registration_satisfaction(r332,l),registration_satisfaction(r333,_G139237),registration_satisfaction(r334,_G139242),registration_satisfaction(r335,h),registration_satisfaction(r336,_G139252),registration_satisfaction(r337,h),registration_satisfaction(r338,h),registration_satisfaction(r339,_G139267),registration_satisfaction(r340,_G139272),registration_satisfaction(r341,l),registration_satisfaction(r342,h),registration_satisfaction(r343,_G139287),registration_satisfaction(r344,_G139292),registration_satisfaction(r345,m),registration_satisfaction(r346,h),registration_satisfaction(r347,m),registration_satisfaction(r348,_G139312),registration_satisfaction(r349,h),registration_satisfaction(r350,m),registration_satisfaction(r351,_G139327),registration_satisfaction(r352,l),registration_satisfaction(r353,h),registration_satisfaction(r354,h),registration_satisfaction(r355,_G139347),registration_satisfaction(r356,_G139352),registration_satisfaction(r357,m),registration_satisfaction(r358,_G139362),registration_satisfaction(r359,_G139367),registration_satisfaction(r360,_G139372),registration_satisfaction(r361,m),registration_satisfaction(r362,_G139382),registration_satisfaction(r363,_G139387),registration_satisfaction(r364,_G139392),registration_satisfaction(r365,_G139397),registration_satisfaction(r366,h),registration_satisfaction(r367,h),registration_satisfaction(r368,h),registration_satisfaction(r369,h),registration_satisfaction(r370,_G139422),registration_satisfaction(r371,_G139427),registration_satisfaction(r372,h),registration_satisfaction(r373,h),registration_satisfaction(r374,_G139442),registration_satisfaction(r375,h),registration_satisfaction(r376,_G139452),registration_satisfaction(r377,_G139457),registration_satisfaction(r378,_G139462),registration_satisfaction(r379,h),registration_satisfaction(r380,_G139472),registration_satisfaction(r381,_G139477),registration_satisfaction(r382,h),registration_satisfaction(r383,h),registration_satisfaction(r384,_G139492),registration_satisfaction(r385,m),registration_satisfaction(r386,_G139502),registration_satisfaction(r387,h),registration_satisfaction(r388,_G139512),registration_satisfaction(r389,_G139517),registration_satisfaction(r390,_G139522),registration_satisfaction(r391,l),registration_satisfaction(r392,_G139532),registration_satisfaction(r393,_G139537),registration_satisfaction(r394,h),registration_satisfaction(r395,_G139547),registration_satisfaction(r396,h),registration_satisfaction(r397,h),registration_satisfaction(r398,l),registration_satisfaction(r399,h),registration_satisfaction(r400,_G139572),registration_satisfaction(r401,l),registration_satisfaction(r402,h),registration_satisfaction(r403,h),registration_satisfaction(r404,h),registration_satisfaction(r405,h),registration_satisfaction(r406,_G139602),registration_satisfaction(r407,_G139607),registration_satisfaction(r408,_G139612),registration_satisfaction(r409,h),registration_satisfaction(r410,h),registration_satisfaction(r411,_G139627),registration_satisfaction(r412,_G139632),registration_satisfaction(r413,l),registration_satisfaction(r414,h),registration_satisfaction(r415,m),registration_satisfaction(r416,_G139652),registration_satisfaction(r417,h),registration_satisfaction(r418,_G139662),registration_satisfaction(r419,_G139667),registration_satisfaction(r420,_G139672),registration_satisfaction(r421,_G139677),registration_satisfaction(r422,_G139682),registration_satisfaction(r423,_G139687),registration_satisfaction(r424,h),registration_satisfaction(r425,h),registration_satisfaction(r426,_G139702),registration_satisfaction(r427,_G139707),registration_satisfaction(r428,_G139712),registration_satisfaction(r429,_G139717),registration_satisfaction(r430,l),registration_satisfaction(r431,m),registration_satisfaction(r432,_G139732),registration_satisfaction(r433,_G139737),registration_satisfaction(r434,h),registration_satisfaction(r435,m),registration_satisfaction(r436,_G139752),registration_satisfaction(r437,h),registration_satisfaction(r438,l),registration_satisfaction(r439,_G139767),registration_satisfaction(r440,h),registration_satisfaction(r441,h),registration_satisfaction(r442,_G139782),registration_satisfaction(r443,_G139787),registration_satisfaction(r444,_G139792),registration_satisfaction(r445,_G139797),registration_satisfaction(r446,h),registration_satisfaction(r447,m),registration_satisfaction(r448,l),registration_satisfaction(r449,_G139817),registration_satisfaction(r450,h),registration_satisfaction(r451,_G139827),registration_satisfaction(r452,_G139832),registration_satisfaction(r453,_G139837),registration_satisfaction(r454,_G139842),registration_satisfaction(r455,_G139847),registration_satisfaction(r456,h),registration_satisfaction(r457,h),registration_satisfaction(r458,_G139862),registration_satisfaction(r459,_G139867),registration_satisfaction(r460,l),registration_satisfaction(r461,h),registration_satisfaction(r462,h),registration_satisfaction(r463,_G139887),registration_satisfaction(r464,_G139892),registration_satisfaction(r465,_G139897),registration_satisfaction(r466,l),registration_satisfaction(r467,_G139907),registration_satisfaction(r468,_G139912),registration_satisfaction(r469,h),registration_satisfaction(r470,h),registration_satisfaction(r471,_G139927),registration_satisfaction(r472,_G139932),registration_satisfaction(r473,_G139937),registration_satisfaction(r474,_G139942),registration_satisfaction(r475,h),registration_satisfaction(r476,_G139952),registration_satisfaction(r477,_G139957),registration_satisfaction(r478,_G139962),registration_satisfaction(r479,_G139967),registration_satisfaction(r480,_G139972),registration_satisfaction(r481,_G139977),registration_satisfaction(r482,_G139982),registration_satisfaction(r483,h),registration_satisfaction(r484,_G139992),registration_satisfaction(r485,h),registration_satisfaction(r486,h),registration_satisfaction(r487,_G140007),registration_satisfaction(r488,_G140012),registration_satisfaction(r489,m),registration_satisfaction(r490,_G140022),registration_satisfaction(r491,_G140027),registration_satisfaction(r492,h),registration_satisfaction(r493,_G140037),registration_satisfaction(r494,_G140042),registration_satisfaction(r495,h),registration_satisfaction(r496,h),registration_satisfaction(r497,_G140057),registration_satisfaction(r498,_G140062),registration_satisfaction(r499,h),registration_satisfaction(r500,m),registration_satisfaction(r501,h),registration_satisfaction(r502,_G140082),registration_satisfaction(r503,_G140087),registration_satisfaction(r504,m),registration_satisfaction(r505,_G140097),registration_satisfaction(r506,_G140102),registration_satisfaction(r507,_G140107),registration_satisfaction(r508,_G140112),registration_satisfaction(r509,_G140117),registration_satisfaction(r510,_G140122),registration_satisfaction(r511,l),registration_satisfaction(r512,h),registration_satisfaction(r513,h),registration_satisfaction(r514,_G140142),registration_satisfaction(r515,_G140147),registration_satisfaction(r516,_G140152),registration_satisfaction(r517,m),registration_satisfaction(r518,_G140162),registration_satisfaction(r519,h),registration_satisfaction(r520,_G140172),registration_satisfaction(r521,h),registration_satisfaction(r522,h),registration_satisfaction(r523,h),registration_satisfaction(r524,h),registration_satisfaction(r525,_G140197),registration_satisfaction(r526,h),registration_satisfaction(r527,_G140207),registration_satisfaction(r528,_G140212),registration_satisfaction(r529,h),registration_satisfaction(r530,_G140222),registration_satisfaction(r531,_G140227),registration_satisfaction(r532,_G140232),registration_satisfaction(r533,_G140237),registration_satisfaction(r534,l),registration_satisfaction(r535,_G140247),registration_satisfaction(r536,h),registration_satisfaction(r537,h),registration_satisfaction(r538,_G140262),registration_satisfaction(r539,_G140267),registration_satisfaction(r540,_G140272),registration_satisfaction(r541,_G140277),registration_satisfaction(r542,h),registration_satisfaction(r543,h),registration_satisfaction(r544,_G140292),registration_satisfaction(r545,h),registration_satisfaction(r546,_G140302),registration_satisfaction(r547,_G140307),registration_satisfaction(r548,h),registration_satisfaction(r549,_G140317),registration_satisfaction(r550,_G140322),registration_satisfaction(r551,h),registration_satisfaction(r552,m),registration_satisfaction(r553,m),registration_satisfaction(r554,l),registration_satisfaction(r555,m),registration_satisfaction(r556,_G140352),registration_satisfaction(r557,_G140357),registration_satisfaction(r558,_G140362),registration_satisfaction(r559,_G140367),registration_satisfaction(r560,_G140372),registration_satisfaction(r561,_G140377),registration_satisfaction(r562,h),registration_satisfaction(r563,_G140387),registration_satisfaction(r564,h),registration_satisfaction(r565,_G140397),registration_satisfaction(r566,l),registration_satisfaction(r567,_G140407),registration_satisfaction(r568,h),registration_satisfaction(r569,h),registration_satisfaction(r570,h),registration_satisfaction(r571,_G140427),registration_satisfaction(r572,_G140432),registration_satisfaction(r573,_G140437),registration_satisfaction(r574,_G140442),registration_satisfaction(r575,_G140447),registration_satisfaction(r576,_G140452),registration_satisfaction(r577,_G140457),registration_satisfaction(r578,l),registration_satisfaction(r579,h),registration_satisfaction(r580,m),registration_satisfaction(r581,h),registration_satisfaction(r582,h),registration_satisfaction(r583,h),registration_satisfaction(r584,h),registration_satisfaction(r585,h),registration_satisfaction(r586,_G140502),registration_satisfaction(r587,_G140507),registration_satisfaction(r588,_G140512),registration_satisfaction(r589,l),registration_satisfaction(r590,h),registration_satisfaction(r591,_G140527),registration_satisfaction(r592,_G140532),registration_satisfaction(r593,_G140537),registration_satisfaction(r594,l),registration_satisfaction(r595,m),registration_satisfaction(r596,h),registration_satisfaction(r597,_G140557),registration_satisfaction(r598,_G140562),registration_satisfaction(r599,h),registration_satisfaction(r600,_G140572),registration_satisfaction(r601,m),registration_satisfaction(r602,h),registration_satisfaction(r603,_G140587),registration_satisfaction(r604,_G140592),registration_satisfaction(r605,h),registration_satisfaction(r606,h),registration_satisfaction(r607,l),registration_satisfaction(r608,_G140612),registration_satisfaction(r609,h),registration_satisfaction(r610,_G140622),registration_satisfaction(r611,h),registration_satisfaction(r612,l),registration_satisfaction(r613,_G140637),registration_satisfaction(r614,_G140642),registration_satisfaction(r615,_G140647),registration_satisfaction(r616,h),registration_satisfaction(r617,h),registration_satisfaction(r618,h),registration_satisfaction(r619,h),registration_satisfaction(r620,_G140672),registration_satisfaction(r621,_G140677),registration_satisfaction(r622,h),registration_satisfaction(r623,_G140687),registration_satisfaction(r624,_G140692),registration_satisfaction(r625,l),registration_satisfaction(r626,_G140702),registration_satisfaction(r627,h),registration_satisfaction(r628,h),registration_satisfaction(r629,h),registration_satisfaction(r630,h),registration_satisfaction(r631,h),registration_satisfaction(r632,h),registration_satisfaction(r633,_G140737),registration_satisfaction(r634,_G140742),registration_satisfaction(r635,_G140747),registration_satisfaction(r636,_G140752),registration_satisfaction(r637,_G140757),registration_satisfaction(r638,h),registration_satisfaction(r639,_G140767),registration_satisfaction(r640,h),registration_satisfaction(r641,h),registration_satisfaction(r642,_G140782),registration_satisfaction(r643,_G140787),registration_satisfaction(r644,h),registration_satisfaction(r645,_G140797),registration_satisfaction(r646,h),registration_satisfaction(r647,h),registration_satisfaction(r648,_G140812),registration_satisfaction(r649,_G140817),registration_satisfaction(r650,_G140822),registration_satisfaction(r651,_G140827),registration_satisfaction(r652,_G140832),registration_satisfaction(r653,_G140837),registration_satisfaction(r654,h),registration_satisfaction(r655,h),registration_satisfaction(r656,m),registration_satisfaction(r657,_G140857),registration_satisfaction(r658,h),registration_satisfaction(r659,h),registration_satisfaction(r660,h),registration_satisfaction(r661,_G140877),registration_satisfaction(r662,_G140882),registration_satisfaction(r663,h),registration_satisfaction(r664,_G140892),registration_satisfaction(r665,h),registration_satisfaction(r666,l),registration_satisfaction(r667,h),registration_satisfaction(r668,l),registration_satisfaction(r669,_G140917),registration_satisfaction(r670,h),registration_satisfaction(r671,_G140927),registration_satisfaction(r672,_G140932),registration_satisfaction(r673,_G140937),registration_satisfaction(r674,h),registration_satisfaction(r675,l),registration_satisfaction(r676,_G140952),registration_satisfaction(r677,_G140957),registration_satisfaction(r678,h),registration_satisfaction(r679,h),registration_satisfaction(r680,m),registration_satisfaction(r681,_G140977),registration_satisfaction(r682,_G140982),registration_satisfaction(r683,h),registration_satisfaction(r684,_G140992),registration_satisfaction(r685,h),registration_satisfaction(r686,h),registration_satisfaction(r687,_G141007),registration_satisfaction(r688,_G141012),registration_satisfaction(r689,_G141017),registration_satisfaction(r690,h),registration_satisfaction(r691,h),registration_satisfaction(r692,h),registration_satisfaction(r693,_G141037),registration_satisfaction(r694,h),registration_satisfaction(r695,_G141047),registration_satisfaction(r696,_G141052),registration_satisfaction(r697,_G141057),registration_satisfaction(r698,h),registration_satisfaction(r699,h),registration_satisfaction(r700,_G141072),registration_satisfaction(r701,h),registration_satisfaction(r702,_G141082),registration_satisfaction(r703,_G141087),registration_satisfaction(r704,l),registration_satisfaction(r705,_G141097),registration_satisfaction(r706,_G141102),registration_satisfaction(r707,_G141107),registration_satisfaction(r708,_G141112),registration_satisfaction(r709,m),registration_satisfaction(r710,l),registration_satisfaction(r711,h),registration_satisfaction(r712,h),registration_satisfaction(r713,h),registration_satisfaction(r714,m),registration_satisfaction(r715,_G141147),registration_satisfaction(r716,h),registration_satisfaction(r717,h),registration_satisfaction(r718,l),registration_satisfaction(r719,l),registration_satisfaction(r720,_G141172),registration_satisfaction(r721,h),registration_satisfaction(r722,h),registration_satisfaction(r723,h),registration_satisfaction(r724,h),registration_satisfaction(r725,_G141197),registration_satisfaction(r726,h),registration_satisfaction(r727,_G141207),registration_satisfaction(r728,_G141212),registration_satisfaction(r729,_G141217),registration_satisfaction(r730,h),registration_satisfaction(r731,h),registration_satisfaction(r732,_G141232),registration_satisfaction(r733,_G141237),registration_satisfaction(r734,h),registration_satisfaction(r735,h),registration_satisfaction(r736,_G141252),registration_satisfaction(r737,h),registration_satisfaction(r738,_G141262),registration_satisfaction(r739,h),registration_satisfaction(r740,h),registration_satisfaction(r741,h),registration_satisfaction(r742,h),registration_satisfaction(r743,_G141287),registration_satisfaction(r744,_G141292),registration_satisfaction(r745,m),registration_satisfaction(r746,h),registration_satisfaction(r747,_G141307),registration_satisfaction(r748,_G141312),registration_satisfaction(r749,_G141317),registration_satisfaction(r750,_G141322),registration_satisfaction(r751,_G141327),registration_satisfaction(r752,m),registration_satisfaction(r753,m),registration_satisfaction(r754,_G141342),registration_satisfaction(r755,l),registration_satisfaction(r756,_G141352),registration_satisfaction(r757,h),registration_satisfaction(r758,h),registration_satisfaction(r759,l),registration_satisfaction(r760,_G141372),registration_satisfaction(r761,h),registration_satisfaction(r762,_G141382),registration_satisfaction(r763,_G141387),registration_satisfaction(r764,_G141392),registration_satisfaction(r765,h),registration_satisfaction(r766,_G141402),registration_satisfaction(r767,_G141407),registration_satisfaction(r768,_G141412),registration_satisfaction(r769,_G141417),registration_satisfaction(r770,m),registration_satisfaction(r771,_G141427),registration_satisfaction(r772,_G141432),registration_satisfaction(r773,m),registration_satisfaction(r774,h),registration_satisfaction(r775,h),registration_satisfaction(r776,_G141452),registration_satisfaction(r777,_G141457),registration_satisfaction(r778,h),registration_satisfaction(r779,_G141467),registration_satisfaction(r780,h),registration_satisfaction(r781,m),registration_satisfaction(r782,m),registration_satisfaction(r783,m),registration_satisfaction(r784,l),registration_satisfaction(r785,l),registration_satisfaction(r786,h),registration_satisfaction(r787,h),registration_satisfaction(r788,_G141512),registration_satisfaction(r789,_G141517),registration_satisfaction(r790,_G141522),registration_satisfaction(r791,h),registration_satisfaction(r792,_G141532),registration_satisfaction(r793,_G141537),registration_satisfaction(r794,_G141542),registration_satisfaction(r795,_G141547),registration_satisfaction(r796,h),registration_satisfaction(r797,h),registration_satisfaction(r798,m),registration_satisfaction(r799,_G141567),registration_satisfaction(r800,m),registration_satisfaction(r801,h),registration_satisfaction(r802,h),registration_satisfaction(r803,h),registration_satisfaction(r804,_G141592),registration_satisfaction(r805,_G141597),registration_satisfaction(r806,_G141602),registration_satisfaction(r807,_G141607),registration_satisfaction(r808,_G141612),registration_satisfaction(r809,_G141617),registration_satisfaction(r810,h),registration_satisfaction(r811,_G141627),registration_satisfaction(r812,h),registration_satisfaction(r813,m),registration_satisfaction(r814,l),registration_satisfaction(r815,_G141647),registration_satisfaction(r816,_G141652),registration_satisfaction(r817,_G141657),registration_satisfaction(r818,_G141662),registration_satisfaction(r819,h),registration_satisfaction(r820,h),registration_satisfaction(r821,_G141677),registration_satisfaction(r822,m),registration_satisfaction(r823,_G141687),registration_satisfaction(r824,m),registration_satisfaction(r825,l),registration_satisfaction(r826,l),registration_satisfaction(r827,l),registration_satisfaction(r828,_G141712),registration_satisfaction(r829,_G141717),registration_satisfaction(r830,h),registration_satisfaction(r831,_G141727),registration_satisfaction(r832,m),registration_satisfaction(r833,_G141737),registration_satisfaction(r834,_G141742),registration_satisfaction(r835,_G141747),registration_satisfaction(r836,h),registration_satisfaction(r837,h),registration_satisfaction(r838,l),registration_satisfaction(r839,_G141767),registration_satisfaction(r840,m),registration_satisfaction(r841,_G141777),registration_satisfaction(r842,_G141782),registration_satisfaction(r843,h),registration_satisfaction(r844,_G141792),registration_satisfaction(r845,_G141797),registration_satisfaction(r846,_G141802),registration_satisfaction(r847,_G141807),registration_satisfaction(r848,l),registration_satisfaction(r849,_G141817),registration_satisfaction(r850,_G141822),registration_satisfaction(r851,h),registration_satisfaction(r852,h),registration_satisfaction(r853,h),registration_satisfaction(r854,m),registration_satisfaction(r855,_G141847),registration_satisfaction(r856,_G141852)]). @@ -43,29 +38,28 @@ graph([professor_ability(p0,_G131367),professor_ability(p1,h),professor_ability( %% missing(0.2). -% miss 30% of the examples. goal(professor_ability(P,V)) :- - pos:professor_ability(P,V1), + pos:professor_ability(P,V1), missing(X), - ( random > X -> V = V1 ; true). -% miss 10% of the examples. + ( random > X -> V = V1 ; true). goal(professor_popularity(P,V)) :- - pos:professor_popularity(P,V1), + pos:professor_popularity(P,V1), missing(X), - ( random > X -> V = V1 ; true). + ( random > X -> V = V1 ; true). goal(registration_grade(P,V)) :- - pos:registration_grade(P,V1), + pos:registration_grade(P,V1), missing(X), - ( random > X -> V = V1 ; true). + ( random > X -> V = V1 ; true). goal(student_intelligence(P,V)) :- - pos:student_intelligence(P,V1), + pos:student_intelligence(P,V1), missing(X), - ( random > X -> V = V1 ; true). + ( random > X -> V = V1 ; true). goal(course_difficulty(P,V)) :- - pos:course_difficulty(P,V1), + pos:course_difficulty(P,V1), missing(X), - ( random > X -> V = V1 ; true). + ( random > X -> V = V1 ; true). goal(registration_satisfaction(P,V)) :- - pos:registration_satisfaction(P,V1), + pos:registration_satisfaction(P,V1), missing(X), - ( random > X -> V = V1 ; true). + ( random > X -> V = V1 ; true). + diff --git a/packages/CLPBN/examples/learning/sprinkler_params.yap b/packages/CLPBN/examples/learning/sprinkler_params.yap index 0663e4e66..b0dff9e5d 100644 --- a/packages/CLPBN/examples/learning/sprinkler_params.yap +++ b/packages/CLPBN/examples/learning/sprinkler_params.yap @@ -1,9 +1,16 @@ -% learn distribution for school database. +/* Learn distribution for a sprinkler database. */ :- ['../sprinkler.pfl']. :- use_module(library(clpbn/learning/em)). +%:- clpbn:set_clpbn_flag(em_solver,gibbs). +%:- clpbn:set_clpbn_flag(em_solver,jt). +%:- clpbn:set_clpbn_flag(em_solver,hve). +:- clpbn:set_clpbn_flag(em_solver,bdd). +%:- clpbn:set_clpbn_flag(em_solver,bp). +%:- clpbn:set_clpbn_flag(em_solver,ve). + data(t,t,t,t). data(_,t,_,t). data(t,t,f,f). @@ -18,12 +25,7 @@ data(t,t,_,f). data(t,f,f,t). data(t,f,t,t). -%:- clpbn:set_clpbn_flag(em_solver,gibbs). -%:- clpbn:set_clpbn_flag(em_solver,jt). -:- clpbn:set_clpbn_flag(em_solver,hve). -:- clpbn:set_clpbn_flag(em_solver,bdd). -%:- clpbn:set_clpbn_flag(em_solver,bp). -%:- clpbn:set_clpbn_flag(em_solver,ve). +:- dynamic id/1. timed_main :- statistics(runtime, _), @@ -33,19 +35,16 @@ timed_main :- main(Lik) :- findall(X,scan_data(X),L), - em(L,0.01,10,_,Lik). + em(L,0.01,10,_,Lik). scan_data(I:[wet_grass(W),sprinkler(S),rain(R),cloudy(C)]) :- data(W, S, R, C), new_id(I). -:- dynamic id/1. - new_id(I) :- - retract(id(I)), - I1 is I+1, - assert(id(I1)). + retract(id(I)), + I1 is I+1, + assert(id(I1)). id(0). - diff --git a/packages/CLPBN/examples/social_domain2.pfl b/packages/CLPBN/examples/social_domain2.pfl index fbafd04b7..c1c107e43 100644 --- a/packages/CLPBN/examples/social_domain2.pfl +++ b/packages/CLPBN/examples/social_domain2.pfl @@ -20,17 +20,17 @@ people(X,Y) :- people(Y). % X \== Y. -markov smokes(X); [1.0, 4.0552]; [people(X)]. +markov smokes(X) ; [1.0, 4.0552]; [people(X)]. -markov asthma(X); [1.0, 9.9742] ; [people(X)]. +markov asthma(X) ; [1.0, 9.9742] ; [people(X)]. -markov friends(X,Y); [1.0, 99.48432] ; [people(X,Y)]. +markov friends(X,Y) ; [1.0, 99.48432] ; [people(X,Y)]. -markov asthma(X), smokes(X); +markov asthma(X), smokes(X) ; [4.48169, 4.48169, 1.0, 4.48169] ; [people(X)]. -markov asthma(X), friends(X,Y), smokes(Y); +markov asthma(X), friends(X,Y), smokes(Y) ; [3.004166, 3.004166, 3.004166, 3.004166, 3.004166, 1.0, 1.0, 3.004166] ; [people(X,Y)]. From 01dfc5e2be5f6259ccf8de694c6055cee922e85c Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Wed, 12 Dec 2012 15:26:49 +0000 Subject: [PATCH 29/42] Change extension of school_params school_params does not define any pfl network, so it shouldn't have pfl as the extension --- packages/CLPBN/Makefile.in | 2 +- .../examples/learning/{school_params.pfl => school_params.yap} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename packages/CLPBN/examples/learning/{school_params.pfl => school_params.yap} (100%) diff --git a/packages/CLPBN/Makefile.in b/packages/CLPBN/Makefile.in index 579ade735..0f242d4fb 100644 --- a/packages/CLPBN/Makefile.in +++ b/packages/CLPBN/Makefile.in @@ -97,7 +97,7 @@ CLPBN_HMMER_EXAMPLES= \ CLPBN_LEARNING_EXAMPLES= \ $(CLPBN_EXDIR)/learning/prof_params.pfl \ - $(CLPBN_EXDIR)/learning/school_params.pfl \ + $(CLPBN_EXDIR)/learning/school_params.yap \ $(CLPBN_EXDIR)/learning/sprinkler_params.yap \ $(CLPBN_EXDIR)/learning/train.yap diff --git a/packages/CLPBN/examples/learning/school_params.pfl b/packages/CLPBN/examples/learning/school_params.yap similarity index 100% rename from packages/CLPBN/examples/learning/school_params.pfl rename to packages/CLPBN/examples/learning/school_params.yap From 66cd58655b0d08d6325a296523a00fc23dc2c7da Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Wed, 12 Dec 2012 15:36:38 +0000 Subject: [PATCH 30/42] Place the debug_school predicate into a different file --- packages/CLPBN/Makefile.in | 1 + .../CLPBN/examples/learning/debug_school.yap | 22 +++++++++++++++++++ .../CLPBN/examples/learning/school_params.yap | 15 +++++-------- 3 files changed, 29 insertions(+), 9 deletions(-) create mode 100644 packages/CLPBN/examples/learning/debug_school.yap diff --git a/packages/CLPBN/Makefile.in b/packages/CLPBN/Makefile.in index 0f242d4fb..38d82a6e4 100644 --- a/packages/CLPBN/Makefile.in +++ b/packages/CLPBN/Makefile.in @@ -96,6 +96,7 @@ CLPBN_HMMER_EXAMPLES= \ $(CLPBN_EXDIR)/HMMer/score.yap CLPBN_LEARNING_EXAMPLES= \ + $(CLPBN_EXDIR)/learning/debug_school.yap \ $(CLPBN_EXDIR)/learning/prof_params.pfl \ $(CLPBN_EXDIR)/learning/school_params.yap \ $(CLPBN_EXDIR)/learning/sprinkler_params.yap \ diff --git a/packages/CLPBN/examples/learning/debug_school.yap b/packages/CLPBN/examples/learning/debug_school.yap new file mode 100644 index 000000000..47be3bf2d --- /dev/null +++ b/packages/CLPBN/examples/learning/debug_school.yap @@ -0,0 +1,22 @@ +/* Learn distribution for school database. */ + +/* We do not consider aggregates yet. */ + +:- [pos:train]. + +:- ['../../examples/School/sch32']. + +:- use_module(library(clpbn/learning/em)). + +%:- clpbn:set_clpbn_flag(em_solver,gibbs). +%:- clpbn:set_clpbn_flag(em_solver,jt). + :- clpbn:set_clpbn_flag(em_solver,ve). +%:- clpbn:set_clpbn_flag(em_solver,bp). + +debug_school :- + graph(L), + em(L,0.01,10,CPTs,Lik), + writeln(Lik:CPTs). + +graph([professor_ability(p0,_G131367),professor_ability(p1,h),professor_ability(p2,_G131377),professor_ability(p3,_G131382),professor_ability(p4,_G131387),professor_ability(p5,_G131392),professor_ability(p6,_G131397),professor_ability(p7,l),professor_ability(p8,m),professor_ability(p9,h),professor_ability(p10,m),professor_ability(p11,_G131422),professor_ability(p12,_G131427),professor_ability(p13,_G131432),professor_ability(p14,_G131437),professor_ability(p15,_G131442),professor_ability(p16,_G131447),professor_ability(p17,m),professor_ability(p18,l),professor_ability(p19,h),professor_ability(p20,h),professor_ability(p21,_G131472),professor_ability(p22,m),professor_ability(p23,m),professor_ability(p24,l),professor_ability(p25,m),professor_ability(p26,_G131497),professor_ability(p27,h),professor_ability(p28,h),professor_ability(p29,_G131512),professor_ability(p30,_G131517),professor_ability(p31,_G131522),professor_popularity(p0,h),professor_popularity(p1,h),professor_popularity(p2,_G131537),professor_popularity(p3,h),professor_popularity(p4,h),professor_popularity(p5,h),professor_popularity(p6,l),professor_popularity(p7,l),professor_popularity(p8,_G131567),professor_popularity(p9,_G131572),professor_popularity(p10,l),professor_popularity(p11,_G131582),professor_popularity(p12,h),professor_popularity(p13,l),professor_popularity(p14,_G131597),professor_popularity(p15,h),professor_popularity(p16,m),professor_popularity(p17,_G131612),professor_popularity(p18,_G131617),professor_popularity(p19,_G131622),professor_popularity(p20,_G131627),professor_popularity(p21,h),professor_popularity(p22,_G131637),professor_popularity(p23,_G131642),professor_popularity(p24,l),professor_popularity(p25,_G131652),professor_popularity(p26,_G131657),professor_popularity(p27,h),professor_popularity(p28,h),professor_popularity(p29,_G131672),professor_popularity(p30,m),professor_popularity(p31,_G131682),registration_grade(r0,a),registration_grade(r1,_G131692),registration_grade(r2,_G131697),registration_grade(r3,c),registration_grade(r4,c),registration_grade(r5,c),registration_grade(r6,_G131717),registration_grade(r7,a),registration_grade(r8,b),registration_grade(r9,_G131732),registration_grade(r10,_G131737),registration_grade(r11,a),registration_grade(r12,_G131747),registration_grade(r13,a),registration_grade(r14,_G131757),registration_grade(r15,b),registration_grade(r16,a),registration_grade(r17,b),registration_grade(r18,_G131777),registration_grade(r19,_G131782),registration_grade(r20,c),registration_grade(r21,_G131792),registration_grade(r22,_G131797),registration_grade(r23,_G131802),registration_grade(r24,b),registration_grade(r25,a),registration_grade(r26,_G131817),registration_grade(r27,_G131822),registration_grade(r28,c),registration_grade(r29,b),registration_grade(r30,c),registration_grade(r31,b),registration_grade(r32,_G131847),registration_grade(r33,a),registration_grade(r34,c),registration_grade(r35,c),registration_grade(r36,a),registration_grade(r37,a),registration_grade(r38,c),registration_grade(r39,a),registration_grade(r40,_G131887),registration_grade(r41,_G131892),registration_grade(r42,_G131897),registration_grade(r43,a),registration_grade(r44,a),registration_grade(r45,a),registration_grade(r46,a),registration_grade(r47,_G131922),registration_grade(r48,_G131927),registration_grade(r49,b),registration_grade(r50,b),registration_grade(r51,b),registration_grade(r52,_G131947),registration_grade(r53,a),registration_grade(r54,_G131957),registration_grade(r55,a),registration_grade(r56,c),registration_grade(r57,_G131972),registration_grade(r58,_G131977),registration_grade(r59,_G131982),registration_grade(r60,_G131987),registration_grade(r61,a),registration_grade(r62,_G131997),registration_grade(r63,b),registration_grade(r64,b),registration_grade(r65,b),registration_grade(r66,_G132017),registration_grade(r67,b),registration_grade(r68,a),registration_grade(r69,_G132032),registration_grade(r70,_G132037),registration_grade(r71,_G132042),registration_grade(r72,_G132047),registration_grade(r73,_G132052),registration_grade(r74,a),registration_grade(r75,_G132062),registration_grade(r76,_G132067),registration_grade(r77,_G132072),registration_grade(r78,b),registration_grade(r79,_G132082),registration_grade(r80,_G132087),registration_grade(r81,_G132092),registration_grade(r82,_G132097),registration_grade(r83,_G132102),registration_grade(r84,_G132107),registration_grade(r85,b),registration_grade(r86,_G132117),registration_grade(r87,b),registration_grade(r88,_G132127),registration_grade(r89,_G132132),registration_grade(r90,_G132137),registration_grade(r91,a),registration_grade(r92,_G132147),registration_grade(r93,_G132152),registration_grade(r94,_G132157),registration_grade(r95,_G132162),registration_grade(r96,_G132167),registration_grade(r97,a),registration_grade(r98,b),registration_grade(r99,b),registration_grade(r100,a),registration_grade(r101,a),registration_grade(r102,a),registration_grade(r103,_G132202),registration_grade(r104,_G132207),registration_grade(r105,c),registration_grade(r106,b),registration_grade(r107,b),registration_grade(r108,_G132227),registration_grade(r109,_G132232),registration_grade(r110,a),registration_grade(r111,_G132242),registration_grade(r112,_G132247),registration_grade(r113,_G132252),registration_grade(r114,_G132257),registration_grade(r115,d),registration_grade(r116,b),registration_grade(r117,_G132272),registration_grade(r118,_G132277),registration_grade(r119,b),registration_grade(r120,b),registration_grade(r121,_G132292),registration_grade(r122,_G132297),registration_grade(r123,a),registration_grade(r124,a),registration_grade(r125,_G132312),registration_grade(r126,_G132317),registration_grade(r127,b),registration_grade(r128,a),registration_grade(r129,c),registration_grade(r130,a),registration_grade(r131,a),registration_grade(r132,b),registration_grade(r133,_G132352),registration_grade(r134,_G132357),registration_grade(r135,_G132362),registration_grade(r136,_G132367),registration_grade(r137,b),registration_grade(r138,a),registration_grade(r139,_G132382),registration_grade(r140,_G132387),registration_grade(r141,b),registration_grade(r142,_G132397),registration_grade(r143,b),registration_grade(r144,c),registration_grade(r145,b),registration_grade(r146,_G132417),registration_grade(r147,_G132422),registration_grade(r148,_G132427),registration_grade(r149,a),registration_grade(r150,_G132437),registration_grade(r151,a),registration_grade(r152,_G132447),registration_grade(r153,_G132452),registration_grade(r154,a),registration_grade(r155,c),registration_grade(r156,b),registration_grade(r157,b),registration_grade(r158,c),registration_grade(r159,b),registration_grade(r160,a),registration_grade(r161,_G132492),registration_grade(r162,_G132497),registration_grade(r163,_G132502),registration_grade(r164,b),registration_grade(r165,b),registration_grade(r166,_G132517),registration_grade(r167,a),registration_grade(r168,a),registration_grade(r169,_G132532),registration_grade(r170,_G132537),registration_grade(r171,a),registration_grade(r172,c),registration_grade(r173,b),registration_grade(r174,_G132557),registration_grade(r175,_G132562),registration_grade(r176,b),registration_grade(r177,c),registration_grade(r178,b),registration_grade(r179,d),registration_grade(r180,c),registration_grade(r181,a),registration_grade(r182,b),registration_grade(r183,a),registration_grade(r184,_G132607),registration_grade(r185,_G132612),registration_grade(r186,c),registration_grade(r187,a),registration_grade(r188,a),registration_grade(r189,_G132632),registration_grade(r190,_G132637),registration_grade(r191,_G132642),registration_grade(r192,b),registration_grade(r193,c),registration_grade(r194,b),registration_grade(r195,_G132662),registration_grade(r196,_G132667),registration_grade(r197,_G132672),registration_grade(r198,_G132677),registration_grade(r199,b),registration_grade(r200,_G132687),registration_grade(r201,c),registration_grade(r202,a),registration_grade(r203,_G132702),registration_grade(r204,_G132707),registration_grade(r205,_G132712),registration_grade(r206,a),registration_grade(r207,a),registration_grade(r208,_G132727),registration_grade(r209,b),registration_grade(r210,a),registration_grade(r211,d),registration_grade(r212,_G132747),registration_grade(r213,_G132752),registration_grade(r214,_G132757),registration_grade(r215,a),registration_grade(r216,_G132767),registration_grade(r217,_G132772),registration_grade(r218,_G132777),registration_grade(r219,_G132782),registration_grade(r220,_G132787),registration_grade(r221,b),registration_grade(r222,c),registration_grade(r223,_G132802),registration_grade(r224,_G132807),registration_grade(r225,b),registration_grade(r226,d),registration_grade(r227,b),registration_grade(r228,c),registration_grade(r229,b),registration_grade(r230,a),registration_grade(r231,_G132842),registration_grade(r232,_G132847),registration_grade(r233,b),registration_grade(r234,_G132857),registration_grade(r235,c),registration_grade(r236,b),registration_grade(r237,_G132872),registration_grade(r238,d),registration_grade(r239,b),registration_grade(r240,b),registration_grade(r241,_G132892),registration_grade(r242,b),registration_grade(r243,_G132902),registration_grade(r244,b),registration_grade(r245,a),registration_grade(r246,b),registration_grade(r247,_G132922),registration_grade(r248,b),registration_grade(r249,_G132932),registration_grade(r250,a),registration_grade(r251,_G132942),registration_grade(r252,b),registration_grade(r253,_G132952),registration_grade(r254,_G132957),registration_grade(r255,_G132962),registration_grade(r256,_G132967),registration_grade(r257,b),registration_grade(r258,_G132977),registration_grade(r259,a),registration_grade(r260,b),registration_grade(r261,a),registration_grade(r262,_G132997),registration_grade(r263,_G133002),registration_grade(r264,_G133007),registration_grade(r265,a),registration_grade(r266,_G133017),registration_grade(r267,_G133022),registration_grade(r268,c),registration_grade(r269,a),registration_grade(r270,_G133037),registration_grade(r271,_G133042),registration_grade(r272,_G133047),registration_grade(r273,b),registration_grade(r274,c),registration_grade(r275,a),registration_grade(r276,a),registration_grade(r277,_G133072),registration_grade(r278,_G133077),registration_grade(r279,_G133082),registration_grade(r280,_G133087),registration_grade(r281,b),registration_grade(r282,d),registration_grade(r283,_G133102),registration_grade(r284,b),registration_grade(r285,_G133112),registration_grade(r286,_G133117),registration_grade(r287,_G133122),registration_grade(r288,_G133127),registration_grade(r289,_G133132),registration_grade(r290,b),registration_grade(r291,c),registration_grade(r292,_G133147),registration_grade(r293,_G133152),registration_grade(r294,_G133157),registration_grade(r295,a),registration_grade(r296,b),registration_grade(r297,_G133172),registration_grade(r298,a),registration_grade(r299,a),registration_grade(r300,_G133187),registration_grade(r301,b),registration_grade(r302,b),registration_grade(r303,_G133202),registration_grade(r304,a),registration_grade(r305,_G133212),registration_grade(r306,_G133217),registration_grade(r307,_G133222),registration_grade(r308,c),registration_grade(r309,_G133232),registration_grade(r310,a),registration_grade(r311,a),registration_grade(r312,a),registration_grade(r313,_G133252),registration_grade(r314,_G133257),registration_grade(r315,c),registration_grade(r316,_G133267),registration_grade(r317,_G133272),registration_grade(r318,c),registration_grade(r319,c),registration_grade(r320,b),registration_grade(r321,b),registration_grade(r322,_G133297),registration_grade(r323,c),registration_grade(r324,b),registration_grade(r325,b),registration_grade(r326,_G133317),registration_grade(r327,c),registration_grade(r328,b),registration_grade(r329,_G133332),registration_grade(r330,_G133337),registration_grade(r331,_G133342),registration_grade(r332,_G133347),registration_grade(r333,_G133352),registration_grade(r334,_G133357),registration_grade(r335,d),registration_grade(r336,b),registration_grade(r337,b),registration_grade(r338,b),registration_grade(r339,_G133382),registration_grade(r340,_G133387),registration_grade(r341,_G133392),registration_grade(r342,_G133397),registration_grade(r343,a),registration_grade(r344,c),registration_grade(r345,_G133412),registration_grade(r346,b),registration_grade(r347,_G133422),registration_grade(r348,a),registration_grade(r349,a),registration_grade(r350,b),registration_grade(r351,b),registration_grade(r352,_G133447),registration_grade(r353,_G133452),registration_grade(r354,_G133457),registration_grade(r355,_G133462),registration_grade(r356,b),registration_grade(r357,b),registration_grade(r358,_G133477),registration_grade(r359,a),registration_grade(r360,_G133487),registration_grade(r361,_G133492),registration_grade(r362,c),registration_grade(r363,_G133502),registration_grade(r364,b),registration_grade(r365,_G133512),registration_grade(r366,b),registration_grade(r367,_G133522),registration_grade(r368,a),registration_grade(r369,c),registration_grade(r370,b),registration_grade(r371,_G133542),registration_grade(r372,_G133547),registration_grade(r373,_G133552),registration_grade(r374,b),registration_grade(r375,b),registration_grade(r376,a),registration_grade(r377,a),registration_grade(r378,a),registration_grade(r379,_G133582),registration_grade(r380,_G133587),registration_grade(r381,c),registration_grade(r382,_G133597),registration_grade(r383,_G133602),registration_grade(r384,b),registration_grade(r385,_G133612),registration_grade(r386,d),registration_grade(r387,_G133622),registration_grade(r388,_G133627),registration_grade(r389,a),registration_grade(r390,_G133637),registration_grade(r391,_G133642),registration_grade(r392,_G133647),registration_grade(r393,b),registration_grade(r394,c),registration_grade(r395,b),registration_grade(r396,_G133667),registration_grade(r397,a),registration_grade(r398,_G133677),registration_grade(r399,_G133682),registration_grade(r400,_G133687),registration_grade(r401,c),registration_grade(r402,_G133697),registration_grade(r403,_G133702),registration_grade(r404,a),registration_grade(r405,_G133712),registration_grade(r406,_G133717),registration_grade(r407,_G133722),registration_grade(r408,a),registration_grade(r409,a),registration_grade(r410,b),registration_grade(r411,b),registration_grade(r412,_G133747),registration_grade(r413,a),registration_grade(r414,_G133757),registration_grade(r415,_G133762),registration_grade(r416,_G133767),registration_grade(r417,_G133772),registration_grade(r418,a),registration_grade(r419,a),registration_grade(r420,a),registration_grade(r421,c),registration_grade(r422,b),registration_grade(r423,_G133802),registration_grade(r424,a),registration_grade(r425,b),registration_grade(r426,c),registration_grade(r427,c),registration_grade(r428,_G133827),registration_grade(r429,c),registration_grade(r430,_G133837),registration_grade(r431,_G133842),registration_grade(r432,c),registration_grade(r433,_G133852),registration_grade(r434,a),registration_grade(r435,_G133862),registration_grade(r436,_G133867),registration_grade(r437,c),registration_grade(r438,b),registration_grade(r439,_G133882),registration_grade(r440,c),registration_grade(r441,a),registration_grade(r442,c),registration_grade(r443,_G133902),registration_grade(r444,_G133907),registration_grade(r445,_G133912),registration_grade(r446,_G133917),registration_grade(r447,d),registration_grade(r448,_G133927),registration_grade(r449,b),registration_grade(r450,_G133937),registration_grade(r451,_G133942),registration_grade(r452,b),registration_grade(r453,_G133952),registration_grade(r454,_G133957),registration_grade(r455,_G133962),registration_grade(r456,c),registration_grade(r457,_G133972),registration_grade(r458,_G133977),registration_grade(r459,_G133982),registration_grade(r460,_G133987),registration_grade(r461,_G133992),registration_grade(r462,a),registration_grade(r463,d),registration_grade(r464,a),registration_grade(r465,_G134012),registration_grade(r466,_G134017),registration_grade(r467,b),registration_grade(r468,_G134027),registration_grade(r469,_G134032),registration_grade(r470,_G134037),registration_grade(r471,_G134042),registration_grade(r472,a),registration_grade(r473,c),registration_grade(r474,b),registration_grade(r475,_G134062),registration_grade(r476,_G134067),registration_grade(r477,b),registration_grade(r478,a),registration_grade(r479,b),registration_grade(r480,a),registration_grade(r481,_G134092),registration_grade(r482,b),registration_grade(r483,a),registration_grade(r484,_G134107),registration_grade(r485,_G134112),registration_grade(r486,_G134117),registration_grade(r487,_G134122),registration_grade(r488,a),registration_grade(r489,_G134132),registration_grade(r490,_G134137),registration_grade(r491,c),registration_grade(r492,b),registration_grade(r493,a),registration_grade(r494,_G134157),registration_grade(r495,_G134162),registration_grade(r496,_G134167),registration_grade(r497,c),registration_grade(r498,_G134177),registration_grade(r499,c),registration_grade(r500,b),registration_grade(r501,_G134192),registration_grade(r502,a),registration_grade(r503,_G134202),registration_grade(r504,_G134207),registration_grade(r505,_G134212),registration_grade(r506,c),registration_grade(r507,a),registration_grade(r508,_G134227),registration_grade(r509,_G134232),registration_grade(r510,_G134237),registration_grade(r511,_G134242),registration_grade(r512,b),registration_grade(r513,_G134252),registration_grade(r514,_G134257),registration_grade(r515,c),registration_grade(r516,_G134267),registration_grade(r517,_G134272),registration_grade(r518,_G134277),registration_grade(r519,a),registration_grade(r520,b),registration_grade(r521,a),registration_grade(r522,b),registration_grade(r523,_G134302),registration_grade(r524,b),registration_grade(r525,c),registration_grade(r526,c),registration_grade(r527,c),registration_grade(r528,a),registration_grade(r529,_G134332),registration_grade(r530,a),registration_grade(r531,_G134342),registration_grade(r532,a),registration_grade(r533,_G134352),registration_grade(r534,b),registration_grade(r535,c),registration_grade(r536,a),registration_grade(r537,_G134372),registration_grade(r538,_G134377),registration_grade(r539,_G134382),registration_grade(r540,_G134387),registration_grade(r541,c),registration_grade(r542,a),registration_grade(r543,a),registration_grade(r544,b),registration_grade(r545,a),registration_grade(r546,b),registration_grade(r547,_G134422),registration_grade(r548,c),registration_grade(r549,_G134432),registration_grade(r550,a),registration_grade(r551,_G134442),registration_grade(r552,c),registration_grade(r553,_G134452),registration_grade(r554,b),registration_grade(r555,_G134462),registration_grade(r556,_G134467),registration_grade(r557,_G134472),registration_grade(r558,_G134477),registration_grade(r559,b),registration_grade(r560,_G134487),registration_grade(r561,a),registration_grade(r562,_G134497),registration_grade(r563,_G134502),registration_grade(r564,_G134507),registration_grade(r565,d),registration_grade(r566,c),registration_grade(r567,a),registration_grade(r568,a),registration_grade(r569,_G134532),registration_grade(r570,_G134537),registration_grade(r571,_G134542),registration_grade(r572,b),registration_grade(r573,a),registration_grade(r574,_G134557),registration_grade(r575,a),registration_grade(r576,_G134567),registration_grade(r577,_G134572),registration_grade(r578,b),registration_grade(r579,a),registration_grade(r580,_G134587),registration_grade(r581,_G134592),registration_grade(r582,_G134597),registration_grade(r583,_G134602),registration_grade(r584,a),registration_grade(r585,c),registration_grade(r586,b),registration_grade(r587,_G134622),registration_grade(r588,_G134627),registration_grade(r589,c),registration_grade(r590,_G134637),registration_grade(r591,c),registration_grade(r592,b),registration_grade(r593,_G134652),registration_grade(r594,c),registration_grade(r595,b),registration_grade(r596,_G134667),registration_grade(r597,_G134672),registration_grade(r598,a),registration_grade(r599,_G134682),registration_grade(r600,a),registration_grade(r601,b),registration_grade(r602,_G134697),registration_grade(r603,d),registration_grade(r604,_G134707),registration_grade(r605,a),registration_grade(r606,_G134717),registration_grade(r607,_G134722),registration_grade(r608,a),registration_grade(r609,b),registration_grade(r610,_G134737),registration_grade(r611,_G134742),registration_grade(r612,c),registration_grade(r613,_G134752),registration_grade(r614,_G134757),registration_grade(r615,b),registration_grade(r616,_G134767),registration_grade(r617,a),registration_grade(r618,_G134777),registration_grade(r619,_G134782),registration_grade(r620,a),registration_grade(r621,_G134792),registration_grade(r622,b),registration_grade(r623,_G134802),registration_grade(r624,a),registration_grade(r625,_G134812),registration_grade(r626,a),registration_grade(r627,_G134822),registration_grade(r628,a),registration_grade(r629,_G134832),registration_grade(r630,_G134837),registration_grade(r631,_G134842),registration_grade(r632,a),registration_grade(r633,_G134852),registration_grade(r634,b),registration_grade(r635,_G134862),registration_grade(r636,d),registration_grade(r637,c),registration_grade(r638,a),registration_grade(r639,b),registration_grade(r640,_G134887),registration_grade(r641,_G134892),registration_grade(r642,c),registration_grade(r643,_G134902),registration_grade(r644,_G134907),registration_grade(r645,_G134912),registration_grade(r646,_G134917),registration_grade(r647,b),registration_grade(r648,a),registration_grade(r649,_G134932),registration_grade(r650,c),registration_grade(r651,b),registration_grade(r652,b),registration_grade(r653,_G134952),registration_grade(r654,b),registration_grade(r655,a),registration_grade(r656,_G134967),registration_grade(r657,a),registration_grade(r658,a),registration_grade(r659,a),registration_grade(r660,a),registration_grade(r661,c),registration_grade(r662,_G134997),registration_grade(r663,a),registration_grade(r664,_G135007),registration_grade(r665,a),registration_grade(r666,b),registration_grade(r667,_G135022),registration_grade(r668,d),registration_grade(r669,b),registration_grade(r670,a),registration_grade(r671,_G135042),registration_grade(r672,c),registration_grade(r673,a),registration_grade(r674,_G135057),registration_grade(r675,_G135062),registration_grade(r676,a),registration_grade(r677,a),registration_grade(r678,a),registration_grade(r679,a),registration_grade(r680,_G135087),registration_grade(r681,_G135092),registration_grade(r682,_G135097),registration_grade(r683,b),registration_grade(r684,_G135107),registration_grade(r685,_G135112),registration_grade(r686,b),registration_grade(r687,a),registration_grade(r688,c),registration_grade(r689,_G135132),registration_grade(r690,a),registration_grade(r691,_G135142),registration_grade(r692,_G135147),registration_grade(r693,b),registration_grade(r694,_G135157),registration_grade(r695,_G135162),registration_grade(r696,a),registration_grade(r697,_G135172),registration_grade(r698,_G135177),registration_grade(r699,_G135182),registration_grade(r700,a),registration_grade(r701,_G135192),registration_grade(r702,a),registration_grade(r703,_G135202),registration_grade(r704,c),registration_grade(r705,b),registration_grade(r706,_G135217),registration_grade(r707,a),registration_grade(r708,b),registration_grade(r709,_G135232),registration_grade(r710,_G135237),registration_grade(r711,b),registration_grade(r712,_G135247),registration_grade(r713,a),registration_grade(r714,_G135257),registration_grade(r715,a),registration_grade(r716,a),registration_grade(r717,a),registration_grade(r718,a),registration_grade(r719,_G135282),registration_grade(r720,_G135287),registration_grade(r721,_G135292),registration_grade(r722,_G135297),registration_grade(r723,_G135302),registration_grade(r724,_G135307),registration_grade(r725,c),registration_grade(r726,a),registration_grade(r727,_G135322),registration_grade(r728,b),registration_grade(r729,_G135332),registration_grade(r730,_G135337),registration_grade(r731,_G135342),registration_grade(r732,a),registration_grade(r733,a),registration_grade(r734,b),registration_grade(r735,_G135362),registration_grade(r736,a),registration_grade(r737,_G135372),registration_grade(r738,_G135377),registration_grade(r739,a),registration_grade(r740,_G135387),registration_grade(r741,_G135392),registration_grade(r742,_G135397),registration_grade(r743,_G135402),registration_grade(r744,a),registration_grade(r745,b),registration_grade(r746,_G135417),registration_grade(r747,_G135422),registration_grade(r748,b),registration_grade(r749,c),registration_grade(r750,_G135437),registration_grade(r751,c),registration_grade(r752,_G135447),registration_grade(r753,c),registration_grade(r754,_G135457),registration_grade(r755,c),registration_grade(r756,_G135467),registration_grade(r757,_G135472),registration_grade(r758,b),registration_grade(r759,_G135482),registration_grade(r760,_G135487),registration_grade(r761,a),registration_grade(r762,_G135497),registration_grade(r763,a),registration_grade(r764,a),registration_grade(r765,a),registration_grade(r766,_G135517),registration_grade(r767,c),registration_grade(r768,_G135527),registration_grade(r769,_G135532),registration_grade(r770,b),registration_grade(r771,_G135542),registration_grade(r772,a),registration_grade(r773,b),registration_grade(r774,b),registration_grade(r775,a),registration_grade(r776,_G135567),registration_grade(r777,c),registration_grade(r778,c),registration_grade(r779,b),registration_grade(r780,a),registration_grade(r781,_G135592),registration_grade(r782,a),registration_grade(r783,_G135602),registration_grade(r784,_G135607),registration_grade(r785,_G135612),registration_grade(r786,c),registration_grade(r787,a),registration_grade(r788,_G135627),registration_grade(r789,_G135632),registration_grade(r790,b),registration_grade(r791,b),registration_grade(r792,_G135647),registration_grade(r793,_G135652),registration_grade(r794,_G135657),registration_grade(r795,_G135662),registration_grade(r796,_G135667),registration_grade(r797,a),registration_grade(r798,_G135677),registration_grade(r799,_G135682),registration_grade(r800,_G135687),registration_grade(r801,b),registration_grade(r802,_G135697),registration_grade(r803,b),registration_grade(r804,_G135707),registration_grade(r805,_G135712),registration_grade(r806,_G135717),registration_grade(r807,a),registration_grade(r808,_G135727),registration_grade(r809,_G135732),registration_grade(r810,_G135737),registration_grade(r811,d),registration_grade(r812,c),registration_grade(r813,_G135752),registration_grade(r814,c),registration_grade(r815,_G135762),registration_grade(r816,_G135767),registration_grade(r817,a),registration_grade(r818,_G135777),registration_>grade(r819,b),registration_grade(r820,d),registration_grade(r821,b),registration_grade(r822,_G135797),registration_grade(r823,a),registration_grade(r824,_G135807),registration_grade(r825,b),registration_grade(r826,b),registration_grade(r827,_G135822),registration_grade(r828,_G135827),registration_grade(r829,b),registration_grade(r830,_G135837),registration_grade(r831,_G135842),registration_grade(r832,b),registration_grade(r833,b),registration_grade(r834,_G135857),registration_grade(r835,a),registration_grade(r836,a),registration_grade(r837,c),registration_grade(r838,_G135877),registration_grade(r839,b),registration_grade(r840,b),registration_grade(r841,a),registration_grade(r842,a),registration_grade(r843,b),registration_grade(r844,_G135907),registration_grade(r845,c),registration_grade(r846,b),registration_grade(r847,b),registration_grade(r848,_G135927),registration_grade(r849,_G135932),registration_grade(r850,_G135937),registration_grade(r851,_G135942),registration_grade(r852,_G135947),registration_grade(r853,_G135952),registration_grade(r854,_G135957),registration_grade(r855,_G135962),registration_grade(r856,_G135967),student_intelligence(s0,l),student_intelligence(s1,_G135977),student_intelligence(s2,_G135982),student_intelligence(s3,h),student_intelligence(s4,h),student_intelligence(s5,h),student_intelligence(s6,m),student_intelligence(s7,h),student_intelligence(s8,h),student_intelligence(s9,_G136017),student_intelligence(s10,m),student_intelligence(s11,_G136027),student_intelligence(s12,h),student_intelligence(s13,h),student_intelligence(s14,_G136042),student_intelligence(s15,_G136047),student_intelligence(s16,_G136052),student_intelligence(s17,m),student_intelligence(s18,m),student_intelligence(s19,_G136067),student_intelligence(s20,m),student_intelligence(s21,_G136077),student_intelligence(s22,h),student_intelligence(s23,_G136087),student_intelligence(s24,_G136092),student_intelligence(s25,h),student_intelligence(s26,_G136102),student_intelligence(s27,m),student_intelligence(s28,m),student_intelligence(s29,_G136117),student_intelligence(s30,h),student_intelligence(s31,m),student_intelligence(s32,m),student_intelligence(s33,_G136137),student_intelligence(s34,l),student_intelligence(s35,m),student_intelligence(s36,l),student_intelligence(s37,_G136157),student_intelligence(s38,_G136162),student_intelligence(s39,h),student_intelligence(s40,h),student_intelligence(s41,m),student_intelligence(s42,_G136182),student_intelligence(s43,_G136187),student_intelligence(s44,_G136192),student_intelligence(s45,_G136197),student_intelligence(s46,l),student_intelligence(s47,h),student_intelligence(s48,_G136212),student_intelligence(s49,_G136217),student_intelligence(s50,_G136222),student_intelligence(s51,_G136227),student_intelligence(s52,_G136232),student_intelligence(s53,m),student_intelligence(s54,_G136242),student_intelligence(s55,h),student_intelligence(s56,l),student_intelligence(s57,_G136257),student_intelligence(s58,h),student_intelligence(s59,_G136267),student_intelligence(s60,m),student_intelligence(s61,h),student_intelligence(s62,_G136282),student_intelligence(s63,_G136287),student_intelligence(s64,l),student_intelligence(s65,_G136297),student_intelligence(s66,h),student_intelligence(s67,m),student_intelligence(s68,_G136312),student_intelligence(s69,_G136317),student_intelligence(s70,_G136322),student_intelligence(s71,m),student_intelligence(s72,_G136332),student_intelligence(s73,_G136337),student_intelligence(s74,_G136342),student_intelligence(s75,h),student_intelligence(s76,h),student_intelligence(s77,h),student_intelligence(s78,_G136362),student_intelligence(s79,m),student_intelligence(s80,_G136372),student_intelligence(s81,_G136377),student_intelligence(s82,_G136382),student_intelligence(s83,_G136387),student_intelligence(s84,_G136392),student_intelligence(s85,_G136397),student_intelligence(s86,_G136402),student_intelligence(s87,h),student_intelligence(s88,h),student_intelligence(s89,_G136417),student_intelligence(s90,h),student_intelligence(s91,_G136427),student_intelligence(s92,h),student_intelligence(s93,_G136437),student_intelligence(s94,_G136442),student_intelligence(s95,_G136447),student_intelligence(s96,_G136452),student_intelligence(s97,_G136457),student_intelligence(s98,_G136462),student_intelligence(s99,l),student_intelligence(s100,h),student_intelligence(s101,_G136477),student_intelligence(s102,m),student_intelligence(s103,h),student_intelligence(s104,l),student_intelligence(s105,m),student_intelligence(s106,_G136502),student_intelligence(s107,l),student_intelligence(s108,m),student_intelligence(s109,_G136517),student_intelligence(s110,m),student_intelligence(s111,h),student_intelligence(s112,m),student_intelligence(s113,h),student_intelligence(s114,_G136542),student_intelligence(s115,h),student_intelligence(s116,_G136552),student_intelligence(s117,m),student_intelligence(s118,_G136562),student_intelligence(s119,h),student_intelligence(s120,h),student_intelligence(s121,_G136577),student_intelligence(s122,m),student_intelligence(s123,_G136587),student_intelligence(s124,h),student_intelligence(s125,_G136597),student_intelligence(s126,m),student_intelligence(s127,m),student_intelligence(s128,_G136612),student_intelligence(s129,h),student_intelligence(s130,_G136622),student_intelligence(s131,h),student_intelligence(s132,_G136632),student_intelligence(s133,_G136637),student_intelligence(s134,h),student_intelligence(s135,_G136647),student_intelligence(s136,m),student_intelligence(s137,m),student_intelligence(s138,l),student_intelligence(s139,h),student_intelligence(s140,_G136672),student_intelligence(s141,_G136677),student_intelligence(s142,_G136682),student_intelligence(s143,_G136687),student_intelligence(s144,h),student_intelligence(s145,h),student_intelligence(s146,m),student_intelligence(s147,m),student_intelligence(s148,_G136712),student_intelligence(s149,_G136717),student_intelligence(s150,l),student_intelligence(s151,h),student_intelligence(s152,h),student_intelligence(s153,_G136737),student_intelligence(s154,_G136742),student_intelligence(s155,_G136747),student_intelligence(s156,m),student_intelligence(s157,m),student_intelligence(s158,h),student_intelligence(s159,_G136767),student_intelligence(s160,_G136772),student_intelligence(s161,_G136777),student_intelligence(s162,h),student_intelligence(s163,m),student_intelligence(s164,_G136792),student_intelligence(s165,m),student_intelligence(s166,m),student_intelligence(s167,_G136807),student_intelligence(s168,_G136812),student_intelligence(s169,_G136817),student_intelligence(s170,_G136822),student_intelligence(s171,m),student_intelligence(s172,_G136832),student_intelligence(s173,h),student_intelligence(s174,h),student_intelligence(s175,_G136847),student_intelligence(s176,_G136852),student_intelligence(s177,m),student_intelligence(s178,_G136862),student_intelligence(s179,m),student_intelligence(s180,m),student_intelligence(s181,h),student_intelligence(s182,m),student_intelligence(s183,h),student_intelligence(s184,_G136892),student_intelligence(s185,m),student_intelligence(s186,m),student_intelligence(s187,m),student_intelligence(s188,_G136912),student_intelligence(s189,m),student_intelligence(s190,h),student_intelligence(s191,l),student_intelligence(s192,_G136932),student_intelligence(s193,m),student_intelligence(s194,m),student_intelligence(s195,_G136947),student_intelligence(s196,h),student_intelligence(s197,_G136957),student_intelligence(s198,h),student_intelligence(s199,m),student_intelligence(s200,h),student_intelligence(s201,_G136977),student_intelligence(s202,h),student_intelligence(s203,m),student_intelligence(s204,h),student_intelligence(s205,_G136997),student_intelligence(s206,_G137002),student_intelligence(s207,h),student_intelligence(s208,_G137012),student_intelligence(s209,h),student_intelligence(s210,_G137022),student_intelligence(s211,_G137027),student_intelligence(s212,m),student_intelligence(s213,h),student_intelligence(s214,h),student_intelligence(s215,_G137047),student_intelligence(s216,h),student_intelligence(s217,_G137057),student_intelligence(s218,h),student_intelligence(s219,_G137067),student_intelligence(s220,_G137072),student_intelligence(s221,h),student_intelligence(s222,_G137082),student_intelligence(s223,_G137087),student_intelligence(s224,l),student_intelligence(s225,l),student_intelligence(s226,m),student_intelligence(s227,_G137107),student_intelligence(s228,h),student_intelligence(s229,_G137117),student_intelligence(s230,_G137122),student_intelligence(s231,_G137127),student_intelligence(s232,m),student_intelligence(s233,_G137137),student_intelligence(s234,_G137142),student_intelligence(s235,_G137147),student_intelligence(s236,_G137152),student_intelligence(s237,h),student_intelligence(s238,h),student_intelligence(s239,h),student_intelligence(s240,_G137172),student_intelligence(s241,_G137177),student_intelligence(s242,l),student_intelligence(s243,_G137187),student_intelligence(s244,_G137192),student_intelligence(s245,l),student_intelligence(s246,_G137202),student_intelligence(s247,h),student_intelligence(s248,m),student_intelligence(s249,_G137217),student_intelligence(s250,m),student_intelligence(s251,_G137227),student_intelligence(s252,_G137232),student_intelligence(s253,m),student_intelligence(s254,_G137242),student_intelligence(s255,m),course_difficulty(c0,_G137252),course_difficulty(c1,m),course_difficulty(c2,_G137262),course_difficulty(c3,_G137267),course_difficulty(c4,_G137272),course_difficulty(c5,l),course_difficulty(c6,m),course_difficulty(c7,h),course_difficulty(c8,h),course_difficulty(c9,_G137297),course_difficulty(c10,m),course_difficulty(c11,_G137307),course_difficulty(c12,m),course_difficulty(c13,_G137317),course_difficulty(c14,m),course_difficulty(c15,_G137327),course_difficulty(c16,l),course_difficulty(c17,h),course_difficulty(c18,_G137342),course_difficulty(c19,l),course_difficulty(c20,_G137352),course_difficulty(c21,_G137357),course_difficulty(c22,_G137362),course_difficulty(c23,_G137367),course_difficulty(c24,_G137372),course_difficulty(c25,m),course_difficulty(c26,_G137382),course_difficulty(c27,_G137387),course_difficulty(c28,m),course_difficulty(c29,_G137397),course_difficulty(c30,_G137402),course_difficulty(c31,m),course_difficulty(c32,l),course_difficulty(c33,m),course_difficulty(c34,_G137422),course_difficulty(c35,_G137427),course_difficulty(c36,h),course_difficulty(c37,m),course_difficulty(c38,m),course_difficulty(c39,_G137447),course_difficulty(c40,h),course_difficulty(c41,_G137457),course_difficulty(c42,_G137462),course_difficulty(c43,m),course_difficulty(c44,m),course_difficulty(c45,_G137477),course_difficulty(c46,m),course_difficulty(c47,_G137487),course_difficulty(c48,m),course_difficulty(c49,l),course_difficulty(c50,_G137502),course_difficulty(c51,h),course_difficulty(c52,_G137512),course_difficulty(c53,_G137517),course_difficulty(c54,_G137522),course_difficulty(c55,h),course_difficulty(c56,_G137532),course_difficulty(c57,_G137537),course_difficulty(c58,_G137542),course_difficulty(c59,m),course_difficulty(c60,_G137552),course_difficulty(c61,m),course_difficulty(c62,l),course_difficulty(c63,_G137567),registration_satisfaction(r0,_G137572),registration_satisfaction(r1,l),registration_satisfaction(r2,_G137582),registration_satisfaction(r3,_G137587),registration_satisfaction(r4,h),registration_satisfaction(r5,h),registration_satisfaction(r6,_G137602),registration_satisfaction(r7,h),registration_satisfaction(r8,_G137612),registration_satisfaction(r9,h),registration_satisfaction(r10,_G137622),registration_satisfaction(r11,_G137627),registration_satisfaction(r12,_G137632),registration_satisfaction(r13,h),registration_satisfaction(r14,m),registration_satisfaction(r15,h),registration_satisfaction(r16,h),registration_satisfaction(r17,l),registration_satisfaction(r18,l),registration_satisfaction(r19,_G137667),registration_satisfaction(r20,_G137672),registration_satisfaction(r21,_G137677),registration_satisfaction(r22,h),registration_satisfaction(r23,_G137687),registration_satisfaction(r24,_G137692),registration_satisfaction(r25,_G137697),registration_satisfaction(r26,_G137702),registration_satisfaction(r27,_G137707),registration_satisfaction(r28,h),registration_satisfaction(r29,_G137717),registration_satisfaction(r30,l),registration_satisfaction(r31,_G137727),registration_satisfaction(r32,_G137732),registration_satisfaction(r33,h),registration_satisfaction(r34,_G137742),registration_satisfaction(r35,h),registration_satisfaction(r36,m),registration_satisfaction(r37,h),registration_satisfaction(r38,_G137762),registration_satisfaction(r39,h),registration_satisfaction(r40,_G137772),registration_satisfaction(r41,_G137777),registration_satisfaction(r42,_G137782),registration_satisfaction(r43,h),registration_satisfaction(r44,_G137792),registration_satisfaction(r45,h),registration_satisfaction(r46,m),registration_satisfaction(r47,_G137807),registration_satisfaction(r48,_G137812),registration_satisfaction(r49,h),registration_satisfaction(r50,_G137822),registration_satisfaction(r51,_G137827),registration_satisfaction(r52,h),registration_satisfaction(r53,_G137837),registration_satisfaction(r54,h),registration_satisfaction(r55,h),registration_satisfaction(r56,_G137852),registration_satisfaction(r57,h),registration_satisfaction(r58,_G137862),registration_satisfaction(r59,_G137867),registration_satisfaction(r60,h),registration_satisfaction(r61,h),registration_satisfaction(r62,h),registration_satisfaction(r63,h),registration_satisfaction(r64,h),registration_satisfaction(r65,h),registration_satisfaction(r66,h),registration_satisfaction(r67,_G137907),registration_satisfaction(r68,h),registration_satisfaction(r69,m),registration_satisfaction(r70,_G137922),registration_satisfaction(r71,_G137927),registration_satisfaction(r72,_G137932),registration_satisfaction(r73,h),registration_satisfaction(r74,h),registration_satisfaction(r75,h),registration_satisfaction(r76,_G137952),registration_satisfaction(r77,_G137957),registration_satisfaction(r78,m),registration_satisfaction(r79,h),registration_satisfaction(r80,h),registration_satisfaction(r81,h),registration_satisfaction(r82,l),registration_satisfaction(r83,_G137987),registration_satisfaction(r84,m),registration_satisfaction(r85,h),registration_satisfaction(r86,_G138002),registration_satisfaction(r87,_G138007),registration_satisfaction(r88,h),registration_satisfaction(r89,_G138017),registration_satisfaction(r90,_G138022),registration_satisfaction(r91,h),registration_satisfaction(r92,_G138032),registration_satisfaction(r93,_G138037),registration_satisfaction(r94,l),registration_satisfaction(r95,_G138047),registration_satisfaction(r96,h),registration_satisfaction(r97,_G138057),registration_satisfaction(r98,h),registration_satisfaction(r99,h),registration_satisfaction(r100,_G138072),registration_satisfaction(r101,_G138077),registration_satisfaction(r102,h),registration_satisfaction(r103,h),registration_satisfaction(r104,h),registration_satisfaction(r105,_G138097),registration_satisfaction(r106,_G138102),registration_satisfaction(r107,l),registration_satisfaction(r108,l),registration_satisfaction(r109,h),registration_satisfaction(r110,_G138122),registration_satisfaction(r111,h),registration_satisfaction(r112,_G138132),registration_satisfaction(r113,_G138137),registration_satisfaction(r114,m),registration_satisfaction(r115,_G138147),registration_satisfaction(r116,h),registration_satisfaction(r117,_G138157),registration_satisfaction(r118,h),registration_satisfaction(r119,h),registration_satisfaction(r120,l),registration_satisfaction(r121,_G138177),registration_satisfaction(r122,_G138182),registration_satisfaction(r123,l),registration_satisfaction(r124,_G138192),registration_satisfaction(r125,m),registration_satisfaction(r126,h),registration_satisfaction(r127,h),registration_satisfaction(r128,h),registration_satisfaction(r129,h),registration_satisfaction(r130,h),registration_satisfaction(r131,_G138227),registration_satisfaction(r132,m),registration_satisfaction(r133,_G138237),registration_satisfaction(r134,m),registration_satisfaction(r135,_G138247),registration_satisfaction(r136,h),registration_satisfaction(r137,h),registration_satisfaction(r138,h),registration_satisfaction(r139,_G138267),registration_satisfaction(r140,h),registration_satisfaction(r141,_G138277),registration_satisfaction(r142,h),registration_satisfaction(r143,h),registration_satisfaction(r144,h),registration_satisfaction(r145,l),registration_satisfaction(r146,_G138302),registration_satisfaction(r147,l),registration_satisfaction(r148,m),registration_satisfaction(r149,h),registration_satisfaction(r150,_G138322),registration_satisfaction(r151,_G138327),registration_satisfaction(r152,h),registration_satisfaction(r153,_G138337),registration_satisfaction(r154,_G138342),registration_satisfaction(r155,m),registration_satisfaction(r156,h),registration_satisfaction(r157,_G138357),registration_satisfaction(r158,l),registration_satisfaction(r159,m),registration_satisfaction(r160,h),registration_satisfaction(r161,_G138377),registration_satisfaction(r162,m),registration_satisfaction(r163,_G138387),registration_satisfaction(r164,m),registration_satisfaction(r165,m),registration_satisfaction(r166,l),registration_satisfaction(r167,_G138407),registration_satisfaction(r168,h),registration_satisfaction(r169,h),registration_satisfaction(r170,_G138422),registration_satisfaction(r171,_G138427),registration_satisfaction(r172,h),registration_satisfaction(r173,_G138437),registration_satisfaction(r174,_G138442),registration_satisfaction(r175,_G138447),registration_satisfaction(r176,h),registration_satisfaction(r177,h),registration_satisfaction(r178,h),registration_satisfaction(r179,l),registration_satisfaction(r180,_G138472),registration_satisfaction(r181,_G138477),registration_satisfaction(r182,_G138482),registration_satisfaction(r183,_G138487),registration_satisfaction(r184,_G138492),registration_satisfaction(r185,_G138497),registration_satisfaction(r186,_G138502),registration_satisfaction(r187,h),registration_satisfaction(r188,m),registration_satisfaction(r189,_G138517),registration_satisfaction(r190,h),registration_satisfaction(r191,h),registration_satisfaction(r192,m),registration_satisfaction(r193,h),registration_satisfaction(r194,_G138542),registration_satisfaction(r195,_G138547),registration_satisfaction(r196,_G138552),registration_satisfaction(r197,h),registration_satisfaction(r198,h),registration_satisfaction(r199,h),registration_satisfaction(r200,_G138572),registration_satisfaction(r201,h),registration_satisfaction(r202,_G138582),registration_satisfaction(r203,_G138587),registration_satisfaction(r204,_G138592),registration_satisfaction(r205,_G138597),registration_satisfaction(r206,h),registration_satisfaction(r207,h),registration_satisfaction(r208,h),registration_satisfaction(r209,h),registration_satisfaction(r210,_G138622),registration_satisfaction(r211,_G138627),registration_satisfaction(r212,h),registration_satisfaction(r213,_G138637),registration_satisfaction(r214,_G138642),registration_satisfaction(r215,h),registration_satisfaction(r216,h),registration_satisfaction(r217,h),registration_satisfaction(r218,m),registration_satisfaction(r219,h),registration_satisfaction(r220,h),registration_satisfaction(r221,_G138677),registration_satisfaction(r222,_G138682),registration_satisfaction(r223,h),registration_satisfaction(r224,h),registration_satisfaction(r225,_G138697),registration_satisfaction(r226,_G138702),registration_satisfaction(r227,h),registration_satisfaction(r228,_G138712),registration_satisfaction(r229,l),registration_satisfaction(r230,h),registration_satisfaction(r231,_G138727),registration_satisfaction(r232,h),registration_satisfaction(r233,m),registration_satisfaction(r234,_G138742),registration_satisfaction(r235,h),registration_satisfaction(r236,_G138752),registration_satisfaction(r237,_G138757),registration_satisfaction(r238,m),registration_satisfaction(r239,m),registration_satisfaction(r240,h),registration_satisfaction(r241,h),registration_satisfaction(r242,m),registration_satisfaction(r243,_G138787),registration_satisfaction(r244,_G138792),registration_satisfaction(r245,_G138797),registration_satisfaction(r246,h),registration_satisfaction(r247,_G138807),registration_satisfaction(r248,_G138812),registration_satisfaction(r249,h),registration_satisfaction(r250,h),registration_satisfaction(r251,h),registration_satisfaction(r252,h),registration_satisfaction(r253,h),registration_satisfaction(r254,h),registration_satisfaction(r255,h),registration_satisfaction(r256,_G138852),registration_satisfaction(r257,m),registration_satisfaction(r258,h),registration_satisfaction(r259,_G138867),registration_satisfaction(r260,_G138872),registration_satisfaction(r261,_G138877),registration_satisfaction(r262,h),registration_satisfaction(r263,m),registration_satisfaction(r264,_G138892),registration_satisfaction(r265,_G138897),registration_satisfaction(r266,l),registration_satisfaction(r267,_G138907),registration_satisfaction(r268,_G138912),registration_satisfaction(r269,_G138917),registration_satisfaction(r270,l),registration_satisfaction(r271,h),registration_satisfaction(r272,_G138932),registration_satisfaction(r273,h),registration_satisfaction(r274,h),registration_satisfaction(r275,_G138947),registration_satisfaction(r276,_G138952),registration_satisfaction(r277,h),registration_satisfaction(r278,h),registration_satisfaction(r279,_G138967),registration_satisfaction(r280,_G138972),registration_satisfaction(r281,_G138977),registration_satisfaction(r282,_G138982),registration_satisfaction(r283,_G138987),registration_satisfaction(r284,_G138992),registration_satisfaction(r285,m),registration_satisfaction(r286,h),registration_satisfaction(r287,_G139007),registration_satisfaction(r288,_G139012),registration_satisfaction(r289,l),registration_satisfaction(r290,m),registration_satisfaction(r291,h),registration_satisfaction(r292,m),registration_satisfaction(r293,_G139037),registration_satisfaction(r294,h),registration_satisfaction(r295,_G139047),registration_satisfaction(r296,_G139052),registration_satisfaction(r297,_G139057),registration_satisfaction(r298,_G139062),registration_satisfaction(r299,_G139067),registration_satisfaction(r300,l),registration_satisfaction(r301,_G139077),registration_satisfaction(r302,_G139082),registration_satisfaction(r303,h),registration_satisfaction(r304,h),registration_satisfaction(r305,_G139097),registration_satisfaction(r306,_G139102),registration_satisfaction(r307,_G139107),registration_satisfaction(r308,l),registration_satisfaction(r309,m),registration_satisfaction(r310,_G139122),registration_satisfaction(r311,_G139127),registration_satisfaction(r312,h),registration_satisfaction(r313,_G139137),registration_satisfaction(r314,h),registration_satisfaction(r315,h),registration_satisfaction(r316,l),registration_satisfaction(r317,l),registration_satisfaction(r318,_G139162),registration_satisfaction(r319,_G139167),registration_satisfaction(r320,_G139172),registration_satisfaction(r321,l),registration_satisfaction(r322,h),registration_satisfaction(r323,_G139187),registration_satisfaction(r324,h),registration_satisfaction(r325,h),registration_satisfaction(r326,_G139202),registration_satisfaction(r327,m),registration_satisfaction(r328,h),registration_satisfaction(r329,h),registration_satisfaction(r330,_G139222),registration_satisfaction(r331,h),registration_satisfaction(r332,l),registration_satisfaction(r333,_G139237),registration_satisfaction(r334,_G139242),registration_satisfaction(r335,h),registration_satisfaction(r336,_G139252),registration_satisfaction(r337,h),registration_satisfaction(r338,h),registration_satisfaction(r339,_G139267),registration_satisfaction(r340,_G139272),registration_satisfaction(r341,l),registration_satisfaction(r342,h),registration_satisfaction(r343,_G139287),registration_satisfaction(r344,_G139292),registration_satisfaction(r345,m),registration_satisfaction(r346,h),registration_satisfaction(r347,m),registration_satisfaction(r348,_G139312),registration_satisfaction(r349,h),registration_satisfaction(r350,m),registration_satisfaction(r351,_G139327),registration_satisfaction(r352,l),registration_satisfaction(r353,h),registration_satisfaction(r354,h),registration_satisfaction(r355,_G139347),registration_satisfaction(r356,_G139352),registration_satisfaction(r357,m),registration_satisfaction(r358,_G139362),registration_satisfaction(r359,_G139367),registration_satisfaction(r360,_G139372),registration_satisfaction(r361,m),registration_satisfaction(r362,_G139382),registration_satisfaction(r363,_G139387),registration_satisfaction(r364,_G139392),registration_satisfaction(r365,_G139397),registration_satisfaction(r366,h),registration_satisfaction(r367,h),registration_satisfaction(r368,h),registration_satisfaction(r369,h),registration_satisfaction(r370,_G139422),registration_satisfaction(r371,_G139427),registration_satisfaction(r372,h),registration_satisfaction(r373,h),registration_satisfaction(r374,_G139442),registration_satisfaction(r375,h),registration_satisfaction(r376,_G139452),registration_satisfaction(r377,_G139457),registration_satisfaction(r378,_G139462),registration_satisfaction(r379,h),registration_satisfaction(r380,_G139472),registration_satisfaction(r381,_G139477),registration_satisfaction(r382,h),registration_satisfaction(r383,h),registration_satisfaction(r384,_G139492),registration_satisfaction(r385,m),registration_satisfaction(r386,_G139502),registration_satisfaction(r387,h),registration_satisfaction(r388,_G139512),registration_satisfaction(r389,_G139517),registration_satisfaction(r390,_G139522),registration_satisfaction(r391,l),registration_satisfaction(r392,_G139532),registration_satisfaction(r393,_G139537),registration_satisfaction(r394,h),registration_satisfaction(r395,_G139547),registration_satisfaction(r396,h),registration_satisfaction(r397,h),registration_satisfaction(r398,l),registration_satisfaction(r399,h),registration_satisfaction(r400,_G139572),registration_satisfaction(r401,l),registration_satisfaction(r402,h),registration_satisfaction(r403,h),registration_satisfaction(r404,h),registration_satisfaction(r405,h),registration_satisfaction(r406,_G139602),registration_satisfaction(r407,_G139607),registration_satisfaction(r408,_G139612),registration_satisfaction(r409,h),registration_satisfaction(r410,h),registration_satisfaction(r411,_G139627),registration_satisfaction(r412,_G139632),registration_satisfaction(r413,l),registration_satisfaction(r414,h),registration_satisfaction(r415,m),registration_satisfaction(r416,_G139652),registration_satisfaction(r417,h),registration_satisfaction(r418,_G139662),registration_satisfaction(r419,_G139667),registration_satisfaction(r420,_G139672),registration_satisfaction(r421,_G139677),registration_satisfaction(r422,_G139682),registration_satisfaction(r423,_G139687),registration_satisfaction(r424,h),registration_satisfaction(r425,h),registration_satisfaction(r426,_G139702),registration_satisfaction(r427,_G139707),registration_satisfaction(r428,_G139712),registration_satisfaction(r429,_G139717),registration_satisfaction(r430,l),registration_satisfaction(r431,m),registration_satisfaction(r432,_G139732),registration_satisfaction(r433,_G139737),registration_satisfaction(r434,h),registration_satisfaction(r435,m),registration_satisfaction(r436,_G139752),registration_satisfaction(r437,h),registration_satisfaction(r438,l),registration_satisfaction(r439,_G139767),registration_satisfaction(r440,h),registration_satisfaction(r441,h),registration_satisfaction(r442,_G139782),registration_satisfaction(r443,_G139787),registration_satisfaction(r444,_G139792),registration_satisfaction(r445,_G139797),registration_satisfaction(r446,h),registration_satisfaction(r447,m),registration_satisfaction(r448,l),registration_satisfaction(r449,_G139817),registration_satisfaction(r450,h),registration_satisfaction(r451,_G139827),registration_satisfaction(r452,_G139832),registration_satisfaction(r453,_G139837),registration_satisfaction(r454,_G139842),registration_satisfaction(r455,_G139847),registration_satisfaction(r456,h),registration_satisfaction(r457,h),registration_satisfaction(r458,_G139862),registration_satisfaction(r459,_G139867),registration_satisfaction(r460,l),registration_satisfaction(r461,h),registration_satisfaction(r462,h),registration_satisfaction(r463,_G139887),registration_satisfaction(r464,_G139892),registration_satisfaction(r465,_G139897),registration_satisfaction(r466,l),registration_satisfaction(r467,_G139907),registration_satisfaction(r468,_G139912),registration_satisfaction(r469,h),registration_satisfaction(r470,h),registration_satisfaction(r471,_G139927),registration_satisfaction(r472,_G139932),registration_satisfaction(r473,_G139937),registration_satisfaction(r474,_G139942),registration_satisfaction(r475,h),registration_satisfaction(r476,_G139952),registration_satisfaction(r477,_G139957),registration_satisfaction(r478,_G139962),registration_satisfaction(r479,_G139967),registration_satisfaction(r480,_G139972),registration_satisfaction(r481,_G139977),registration_satisfaction(r482,_G139982),registration_satisfaction(r483,h),registration_satisfaction(r484,_G139992),registration_satisfaction(r485,h),registration_satisfaction(r486,h),registration_satisfaction(r487,_G140007),registration_satisfaction(r488,_G140012),registration_satisfaction(r489,m),registration_satisfaction(r490,_G140022),registration_satisfaction(r491,_G140027),registration_satisfaction(r492,h),registration_satisfaction(r493,_G140037),registration_satisfaction(r494,_G140042),registration_satisfaction(r495,h),registration_satisfaction(r496,h),registration_satisfaction(r497,_G140057),registration_satisfaction(r498,_G140062),registration_satisfaction(r499,h),registration_satisfaction(r500,m),registration_satisfaction(r501,h),registration_satisfaction(r502,_G140082),registration_satisfaction(r503,_G140087),registration_satisfaction(r504,m),registration_satisfaction(r505,_G140097),registration_satisfaction(r506,_G140102),registration_satisfaction(r507,_G140107),registration_satisfaction(r508,_G140112),registration_satisfaction(r509,_G140117),registration_satisfaction(r510,_G140122),registration_satisfaction(r511,l),registration_satisfaction(r512,h),registration_satisfaction(r513,h),registration_satisfaction(r514,_G140142),registration_satisfaction(r515,_G140147),registration_satisfaction(r516,_G140152),registration_satisfaction(r517,m),registration_satisfaction(r518,_G140162),registration_satisfaction(r519,h),registration_satisfaction(r520,_G140172),registration_satisfaction(r521,h),registration_satisfaction(r522,h),registration_satisfaction(r523,h),registration_satisfaction(r524,h),registration_satisfaction(r525,_G140197),registration_satisfaction(r526,h),registration_satisfaction(r527,_G140207),registration_satisfaction(r528,_G140212),registration_satisfaction(r529,h),registration_satisfaction(r530,_G140222),registration_satisfaction(r531,_G140227),registration_satisfaction(r532,_G140232),registration_satisfaction(r533,_G140237),registration_satisfaction(r534,l),registration_satisfaction(r535,_G140247),registration_satisfaction(r536,h),registration_satisfaction(r537,h),registration_satisfaction(r538,_G140262),registration_satisfaction(r539,_G140267),registration_satisfaction(r540,_G140272),registration_satisfaction(r541,_G140277),registration_satisfaction(r542,h),registration_satisfaction(r543,h),registration_satisfaction(r544,_G140292),registration_satisfaction(r545,h),registration_satisfaction(r546,_G140302),registration_satisfaction(r547,_G140307),registration_satisfaction(r548,h),registration_satisfaction(r549,_G140317),registration_satisfaction(r550,_G140322),registration_satisfaction(r551,h),registration_satisfaction(r552,m),registration_satisfaction(r553,m),registration_satisfaction(r554,l),registration_satisfaction(r555,m),registration_satisfaction(r556,_G140352),registration_satisfaction(r557,_G140357),registration_satisfaction(r558,_G140362),registration_satisfaction(r559,_G140367),registration_satisfaction(r560,_G140372),registration_satisfaction(r561,_G140377),registration_satisfaction(r562,h),registration_satisfaction(r563,_G140387),registration_satisfaction(r564,h),registration_satisfaction(r565,_G140397),registration_satisfaction(r566,l),registration_satisfaction(r567,_G140407),registration_satisfaction(r568,h),registration_satisfaction(r569,h),registration_satisfaction(r570,h),registration_satisfaction(r571,_G140427),registration_satisfaction(r572,_G140432),registration_satisfaction(r573,_G140437),registration_satisfaction(r574,_G140442),registration_satisfaction(r575,_G140447),registration_satisfaction(r576,_G140452),registration_satisfaction(r577,_G140457),registration_satisfaction(r578,l),registration_satisfaction(r579,h),registration_satisfaction(r580,m),registration_satisfaction(r581,h),registration_satisfaction(r582,h),registration_satisfaction(r583,h),registration_satisfaction(r584,h),registration_satisfaction(r585,h),registration_satisfaction(r586,_G140502),registration_satisfaction(r587,_G140507),registration_satisfaction(r588,_G140512),registration_satisfaction(r589,l),registration_satisfaction(r590,h),registration_satisfaction(r591,_G140527),registration_satisfaction(r592,_G140532),registration_satisfaction(r593,_G140537),registration_satisfaction(r594,l),registration_satisfaction(r595,m),registration_satisfaction(r596,h),registration_satisfaction(r597,_G140557),registration_satisfaction(r598,_G140562),registration_satisfaction(r599,h),registration_satisfaction(r600,_G140572),registration_satisfaction(r601,m),registration_satisfaction(r602,h),registration_satisfaction(r603,_G140587),registration_satisfaction(r604,_G140592),registration_satisfaction(r605,h),registration_satisfaction(r606,h),registration_satisfaction(r607,l),registration_satisfaction(r608,_G140612),registration_satisfaction(r609,h),registration_satisfaction(r610,_G140622),registration_satisfaction(r611,h),registration_satisfaction(r612,l),registration_satisfaction(r613,_G140637),registration_satisfaction(r614,_G140642),registration_satisfaction(r615,_G140647),registration_satisfaction(r616,h),registration_satisfaction(r617,h),registration_satisfaction(r618,h),registration_satisfaction(r619,h),registration_satisfaction(r620,_G140672),registration_satisfaction(r621,_G140677),registration_satisfaction(r622,h),registration_satisfaction(r623,_G140687),registration_satisfaction(r624,_G140692),registration_satisfaction(r625,l),registration_satisfaction(r626,_G140702),registration_satisfaction(r627,h),registration_satisfaction(r628,h),registration_satisfaction(r629,h),registration_satisfaction(r630,h),registration_satisfaction(r631,h),registration_satisfaction(r632,h),registration_satisfaction(r633,_G140737),registration_satisfaction(r634,_G140742),registration_satisfaction(r635,_G140747),registration_satisfaction(r636,_G140752),registration_satisfaction(r637,_G140757),registration_satisfaction(r638,h),registration_satisfaction(r639,_G140767),registration_satisfaction(r640,h),registration_satisfaction(r641,h),registration_satisfaction(r642,_G140782),registration_satisfaction(r643,_G140787),registration_satisfaction(r644,h),registration_satisfaction(r645,_G140797),registration_satisfaction(r646,h),registration_satisfaction(r647,h),registration_satisfaction(r648,_G140812),registration_satisfaction(r649,_G140817),registration_satisfaction(r650,_G140822),registration_satisfaction(r651,_G140827),registration_satisfaction(r652,_G140832),registration_satisfaction(r653,_G140837),registration_satisfaction(r654,h),registration_satisfaction(r655,h),registration_satisfaction(r656,m),registration_satisfaction(r657,_G140857),registration_satisfaction(r658,h),registration_satisfaction(r659,h),registration_satisfaction(r660,h),registration_satisfaction(r661,_G140877),registration_satisfaction(r662,_G140882),registration_satisfaction(r663,h),registration_satisfaction(r664,_G140892),registration_satisfaction(r665,h),registration_satisfaction(r666,l),registration_satisfaction(r667,h),registration_satisfaction(r668,l),registration_satisfaction(r669,_G140917),registration_satisfaction(r670,h),registration_satisfaction(r671,_G140927),registration_satisfaction(r672,_G140932),registration_satisfaction(r673,_G140937),registration_satisfaction(r674,h),registration_satisfaction(r675,l),registration_satisfaction(r676,_G140952),registration_satisfaction(r677,_G140957),registration_satisfaction(r678,h),registration_satisfaction(r679,h),registration_satisfaction(r680,m),registration_satisfaction(r681,_G140977),registration_satisfaction(r682,_G140982),registration_satisfaction(r683,h),registration_satisfaction(r684,_G140992),registration_satisfaction(r685,h),registration_satisfaction(r686,h),registration_satisfaction(r687,_G141007),registration_satisfaction(r688,_G141012),registration_satisfaction(r689,_G141017),registration_satisfaction(r690,h),registration_satisfaction(r691,h),registration_satisfaction(r692,h),registration_satisfaction(r693,_G141037),registration_satisfaction(r694,h),registration_satisfaction(r695,_G141047),registration_satisfaction(r696,_G141052),registration_satisfaction(r697,_G141057),registration_satisfaction(r698,h),registration_satisfaction(r699,h),registration_satisfaction(r700,_G141072),registration_satisfaction(r701,h),registration_satisfaction(r702,_G141082),registration_satisfaction(r703,_G141087),registration_satisfaction(r704,l),registration_satisfaction(r705,_G141097),registration_satisfaction(r706,_G141102),registration_satisfaction(r707,_G141107),registration_satisfaction(r708,_G141112),registration_satisfaction(r709,m),registration_satisfaction(r710,l),registration_satisfaction(r711,h),registration_satisfaction(r712,h),registration_satisfaction(r713,h),registration_satisfaction(r714,m),registration_satisfaction(r715,_G141147),registration_satisfaction(r716,h),registration_satisfaction(r717,h),registration_satisfaction(r718,l),registration_satisfaction(r719,l),registration_satisfaction(r720,_G141172),registration_satisfaction(r721,h),registration_satisfaction(r722,h),registration_satisfaction(r723,h),registration_satisfaction(r724,h),registration_satisfaction(r725,_G141197),registration_satisfaction(r726,h),registration_satisfaction(r727,_G141207),registration_satisfaction(r728,_G141212),registration_satisfaction(r729,_G141217),registration_satisfaction(r730,h),registration_satisfaction(r731,h),registration_satisfaction(r732,_G141232),registration_satisfaction(r733,_G141237),registration_satisfaction(r734,h),registration_satisfaction(r735,h),registration_satisfaction(r736,_G141252),registration_satisfaction(r737,h),registration_satisfaction(r738,_G141262),registration_satisfaction(r739,h),registration_satisfaction(r740,h),registration_satisfaction(r741,h),registration_satisfaction(r742,h),registration_satisfaction(r743,_G141287),registration_satisfaction(r744,_G141292),registration_satisfaction(r745,m),registration_satisfaction(r746,h),registration_satisfaction(r747,_G141307),registration_satisfaction(r748,_G141312),registration_satisfaction(r749,_G141317),registration_satisfaction(r750,_G141322),registration_satisfaction(r751,_G141327),registration_satisfaction(r752,m),registration_satisfaction(r753,m),registration_satisfaction(r754,_G141342),registration_satisfaction(r755,l),registration_satisfaction(r756,_G141352),registration_satisfaction(r757,h),registration_satisfaction(r758,h),registration_satisfaction(r759,l),registration_satisfaction(r760,_G141372),registration_satisfaction(r761,h),registration_satisfaction(r762,_G141382),registration_satisfaction(r763,_G141387),registration_satisfaction(r764,_G141392),registration_satisfaction(r765,h),registration_satisfaction(r766,_G141402),registration_satisfaction(r767,_G141407),registration_satisfaction(r768,_G141412),registration_satisfaction(r769,_G141417),registration_satisfaction(r770,m),registration_satisfaction(r771,_G141427),registration_satisfaction(r772,_G141432),registration_satisfaction(r773,m),registration_satisfaction(r774,h),registration_satisfaction(r775,h),registration_satisfaction(r776,_G141452),registration_satisfaction(r777,_G141457),registration_satisfaction(r778,h),registration_satisfaction(r779,_G141467),registration_satisfaction(r780,h),registration_satisfaction(r781,m),registration_satisfaction(r782,m),registration_satisfaction(r783,m),registration_satisfaction(r784,l),registration_satisfaction(r785,l),registration_satisfaction(r786,h),registration_satisfaction(r787,h),registration_satisfaction(r788,_G141512),registration_satisfaction(r789,_G141517),registration_satisfaction(r790,_G141522),registration_satisfaction(r791,h),registration_satisfaction(r792,_G141532),registration_satisfaction(r793,_G141537),registration_satisfaction(r794,_G141542),registration_satisfaction(r795,_G141547),registration_satisfaction(r796,h),registration_satisfaction(r797,h),registration_satisfaction(r798,m),registration_satisfaction(r799,_G141567),registration_satisfaction(r800,m),registration_satisfaction(r801,h),registration_satisfaction(r802,h),registration_satisfaction(r803,h),registration_satisfaction(r804,_G141592),registration_satisfaction(r805,_G141597),registration_satisfaction(r806,_G141602),registration_satisfaction(r807,_G141607),registration_satisfaction(r808,_G141612),registration_satisfaction(r809,_G141617),registration_satisfaction(r810,h),registration_satisfaction(r811,_G141627),registration_satisfaction(r812,h),registration_satisfaction(r813,m),registration_satisfaction(r814,l),registration_satisfaction(r815,_G141647),registration_satisfaction(r816,_G141652),registration_satisfaction(r817,_G141657),registration_satisfaction(r818,_G141662),registration_satisfaction(r819,h),registration_satisfaction(r820,h),registration_satisfaction(r821,_G141677),registration_satisfaction(r822,m),registration_satisfaction(r823,_G141687),registration_satisfaction(r824,m),registration_satisfaction(r825,l),registration_satisfaction(r826,l),registration_satisfaction(r827,l),registration_satisfaction(r828,_G141712),registration_satisfaction(r829,_G141717),registration_satisfaction(r830,h),registration_satisfaction(r831,_G141727),registration_satisfaction(r832,m),registration_satisfaction(r833,_G141737),registration_satisfaction(r834,_G141742),registration_satisfaction(r835,_G141747),registration_satisfaction(r836,h),registration_satisfaction(r837,h),registration_satisfaction(r838,l),registration_satisfaction(r839,_G141767),registration_satisfaction(r840,m),registration_satisfaction(r841,_G141777),registration_satisfaction(r842,_G141782),registration_satisfaction(r843,h),registration_satisfaction(r844,_G141792),registration_satisfaction(r845,_G141797),registration_satisfaction(r846,_G141802),registration_satisfaction(r847,_G141807),registration_satisfaction(r848,l),registration_satisfaction(r849,_G141817),registration_satisfaction(r850,_G141822),registration_satisfaction(r851,h),registration_satisfaction(r852,h),registration_satisfaction(r853,h),registration_satisfaction(r854,m),registration_satisfaction(r855,_G141847),registration_satisfaction(r856,_G141852)]). + diff --git a/packages/CLPBN/examples/learning/school_params.yap b/packages/CLPBN/examples/learning/school_params.yap index 912c9b714..45570ae6e 100644 --- a/packages/CLPBN/examples/learning/school_params.yap +++ b/packages/CLPBN/examples/learning/school_params.yap @@ -25,16 +25,8 @@ main :- em(L,0.001,10,CPTs,Lik), writeln(Lik:CPTs). -debug_school :- - graph(L), - em(L,0.01,10,CPTs,Lik), - writeln(Lik:CPTs). - -graph([professor_ability(p0,_G131367),professor_ability(p1,h),professor_ability(p2,_G131377),professor_ability(p3,_G131382),professor_ability(p4,_G131387),professor_ability(p5,_G131392),professor_ability(p6,_G131397),professor_ability(p7,l),professor_ability(p8,m),professor_ability(p9,h),professor_ability(p10,m),professor_ability(p11,_G131422),professor_ability(p12,_G131427),professor_ability(p13,_G131432),professor_ability(p14,_G131437),professor_ability(p15,_G131442),professor_ability(p16,_G131447),professor_ability(p17,m),professor_ability(p18,l),professor_ability(p19,h),professor_ability(p20,h),professor_ability(p21,_G131472),professor_ability(p22,m),professor_ability(p23,m),professor_ability(p24,l),professor_ability(p25,m),professor_ability(p26,_G131497),professor_ability(p27,h),professor_ability(p28,h),professor_ability(p29,_G131512),professor_ability(p30,_G131517),professor_ability(p31,_G131522),professor_popularity(p0,h),professor_popularity(p1,h),professor_popularity(p2,_G131537),professor_popularity(p3,h),professor_popularity(p4,h),professor_popularity(p5,h),professor_popularity(p6,l),professor_popularity(p7,l),professor_popularity(p8,_G131567),professor_popularity(p9,_G131572),professor_popularity(p10,l),professor_popularity(p11,_G131582),professor_popularity(p12,h),professor_popularity(p13,l),professor_popularity(p14,_G131597),professor_popularity(p15,h),professor_popularity(p16,m),professor_popularity(p17,_G131612),professor_popularity(p18,_G131617),professor_popularity(p19,_G131622),professor_popularity(p20,_G131627),professor_popularity(p21,h),professor_popularity(p22,_G131637),professor_popularity(p23,_G131642),professor_popularity(p24,l),professor_popularity(p25,_G131652),professor_popularity(p26,_G131657),professor_popularity(p27,h),professor_popularity(p28,h),professor_popularity(p29,_G131672),professor_popularity(p30,m),professor_popularity(p31,_G131682),registration_grade(r0,a),registration_grade(r1,_G131692),registration_grade(r2,_G131697),registration_grade(r3,c),registration_grade(r4,c),registration_grade(r5,c),registration_grade(r6,_G131717),registration_grade(r7,a),registration_grade(r8,b),registration_grade(r9,_G131732),registration_grade(r10,_G131737),registration_grade(r11,a),registration_grade(r12,_G131747),registration_grade(r13,a),registration_grade(r14,_G131757),registration_grade(r15,b),registration_grade(r16,a),registration_grade(r17,b),registration_grade(r18,_G131777),registration_grade(r19,_G131782),registration_grade(r20,c),registration_grade(r21,_G131792),registration_grade(r22,_G131797),registration_grade(r23,_G131802),registration_grade(r24,b),registration_grade(r25,a),registration_grade(r26,_G131817),registration_grade(r27,_G131822),registration_grade(r28,c),registration_grade(r29,b),registration_grade(r30,c),registration_grade(r31,b),registration_grade(r32,_G131847),registration_grade(r33,a),registration_grade(r34,c),registration_grade(r35,c),registration_grade(r36,a),registration_grade(r37,a),registration_grade(r38,c),registration_grade(r39,a),registration_grade(r40,_G131887),registration_grade(r41,_G131892),registration_grade(r42,_G131897),registration_grade(r43,a),registration_grade(r44,a),registration_grade(r45,a),registration_grade(r46,a),registration_grade(r47,_G131922),registration_grade(r48,_G131927),registration_grade(r49,b),registration_grade(r50,b),registration_grade(r51,b),registration_grade(r52,_G131947),registration_grade(r53,a),registration_grade(r54,_G131957),registration_grade(r55,a),registration_grade(r56,c),registration_grade(r57,_G131972),registration_grade(r58,_G131977),registration_grade(r59,_G131982),registration_grade(r60,_G131987),registration_grade(r61,a),registration_grade(r62,_G131997),registration_grade(r63,b),registration_grade(r64,b),registration_grade(r65,b),registration_grade(r66,_G132017),registration_grade(r67,b),registration_grade(r68,a),registration_grade(r69,_G132032),registration_grade(r70,_G132037),registration_grade(r71,_G132042),registration_grade(r72,_G132047),registration_grade(r73,_G132052),registration_grade(r74,a),registration_grade(r75,_G132062),registration_grade(r76,_G132067),registration_grade(r77,_G132072),registration_grade(r78,b),registration_grade(r79,_G132082),registration_grade(r80,_G132087),registration_grade(r81,_G132092),registration_grade(r82,_G132097),registration_grade(r83,_G132102),registration_grade(r84,_G132107),registration_grade(r85,b),registration_grade(r86,_G132117),registration_grade(r87,b),registration_grade(r88,_G132127),registration_grade(r89,_G132132),registration_grade(r90,_G132137),registration_grade(r91,a),registration_grade(r92,_G132147),registration_grade(r93,_G132152),registration_grade(r94,_G132157),registration_grade(r95,_G132162),registration_grade(r96,_G132167),registration_grade(r97,a),registration_grade(r98,b),registration_grade(r99,b),registration_grade(r100,a),registration_grade(r101,a),registration_grade(r102,a),registration_grade(r103,_G132202),registration_grade(r104,_G132207),registration_grade(r105,c),registration_grade(r106,b),registration_grade(r107,b),registration_grade(r108,_G132227),registration_grade(r109,_G132232),registration_grade(r110,a),registration_grade(r111,_G132242),registration_grade(r112,_G132247),registration_grade(r113,_G132252),registration_grade(r114,_G132257),registration_grade(r115,d),registration_grade(r116,b),registration_grade(r117,_G132272),registration_grade(r118,_G132277),registration_grade(r119,b),registration_grade(r120,b),registration_grade(r121,_G132292),registration_grade(r122,_G132297),registration_grade(r123,a),registration_grade(r124,a),registration_grade(r125,_G132312),registration_grade(r126,_G132317),registration_grade(r127,b),registration_grade(r128,a),registration_grade(r129,c),registration_grade(r130,a),registration_grade(r131,a),registration_grade(r132,b),registration_grade(r133,_G132352),registration_grade(r134,_G132357),registration_grade(r135,_G132362),registration_grade(r136,_G132367),registration_grade(r137,b),registration_grade(r138,a),registration_grade(r139,_G132382),registration_grade(r140,_G132387),registration_grade(r141,b),registration_grade(r142,_G132397),registration_grade(r143,b),registration_grade(r144,c),registration_grade(r145,b),registration_grade(r146,_G132417),registration_grade(r147,_G132422),registration_grade(r148,_G132427),registration_grade(r149,a),registration_grade(r150,_G132437),registration_grade(r151,a),registration_grade(r152,_G132447),registration_grade(r153,_G132452),registration_grade(r154,a),registration_grade(r155,c),registration_grade(r156,b),registration_grade(r157,b),registration_grade(r158,c),registration_grade(r159,b),registration_grade(r160,a),registration_grade(r161,_G132492),registration_grade(r162,_G132497),registration_grade(r163,_G132502),registration_grade(r164,b),registration_grade(r165,b),registration_grade(r166,_G132517),registration_grade(r167,a),registration_grade(r168,a),registration_grade(r169,_G132532),registration_grade(r170,_G132537),registration_grade(r171,a),registration_grade(r172,c),registration_grade(r173,b),registration_grade(r174,_G132557),registration_grade(r175,_G132562),registration_grade(r176,b),registration_grade(r177,c),registration_grade(r178,b),registration_grade(r179,d),registration_grade(r180,c),registration_grade(r181,a),registration_grade(r182,b),registration_grade(r183,a),registration_grade(r184,_G132607),registration_grade(r185,_G132612),registration_grade(r186,c),registration_grade(r187,a),registration_grade(r188,a),registration_grade(r189,_G132632),registration_grade(r190,_G132637),registration_grade(r191,_G132642),registration_grade(r192,b),registration_grade(r193,c),registration_grade(r194,b),registration_grade(r195,_G132662),registration_grade(r196,_G132667),registration_grade(r197,_G132672),registration_grade(r198,_G132677),registration_grade(r199,b),registration_grade(r200,_G132687),registration_grade(r201,c),registration_grade(r202,a),registration_grade(r203,_G132702),registration_grade(r204,_G132707),registration_grade(r205,_G132712),registration_grade(r206,a),registration_grade(r207,a),registration_grade(r208,_G132727),registration_grade(r209,b),registration_grade(r210,a),registration_grade(r211,d),registration_grade(r212,_G132747),registration_grade(r213,_G132752),registration_grade(r214,_G132757),registration_grade(r215,a),registration_grade(r216,_G132767),registration_grade(r217,_G132772),registration_grade(r218,_G132777),registration_grade(r219,_G132782),registration_grade(r220,_G132787),registration_grade(r221,b),registration_grade(r222,c),registration_grade(r223,_G132802),registration_grade(r224,_G132807),registration_grade(r225,b),registration_grade(r226,d),registration_grade(r227,b),registration_grade(r228,c),registration_grade(r229,b),registration_grade(r230,a),registration_grade(r231,_G132842),registration_grade(r232,_G132847),registration_grade(r233,b),registration_grade(r234,_G132857),registration_grade(r235,c),registration_grade(r236,b),registration_grade(r237,_G132872),registration_grade(r238,d),registration_grade(r239,b),registration_grade(r240,b),registration_grade(r241,_G132892),registration_grade(r242,b),registration_grade(r243,_G132902),registration_grade(r244,b),registration_grade(r245,a),registration_grade(r246,b),registration_grade(r247,_G132922),registration_grade(r248,b),registration_grade(r249,_G132932),registration_grade(r250,a),registration_grade(r251,_G132942),registration_grade(r252,b),registration_grade(r253,_G132952),registration_grade(r254,_G132957),registration_grade(r255,_G132962),registration_grade(r256,_G132967),registration_grade(r257,b),registration_grade(r258,_G132977),registration_grade(r259,a),registration_grade(r260,b),registration_grade(r261,a),registration_grade(r262,_G132997),registration_grade(r263,_G133002),registration_grade(r264,_G133007),registration_grade(r265,a),registration_grade(r266,_G133017),registration_grade(r267,_G133022),registration_grade(r268,c),registration_grade(r269,a),registration_grade(r270,_G133037),registration_grade(r271,_G133042),registration_grade(r272,_G133047),registration_grade(r273,b),registration_grade(r274,c),registration_grade(r275,a),registration_grade(r276,a),registration_grade(r277,_G133072),registration_grade(r278,_G133077),registration_grade(r279,_G133082),registration_grade(r280,_G133087),registration_grade(r281,b),registration_grade(r282,d),registration_grade(r283,_G133102),registration_grade(r284,b),registration_grade(r285,_G133112),registration_grade(r286,_G133117),registration_grade(r287,_G133122),registration_grade(r288,_G133127),registration_grade(r289,_G133132),registration_grade(r290,b),registration_grade(r291,c),registration_grade(r292,_G133147),registration_grade(r293,_G133152),registration_grade(r294,_G133157),registration_grade(r295,a),registration_grade(r296,b),registration_grade(r297,_G133172),registration_grade(r298,a),registration_grade(r299,a),registration_grade(r300,_G133187),registration_grade(r301,b),registration_grade(r302,b),registration_grade(r303,_G133202),registration_grade(r304,a),registration_grade(r305,_G133212),registration_grade(r306,_G133217),registration_grade(r307,_G133222),registration_grade(r308,c),registration_grade(r309,_G133232),registration_grade(r310,a),registration_grade(r311,a),registration_grade(r312,a),registration_grade(r313,_G133252),registration_grade(r314,_G133257),registration_grade(r315,c),registration_grade(r316,_G133267),registration_grade(r317,_G133272),registration_grade(r318,c),registration_grade(r319,c),registration_grade(r320,b),registration_grade(r321,b),registration_grade(r322,_G133297),registration_grade(r323,c),registration_grade(r324,b),registration_grade(r325,b),registration_grade(r326,_G133317),registration_grade(r327,c),registration_grade(r328,b),registration_grade(r329,_G133332),registration_grade(r330,_G133337),registration_grade(r331,_G133342),registration_grade(r332,_G133347),registration_grade(r333,_G133352),registration_grade(r334,_G133357),registration_grade(r335,d),registration_grade(r336,b),registration_grade(r337,b),registration_grade(r338,b),registration_grade(r339,_G133382),registration_grade(r340,_G133387),registration_grade(r341,_G133392),registration_grade(r342,_G133397),registration_grade(r343,a),registration_grade(r344,c),registration_grade(r345,_G133412),registration_grade(r346,b),registration_grade(r347,_G133422),registration_grade(r348,a),registration_grade(r349,a),registration_grade(r350,b),registration_grade(r351,b),registration_grade(r352,_G133447),registration_grade(r353,_G133452),registration_grade(r354,_G133457),registration_grade(r355,_G133462),registration_grade(r356,b),registration_grade(r357,b),registration_grade(r358,_G133477),registration_grade(r359,a),registration_grade(r360,_G133487),registration_grade(r361,_G133492),registration_grade(r362,c),registration_grade(r363,_G133502),registration_grade(r364,b),registration_grade(r365,_G133512),registration_grade(r366,b),registration_grade(r367,_G133522),registration_grade(r368,a),registration_grade(r369,c),registration_grade(r370,b),registration_grade(r371,_G133542),registration_grade(r372,_G133547),registration_grade(r373,_G133552),registration_grade(r374,b),registration_grade(r375,b),registration_grade(r376,a),registration_grade(r377,a),registration_grade(r378,a),registration_grade(r379,_G133582),registration_grade(r380,_G133587),registration_grade(r381,c),registration_grade(r382,_G133597),registration_grade(r383,_G133602),registration_grade(r384,b),registration_grade(r385,_G133612),registration_grade(r386,d),registration_grade(r387,_G133622),registration_grade(r388,_G133627),registration_grade(r389,a),registration_grade(r390,_G133637),registration_grade(r391,_G133642),registration_grade(r392,_G133647),registration_grade(r393,b),registration_grade(r394,c),registration_grade(r395,b),registration_grade(r396,_G133667),registration_grade(r397,a),registration_grade(r398,_G133677),registration_grade(r399,_G133682),registration_grade(r400,_G133687),registration_grade(r401,c),registration_grade(r402,_G133697),registration_grade(r403,_G133702),registration_grade(r404,a),registration_grade(r405,_G133712),registration_grade(r406,_G133717),registration_grade(r407,_G133722),registration_grade(r408,a),registration_grade(r409,a),registration_grade(r410,b),registration_grade(r411,b),registration_grade(r412,_G133747),registration_grade(r413,a),registration_grade(r414,_G133757),registration_grade(r415,_G133762),registration_grade(r416,_G133767),registration_grade(r417,_G133772),registration_grade(r418,a),registration_grade(r419,a),registration_grade(r420,a),registration_grade(r421,c),registration_grade(r422,b),registration_grade(r423,_G133802),registration_grade(r424,a),registration_grade(r425,b),registration_grade(r426,c),registration_grade(r427,c),registration_grade(r428,_G133827),registration_grade(r429,c),registration_grade(r430,_G133837),registration_grade(r431,_G133842),registration_grade(r432,c),registration_grade(r433,_G133852),registration_grade(r434,a),registration_grade(r435,_G133862),registration_grade(r436,_G133867),registration_grade(r437,c),registration_grade(r438,b),registration_grade(r439,_G133882),registration_grade(r440,c),registration_grade(r441,a),registration_grade(r442,c),registration_grade(r443,_G133902),registration_grade(r444,_G133907),registration_grade(r445,_G133912),registration_grade(r446,_G133917),registration_grade(r447,d),registration_grade(r448,_G133927),registration_grade(r449,b),registration_grade(r450,_G133937),registration_grade(r451,_G133942),registration_grade(r452,b),registration_grade(r453,_G133952),registration_grade(r454,_G133957),registration_grade(r455,_G133962),registration_grade(r456,c),registration_grade(r457,_G133972),registration_grade(r458,_G133977),registration_grade(r459,_G133982),registration_grade(r460,_G133987),registration_grade(r461,_G133992),registration_grade(r462,a),registration_grade(r463,d),registration_grade(r464,a),registration_grade(r465,_G134012),registration_grade(r466,_G134017),registration_grade(r467,b),registration_grade(r468,_G134027),registration_grade(r469,_G134032),registration_grade(r470,_G134037),registration_grade(r471,_G134042),registration_grade(r472,a),registration_grade(r473,c),registration_grade(r474,b),registration_grade(r475,_G134062),registration_grade(r476,_G134067),registration_grade(r477,b),registration_grade(r478,a),registration_grade(r479,b),registration_grade(r480,a),registration_grade(r481,_G134092),registration_grade(r482,b),registration_grade(r483,a),registration_grade(r484,_G134107),registration_grade(r485,_G134112),registration_grade(r486,_G134117),registration_grade(r487,_G134122),registration_grade(r488,a),registration_grade(r489,_G134132),registration_grade(r490,_G134137),registration_grade(r491,c),registration_grade(r492,b),registration_grade(r493,a),registration_grade(r494,_G134157),registration_grade(r495,_G134162),registration_grade(r496,_G134167),registration_grade(r497,c),registration_grade(r498,_G134177),registration_grade(r499,c),registration_grade(r500,b),registration_grade(r501,_G134192),registration_grade(r502,a),registration_grade(r503,_G134202),registration_grade(r504,_G134207),registration_grade(r505,_G134212),registration_grade(r506,c),registration_grade(r507,a),registration_grade(r508,_G134227),registration_grade(r509,_G134232),registration_grade(r510,_G134237),registration_grade(r511,_G134242),registration_grade(r512,b),registration_grade(r513,_G134252),registration_grade(r514,_G134257),registration_grade(r515,c),registration_grade(r516,_G134267),registration_grade(r517,_G134272),registration_grade(r518,_G134277),registration_grade(r519,a),registration_grade(r520,b),registration_grade(r521,a),registration_grade(r522,b),registration_grade(r523,_G134302),registration_grade(r524,b),registration_grade(r525,c),registration_grade(r526,c),registration_grade(r527,c),registration_grade(r528,a),registration_grade(r529,_G134332),registration_grade(r530,a),registration_grade(r531,_G134342),registration_grade(r532,a),registration_grade(r533,_G134352),registration_grade(r534,b),registration_grade(r535,c),registration_grade(r536,a),registration_grade(r537,_G134372),registration_grade(r538,_G134377),registration_grade(r539,_G134382),registration_grade(r540,_G134387),registration_grade(r541,c),registration_grade(r542,a),registration_grade(r543,a),registration_grade(r544,b),registration_grade(r545,a),registration_grade(r546,b),registration_grade(r547,_G134422),registration_grade(r548,c),registration_grade(r549,_G134432),registration_grade(r550,a),registration_grade(r551,_G134442),registration_grade(r552,c),registration_grade(r553,_G134452),registration_grade(r554,b),registration_grade(r555,_G134462),registration_grade(r556,_G134467),registration_grade(r557,_G134472),registration_grade(r558,_G134477),registration_grade(r559,b),registration_grade(r560,_G134487),registration_grade(r561,a),registration_grade(r562,_G134497),registration_grade(r563,_G134502),registration_grade(r564,_G134507),registration_grade(r565,d),registration_grade(r566,c),registration_grade(r567,a),registration_grade(r568,a),registration_grade(r569,_G134532),registration_grade(r570,_G134537),registration_grade(r571,_G134542),registration_grade(r572,b),registration_grade(r573,a),registration_grade(r574,_G134557),registration_grade(r575,a),registration_grade(r576,_G134567),registration_grade(r577,_G134572),registration_grade(r578,b),registration_grade(r579,a),registration_grade(r580,_G134587),registration_grade(r581,_G134592),registration_grade(r582,_G134597),registration_grade(r583,_G134602),registration_grade(r584,a),registration_grade(r585,c),registration_grade(r586,b),registration_grade(r587,_G134622),registration_grade(r588,_G134627),registration_grade(r589,c),registration_grade(r590,_G134637),registration_grade(r591,c),registration_grade(r592,b),registration_grade(r593,_G134652),registration_grade(r594,c),registration_grade(r595,b),registration_grade(r596,_G134667),registration_grade(r597,_G134672),registration_grade(r598,a),registration_grade(r599,_G134682),registration_grade(r600,a),registration_grade(r601,b),registration_grade(r602,_G134697),registration_grade(r603,d),registration_grade(r604,_G134707),registration_grade(r605,a),registration_grade(r606,_G134717),registration_grade(r607,_G134722),registration_grade(r608,a),registration_grade(r609,b),registration_grade(r610,_G134737),registration_grade(r611,_G134742),registration_grade(r612,c),registration_grade(r613,_G134752),registration_grade(r614,_G134757),registration_grade(r615,b),registration_grade(r616,_G134767),registration_grade(r617,a),registration_grade(r618,_G134777),registration_grade(r619,_G134782),registration_grade(r620,a),registration_grade(r621,_G134792),registration_grade(r622,b),registration_grade(r623,_G134802),registration_grade(r624,a),registration_grade(r625,_G134812),registration_grade(r626,a),registration_grade(r627,_G134822),registration_grade(r628,a),registration_grade(r629,_G134832),registration_grade(r630,_G134837),registration_grade(r631,_G134842),registration_grade(r632,a),registration_grade(r633,_G134852),registration_grade(r634,b),registration_grade(r635,_G134862),registration_grade(r636,d),registration_grade(r637,c),registration_grade(r638,a),registration_grade(r639,b),registration_grade(r640,_G134887),registration_grade(r641,_G134892),registration_grade(r642,c),registration_grade(r643,_G134902),registration_grade(r644,_G134907),registration_grade(r645,_G134912),registration_grade(r646,_G134917),registration_grade(r647,b),registration_grade(r648,a),registration_grade(r649,_G134932),registration_grade(r650,c),registration_grade(r651,b),registration_grade(r652,b),registration_grade(r653,_G134952),registration_grade(r654,b),registration_grade(r655,a),registration_grade(r656,_G134967),registration_grade(r657,a),registration_grade(r658,a),registration_grade(r659,a),registration_grade(r660,a),registration_grade(r661,c),registration_grade(r662,_G134997),registration_grade(r663,a),registration_grade(r664,_G135007),registration_grade(r665,a),registration_grade(r666,b),registration_grade(r667,_G135022),registration_grade(r668,d),registration_grade(r669,b),registration_grade(r670,a),registration_grade(r671,_G135042),registration_grade(r672,c),registration_grade(r673,a),registration_grade(r674,_G135057),registration_grade(r675,_G135062),registration_grade(r676,a),registration_grade(r677,a),registration_grade(r678,a),registration_grade(r679,a),registration_grade(r680,_G135087),registration_grade(r681,_G135092),registration_grade(r682,_G135097),registration_grade(r683,b),registration_grade(r684,_G135107),registration_grade(r685,_G135112),registration_grade(r686,b),registration_grade(r687,a),registration_grade(r688,c),registration_grade(r689,_G135132),registration_grade(r690,a),registration_grade(r691,_G135142),registration_grade(r692,_G135147),registration_grade(r693,b),registration_grade(r694,_G135157),registration_grade(r695,_G135162),registration_grade(r696,a),registration_grade(r697,_G135172),registration_grade(r698,_G135177),registration_grade(r699,_G135182),registration_grade(r700,a),registration_grade(r701,_G135192),registration_grade(r702,a),registration_grade(r703,_G135202),registration_grade(r704,c),registration_grade(r705,b),registration_grade(r706,_G135217),registration_grade(r707,a),registration_grade(r708,b),registration_grade(r709,_G135232),registration_grade(r710,_G135237),registration_grade(r711,b),registration_grade(r712,_G135247),registration_grade(r713,a),registration_grade(r714,_G135257),registration_grade(r715,a),registration_grade(r716,a),registration_grade(r717,a),registration_grade(r718,a),registration_grade(r719,_G135282),registration_grade(r720,_G135287),registration_grade(r721,_G135292),registration_grade(r722,_G135297),registration_grade(r723,_G135302),registration_grade(r724,_G135307),registration_grade(r725,c),registration_grade(r726,a),registration_grade(r727,_G135322),registration_grade(r728,b),registration_grade(r729,_G135332),registration_grade(r730,_G135337),registration_grade(r731,_G135342),registration_grade(r732,a),registration_grade(r733,a),registration_grade(r734,b),registration_grade(r735,_G135362),registration_grade(r736,a),registration_grade(r737,_G135372),registration_grade(r738,_G135377),registration_grade(r739,a),registration_grade(r740,_G135387),registration_grade(r741,_G135392),registration_grade(r742,_G135397),registration_grade(r743,_G135402),registration_grade(r744,a),registration_grade(r745,b),registration_grade(r746,_G135417),registration_grade(r747,_G135422),registration_grade(r748,b),registration_grade(r749,c),registration_grade(r750,_G135437),registration_grade(r751,c),registration_grade(r752,_G135447),registration_grade(r753,c),registration_grade(r754,_G135457),registration_grade(r755,c),registration_grade(r756,_G135467),registration_grade(r757,_G135472),registration_grade(r758,b),registration_grade(r759,_G135482),registration_grade(r760,_G135487),registration_grade(r761,a),registration_grade(r762,_G135497),registration_grade(r763,a),registration_grade(r764,a),registration_grade(r765,a),registration_grade(r766,_G135517),registration_grade(r767,c),registration_grade(r768,_G135527),registration_grade(r769,_G135532),registration_grade(r770,b),registration_grade(r771,_G135542),registration_grade(r772,a),registration_grade(r773,b),registration_grade(r774,b),registration_grade(r775,a),registration_grade(r776,_G135567),registration_grade(r777,c),registration_grade(r778,c),registration_grade(r779,b),registration_grade(r780,a),registration_grade(r781,_G135592),registration_grade(r782,a),registration_grade(r783,_G135602),registration_grade(r784,_G135607),registration_grade(r785,_G135612),registration_grade(r786,c),registration_grade(r787,a),registration_grade(r788,_G135627),registration_grade(r789,_G135632),registration_grade(r790,b),registration_grade(r791,b),registration_grade(r792,_G135647),registration_grade(r793,_G135652),registration_grade(r794,_G135657),registration_grade(r795,_G135662),registration_grade(r796,_G135667),registration_grade(r797,a),registration_grade(r798,_G135677),registration_grade(r799,_G135682),registration_grade(r800,_G135687),registration_grade(r801,b),registration_grade(r802,_G135697),registration_grade(r803,b),registration_grade(r804,_G135707),registration_grade(r805,_G135712),registration_grade(r806,_G135717),registration_grade(r807,a),registration_grade(r808,_G135727),registration_grade(r809,_G135732),registration_grade(r810,_G135737),registration_grade(r811,d),registration_grade(r812,c),registration_grade(r813,_G135752),registration_grade(r814,c),registration_grade(r815,_G135762),registration_grade(r816,_G135767),registration_grade(r817,a),registration_grade(r818,_G135777),registration_>grade(r819,b),registration_grade(r820,d),registration_grade(r821,b),registration_grade(r822,_G135797),registration_grade(r823,a),registration_grade(r824,_G135807),registration_grade(r825,b),registration_grade(r826,b),registration_grade(r827,_G135822),registration_grade(r828,_G135827),registration_grade(r829,b),registration_grade(r830,_G135837),registration_grade(r831,_G135842),registration_grade(r832,b),registration_grade(r833,b),registration_grade(r834,_G135857),registration_grade(r835,a),registration_grade(r836,a),registration_grade(r837,c),registration_grade(r838,_G135877),registration_grade(r839,b),registration_grade(r840,b),registration_grade(r841,a),registration_grade(r842,a),registration_grade(r843,b),registration_grade(r844,_G135907),registration_grade(r845,c),registration_grade(r846,b),registration_grade(r847,b),registration_grade(r848,_G135927),registration_grade(r849,_G135932),registration_grade(r850,_G135937),registration_grade(r851,_G135942),registration_grade(r852,_G135947),registration_grade(r853,_G135952),registration_grade(r854,_G135957),registration_grade(r855,_G135962),registration_grade(r856,_G135967),student_intelligence(s0,l),student_intelligence(s1,_G135977),student_intelligence(s2,_G135982),student_intelligence(s3,h),student_intelligence(s4,h),student_intelligence(s5,h),student_intelligence(s6,m),student_intelligence(s7,h),student_intelligence(s8,h),student_intelligence(s9,_G136017),student_intelligence(s10,m),student_intelligence(s11,_G136027),student_intelligence(s12,h),student_intelligence(s13,h),student_intelligence(s14,_G136042),student_intelligence(s15,_G136047),student_intelligence(s16,_G136052),student_intelligence(s17,m),student_intelligence(s18,m),student_intelligence(s19,_G136067),student_intelligence(s20,m),student_intelligence(s21,_G136077),student_intelligence(s22,h),student_intelligence(s23,_G136087),student_intelligence(s24,_G136092),student_intelligence(s25,h),student_intelligence(s26,_G136102),student_intelligence(s27,m),student_intelligence(s28,m),student_intelligence(s29,_G136117),student_intelligence(s30,h),student_intelligence(s31,m),student_intelligence(s32,m),student_intelligence(s33,_G136137),student_intelligence(s34,l),student_intelligence(s35,m),student_intelligence(s36,l),student_intelligence(s37,_G136157),student_intelligence(s38,_G136162),student_intelligence(s39,h),student_intelligence(s40,h),student_intelligence(s41,m),student_intelligence(s42,_G136182),student_intelligence(s43,_G136187),student_intelligence(s44,_G136192),student_intelligence(s45,_G136197),student_intelligence(s46,l),student_intelligence(s47,h),student_intelligence(s48,_G136212),student_intelligence(s49,_G136217),student_intelligence(s50,_G136222),student_intelligence(s51,_G136227),student_intelligence(s52,_G136232),student_intelligence(s53,m),student_intelligence(s54,_G136242),student_intelligence(s55,h),student_intelligence(s56,l),student_intelligence(s57,_G136257),student_intelligence(s58,h),student_intelligence(s59,_G136267),student_intelligence(s60,m),student_intelligence(s61,h),student_intelligence(s62,_G136282),student_intelligence(s63,_G136287),student_intelligence(s64,l),student_intelligence(s65,_G136297),student_intelligence(s66,h),student_intelligence(s67,m),student_intelligence(s68,_G136312),student_intelligence(s69,_G136317),student_intelligence(s70,_G136322),student_intelligence(s71,m),student_intelligence(s72,_G136332),student_intelligence(s73,_G136337),student_intelligence(s74,_G136342),student_intelligence(s75,h),student_intelligence(s76,h),student_intelligence(s77,h),student_intelligence(s78,_G136362),student_intelligence(s79,m),student_intelligence(s80,_G136372),student_intelligence(s81,_G136377),student_intelligence(s82,_G136382),student_intelligence(s83,_G136387),student_intelligence(s84,_G136392),student_intelligence(s85,_G136397),student_intelligence(s86,_G136402),student_intelligence(s87,h),student_intelligence(s88,h),student_intelligence(s89,_G136417),student_intelligence(s90,h),student_intelligence(s91,_G136427),student_intelligence(s92,h),student_intelligence(s93,_G136437),student_intelligence(s94,_G136442),student_intelligence(s95,_G136447),student_intelligence(s96,_G136452),student_intelligence(s97,_G136457),student_intelligence(s98,_G136462),student_intelligence(s99,l),student_intelligence(s100,h),student_intelligence(s101,_G136477),student_intelligence(s102,m),student_intelligence(s103,h),student_intelligence(s104,l),student_intelligence(s105,m),student_intelligence(s106,_G136502),student_intelligence(s107,l),student_intelligence(s108,m),student_intelligence(s109,_G136517),student_intelligence(s110,m),student_intelligence(s111,h),student_intelligence(s112,m),student_intelligence(s113,h),student_intelligence(s114,_G136542),student_intelligence(s115,h),student_intelligence(s116,_G136552),student_intelligence(s117,m),student_intelligence(s118,_G136562),student_intelligence(s119,h),student_intelligence(s120,h),student_intelligence(s121,_G136577),student_intelligence(s122,m),student_intelligence(s123,_G136587),student_intelligence(s124,h),student_intelligence(s125,_G136597),student_intelligence(s126,m),student_intelligence(s127,m),student_intelligence(s128,_G136612),student_intelligence(s129,h),student_intelligence(s130,_G136622),student_intelligence(s131,h),student_intelligence(s132,_G136632),student_intelligence(s133,_G136637),student_intelligence(s134,h),student_intelligence(s135,_G136647),student_intelligence(s136,m),student_intelligence(s137,m),student_intelligence(s138,l),student_intelligence(s139,h),student_intelligence(s140,_G136672),student_intelligence(s141,_G136677),student_intelligence(s142,_G136682),student_intelligence(s143,_G136687),student_intelligence(s144,h),student_intelligence(s145,h),student_intelligence(s146,m),student_intelligence(s147,m),student_intelligence(s148,_G136712),student_intelligence(s149,_G136717),student_intelligence(s150,l),student_intelligence(s151,h),student_intelligence(s152,h),student_intelligence(s153,_G136737),student_intelligence(s154,_G136742),student_intelligence(s155,_G136747),student_intelligence(s156,m),student_intelligence(s157,m),student_intelligence(s158,h),student_intelligence(s159,_G136767),student_intelligence(s160,_G136772),student_intelligence(s161,_G136777),student_intelligence(s162,h),student_intelligence(s163,m),student_intelligence(s164,_G136792),student_intelligence(s165,m),student_intelligence(s166,m),student_intelligence(s167,_G136807),student_intelligence(s168,_G136812),student_intelligence(s169,_G136817),student_intelligence(s170,_G136822),student_intelligence(s171,m),student_intelligence(s172,_G136832),student_intelligence(s173,h),student_intelligence(s174,h),student_intelligence(s175,_G136847),student_intelligence(s176,_G136852),student_intelligence(s177,m),student_intelligence(s178,_G136862),student_intelligence(s179,m),student_intelligence(s180,m),student_intelligence(s181,h),student_intelligence(s182,m),student_intelligence(s183,h),student_intelligence(s184,_G136892),student_intelligence(s185,m),student_intelligence(s186,m),student_intelligence(s187,m),student_intelligence(s188,_G136912),student_intelligence(s189,m),student_intelligence(s190,h),student_intelligence(s191,l),student_intelligence(s192,_G136932),student_intelligence(s193,m),student_intelligence(s194,m),student_intelligence(s195,_G136947),student_intelligence(s196,h),student_intelligence(s197,_G136957),student_intelligence(s198,h),student_intelligence(s199,m),student_intelligence(s200,h),student_intelligence(s201,_G136977),student_intelligence(s202,h),student_intelligence(s203,m),student_intelligence(s204,h),student_intelligence(s205,_G136997),student_intelligence(s206,_G137002),student_intelligence(s207,h),student_intelligence(s208,_G137012),student_intelligence(s209,h),student_intelligence(s210,_G137022),student_intelligence(s211,_G137027),student_intelligence(s212,m),student_intelligence(s213,h),student_intelligence(s214,h),student_intelligence(s215,_G137047),student_intelligence(s216,h),student_intelligence(s217,_G137057),student_intelligence(s218,h),student_intelligence(s219,_G137067),student_intelligence(s220,_G137072),student_intelligence(s221,h),student_intelligence(s222,_G137082),student_intelligence(s223,_G137087),student_intelligence(s224,l),student_intelligence(s225,l),student_intelligence(s226,m),student_intelligence(s227,_G137107),student_intelligence(s228,h),student_intelligence(s229,_G137117),student_intelligence(s230,_G137122),student_intelligence(s231,_G137127),student_intelligence(s232,m),student_intelligence(s233,_G137137),student_intelligence(s234,_G137142),student_intelligence(s235,_G137147),student_intelligence(s236,_G137152),student_intelligence(s237,h),student_intelligence(s238,h),student_intelligence(s239,h),student_intelligence(s240,_G137172),student_intelligence(s241,_G137177),student_intelligence(s242,l),student_intelligence(s243,_G137187),student_intelligence(s244,_G137192),student_intelligence(s245,l),student_intelligence(s246,_G137202),student_intelligence(s247,h),student_intelligence(s248,m),student_intelligence(s249,_G137217),student_intelligence(s250,m),student_intelligence(s251,_G137227),student_intelligence(s252,_G137232),student_intelligence(s253,m),student_intelligence(s254,_G137242),student_intelligence(s255,m),course_difficulty(c0,_G137252),course_difficulty(c1,m),course_difficulty(c2,_G137262),course_difficulty(c3,_G137267),course_difficulty(c4,_G137272),course_difficulty(c5,l),course_difficulty(c6,m),course_difficulty(c7,h),course_difficulty(c8,h),course_difficulty(c9,_G137297),course_difficulty(c10,m),course_difficulty(c11,_G137307),course_difficulty(c12,m),course_difficulty(c13,_G137317),course_difficulty(c14,m),course_difficulty(c15,_G137327),course_difficulty(c16,l),course_difficulty(c17,h),course_difficulty(c18,_G137342),course_difficulty(c19,l),course_difficulty(c20,_G137352),course_difficulty(c21,_G137357),course_difficulty(c22,_G137362),course_difficulty(c23,_G137367),course_difficulty(c24,_G137372),course_difficulty(c25,m),course_difficulty(c26,_G137382),course_difficulty(c27,_G137387),course_difficulty(c28,m),course_difficulty(c29,_G137397),course_difficulty(c30,_G137402),course_difficulty(c31,m),course_difficulty(c32,l),course_difficulty(c33,m),course_difficulty(c34,_G137422),course_difficulty(c35,_G137427),course_difficulty(c36,h),course_difficulty(c37,m),course_difficulty(c38,m),course_difficulty(c39,_G137447),course_difficulty(c40,h),course_difficulty(c41,_G137457),course_difficulty(c42,_G137462),course_difficulty(c43,m),course_difficulty(c44,m),course_difficulty(c45,_G137477),course_difficulty(c46,m),course_difficulty(c47,_G137487),course_difficulty(c48,m),course_difficulty(c49,l),course_difficulty(c50,_G137502),course_difficulty(c51,h),course_difficulty(c52,_G137512),course_difficulty(c53,_G137517),course_difficulty(c54,_G137522),course_difficulty(c55,h),course_difficulty(c56,_G137532),course_difficulty(c57,_G137537),course_difficulty(c58,_G137542),course_difficulty(c59,m),course_difficulty(c60,_G137552),course_difficulty(c61,m),course_difficulty(c62,l),course_difficulty(c63,_G137567),registration_satisfaction(r0,_G137572),registration_satisfaction(r1,l),registration_satisfaction(r2,_G137582),registration_satisfaction(r3,_G137587),registration_satisfaction(r4,h),registration_satisfaction(r5,h),registration_satisfaction(r6,_G137602),registration_satisfaction(r7,h),registration_satisfaction(r8,_G137612),registration_satisfaction(r9,h),registration_satisfaction(r10,_G137622),registration_satisfaction(r11,_G137627),registration_satisfaction(r12,_G137632),registration_satisfaction(r13,h),registration_satisfaction(r14,m),registration_satisfaction(r15,h),registration_satisfaction(r16,h),registration_satisfaction(r17,l),registration_satisfaction(r18,l),registration_satisfaction(r19,_G137667),registration_satisfaction(r20,_G137672),registration_satisfaction(r21,_G137677),registration_satisfaction(r22,h),registration_satisfaction(r23,_G137687),registration_satisfaction(r24,_G137692),registration_satisfaction(r25,_G137697),registration_satisfaction(r26,_G137702),registration_satisfaction(r27,_G137707),registration_satisfaction(r28,h),registration_satisfaction(r29,_G137717),registration_satisfaction(r30,l),registration_satisfaction(r31,_G137727),registration_satisfaction(r32,_G137732),registration_satisfaction(r33,h),registration_satisfaction(r34,_G137742),registration_satisfaction(r35,h),registration_satisfaction(r36,m),registration_satisfaction(r37,h),registration_satisfaction(r38,_G137762),registration_satisfaction(r39,h),registration_satisfaction(r40,_G137772),registration_satisfaction(r41,_G137777),registration_satisfaction(r42,_G137782),registration_satisfaction(r43,h),registration_satisfaction(r44,_G137792),registration_satisfaction(r45,h),registration_satisfaction(r46,m),registration_satisfaction(r47,_G137807),registration_satisfaction(r48,_G137812),registration_satisfaction(r49,h),registration_satisfaction(r50,_G137822),registration_satisfaction(r51,_G137827),registration_satisfaction(r52,h),registration_satisfaction(r53,_G137837),registration_satisfaction(r54,h),registration_satisfaction(r55,h),registration_satisfaction(r56,_G137852),registration_satisfaction(r57,h),registration_satisfaction(r58,_G137862),registration_satisfaction(r59,_G137867),registration_satisfaction(r60,h),registration_satisfaction(r61,h),registration_satisfaction(r62,h),registration_satisfaction(r63,h),registration_satisfaction(r64,h),registration_satisfaction(r65,h),registration_satisfaction(r66,h),registration_satisfaction(r67,_G137907),registration_satisfaction(r68,h),registration_satisfaction(r69,m),registration_satisfaction(r70,_G137922),registration_satisfaction(r71,_G137927),registration_satisfaction(r72,_G137932),registration_satisfaction(r73,h),registration_satisfaction(r74,h),registration_satisfaction(r75,h),registration_satisfaction(r76,_G137952),registration_satisfaction(r77,_G137957),registration_satisfaction(r78,m),registration_satisfaction(r79,h),registration_satisfaction(r80,h),registration_satisfaction(r81,h),registration_satisfaction(r82,l),registration_satisfaction(r83,_G137987),registration_satisfaction(r84,m),registration_satisfaction(r85,h),registration_satisfaction(r86,_G138002),registration_satisfaction(r87,_G138007),registration_satisfaction(r88,h),registration_satisfaction(r89,_G138017),registration_satisfaction(r90,_G138022),registration_satisfaction(r91,h),registration_satisfaction(r92,_G138032),registration_satisfaction(r93,_G138037),registration_satisfaction(r94,l),registration_satisfaction(r95,_G138047),registration_satisfaction(r96,h),registration_satisfaction(r97,_G138057),registration_satisfaction(r98,h),registration_satisfaction(r99,h),registration_satisfaction(r100,_G138072),registration_satisfaction(r101,_G138077),registration_satisfaction(r102,h),registration_satisfaction(r103,h),registration_satisfaction(r104,h),registration_satisfaction(r105,_G138097),registration_satisfaction(r106,_G138102),registration_satisfaction(r107,l),registration_satisfaction(r108,l),registration_satisfaction(r109,h),registration_satisfaction(r110,_G138122),registration_satisfaction(r111,h),registration_satisfaction(r112,_G138132),registration_satisfaction(r113,_G138137),registration_satisfaction(r114,m),registration_satisfaction(r115,_G138147),registration_satisfaction(r116,h),registration_satisfaction(r117,_G138157),registration_satisfaction(r118,h),registration_satisfaction(r119,h),registration_satisfaction(r120,l),registration_satisfaction(r121,_G138177),registration_satisfaction(r122,_G138182),registration_satisfaction(r123,l),registration_satisfaction(r124,_G138192),registration_satisfaction(r125,m),registration_satisfaction(r126,h),registration_satisfaction(r127,h),registration_satisfaction(r128,h),registration_satisfaction(r129,h),registration_satisfaction(r130,h),registration_satisfaction(r131,_G138227),registration_satisfaction(r132,m),registration_satisfaction(r133,_G138237),registration_satisfaction(r134,m),registration_satisfaction(r135,_G138247),registration_satisfaction(r136,h),registration_satisfaction(r137,h),registration_satisfaction(r138,h),registration_satisfaction(r139,_G138267),registration_satisfaction(r140,h),registration_satisfaction(r141,_G138277),registration_satisfaction(r142,h),registration_satisfaction(r143,h),registration_satisfaction(r144,h),registration_satisfaction(r145,l),registration_satisfaction(r146,_G138302),registration_satisfaction(r147,l),registration_satisfaction(r148,m),registration_satisfaction(r149,h),registration_satisfaction(r150,_G138322),registration_satisfaction(r151,_G138327),registration_satisfaction(r152,h),registration_satisfaction(r153,_G138337),registration_satisfaction(r154,_G138342),registration_satisfaction(r155,m),registration_satisfaction(r156,h),registration_satisfaction(r157,_G138357),registration_satisfaction(r158,l),registration_satisfaction(r159,m),registration_satisfaction(r160,h),registration_satisfaction(r161,_G138377),registration_satisfaction(r162,m),registration_satisfaction(r163,_G138387),registration_satisfaction(r164,m),registration_satisfaction(r165,m),registration_satisfaction(r166,l),registration_satisfaction(r167,_G138407),registration_satisfaction(r168,h),registration_satisfaction(r169,h),registration_satisfaction(r170,_G138422),registration_satisfaction(r171,_G138427),registration_satisfaction(r172,h),registration_satisfaction(r173,_G138437),registration_satisfaction(r174,_G138442),registration_satisfaction(r175,_G138447),registration_satisfaction(r176,h),registration_satisfaction(r177,h),registration_satisfaction(r178,h),registration_satisfaction(r179,l),registration_satisfaction(r180,_G138472),registration_satisfaction(r181,_G138477),registration_satisfaction(r182,_G138482),registration_satisfaction(r183,_G138487),registration_satisfaction(r184,_G138492),registration_satisfaction(r185,_G138497),registration_satisfaction(r186,_G138502),registration_satisfaction(r187,h),registration_satisfaction(r188,m),registration_satisfaction(r189,_G138517),registration_satisfaction(r190,h),registration_satisfaction(r191,h),registration_satisfaction(r192,m),registration_satisfaction(r193,h),registration_satisfaction(r194,_G138542),registration_satisfaction(r195,_G138547),registration_satisfaction(r196,_G138552),registration_satisfaction(r197,h),registration_satisfaction(r198,h),registration_satisfaction(r199,h),registration_satisfaction(r200,_G138572),registration_satisfaction(r201,h),registration_satisfaction(r202,_G138582),registration_satisfaction(r203,_G138587),registration_satisfaction(r204,_G138592),registration_satisfaction(r205,_G138597),registration_satisfaction(r206,h),registration_satisfaction(r207,h),registration_satisfaction(r208,h),registration_satisfaction(r209,h),registration_satisfaction(r210,_G138622),registration_satisfaction(r211,_G138627),registration_satisfaction(r212,h),registration_satisfaction(r213,_G138637),registration_satisfaction(r214,_G138642),registration_satisfaction(r215,h),registration_satisfaction(r216,h),registration_satisfaction(r217,h),registration_satisfaction(r218,m),registration_satisfaction(r219,h),registration_satisfaction(r220,h),registration_satisfaction(r221,_G138677),registration_satisfaction(r222,_G138682),registration_satisfaction(r223,h),registration_satisfaction(r224,h),registration_satisfaction(r225,_G138697),registration_satisfaction(r226,_G138702),registration_satisfaction(r227,h),registration_satisfaction(r228,_G138712),registration_satisfaction(r229,l),registration_satisfaction(r230,h),registration_satisfaction(r231,_G138727),registration_satisfaction(r232,h),registration_satisfaction(r233,m),registration_satisfaction(r234,_G138742),registration_satisfaction(r235,h),registration_satisfaction(r236,_G138752),registration_satisfaction(r237,_G138757),registration_satisfaction(r238,m),registration_satisfaction(r239,m),registration_satisfaction(r240,h),registration_satisfaction(r241,h),registration_satisfaction(r242,m),registration_satisfaction(r243,_G138787),registration_satisfaction(r244,_G138792),registration_satisfaction(r245,_G138797),registration_satisfaction(r246,h),registration_satisfaction(r247,_G138807),registration_satisfaction(r248,_G138812),registration_satisfaction(r249,h),registration_satisfaction(r250,h),registration_satisfaction(r251,h),registration_satisfaction(r252,h),registration_satisfaction(r253,h),registration_satisfaction(r254,h),registration_satisfaction(r255,h),registration_satisfaction(r256,_G138852),registration_satisfaction(r257,m),registration_satisfaction(r258,h),registration_satisfaction(r259,_G138867),registration_satisfaction(r260,_G138872),registration_satisfaction(r261,_G138877),registration_satisfaction(r262,h),registration_satisfaction(r263,m),registration_satisfaction(r264,_G138892),registration_satisfaction(r265,_G138897),registration_satisfaction(r266,l),registration_satisfaction(r267,_G138907),registration_satisfaction(r268,_G138912),registration_satisfaction(r269,_G138917),registration_satisfaction(r270,l),registration_satisfaction(r271,h),registration_satisfaction(r272,_G138932),registration_satisfaction(r273,h),registration_satisfaction(r274,h),registration_satisfaction(r275,_G138947),registration_satisfaction(r276,_G138952),registration_satisfaction(r277,h),registration_satisfaction(r278,h),registration_satisfaction(r279,_G138967),registration_satisfaction(r280,_G138972),registration_satisfaction(r281,_G138977),registration_satisfaction(r282,_G138982),registration_satisfaction(r283,_G138987),registration_satisfaction(r284,_G138992),registration_satisfaction(r285,m),registration_satisfaction(r286,h),registration_satisfaction(r287,_G139007),registration_satisfaction(r288,_G139012),registration_satisfaction(r289,l),registration_satisfaction(r290,m),registration_satisfaction(r291,h),registration_satisfaction(r292,m),registration_satisfaction(r293,_G139037),registration_satisfaction(r294,h),registration_satisfaction(r295,_G139047),registration_satisfaction(r296,_G139052),registration_satisfaction(r297,_G139057),registration_satisfaction(r298,_G139062),registration_satisfaction(r299,_G139067),registration_satisfaction(r300,l),registration_satisfaction(r301,_G139077),registration_satisfaction(r302,_G139082),registration_satisfaction(r303,h),registration_satisfaction(r304,h),registration_satisfaction(r305,_G139097),registration_satisfaction(r306,_G139102),registration_satisfaction(r307,_G139107),registration_satisfaction(r308,l),registration_satisfaction(r309,m),registration_satisfaction(r310,_G139122),registration_satisfaction(r311,_G139127),registration_satisfaction(r312,h),registration_satisfaction(r313,_G139137),registration_satisfaction(r314,h),registration_satisfaction(r315,h),registration_satisfaction(r316,l),registration_satisfaction(r317,l),registration_satisfaction(r318,_G139162),registration_satisfaction(r319,_G139167),registration_satisfaction(r320,_G139172),registration_satisfaction(r321,l),registration_satisfaction(r322,h),registration_satisfaction(r323,_G139187),registration_satisfaction(r324,h),registration_satisfaction(r325,h),registration_satisfaction(r326,_G139202),registration_satisfaction(r327,m),registration_satisfaction(r328,h),registration_satisfaction(r329,h),registration_satisfaction(r330,_G139222),registration_satisfaction(r331,h),registration_satisfaction(r332,l),registration_satisfaction(r333,_G139237),registration_satisfaction(r334,_G139242),registration_satisfaction(r335,h),registration_satisfaction(r336,_G139252),registration_satisfaction(r337,h),registration_satisfaction(r338,h),registration_satisfaction(r339,_G139267),registration_satisfaction(r340,_G139272),registration_satisfaction(r341,l),registration_satisfaction(r342,h),registration_satisfaction(r343,_G139287),registration_satisfaction(r344,_G139292),registration_satisfaction(r345,m),registration_satisfaction(r346,h),registration_satisfaction(r347,m),registration_satisfaction(r348,_G139312),registration_satisfaction(r349,h),registration_satisfaction(r350,m),registration_satisfaction(r351,_G139327),registration_satisfaction(r352,l),registration_satisfaction(r353,h),registration_satisfaction(r354,h),registration_satisfaction(r355,_G139347),registration_satisfaction(r356,_G139352),registration_satisfaction(r357,m),registration_satisfaction(r358,_G139362),registration_satisfaction(r359,_G139367),registration_satisfaction(r360,_G139372),registration_satisfaction(r361,m),registration_satisfaction(r362,_G139382),registration_satisfaction(r363,_G139387),registration_satisfaction(r364,_G139392),registration_satisfaction(r365,_G139397),registration_satisfaction(r366,h),registration_satisfaction(r367,h),registration_satisfaction(r368,h),registration_satisfaction(r369,h),registration_satisfaction(r370,_G139422),registration_satisfaction(r371,_G139427),registration_satisfaction(r372,h),registration_satisfaction(r373,h),registration_satisfaction(r374,_G139442),registration_satisfaction(r375,h),registration_satisfaction(r376,_G139452),registration_satisfaction(r377,_G139457),registration_satisfaction(r378,_G139462),registration_satisfaction(r379,h),registration_satisfaction(r380,_G139472),registration_satisfaction(r381,_G139477),registration_satisfaction(r382,h),registration_satisfaction(r383,h),registration_satisfaction(r384,_G139492),registration_satisfaction(r385,m),registration_satisfaction(r386,_G139502),registration_satisfaction(r387,h),registration_satisfaction(r388,_G139512),registration_satisfaction(r389,_G139517),registration_satisfaction(r390,_G139522),registration_satisfaction(r391,l),registration_satisfaction(r392,_G139532),registration_satisfaction(r393,_G139537),registration_satisfaction(r394,h),registration_satisfaction(r395,_G139547),registration_satisfaction(r396,h),registration_satisfaction(r397,h),registration_satisfaction(r398,l),registration_satisfaction(r399,h),registration_satisfaction(r400,_G139572),registration_satisfaction(r401,l),registration_satisfaction(r402,h),registration_satisfaction(r403,h),registration_satisfaction(r404,h),registration_satisfaction(r405,h),registration_satisfaction(r406,_G139602),registration_satisfaction(r407,_G139607),registration_satisfaction(r408,_G139612),registration_satisfaction(r409,h),registration_satisfaction(r410,h),registration_satisfaction(r411,_G139627),registration_satisfaction(r412,_G139632),registration_satisfaction(r413,l),registration_satisfaction(r414,h),registration_satisfaction(r415,m),registration_satisfaction(r416,_G139652),registration_satisfaction(r417,h),registration_satisfaction(r418,_G139662),registration_satisfaction(r419,_G139667),registration_satisfaction(r420,_G139672),registration_satisfaction(r421,_G139677),registration_satisfaction(r422,_G139682),registration_satisfaction(r423,_G139687),registration_satisfaction(r424,h),registration_satisfaction(r425,h),registration_satisfaction(r426,_G139702),registration_satisfaction(r427,_G139707),registration_satisfaction(r428,_G139712),registration_satisfaction(r429,_G139717),registration_satisfaction(r430,l),registration_satisfaction(r431,m),registration_satisfaction(r432,_G139732),registration_satisfaction(r433,_G139737),registration_satisfaction(r434,h),registration_satisfaction(r435,m),registration_satisfaction(r436,_G139752),registration_satisfaction(r437,h),registration_satisfaction(r438,l),registration_satisfaction(r439,_G139767),registration_satisfaction(r440,h),registration_satisfaction(r441,h),registration_satisfaction(r442,_G139782),registration_satisfaction(r443,_G139787),registration_satisfaction(r444,_G139792),registration_satisfaction(r445,_G139797),registration_satisfaction(r446,h),registration_satisfaction(r447,m),registration_satisfaction(r448,l),registration_satisfaction(r449,_G139817),registration_satisfaction(r450,h),registration_satisfaction(r451,_G139827),registration_satisfaction(r452,_G139832),registration_satisfaction(r453,_G139837),registration_satisfaction(r454,_G139842),registration_satisfaction(r455,_G139847),registration_satisfaction(r456,h),registration_satisfaction(r457,h),registration_satisfaction(r458,_G139862),registration_satisfaction(r459,_G139867),registration_satisfaction(r460,l),registration_satisfaction(r461,h),registration_satisfaction(r462,h),registration_satisfaction(r463,_G139887),registration_satisfaction(r464,_G139892),registration_satisfaction(r465,_G139897),registration_satisfaction(r466,l),registration_satisfaction(r467,_G139907),registration_satisfaction(r468,_G139912),registration_satisfaction(r469,h),registration_satisfaction(r470,h),registration_satisfaction(r471,_G139927),registration_satisfaction(r472,_G139932),registration_satisfaction(r473,_G139937),registration_satisfaction(r474,_G139942),registration_satisfaction(r475,h),registration_satisfaction(r476,_G139952),registration_satisfaction(r477,_G139957),registration_satisfaction(r478,_G139962),registration_satisfaction(r479,_G139967),registration_satisfaction(r480,_G139972),registration_satisfaction(r481,_G139977),registration_satisfaction(r482,_G139982),registration_satisfaction(r483,h),registration_satisfaction(r484,_G139992),registration_satisfaction(r485,h),registration_satisfaction(r486,h),registration_satisfaction(r487,_G140007),registration_satisfaction(r488,_G140012),registration_satisfaction(r489,m),registration_satisfaction(r490,_G140022),registration_satisfaction(r491,_G140027),registration_satisfaction(r492,h),registration_satisfaction(r493,_G140037),registration_satisfaction(r494,_G140042),registration_satisfaction(r495,h),registration_satisfaction(r496,h),registration_satisfaction(r497,_G140057),registration_satisfaction(r498,_G140062),registration_satisfaction(r499,h),registration_satisfaction(r500,m),registration_satisfaction(r501,h),registration_satisfaction(r502,_G140082),registration_satisfaction(r503,_G140087),registration_satisfaction(r504,m),registration_satisfaction(r505,_G140097),registration_satisfaction(r506,_G140102),registration_satisfaction(r507,_G140107),registration_satisfaction(r508,_G140112),registration_satisfaction(r509,_G140117),registration_satisfaction(r510,_G140122),registration_satisfaction(r511,l),registration_satisfaction(r512,h),registration_satisfaction(r513,h),registration_satisfaction(r514,_G140142),registration_satisfaction(r515,_G140147),registration_satisfaction(r516,_G140152),registration_satisfaction(r517,m),registration_satisfaction(r518,_G140162),registration_satisfaction(r519,h),registration_satisfaction(r520,_G140172),registration_satisfaction(r521,h),registration_satisfaction(r522,h),registration_satisfaction(r523,h),registration_satisfaction(r524,h),registration_satisfaction(r525,_G140197),registration_satisfaction(r526,h),registration_satisfaction(r527,_G140207),registration_satisfaction(r528,_G140212),registration_satisfaction(r529,h),registration_satisfaction(r530,_G140222),registration_satisfaction(r531,_G140227),registration_satisfaction(r532,_G140232),registration_satisfaction(r533,_G140237),registration_satisfaction(r534,l),registration_satisfaction(r535,_G140247),registration_satisfaction(r536,h),registration_satisfaction(r537,h),registration_satisfaction(r538,_G140262),registration_satisfaction(r539,_G140267),registration_satisfaction(r540,_G140272),registration_satisfaction(r541,_G140277),registration_satisfaction(r542,h),registration_satisfaction(r543,h),registration_satisfaction(r544,_G140292),registration_satisfaction(r545,h),registration_satisfaction(r546,_G140302),registration_satisfaction(r547,_G140307),registration_satisfaction(r548,h),registration_satisfaction(r549,_G140317),registration_satisfaction(r550,_G140322),registration_satisfaction(r551,h),registration_satisfaction(r552,m),registration_satisfaction(r553,m),registration_satisfaction(r554,l),registration_satisfaction(r555,m),registration_satisfaction(r556,_G140352),registration_satisfaction(r557,_G140357),registration_satisfaction(r558,_G140362),registration_satisfaction(r559,_G140367),registration_satisfaction(r560,_G140372),registration_satisfaction(r561,_G140377),registration_satisfaction(r562,h),registration_satisfaction(r563,_G140387),registration_satisfaction(r564,h),registration_satisfaction(r565,_G140397),registration_satisfaction(r566,l),registration_satisfaction(r567,_G140407),registration_satisfaction(r568,h),registration_satisfaction(r569,h),registration_satisfaction(r570,h),registration_satisfaction(r571,_G140427),registration_satisfaction(r572,_G140432),registration_satisfaction(r573,_G140437),registration_satisfaction(r574,_G140442),registration_satisfaction(r575,_G140447),registration_satisfaction(r576,_G140452),registration_satisfaction(r577,_G140457),registration_satisfaction(r578,l),registration_satisfaction(r579,h),registration_satisfaction(r580,m),registration_satisfaction(r581,h),registration_satisfaction(r582,h),registration_satisfaction(r583,h),registration_satisfaction(r584,h),registration_satisfaction(r585,h),registration_satisfaction(r586,_G140502),registration_satisfaction(r587,_G140507),registration_satisfaction(r588,_G140512),registration_satisfaction(r589,l),registration_satisfaction(r590,h),registration_satisfaction(r591,_G140527),registration_satisfaction(r592,_G140532),registration_satisfaction(r593,_G140537),registration_satisfaction(r594,l),registration_satisfaction(r595,m),registration_satisfaction(r596,h),registration_satisfaction(r597,_G140557),registration_satisfaction(r598,_G140562),registration_satisfaction(r599,h),registration_satisfaction(r600,_G140572),registration_satisfaction(r601,m),registration_satisfaction(r602,h),registration_satisfaction(r603,_G140587),registration_satisfaction(r604,_G140592),registration_satisfaction(r605,h),registration_satisfaction(r606,h),registration_satisfaction(r607,l),registration_satisfaction(r608,_G140612),registration_satisfaction(r609,h),registration_satisfaction(r610,_G140622),registration_satisfaction(r611,h),registration_satisfaction(r612,l),registration_satisfaction(r613,_G140637),registration_satisfaction(r614,_G140642),registration_satisfaction(r615,_G140647),registration_satisfaction(r616,h),registration_satisfaction(r617,h),registration_satisfaction(r618,h),registration_satisfaction(r619,h),registration_satisfaction(r620,_G140672),registration_satisfaction(r621,_G140677),registration_satisfaction(r622,h),registration_satisfaction(r623,_G140687),registration_satisfaction(r624,_G140692),registration_satisfaction(r625,l),registration_satisfaction(r626,_G140702),registration_satisfaction(r627,h),registration_satisfaction(r628,h),registration_satisfaction(r629,h),registration_satisfaction(r630,h),registration_satisfaction(r631,h),registration_satisfaction(r632,h),registration_satisfaction(r633,_G140737),registration_satisfaction(r634,_G140742),registration_satisfaction(r635,_G140747),registration_satisfaction(r636,_G140752),registration_satisfaction(r637,_G140757),registration_satisfaction(r638,h),registration_satisfaction(r639,_G140767),registration_satisfaction(r640,h),registration_satisfaction(r641,h),registration_satisfaction(r642,_G140782),registration_satisfaction(r643,_G140787),registration_satisfaction(r644,h),registration_satisfaction(r645,_G140797),registration_satisfaction(r646,h),registration_satisfaction(r647,h),registration_satisfaction(r648,_G140812),registration_satisfaction(r649,_G140817),registration_satisfaction(r650,_G140822),registration_satisfaction(r651,_G140827),registration_satisfaction(r652,_G140832),registration_satisfaction(r653,_G140837),registration_satisfaction(r654,h),registration_satisfaction(r655,h),registration_satisfaction(r656,m),registration_satisfaction(r657,_G140857),registration_satisfaction(r658,h),registration_satisfaction(r659,h),registration_satisfaction(r660,h),registration_satisfaction(r661,_G140877),registration_satisfaction(r662,_G140882),registration_satisfaction(r663,h),registration_satisfaction(r664,_G140892),registration_satisfaction(r665,h),registration_satisfaction(r666,l),registration_satisfaction(r667,h),registration_satisfaction(r668,l),registration_satisfaction(r669,_G140917),registration_satisfaction(r670,h),registration_satisfaction(r671,_G140927),registration_satisfaction(r672,_G140932),registration_satisfaction(r673,_G140937),registration_satisfaction(r674,h),registration_satisfaction(r675,l),registration_satisfaction(r676,_G140952),registration_satisfaction(r677,_G140957),registration_satisfaction(r678,h),registration_satisfaction(r679,h),registration_satisfaction(r680,m),registration_satisfaction(r681,_G140977),registration_satisfaction(r682,_G140982),registration_satisfaction(r683,h),registration_satisfaction(r684,_G140992),registration_satisfaction(r685,h),registration_satisfaction(r686,h),registration_satisfaction(r687,_G141007),registration_satisfaction(r688,_G141012),registration_satisfaction(r689,_G141017),registration_satisfaction(r690,h),registration_satisfaction(r691,h),registration_satisfaction(r692,h),registration_satisfaction(r693,_G141037),registration_satisfaction(r694,h),registration_satisfaction(r695,_G141047),registration_satisfaction(r696,_G141052),registration_satisfaction(r697,_G141057),registration_satisfaction(r698,h),registration_satisfaction(r699,h),registration_satisfaction(r700,_G141072),registration_satisfaction(r701,h),registration_satisfaction(r702,_G141082),registration_satisfaction(r703,_G141087),registration_satisfaction(r704,l),registration_satisfaction(r705,_G141097),registration_satisfaction(r706,_G141102),registration_satisfaction(r707,_G141107),registration_satisfaction(r708,_G141112),registration_satisfaction(r709,m),registration_satisfaction(r710,l),registration_satisfaction(r711,h),registration_satisfaction(r712,h),registration_satisfaction(r713,h),registration_satisfaction(r714,m),registration_satisfaction(r715,_G141147),registration_satisfaction(r716,h),registration_satisfaction(r717,h),registration_satisfaction(r718,l),registration_satisfaction(r719,l),registration_satisfaction(r720,_G141172),registration_satisfaction(r721,h),registration_satisfaction(r722,h),registration_satisfaction(r723,h),registration_satisfaction(r724,h),registration_satisfaction(r725,_G141197),registration_satisfaction(r726,h),registration_satisfaction(r727,_G141207),registration_satisfaction(r728,_G141212),registration_satisfaction(r729,_G141217),registration_satisfaction(r730,h),registration_satisfaction(r731,h),registration_satisfaction(r732,_G141232),registration_satisfaction(r733,_G141237),registration_satisfaction(r734,h),registration_satisfaction(r735,h),registration_satisfaction(r736,_G141252),registration_satisfaction(r737,h),registration_satisfaction(r738,_G141262),registration_satisfaction(r739,h),registration_satisfaction(r740,h),registration_satisfaction(r741,h),registration_satisfaction(r742,h),registration_satisfaction(r743,_G141287),registration_satisfaction(r744,_G141292),registration_satisfaction(r745,m),registration_satisfaction(r746,h),registration_satisfaction(r747,_G141307),registration_satisfaction(r748,_G141312),registration_satisfaction(r749,_G141317),registration_satisfaction(r750,_G141322),registration_satisfaction(r751,_G141327),registration_satisfaction(r752,m),registration_satisfaction(r753,m),registration_satisfaction(r754,_G141342),registration_satisfaction(r755,l),registration_satisfaction(r756,_G141352),registration_satisfaction(r757,h),registration_satisfaction(r758,h),registration_satisfaction(r759,l),registration_satisfaction(r760,_G141372),registration_satisfaction(r761,h),registration_satisfaction(r762,_G141382),registration_satisfaction(r763,_G141387),registration_satisfaction(r764,_G141392),registration_satisfaction(r765,h),registration_satisfaction(r766,_G141402),registration_satisfaction(r767,_G141407),registration_satisfaction(r768,_G141412),registration_satisfaction(r769,_G141417),registration_satisfaction(r770,m),registration_satisfaction(r771,_G141427),registration_satisfaction(r772,_G141432),registration_satisfaction(r773,m),registration_satisfaction(r774,h),registration_satisfaction(r775,h),registration_satisfaction(r776,_G141452),registration_satisfaction(r777,_G141457),registration_satisfaction(r778,h),registration_satisfaction(r779,_G141467),registration_satisfaction(r780,h),registration_satisfaction(r781,m),registration_satisfaction(r782,m),registration_satisfaction(r783,m),registration_satisfaction(r784,l),registration_satisfaction(r785,l),registration_satisfaction(r786,h),registration_satisfaction(r787,h),registration_satisfaction(r788,_G141512),registration_satisfaction(r789,_G141517),registration_satisfaction(r790,_G141522),registration_satisfaction(r791,h),registration_satisfaction(r792,_G141532),registration_satisfaction(r793,_G141537),registration_satisfaction(r794,_G141542),registration_satisfaction(r795,_G141547),registration_satisfaction(r796,h),registration_satisfaction(r797,h),registration_satisfaction(r798,m),registration_satisfaction(r799,_G141567),registration_satisfaction(r800,m),registration_satisfaction(r801,h),registration_satisfaction(r802,h),registration_satisfaction(r803,h),registration_satisfaction(r804,_G141592),registration_satisfaction(r805,_G141597),registration_satisfaction(r806,_G141602),registration_satisfaction(r807,_G141607),registration_satisfaction(r808,_G141612),registration_satisfaction(r809,_G141617),registration_satisfaction(r810,h),registration_satisfaction(r811,_G141627),registration_satisfaction(r812,h),registration_satisfaction(r813,m),registration_satisfaction(r814,l),registration_satisfaction(r815,_G141647),registration_satisfaction(r816,_G141652),registration_satisfaction(r817,_G141657),registration_satisfaction(r818,_G141662),registration_satisfaction(r819,h),registration_satisfaction(r820,h),registration_satisfaction(r821,_G141677),registration_satisfaction(r822,m),registration_satisfaction(r823,_G141687),registration_satisfaction(r824,m),registration_satisfaction(r825,l),registration_satisfaction(r826,l),registration_satisfaction(r827,l),registration_satisfaction(r828,_G141712),registration_satisfaction(r829,_G141717),registration_satisfaction(r830,h),registration_satisfaction(r831,_G141727),registration_satisfaction(r832,m),registration_satisfaction(r833,_G141737),registration_satisfaction(r834,_G141742),registration_satisfaction(r835,_G141747),registration_satisfaction(r836,h),registration_satisfaction(r837,h),registration_satisfaction(r838,l),registration_satisfaction(r839,_G141767),registration_satisfaction(r840,m),registration_satisfaction(r841,_G141777),registration_satisfaction(r842,_G141782),registration_satisfaction(r843,h),registration_satisfaction(r844,_G141792),registration_satisfaction(r845,_G141797),registration_satisfaction(r846,_G141802),registration_satisfaction(r847,_G141807),registration_satisfaction(r848,l),registration_satisfaction(r849,_G141817),registration_satisfaction(r850,_G141822),registration_satisfaction(r851,h),registration_satisfaction(r852,h),registration_satisfaction(r853,h),registration_satisfaction(r854,m),registration_satisfaction(r855,_G141847),registration_satisfaction(r856,_G141852)]). - - % -% change to 0.0, 0.1, 0.2 to make things simpler/harder +% Change to 0.0, 0.1, 0.2 to make things simpler/harder %% missing(0.2). @@ -42,22 +34,27 @@ goal(professor_ability(P,V)) :- pos:professor_ability(P,V1), missing(X), ( random > X -> V = V1 ; true). + goal(professor_popularity(P,V)) :- pos:professor_popularity(P,V1), missing(X), ( random > X -> V = V1 ; true). + goal(registration_grade(P,V)) :- pos:registration_grade(P,V1), missing(X), ( random > X -> V = V1 ; true). + goal(student_intelligence(P,V)) :- pos:student_intelligence(P,V1), missing(X), ( random > X -> V = V1 ; true). + goal(course_difficulty(P,V)) :- pos:course_difficulty(P,V1), missing(X), ( random > X -> V = V1 ; true). + goal(registration_satisfaction(P,V)) :- pos:registration_satisfaction(P,V1), missing(X), From e66ff6777c661dee1becf99c0b6c905d0da2e338 Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Wed, 12 Dec 2012 15:41:41 +0000 Subject: [PATCH 31/42] Be consistent: constraint is always on top --- .../CLPBN/examples/learning/prof_params.pfl | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/CLPBN/examples/learning/prof_params.pfl b/packages/CLPBN/examples/learning/prof_params.pfl index 43b822f4e..d43e5b18d 100644 --- a/packages/CLPBN/examples/learning/prof_params.pfl +++ b/packages/CLPBN/examples/learning/prof_params.pfl @@ -11,6 +11,16 @@ %:- clpbn:set_clpbn_flag(em_solver,bp). %:- clpbn:set_clpbn_flag(em_solver,bdd). +professor(p0). +professor(p1). +professor(p2). +professor(p3). +professor(p4). +professor(p5). +professor(p6). +professor(p7). +professor(p8). + bayes abi(K)::[h,m,l] ; abi_table ; [professor(K)]. bayes pop(K)::[h,m,l], abi(K) ; pop_table ; [professor(K)]. @@ -32,16 +42,6 @@ goal_list([ abi(p6,_), pop(p7,_)]). -professor(p0). -professor(p1). -professor(p2). -professor(p3). -professor(p4). -professor(p5). -professor(p6). -professor(p7). -professor(p8). - timed_main :- statistics(runtime, _), main(Lik), From 0f46c9748179d60c4611bbb47cb098717e94c4d9 Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Wed, 12 Dec 2012 15:47:09 +0000 Subject: [PATCH 32/42] Trivial --- packages/CLPBN/examples/School/parschema.yap | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/CLPBN/examples/School/parschema.yap b/packages/CLPBN/examples/School/parschema.yap index 0e55dadc5..3d708936a 100644 --- a/packages/CLPBN/examples/School/parschema.yap +++ b/packages/CLPBN/examples/School/parschema.yap @@ -45,7 +45,9 @@ student_ranking(SKey, Grades) :- :- ensure_loaded(tables). -% convert to longer names +% +% Convert to longer names +% professor_ability(P,A) :- abi(P,A). professor_popularity(P,A) :- pop(P,A). From 8eb657aec2a5d6f57759262e105945420ee4a829 Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Wed, 12 Dec 2012 16:00:21 +0000 Subject: [PATCH 33/42] Change extension of school parschema to pfl --- packages/CLPBN/Makefile.in | 2 +- packages/CLPBN/examples/School/README | 6 +++--- .../CLPBN/examples/School/{parschema.yap => parschema.pfl} | 0 packages/CLPBN/examples/School/sch32.yap | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) rename packages/CLPBN/examples/School/{parschema.yap => parschema.pfl} (100%) diff --git a/packages/CLPBN/Makefile.in b/packages/CLPBN/Makefile.in index 38d82a6e4..4ad7d2e9b 100644 --- a/packages/CLPBN/Makefile.in +++ b/packages/CLPBN/Makefile.in @@ -78,7 +78,7 @@ CLPBN_SCHOOL_EXAMPLES= \ $(CLPBN_EXDIR)/School/README \ $(CLPBN_EXDIR)/School/evidence_128.yap \ $(CLPBN_EXDIR)/School/schema.yap \ - $(CLPBN_EXDIR)/School/parschema.yap \ + $(CLPBN_EXDIR)/School/parschema.pfl \ $(CLPBN_EXDIR)/School/school_128.yap \ $(CLPBN_EXDIR)/School/school_32.yap \ $(CLPBN_EXDIR)/School/sch32.yap \ diff --git a/packages/CLPBN/examples/School/README b/packages/CLPBN/examples/School/README index 0dcd566c8..42160dd35 100644 --- a/packages/CLPBN/examples/School/README +++ b/packages/CLPBN/examples/School/README @@ -5,11 +5,11 @@ There are four main files: school_128.yap: a school with 128 professors, 256 courses and 4096 students. school_64.yap: medium size school -school_32.yap: small school (clp(bn)) +school_32.yap: small school (CLP(BN)) -sch32.yap: small school (pfl) +sch32.yap: small school (PFL) -parschema.yap: the PFL schema +parschema.pfl: the PFL schema schema.yap: the CLP(BN) schema diff --git a/packages/CLPBN/examples/School/parschema.yap b/packages/CLPBN/examples/School/parschema.pfl similarity index 100% rename from packages/CLPBN/examples/School/parschema.yap rename to packages/CLPBN/examples/School/parschema.pfl diff --git a/packages/CLPBN/examples/School/sch32.yap b/packages/CLPBN/examples/School/sch32.yap index f7cc3ad43..c455698d6 100644 --- a/packages/CLPBN/examples/School/sch32.yap +++ b/packages/CLPBN/examples/School/sch32.yap @@ -17,9 +17,9 @@ total_students(256). :- yap_flag(write_strings,on). -:- ensure_loaded(parschema). +:- ensure_loaded('parschema.pfl'). :- ensure_loaded(school32_data). -:- set_clpbn_flag(solver, bdd). +:- set_solver(hve). From 39bf95fe2be11d383625b22ef695365ea3921d9e Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Wed, 12 Dec 2012 16:28:18 +0000 Subject: [PATCH 34/42] trivial --- packages/CLPBN/examples/learning/school_params.yap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/CLPBN/examples/learning/school_params.yap b/packages/CLPBN/examples/learning/school_params.yap index 45570ae6e..2ef41865f 100644 --- a/packages/CLPBN/examples/learning/school_params.yap +++ b/packages/CLPBN/examples/learning/school_params.yap @@ -27,7 +27,7 @@ main :- % % Change to 0.0, 0.1, 0.2 to make things simpler/harder -%% +% missing(0.2). goal(professor_ability(P,V)) :- From 4683d30d8e16d086da0b477535e5fa94b817332c Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Wed, 12 Dec 2012 17:01:30 +0000 Subject: [PATCH 35/42] Trivial --- packages/CLPBN/examples/social_domain2.pfl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/CLPBN/examples/social_domain2.pfl b/packages/CLPBN/examples/social_domain2.pfl index c1c107e43..b030fc0a0 100644 --- a/packages/CLPBN/examples/social_domain2.pfl +++ b/packages/CLPBN/examples/social_domain2.pfl @@ -34,5 +34,5 @@ markov asthma(X), friends(X,Y), smokes(Y) ; [3.004166, 3.004166, 3.004166, 3.004166, 3.004166, 1.0, 1.0, 3.004166] ; [people(X,Y)]. -% ?- smokes(p1,t), smokes(p2,t), friends(p1,p2,X) +% ?- smokes(p1,t), smokes(p2,t), friends(p1,p2,X). From c7588c93615b6b22d944204f2f9b0d891d426ed3 Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Wed, 12 Dec 2012 17:03:11 +0000 Subject: [PATCH 36/42] Trivial --- packages/CLPBN/examples/city.pfl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/CLPBN/examples/city.pfl b/packages/CLPBN/examples/city.pfl index afa1c23bd..198284498 100644 --- a/packages/CLPBN/examples/city.pfl +++ b/packages/CLPBN/examples/city.pfl @@ -130,5 +130,5 @@ is_joe_guilty(Guilty) :- guilty(joe, Guilty). -?- is_joe_guilty(Guilty). +% ?- is_joe_guilty(Guilty). From f2173d001e4d432a6abf2c41c9cbfd6aed721f25 Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Wed, 12 Dec 2012 21:16:36 +0000 Subject: [PATCH 37/42] Lkc: fix bug when adding weights --- packages/CLPBN/horus/LiftedWCNF.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/CLPBN/horus/LiftedWCNF.cpp b/packages/CLPBN/horus/LiftedWCNF.cpp index 9357311f6..b2272b6d6 100644 --- a/packages/CLPBN/horus/LiftedWCNF.cpp +++ b/packages/CLPBN/horus/LiftedWCNF.cpp @@ -568,7 +568,7 @@ LiftedWCNF::addParameterClauses (const ParfactorList& pfList) // ¬θxi|u1,...,un v λu1 -> tempClause // ¬θxi|u1,...,un v λu2 -> tempClause double posWeight = (**it)[indexer]; - addWeight (paramVarLid, posWeight, 1.0); + addWeight (paramVarLid, posWeight, LogAware::one()); Clause* clause1 = new Clause (*(*it)->constr()); From 11e688ffd766507e034294a88acc33df98bc0fbf Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Wed, 12 Dec 2012 21:19:22 +0000 Subject: [PATCH 38/42] Lkc: use utility function --- packages/CLPBN/horus/LiftedCircuit.cpp | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/packages/CLPBN/horus/LiftedCircuit.cpp b/packages/CLPBN/horus/LiftedCircuit.cpp index 5dd1bca2c..029ea7fea 100644 --- a/packages/CLPBN/horus/LiftedCircuit.cpp +++ b/packages/CLPBN/horus/LiftedCircuit.cpp @@ -54,10 +54,7 @@ SetOrNode::weight (void) const double SetAndNode::weight (void) const { - double w = follow_->weight(); - return Globals::logDomain - ? w * nrGroundings_ - : std::pow (w, nrGroundings_); + return LogAware::pow (follow_->weight(), nrGroundings_); } @@ -111,9 +108,7 @@ LeafNode::weight (void) const nrGroundings *= std::pow (SetOrNode::nrNegatives(), clause_->nrNegCountedLogVars()); } - return Globals::logDomain - ? weight * nrGroundings - : std::pow (weight, nrGroundings); + return LogAware::pow (weight, nrGroundings); } From 48413deae7e8ad74c303af78b7f8fd07c1fd979c Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Thu, 13 Dec 2012 14:08:16 +0000 Subject: [PATCH 39/42] Ops: deleted this by accident in the previous commit --- packages/CLPBN/examples/learning/sprinkler_params.yap | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/CLPBN/examples/learning/sprinkler_params.yap b/packages/CLPBN/examples/learning/sprinkler_params.yap index b5a29d747..05e3ae3c9 100644 --- a/packages/CLPBN/examples/learning/sprinkler_params.yap +++ b/packages/CLPBN/examples/learning/sprinkler_params.yap @@ -11,6 +11,8 @@ %:- set_pfl_flag(em_solver,ve). :- set_pfl_flag(em_solver,bdd). +:- dynamic id/1. + data(t,t,t,t). data(_,t,_,t). data(t,t,f,f). From 8b996c5dc9f40de9c4aec3f46dfd0ca821691799 Mon Sep 17 00:00:00 2001 From: Tiago Gomes Date: Thu, 13 Dec 2012 14:21:16 +0000 Subject: [PATCH 40/42] Lkc: show that we exported the circuit to graphviz when debugging --- packages/CLPBN/horus/LiftedCircuit.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/CLPBN/horus/LiftedCircuit.cpp b/packages/CLPBN/horus/LiftedCircuit.cpp index 029ea7fea..41ea4f2ae 100644 --- a/packages/CLPBN/horus/LiftedCircuit.cpp +++ b/packages/CLPBN/horus/LiftedCircuit.cpp @@ -177,11 +177,13 @@ LiftedCircuit::LiftedCircuit (const LiftedWCNF* lwcnf) smoothCircuit (root_); } if (Globals::verbosity > 1) { - exportToGraphViz("circuit.smooth.dot"); if (compilationSucceeded_) { double wmc = LogAware::exp (getWeightedModelCount()); - cout << "WEIGHTED MODEL COUNT: " << wmc << endl << endl; + cout << "Weighted model count = " << wmc << endl << endl; } + cout << "Exporting circuit to graphviz (circuit.dot)..." ; + cout << endl << endl; + exportToGraphViz ("circuit.dot"); } } From c4448d066a9d4fcecbecc8292f9972389f0db698 Mon Sep 17 00:00:00 2001 From: Vitor Santos Costa Date: Thu, 13 Dec 2012 15:53:01 +0000 Subject: [PATCH 41/42] allow backtracking over possible values of constraints.a --- packages/CLPBN/clpbn/ground_factors.yap | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/CLPBN/clpbn/ground_factors.yap b/packages/CLPBN/clpbn/ground_factors.yap index 4454b64b2..d2732f238 100644 --- a/packages/CLPBN/clpbn/ground_factors.yap +++ b/packages/CLPBN/clpbn/ground_factors.yap @@ -109,7 +109,7 @@ collect(Keys, Factors) :- queue_in(K) :- queue(K), !. queue_in(K) :- - %writeln(+K), +% writeln(q+K), assert(queue(K)), fail. queue_in(_). @@ -139,7 +139,7 @@ do_propagate(_K) :- propagate. add_factor(factor(Type, Id, Ks, _, _Phi, Constraints), NKs) :- - %writeln(+Ks), +% writeln(+Ks), ( Ks = [K,Els], var(Els) -> % aggregate factor @@ -147,7 +147,7 @@ add_factor(factor(Type, Id, Ks, _, _Phi, Constraints), NKs) :- avg_factors(K, Els, 0.0, NewKeys, NewId), NKs = [K|NewKeys] ; - once(run(Constraints)), + run(Constraints), NKs = Ks, Id = NewId ), From 9107af2e3d2d44a00c4d640b0e79bfae15e46597 Mon Sep 17 00:00:00 2001 From: Vitor Santos Costa Date: Thu, 13 Dec 2012 18:12:50 +0000 Subject: [PATCH 42/42] improve thread startup --- C/absmi.c | 12 +++++----- C/alloc.c | 52 ++++++++++++++++++++-------------------- C/c_interface.c | 12 +++++----- C/cut_c.c | 4 ++-- C/exec.c | 63 ++++++++++++++++++++++--------------------------- C/globals.c | 4 ++-- C/save.c | 2 +- C/threads.c | 31 ++++++++++++++---------- C/utilpreds.c | 2 +- H/YapHeap.h | 2 +- H/Yapproto.h | 6 ++--- H/absmi.h | 3 +-- H/cut_c.h | 2 +- 13 files changed, 97 insertions(+), 98 deletions(-) diff --git a/C/absmi.c b/C/absmi.c index 431781709..3e035e354 100755 --- a/C/absmi.c +++ b/C/absmi.c @@ -2252,7 +2252,7 @@ Yap_absmi(int inp) PREG = NEXTOP(NEXTOP(NEXTOP(PREG, s),Osbpp),l); /* assume cut is always in stack */ saveregs(); - prune((choiceptr)YREG[E_CB]); + prune((choiceptr)YREG[E_CB] PASS_REGS); setregs(); GONext(); ENDOp(); @@ -2271,7 +2271,7 @@ Yap_absmi(int inp) SET_ASP(YREG, PREG->u.s.s); /* assume cut is always in stack */ saveregs(); - prune((choiceptr)YREG[E_CB]); + prune((choiceptr)YREG[E_CB] PASS_REGS); setregs(); PREG = NEXTOP(NEXTOP(NEXTOP(PREG, s),Osbpp),l); GONext(); @@ -2290,7 +2290,7 @@ Yap_absmi(int inp) SET_ASP(YREG, PREG->u.s.s); PREG = NEXTOP(NEXTOP(NEXTOP(PREG, s),Osbpp),l); saveregs(); - prune((choiceptr)SREG[E_CB]); + prune((choiceptr)SREG[E_CB] PASS_REGS); setregs(); GONext(); ENDOp(); @@ -2343,7 +2343,7 @@ Yap_absmi(int inp) pt0 = (choiceptr)(LCL0-IntegerOfTerm(d0)); #endif /* YAPOR_SBA && FROZEN_STACKS */ saveregs(); - prune(pt0); + prune(pt0 PASS_REGS); setregs(); } GONext(); @@ -2379,7 +2379,7 @@ Yap_absmi(int inp) pt0 = (choiceptr)(LCL0-IntegerOfTerm(d0)); #endif saveregs(); - prune(pt0); + prune(pt0 PASS_REGS); setregs(); } GONext(); @@ -13080,7 +13080,7 @@ Yap_absmi(int inp) if (pen->FunctorOfPred == (Functor)AtomCut) { if (b_ptr != B) { saveregs(); - prune(b_ptr); + prune(b_ptr PASS_REGS); setregs(); } } diff --git a/C/alloc.c b/C/alloc.c index 8117bdff3..152aec116 100644 --- a/C/alloc.c +++ b/C/alloc.c @@ -245,23 +245,24 @@ Yap_FreeAtomSpace(char *p) /* If you need to dinamically allocate space from the heap, this is * the macro you should use */ ADDR -Yap_InitPreAllocCodeSpace(void) +Yap_InitPreAllocCodeSpace(int wid) { CACHE_REGS char *ptr; - UInt sz = LOCAL_ScratchPad.msz; - if (LOCAL_ScratchPad.ptr == NULL) { + UInt sz = REMOTE_ScratchPad(wid).msz; + + if (REMOTE_ScratchPad(wid).ptr == NULL) { #if USE_DL_MALLOC LOCK(DLMallocLock); #endif - LOCAL_PrologMode |= MallocMode; + REMOTE_PrologMode(wid) |= MallocMode; #if INSTRUMENT_MALLOC mallocs++; tmalloc += sz; sz += sizeof(CELL); #endif while (!(ptr = my_malloc(sz))) { - LOCAL_PrologMode &= ~MallocMode; + REMOTE_PrologMode(wid) &= ~MallocMode; #if USE_DL_MALLOC UNLOCK(DLMallocLock); #endif @@ -277,18 +278,18 @@ Yap_InitPreAllocCodeSpace(void) #if USE_DL_MALLOC LOCK(DLMallocLock); #endif - LOCAL_PrologMode |= MallocMode; + REMOTE_PrologMode(wid) |= MallocMode; } - LOCAL_PrologMode &= ~MallocMode; + REMOTE_PrologMode(wid) &= ~MallocMode; #if USE_DL_MALLOC UNLOCK(DLMallocLock); #endif - LOCAL_ScratchPad.ptr = ptr; + REMOTE_ScratchPad(wid).ptr = ptr; } else { - ptr = LOCAL_ScratchPad.ptr; + ptr = REMOTE_ScratchPad(wid).ptr; } AuxBase = (ADDR)(ptr); - AuxSp = (CELL *)(AuxTop = AuxBase+LOCAL_ScratchPad.sz); + AuxSp = (CELL *)(AuxTop = AuxBase+REMOTE_ScratchPad(wid).sz); return ptr; } @@ -352,7 +353,7 @@ Yap_InitHeap(void *heap_addr) } static void -InitExStacks(int Trail, int Stack) +InitExStacks(int wid, int Trail, int Stack) { CACHE_REGS UInt pm, sa; @@ -367,23 +368,24 @@ InitExStacks(int Trail, int Stack) sa = Stack*K; /* stack area size */ #ifdef THREADS - if (worker_id) - LOCAL_GlobalBase = (ADDR)LOCAL_ThreadHandle.stack_address; + if (wid) + REMOTE_GlobalBase(wid) = (ADDR)REMOTE_ThreadHandle(wid).stack_address; + else + AuxSp = NULL; #endif - LOCAL_TrailTop = LOCAL_GlobalBase + pm; - LOCAL_LocalBase = LOCAL_GlobalBase + sa; - LOCAL_TrailBase = LOCAL_LocalBase + sizeof(CELL); + REMOTE_TrailTop(wid) = REMOTE_GlobalBase(wid) + pm; + REMOTE_LocalBase(wid) = REMOTE_GlobalBase(wid) + sa; + REMOTE_TrailBase(wid) = REMOTE_LocalBase(wid) + sizeof(CELL); - LOCAL_ScratchPad.ptr = NULL; - LOCAL_ScratchPad.sz = LOCAL_ScratchPad.msz = SCRATCH_START_SIZE; - AuxSp = NULL; + REMOTE_ScratchPad(wid).ptr = NULL; + REMOTE_ScratchPad(wid).sz = REMOTE_ScratchPad(wid).msz = SCRATCH_START_SIZE; #ifdef DEBUG if (Yap_output_msg) { UInt ta; fprintf(stderr, "HeapBase = %p GlobalBase = %p\n LocalBase = %p TrailTop = %p\n", - Yap_HeapBase, LOCAL_GlobalBase, LOCAL_LocalBase, LOCAL_TrailTop); + Yap_HeapBase, REMOTE_GlobalBase(wid), REMOTE_LocalBase(wid), REMOTE_TrailTop(wid)); ta = Trail*K; /* trail area size */ fprintf(stderr, "Heap+Aux: %lu\tLocal+Global: %lu\tTrail: %lu\n", @@ -393,9 +395,9 @@ InitExStacks(int Trail, int Stack) } void -Yap_InitExStacks(int Trail, int Stack) +Yap_InitExStacks(int wid, int Trail, int Stack) { - InitExStacks(Trail, Stack); + InitExStacks(wid, Trail, Stack); } #if defined(THREADS) @@ -1557,11 +1559,11 @@ Yap_InitMemory(UInt Trail, UInt Heap, UInt Stack) } void -Yap_InitExStacks(int Trail, int Stack) +Yap_InitExStacks(int wid, int Trail, int Stack) { #if USE_DL_MALLOC - LOCAL_ScratchPad.ptr = NULL; - LOCAL_ScratchPad.sz = LOCAL_ScratchPad.msz = SCRATCH_START_SIZE; + REMOTE_ScratchPad(wid).ptr = NULL; + REMOTE_ScratchPad(wid).sz = REMOTE_ScratchPad(wid).msz = SCRATCH_START_SIZE; AuxSp = NULL; #endif } diff --git a/C/c_interface.c b/C/c_interface.c index 78009ee86..d3338a2da 100644 --- a/C/c_interface.c +++ b/C/c_interface.c @@ -2699,12 +2699,12 @@ X_API void YAP_ClearExceptions(void) { CACHE_REGS - Yap_ResetExceptionTerm(); + if (EX) { LOCAL_BallTerm = EX; } EX = NULL; - Yap_ResetExceptionTerm(); + Yap_ResetExceptionTerm( 0 ); LOCAL_UncaughtThrow = FALSE; } @@ -3065,13 +3065,13 @@ YAP_Init(YAP_init_args *yap_init) GLOBAL_AllowGlobalExpansion = TRUE; GLOBAL_AllowLocalExpansion = TRUE; GLOBAL_AllowTrailExpansion = TRUE; - Yap_InitExStacks (Trail, Stack); + Yap_InitExStacks (0, Trail, Stack); if (yap_init->QuietMode) { yap_flags[QUIET_MODE_FLAG] = TRUE; } { BACKUP_MACHINE_REGS(); - Yap_InitYaamRegs( 0); + Yap_InitYaamRegs( 0 ); #if HAVE_MPE Yap_InitMPE (); @@ -3111,10 +3111,10 @@ YAP_Init(YAP_init_args *yap_init) In the SBA we cannot just happily inherit registers from the other workers */ - Yap_InitYaamRegs( 0); + Yap_InitYaamRegs( 0 ); #endif /* YAPOR_COPY || YAPOR_SBA */ #ifndef YAPOR_THREADS - Yap_InitPreAllocCodeSpace(); + Yap_InitPreAllocCodeSpace( 0 ); #endif /* YAPOR_THREADS */ /* slaves, waiting for work */ CurrentModule = USER_MODULE; diff --git a/C/cut_c.c b/C/cut_c.c index 36e461cc5..bc85126ee 100644 --- a/C/cut_c.c +++ b/C/cut_c.c @@ -4,9 +4,9 @@ #include "cut_c.h" #include -void cut_c_initialize(void){ +void cut_c_initialize(int wid){ CACHE_REGS - Yap_REGS.CUT_C_TOP=(cut_c_str_ptr)LOCAL_LocalBase; + Yap_REGS.CUT_C_TOP=(cut_c_str_ptr)REMOTE_LocalBase(wid); } /*Removes a choice_point from the stack*/ diff --git a/C/exec.c b/C/exec.c index 9051488fd..0dcee50cf 100644 --- a/C/exec.c +++ b/C/exec.c @@ -1723,25 +1723,22 @@ Yap_InitYaamRegs( int myworker_id ) machine registers */ #ifdef THREADS CACHE_REGS - int wid = worker_id; - if (wid != myworker_id) { + if (myworker_id) { pthread_setspecific(Yap_yaamregs_key, (const void *)REMOTE_ThreadHandle(myworker_id).default_yaam_regs); - REFRESH_CACHE_REGS REMOTE_ThreadHandle(myworker_id).current_yaam_regs = REMOTE_ThreadHandle(myworker_id).default_yaam_regs; - worker_id = myworker_id; + REFRESH_CACHE_REGS } /* may be run by worker_id on behalf on myworker_id */ #else Yap_regp = &Yap_standard_regs; #endif #endif /* PUSH_REGS */ - Yap_ResetExceptionTerm (); + Yap_ResetExceptionTerm ( myworker_id ); Yap_PutValue (AtomBreak, MkIntTerm (0)); - TR = (tr_fr_ptr)LOCAL_TrailBase; - H = H0 = ((CELL *) REMOTE_GlobalBase(wid)); - RESET_VARIABLE(H0-1); - LCL0 = ASP = (CELL *) REMOTE_LocalBase(wid); - CurrentTrailTop = (tr_fr_ptr)(REMOTE_TrailTop(wid)-MinTrailGap); + TR = (tr_fr_ptr)REMOTE_TrailBase(myworker_id); + H = H0 = ((CELL *) REMOTE_GlobalBase(myworker_id)); + LCL0 = ASP = (CELL *) REMOTE_LocalBase(myworker_id); + CurrentTrailTop = (tr_fr_ptr)(REMOTE_TrailTop(myworker_id)-MinTrailGap); /* notice that an initial choice-point and environment *must* be created since for the garbage collector to work */ B = NULL; @@ -1756,49 +1753,46 @@ Yap_InitYaamRegs( int myworker_id ) #ifdef YAPOR_SBA BSEG = #endif /* YAPOR_SBA */ - BBREG = B_FZ = (choiceptr) REMOTE_LocalBase(wid); - TR = TR_FZ = (tr_fr_ptr) REMOTE_TrailBase(wid); + BBREG = B_FZ = (choiceptr) REMOTE_LocalBase(myworker_id); + TR = TR_FZ = (tr_fr_ptr) REMOTE_TrailBase(myworker_id); #endif /* FROZEN_STACKS */ - LOCK(REMOTE_SignalLock(wid)); + LOCK(REMOTE_SignalLock(myworker_id)); CreepFlag = CalculateStackGap(); - UNLOCK(REMOTE_SignalLock(wid)); + UNLOCK(REMOTE_SignalLock(myworker_id)); EX = NULL; init_stack(0, NULL, TRUE, NULL PASS_REGS); /* the first real choice-point will also have AP=FAIL */ /* always have an empty slots for people to use */ CurSlot = 0; Yap_StartSlots( PASS_REGS1 ); - REMOTE_GlobalArena(wid) = TermNil; + REMOTE_GlobalArena(myworker_id) = TermNil; h0var = MkVarTerm(); +#ifdef THREADS + LOCAL = REMOTE(myworker_id); +#endif /* THREADS */ #if COROUTINING - REMOTE_WokenGoals(wid) = Yap_NewTimedVar(TermNil); - REMOTE_AttsMutableList(wid) = Yap_NewTimedVar(h0var); + REMOTE_WokenGoals(myworker_id) = Yap_NewTimedVar(TermNil); + REMOTE_AttsMutableList(myworker_id) = Yap_NewTimedVar(h0var); #endif - REMOTE_GcGeneration(wid) = Yap_NewTimedVar(h0var); - REMOTE_GcCurrentPhase(wid) = 0L; - REMOTE_GcPhase(wid) = Yap_NewTimedVar(MkIntTerm(REMOTE_GcCurrentPhase(wid))); + REMOTE_GcGeneration(myworker_id) = Yap_NewTimedVar(h0var); + REMOTE_GcCurrentPhase(myworker_id) = 0L; + REMOTE_GcPhase(myworker_id) = Yap_NewTimedVar(MkIntTerm(REMOTE_GcCurrentPhase(myworker_id))); #if defined(YAPOR) || defined(THREADS) PP = NULL; PREG_ADDR = NULL; #endif - Yap_AllocateDefaultArena(128*1024, 2); - Yap_InitPreAllocCodeSpace(); + Yap_AllocateDefaultArena(128*1024, 2, myworker_id); + Yap_InitPreAllocCodeSpace( myworker_id ); #ifdef CUT_C - cut_c_initialize(); + cut_c_initialize( myworker_id ); #endif #if defined MYDDAS_MYSQL || defined MYDDAS_ODBC Yap_REGS.MYDDAS_GLOBAL_POINTER = NULL; #endif #ifdef TABLING /* ensure that LOCAL_top_dep_fr is always valid */ - if (REMOTE_top_dep_fr(wid)) - DepFr_cons_cp(REMOTE_top_dep_fr(wid)) = NORM_CP(B); -#endif -#ifdef THREADS - worker_id = wid; - if (myworker_id != worker_id) { - pthread_setspecific(Yap_yaamregs_key, (const void *)REMOTE_ThreadHandle(worker_id).default_yaam_regs); - } + if (REMOTE_top_dep_fr(myworker_id)) + DepFr_cons_cp(REMOTE_top_dep_fr(myworker_id)) = NORM_CP(B); #endif } @@ -1886,11 +1880,10 @@ p_reset_exception( USES_REGS1 ) } void -Yap_ResetExceptionTerm(void) +Yap_ResetExceptionTerm(int wid) { - CACHE_REGS - Yap_ReleaseTermFromDB(LOCAL_BallTerm); - LOCAL_BallTerm = NULL; + Yap_ReleaseTermFromDB(REMOTE_BallTerm(wid)); + REMOTE_BallTerm(wid) = NULL; } static Int diff --git a/C/globals.c b/C/globals.c index 24f479e00..d08186905 100644 --- a/C/globals.c +++ b/C/globals.c @@ -151,10 +151,10 @@ p_default_arena_size( USES_REGS1 ) void -Yap_AllocateDefaultArena(Int gsize, Int attsize) +Yap_AllocateDefaultArena(Int gsize, Int attsize, int wid) { CACHE_REGS - LOCAL_GlobalArena = NewArena(gsize, 2, NULL PASS_REGS); + REMOTE_GlobalArena(wid) = NewArena(gsize, 2, NULL PASS_REGS); } static void diff --git a/C/save.c b/C/save.c index 6f1898ec9..8b9ab9ec5 100755 --- a/C/save.c +++ b/C/save.c @@ -1794,7 +1794,7 @@ Restore(char *s, char *lib_dir USES_REGS) Yap_InitSysPath(); #if USE_DL_MALLOC || USE_SYSTEM_MALLOC if (!AuxSp) { - Yap_InitPreAllocCodeSpace(); + Yap_InitPreAllocCodeSpace( 0 ); } #endif CloseRestore(); diff --git a/C/threads.c b/C/threads.c index ea3ed473f..29c866060 100755 --- a/C/threads.c +++ b/C/threads.c @@ -230,15 +230,11 @@ setup_engine(int myworker_id, int init_thread) regcache = standard_regs; /* create the YAAM descriptor */ REMOTE_ThreadHandle(myworker_id).default_yaam_regs = standard_regs; - if (init_thread) { - pthread_setspecific(Yap_yaamregs_key, (void *)REMOTE_ThreadHandle(myworker_id).default_yaam_regs); - } - worker_id = myworker_id; - LOCAL = REMOTE(worker_id); - Yap_InitExStacks(REMOTE_ThreadHandle(myworker_id).tsize, REMOTE_ThreadHandle(myworker_id).ssize); + Yap_InitExStacks(myworker_id, REMOTE_ThreadHandle(myworker_id).tsize, REMOTE_ThreadHandle(myworker_id).ssize); CurrentModule = REMOTE_ThreadHandle(myworker_id).cmod; Yap_InitTime( myworker_id ); Yap_InitYaamRegs( myworker_id ); + REFRESH_CACHE_REGS Yap_ReleasePreAllocCodeSpace(Yap_PreAllocCodeSpace()); /* I exist */ GLOBAL_NOfThreadsCreated++; @@ -254,7 +250,11 @@ setup_engine(int myworker_id, int init_thread) static void start_thread(int myworker_id) { - setup_engine(myworker_id, TRUE); + CACHE_REGS + pthread_setspecific(Yap_yaamregs_key, (void *)REMOTE_ThreadHandle(myworker_id).default_yaam_regs); + REFRESH_CACHE_REGS; + worker_id = myworker_id; + LOCAL = REMOTE(myworker_id); } static void * @@ -267,13 +267,14 @@ thread_run(void *widp) #ifdef OUTPUT_THREADS_TABLING char thread_name[25]; char filename[YAP_FILENAME_MAX]; + sprintf(thread_name, "/thread_output_%d", myworker_id); strcpy(filename, YAP_BINDIR); strncat(filename, thread_name, 25); - LOCAL_thread_output = fopen(filename, "w"); + REMOTE_thread_output(myworker_id) = fopen(filename, "w"); #endif /* OUTPUT_THREADS_TABLING */ start_thread(myworker_id); - regcache = ((REGSTORE *)pthread_getspecific(Yap_yaamregs_key)); + REFRESH_CACHE_REGS; do { t = tgs[0] = Yap_PopTermFromDB(LOCAL_ThreadHandle.tgoal); if (t == 0) { @@ -328,7 +329,8 @@ p_create_thread( USES_REGS1 ) Term x2 = Deref(ARG2); Term x3 = Deref(ARG3); Term x4 = Deref(ARG4); - int new_worker_id = IntegerOfTerm(Deref(ARG7)); + int new_worker_id = IntegerOfTerm(Deref(ARG7)), + owid = worker_id; // fprintf(stderr," %d --> %d\n", worker_id, new_worker_id); if (IsBigIntTerm(x2)) @@ -349,10 +351,13 @@ p_create_thread( USES_REGS1 ) //REMOTE_ThreadHandle(new_worker_id).pthread_handle = 0L; REMOTE_ThreadHandle(new_worker_id).id = new_worker_id; REMOTE_ThreadHandle(new_worker_id).ref_count = 1; + setup_engine(new_worker_id, FALSE); if ((REMOTE_ThreadHandle(new_worker_id).ret = pthread_create(&REMOTE_ThreadHandle(new_worker_id).pthread_handle, NULL, thread_run, (void *)(&(REMOTE_ThreadHandle(new_worker_id).id)))) == 0) { + pthread_setspecific(Yap_yaamregs_key, (const void *)REMOTE_ThreadHandle(owid).current_yaam_regs); /* wait until the client is initialised */ return TRUE; } + pthread_setspecific(Yap_yaamregs_key, (const void *)REMOTE_ThreadHandle(owid).current_yaam_regs); return FALSE; } @@ -493,6 +498,7 @@ Yap_thread_create_engine(thread_attr *ops) Int Yap_thread_attach_engine(int wid) { + CACHE_REGS /* already locked pthread_mutex_lock(&(REMOTE_ThreadHandle(wid).tlock)); @@ -506,9 +512,8 @@ Yap_thread_attach_engine(int wid) } REMOTE_ThreadHandle(wid).pthread_handle = pthread_self(); REMOTE_ThreadHandle(wid).ref_count++; - pthread_setspecific(Yap_yaamregs_key, (const void *)REMOTE_ThreadHandle(wid).default_yaam_regs); - CACHE_REGS - worker_id = wid; /* ricroc: for what I understand, this shouldn't be necessary */ + pthread_setspecific(Yap_yaamregs_key, (const void *)REMOTE_ThreadHandle(wid).current_yaam_regs); + REFRESH_CACHE_REGS; DEBUG_TLOCK_ACCESS(9, wid); pthread_mutex_unlock(&(REMOTE_ThreadHandle(wid).tlock)); return TRUE; diff --git a/C/utilpreds.c b/C/utilpreds.c index 2ec52e4ef..ed3b891c1 100644 --- a/C/utilpreds.c +++ b/C/utilpreds.c @@ -4694,7 +4694,7 @@ static Int numbervars_in_complex_term(register CELL *pt0, register CELL *pt0_end goto loop; } - prune(B); + prune(B PASS_REGS); Yap_ReleasePreAllocCodeSpace((ADDR)to_visit0); return numbv; diff --git a/H/YapHeap.h b/H/YapHeap.h index fa1d962da..a6e09076a 100644 --- a/H/YapHeap.h +++ b/H/YapHeap.h @@ -220,7 +220,7 @@ UInt STD_PROTO(Yap_givemallinfo, (void)); ADDR STD_PROTO(Yap_ExpandPreAllocCodeSpace, (UInt, void *, int)); #define Yap_ReleasePreAllocCodeSpace(x) -ADDR STD_PROTO(Yap_InitPreAllocCodeSpace, (void)); +ADDR STD_PROTO(Yap_InitPreAllocCodeSpace, (int)); #include "inline-only.h" INLINE_ONLY EXTERN inline ADDR diff --git a/H/Yapproto.h b/H/Yapproto.h index 2d831bf62..ef9a217cc 100644 --- a/H/Yapproto.h +++ b/H/Yapproto.h @@ -91,7 +91,7 @@ int STD_PROTO(Yap_ExtendWorkSpace,(Int)); void STD_PROTO(Yap_FreeAtomSpace,(char *)); int STD_PROTO(Yap_FreeWorkSpace, (void)); void STD_PROTO(Yap_InitMemory,(UInt,UInt,UInt)); -void STD_PROTO(Yap_InitExStacks,(int,int)); +void STD_PROTO(Yap_InitExStacks,(int,int,int)); /* amasm.c */ OPCODE STD_PROTO(Yap_opcode,(op_numbers)); @@ -177,7 +177,7 @@ Term STD_PROTO(Yap_ExecuteCallMetaCall,(Term)); void STD_PROTO(Yap_InitExecFs,(void)); Int STD_PROTO(Yap_JumpToEnv,(Term)); Term STD_PROTO(Yap_RunTopGoal,(Term)); -void STD_PROTO(Yap_ResetExceptionTerm,(void)); +void STD_PROTO(Yap_ResetExceptionTerm,(int)); Int STD_PROTO(Yap_execute_goal,(Term, int, Term)); Int STD_PROTO(Yap_exec_absmi,(int)); void STD_PROTO(Yap_trust_last,(void)); @@ -200,7 +200,7 @@ void STD_PROTO(Yap_InitGlobals,(void)); Term STD_PROTO(Yap_SaveTerm, (Term)); Term STD_PROTO(Yap_SetGlobalVal, (Atom, Term)); Int STD_PROTO(Yap_DeleteGlobal, (Atom)); -void STD_PROTO(Yap_AllocateDefaultArena, (Int, Int)); +void STD_PROTO(Yap_AllocateDefaultArena, (Int, Int, int)); /* grow.c */ Int STD_PROTO(Yap_total_stack_shift_time,(void)); diff --git a/H/absmi.h b/H/absmi.h index 0b890d5b2..47ebe66df 100644 --- a/H/absmi.h +++ b/H/absmi.h @@ -1546,9 +1546,8 @@ Yap_regtoregno(wamreg reg) #endif static inline void -prune(choiceptr cp) +prune(choiceptr cp USES_REGS) { - CACHE_REGS #ifdef YAPOR CUT_prune_to(cp); #endif /* YAPOR */ diff --git a/H/cut_c.h b/H/cut_c.h index cf53117a7..752f7b1fc 100644 --- a/H/cut_c.h +++ b/H/cut_c.h @@ -46,7 +46,7 @@ struct cut_c_str{ /*Initializes CUT_C_TOP*/ -void cut_c_initialize(void); +void cut_c_initialize(int wid ); /*Removes a choice_point from the stack*/ void cut_c_pop(void);