diff options
| -rw-r--r-- | rbmp.cpp | 27 | 
1 files changed, 15 insertions, 12 deletions
| @@ -31,10 +31,9 @@ private:  public:    const Edge& edge; -  double oldX;    double X; -  HalfEdge(const Edge& e) : edge(e), oldX(0) {} +  HalfEdge(const Edge& e) : edge(e), X(0) {}    void setVertices(Vertex& vt, Vertex& vh) {      tail = &vt;      head = &vh; @@ -88,25 +87,26 @@ public:      }    } -  double propagateBeliefs() { -# pragma omp parallel for -    for (Edge& e : edges) { -      for (HalfEdge& h : e.halfedges) { +  void propagateBeliefs() { +    for (unsigned i : {0, 1}) { +#pragma omp parallel for +      for (Edge& e : edges) { +        HalfEdge& h = e.halfedges[i];          h.X = std::numeric_limits<double>::infinity();          for (const HalfEdge& hn : h.getHead().neighbors) {            if (h.getTail().index != hn.getHead().index) { -            h.X = std::min(hn.edge.weight - hn.oldX, h.X); +            h.X = std::min(hn.edge.weight - hn.X, h.X);            }          }        }      } +  } +  double minBelief() const {      double minBelief = std::numeric_limits<double>::infinity(); -    for (Edge& e : edges) { + +    for (const Edge& e : edges) {        minBelief = std::min(std::abs(e.belief()), minBelief); -      for (HalfEdge& he : e.halfedges) { -        he.oldX = he.X; -      }      }      return minBelief; @@ -143,7 +143,10 @@ int main(int argc, char* argv[]) {    double minBelief = 0;    while (minBelief < beliefThreshold && steps < maxSteps) { -    minBelief = G.propagateBeliefs(); +    G.propagateBeliefs(); +    if (steps % 100 == 0) { +      std::cerr << (minBelief = G.minBelief()) << std::endl; +    }      steps++;    } | 
