void LiftedAlgsConvertor::doWMPTPExactZ(LvrParams* params)
{
	vector<vector<int> > evidenceIntRep;
	lvrMln = new LvrMLN();
	bool mlncontainsGrndClause=false;
	convertInputMLNToLifted(mln_,domain_,mlncontainsGrndClause);
	//process the evidence
	addEvidence(evidenceIntRep);
	//cout<<"Converted MLN"<<endl;
	//for(int i=0;i<lvrMln->clauses.size();i++)
		//lvrMln->clauses[i]->print();
	//cout<<endl;
	vector<vector<int> > queriesIntRep(queries_.size());
	vector<string> queryStrings;
	for(int i=0;i<queries_.size();i++)
	{
		for(int j=0;j<queries_[i]->getIntArrRep()->size();j++)
		{
			queriesIntRep[i].push_back((*queries_[i]->getIntArrRep())[j]);
		}
		string s=queries_[i]->getPredString(domain_);
		queryStrings.push_back(s);
	}
	//LFileDump::dumpQueriesToFile(queriesIntRep);
	if(queriesIntRep.size() > 0)
	{
		//initialize the query updater
		LvrQueryUpdater::createInstance(queriesIntRep,queryStrings,
				params->resultFile,&evidenceIntRep);
	}
	liftedAlgsHandler = new LiftedAlgsHandler(*lvrMln);
	liftedAlgsHandler->WMPTPZExact(params);
}
void HxIteratePointMatchingUntilConvergence::addEvidenceForNodes(
    const McDArray<int>& nodesToAssign) {
    HxSpatialGraph* graph = hxconnection_cast<HxSpatialGraph>(portData);
    const EdgeVertexAttribute* evidenceAttrib =
        dynamic_cast<const EdgeVertexAttribute*>(graph->findAttribute(
            HxSpatialGraph::VERTEX, "UserDefinedMatchings"));
    McDArray<int> pairNodes(nodesToAssign.size());
    pairNodes.fill(-1);

    for (int j = 0; j < nodesToAssign.size(); j++) {
        int nodeJLabel = evidenceAttrib->getIntDataAtIdx(nodesToAssign[j]);
        if (nodeJLabel == 0) {
            pairNodes[j] = -1;
            continue;
        }
        for (int i = 0; i < graph->getNumVertices(); i++) {
            if (i != nodesToAssign[j]) {
                int nodeILabel = evidenceAttrib->getIntDataAtIdx(i);
                if (nodeILabel == nodeJLabel) {
                    pairNodes[j] = i;
                }
            }
        }
    }
    for (int j = 0; j < nodesToAssign.size(); j++) {
        addEvidence(nodesToAssign[j], pairNodes[j]);
    }
}
void LiftedAlgsConvertor::doWMPTPApproxZ(LvrParams* params)
{
	vector<vector<int> > evidenceIntRep;
	lvrMln = new LvrMLN();
	bool mlncontainsGrndClause=false;
	convertInputMLNToLifted(mln_,domain_,mlncontainsGrndClause);
	//process the evidence
	addEvidence(evidenceIntRep);
	//cout<<"Converted MLN"<<endl;
	//for(int i=0;i<lvrMln->clauses.size();i++)
		//lvrMln->clauses[i]->print();
	//cout<<endl;
	liftedAlgsHandler = new LiftedAlgsHandler(*lvrMln);
	liftedAlgsHandler->WMPTPZApprox(params);
}
Example #4
0
void generateEvidence() {

	// Create world evidence message
	wire_msgs::WorldEvidence world_evidence;

	// Set header
	world_evidence.header.stamp = ros::Time::now();
	world_evidence.header.frame_id = "/map";

	// Add evidence
	addEvidence(world_evidence, 2, 2.2, 3, "mug", "red");

	// Publish results
	world_evidence_publisher_.publish(world_evidence);
	ROS_INFO("Published world evidence with size %d", world_evidence.object_evidence.size());

}
void LiftedAlgsConvertor::doConversion(vector<vector<int> >& queriesIntRep, vector<vector<int> > & evidenceIntRep, 
	vector<string>& queryStrings,bool removeSelfJoins)
{
	lvrMln = new LvrMLN();
	bool mlncontainsGrndClause=false;
	convertInputMLNToLifted(mln_,domain_,mlncontainsGrndClause);
	//process the evidence
	addEvidence(evidenceIntRep);
	//LFileDump::dumpEvidenceToFile(evidenceIntRep);
	if(evidenceIntRep.size() > 0)
	{
		cout<<"Normalizing evidence..."<<endl;
		lvrMln->preprocessEvidence(evidenceIntRep);
		//for(int i=0;i<lvrMln->clauses.size();i++)
			//lvrMln->clauses[i]->print();
		//cout<<endl;
	}
	else if(mlncontainsGrndClause)
	{
		//the input mln has a "+" term, needs to be normalized
		LNormalizer ln(*lvrMln);
		ln.normalizeClauses(lvrMln->clauses);
		for(unsigned int i=0;i<lvrMln->clauses.size();i++)
		{
			for(unsigned int j=0;j<lvrMln->clauses[i]->atoms.size();j++)
			{
				lvrMln->clauses[i]->atoms[j]->symbol->parentId =
						lvrMln->clauses[i]->atoms[j]->symbol->id;
			}
		}
	}
	//cout<<"Converted MLN"<<endl;
	//for(int i=0;i<lvrMln->clauses.size();i++)
		//lvrMln->clauses[i]->print();
	//cout<<endl;
	queriesIntRep.resize(queries_.size());
	for(int i=0;i<queries_.size();i++)
	{
		for(int j=0;j<queries_[i]->getIntArrRep()->size();j++)
		{
			queriesIntRep[i].push_back((*queries_[i]->getIntArrRep())[j]);
		}
		string s=queries_[i]->getPredString(domain_);
		queryStrings.push_back(s);
	}
	//LFileDump::dumpQueriesToFile(queriesIntRep);
	if(removeSelfJoins)
	{
		bool isSelfJoined = false;
		for(int i=0;i<lvrMln->clauses.size();i++)
		{
			if(lvrMln->clauses[i]->isSelfJoined())
			{
				isSelfJoined = true;
				break;
			}
		}
		if(isSelfJoined)
		{
			cout<<"Preprocessing normalized MLN..."<<endl;
			processSelfJoins();
		}
	}


	liftedAlgsHandler = new LiftedAlgsHandler(*lvrMln);
	//LFileDump::dumpMLNToFile(lvrMln);
	cout<<"done writing dump files ("<<MLNDUMPFILENAME<<","<<SYMBOLSDUMPFILENAME<<","<<
	QUERIESDUMPFILENAME<<","<<EVIDENCEDUMPFILENAME<<")"<<endl;
	//for(int i=0;i<lvrMln->clauses.size();i++)
		//lvrMln->clauses[i]->print();
}