void Hypergraph::create(std::map<ConstVariablePtr, SetOfVars > const &terms) { // Add the vertices std::map<ConstVariablePtr, SetOfVars >::const_iterator terms_it; for(terms_it = terms.begin(); terms_it != terms.end(); ++terms_it) { SetOfVars const &jt = terms_it->second; for(SetOfVars::iterator it = jt.begin(); it != jt.end(); ++it) { V_.insert(*it); } } // Add empty lists for the hyperedges for(SetOfVars::iterator v_it = V_.begin(); v_it != V_.end(); ++v_it) { std::list<SetOfVars> e_list; adjList_.insert(make_pair(*v_it, e_list)); } // Now add the edges for(terms_it = terms.begin(); terms_it != terms.end(); ++terms_it) { SetOfVars const &jt = terms_it->second; E_.insert(jt); // Put it in the adjacency lists for (SetOfVars::const_iterator it = jt.begin(); it != jt.end(); ++it) { AdjListType::iterator pos = adjList_.find(*it); assert(pos != adjList_.end()); std::list<SetOfVars> &e_list = pos->second; e_list.push_back(jt); } // Determine weight ConstVariablePtr zvar = terms_it->first; double zweight = 0.0; for (ConstrSet::iterator it2 = zvar->consBegin(); it2 != zvar->consEnd(); ++it2) { const LinearFunctionPtr lf = (*it2)->getLinearFunction(); double w = lf->getWeight(zvar); #if defined(DEBUG_MULTILINEARTERMS_HANDLER) zvar->write(std::cout); std::cout << " has weight: " << w << " in constraint: "; (*it2)->write(std::cout); #endif zweight += fabs(w); } // Add objective weight const LinearFunctionPtr obj = problem_->getObjective()->getLinearFunction(); if (obj != 0) { double w = obj->getWeight(zvar); zweight += fabs(w); } weights_.insert(make_pair(jt, zweight)); originalWeights_.insert(make_pair(jt, zweight)); } }
void MultilinearTermsHandler::setupWeights_() { for(ConstTermIterator it = termsR_.begin(); it != termsR_.end(); ++it) { ConstVariablePtr zvar = it->first; double zweight = 0.0; for (ConstrSet::iterator it2 = zvar->consBegin(); it2 != zvar->consEnd(); ++it2) { const LinearFunctionPtr lf = (*it2)->getLinearFunction(); double w = lf->getWeight(zvar); #if defined(DEBUG_MULTILINEARTERMS_HANDLER) zvar->write(std::cout); std::cout << " has weight: " << w << " in constraint: "; (*it2)->write(std::cout); #endif zweight += fabs(w); } weights_.insert(std::make_pair(zvar, zweight)); } }