diff options
Diffstat (limited to 'decoder')
-rw-r--r-- | decoder/hg.cc | 10 | ||||
-rw-r--r-- | decoder/hg.h | 1 |
2 files changed, 6 insertions, 5 deletions
diff --git a/decoder/hg.cc b/decoder/hg.cc index 19dbf892..b6b9d8bd 100644 --- a/decoder/hg.cc +++ b/decoder/hg.cc @@ -130,8 +130,8 @@ void Hypergraph::PushWeightsToGoal(double scale) { struct EdgeExistsWeightFunction { EdgeExistsWeightFunction(const std::vector<bool>& prunes) : prunes_(prunes) {} - double operator()(const Hypergraph::Edge& edge) const { - return (prunes_[edge.id_] ? 0.0 : 1.0); + bool operator()(const Hypergraph::Edge& edge) const { + return !prunes_[edge.id_]; } private: const vector<bool>& prunes_; @@ -147,8 +147,8 @@ void Hypergraph::PruneEdges(const std::vector<bool>& prune_edge, bool run_inside // I don't know a good c++ way to resolve this short of template specialization which // I dislike. If you know of a better way that doesn't involve specialization, // fix this! - vector<double> reachable; - bool goal_derivable = (0 < Inside<double, EdgeExistsWeightFunction>(*this, &reachable, wf)); + vector<Boolean> reachable; + bool goal_derivable = Inside/* <Boolean, EdgeExistsWeightFunction> */(*this, &reachable, wf); if (!goal_derivable) { edges_.clear(); nodes_.clear(); @@ -195,7 +195,7 @@ void Hypergraph_finish_prune(Hypergraph &hg,vector<prob_t> const& io,double cuto } if (verbose) cerr << "Finished pruning; removed " << pc << "/" << io.size() << " edges\n"; - hg.PruneEdges(prune); + hg.PruneEdges(prune,true); // inside reachability check in case cutoff rounded down too much (probably redundant with EPSILON hack) } void Hypergraph::DensityPruneInsideOutside(const double scale, diff --git a/decoder/hg.h b/decoder/hg.h index a632dc1c..e54b4bcc 100644 --- a/decoder/hg.h +++ b/decoder/hg.h @@ -166,6 +166,7 @@ class Hypergraph { // remove edges from the hypergraph if prune_edge[edge_id] is true // TODO need to investigate why this shouldn't be run for the forest trans // case. To investigate, change false to true and see where ftrans crashes + //TODO: what does the above "TODO" comment mean? that PruneEdges can lead to a crash? or that run_inside_algorithm should be false? there definitely is an unsolved bug, see hg.cc - workaround added void PruneEdges(const std::vector<bool>& prune_edge, bool run_inside_algorithm = false); // for density>=1.0, keep this many times the edges needed for the 1best derivation |