double spatialFunc(Point *p1, Point *p2, Candidate *c1, Candidate *c2, ASPath path) { double w; double routelen, directlen; routelen = ASPathGetCost(path); directlen = dist(&c1->loc, &c2->loc); if(routelen < directlen) { return transProb(p1, p2, directlen); } /* WARNING: Here I use a approximation(use Euclidean distance from * candidate point to node rather than the path distance) */ w = routelen - dist(&c1->loc, &c1->prevNode->loc) - dist(&c2->loc, &c2->nextNode->loc); if(w <= 0) { return -20; } else { return transProb(p1, p2, w); } }
void Hmm::loadProbs(string name) { string s = name+".trans"; ifstream transProb(s.c_str()); string initState; transProb >> initState; _initState = _str2id.getId(initState); _transition.load(transProb, _str2id); s = name+".emit"; ifstream emitProb(s.c_str()); _emission.load(emitProb, _str2id); }
void Hmm::saveProbs(string name) { if (name=="") { cerr << "transition probabilities:" << endl; _transition.save(cerr, _str2id); cerr << "---------------------------------" << endl; cerr << "emission probabilities:" << endl; _emission.save(cerr, _str2id); cerr << "---------------------------------" << endl; } else { string s = name+".trans"; ofstream transProb(s.c_str()); transProb << _str2id.getStr(_initState) << endl; _transition.save(transProb, _str2id); s = name+".emit"; ofstream emitProb(s.c_str()); _emission.save(emitProb, _str2id); } }