Esempio n. 1
0
int main(int argc, char *argv[])
{
	Utility util;
	START_TIME=time (NULL);
    	string str;

	// PARSE PARAMETERS
	MIN_DENSITY=atof(argv[4]);
	MIN_DIM=atoi(argv[6]);
	MIN_SIZE=atoi(argv[8]);
	DISTANCE_FUNCTION=atoi(argv[10]);
	cout<<"Minimum density        : "<<MIN_DENSITY<<endl;
	cout<<"Minimum dim            : "<<MIN_DIM<<endl;
	cout<<"Minimum pattern size   : "<<MIN_SIZE<<endl;

	// REDIRECT IO
	std::ostringstream converter;
	converter<<argv[2]<<"experimental_results/alpha_"<<MIN_DENSITY<<"_minGraph_"<<MIN_DIM<<"_minSize_"<<MIN_SIZE<<"_distFunc_"<<DISTANCE_FUNCTION<<".txt";
	cout<<"Redirecting output to:"<<converter.str()<<endl;
	freopen (converter.str().c_str(),"w",stdout);

	// LOAD
	Loader loader;
	loader.loadDataset(argv[2]);

	// PREPROCESS  INPUT
	util.removeNonHomegenousEdges();
	//util.partitionGraph(NUMBER_OF_PARTITIONS);
	util.extractComponents();  // only in windows
	vector<ConnectedComponent*>::const_iterator iter=connectedComponents.begin();
	int numberOfComponents = (int)connectedComponents.size();
	for (int i=0; i<numberOfComponents;i++)
	{
		ConnectedComponent* ccPtr = connectedComponents[i];
		cout<<"\tComponent "<<i<< "  size:"<< ccPtr->getSize()<<endl;
	}
	cout<<"\n++++++++++++++++++++++++++++++++\n\n\n"<<endl;
	//cout<<"Number of processors:"<<omp_get_num_procs()<<endl;
	cout<<"Number of processors used:"<<NUMBER_OF_CPUs<<endl;
	//omp_set_num_threads(NUMBER_OF_CPUs);
	cout<<"\n\nStarting algorithm!"<<endl;

	//1- FIRST PHASE
	//#pragma omp parallel for
	for (int i=0; i<numberOfComponents;i++)
	{
		ConnectedComponent* ccPtr = connectedComponents[i];
		cout<<"\n\n\n\n======================\n\n\tStarting Connected Component: "<<ccPtr->getID()<<"\tSize: "<<ccPtr->getSize()<<endl;
		cout<<"Find seed patterns!"<<endl;
		ccPtr->findSeedPatterns();
		cout<<"Expand-by-one!"<<endl;
		ccPtr->expand_by_one(true);
		cout<<"\t\tFinished: "<<ccPtr->getID()<<"\tSize: "<<ccPtr->getSize()<<"  # of Found Patterns:"<<ccPtr->getTempMaximalPatterns()->size()<<endl;
	}
	cout<<"\n--------------------------------\n\n\n"<<endl;
	cout<<"\n\n\n\nRun time before merge (in minutes): "<<((float)time(NULL)-START_TIME)/60<<" "<<endl;
	cout<<"Run time before merge (in second): "<<(time(NULL)-START_TIME)<<" "<<endl;

	// all patterns will be merged to this guy
	ConnectedComponent* masterComponent = new ConnectedComponent(-1);


	// statistics
	cout<<"\n\n"<<endl;
	int patternCounter=0;
	for (int i=0; i<numberOfComponents;i++)
	{
		ConnectedComponent* ccPtr = connectedComponents[i];
		//cout<<"\tBefore Component "<<i<< " maximal pattern size:"<< ccPtr->getMaximalPatterns()->size()<<endl;
		//ccPtr->removeRedundancyInMaximalPatterns();
		patternCounter+=(int)ccPtr->getTempMaximalPatterns()->size();
		//cout<<"\tAfter Component "<<i<< " maximal pattern size:"<< ccPtr->getMaximalPatterns()->size()<<endl;
	}
	cout<<"Before redundancy elim, total patterns in components:"<<patternCounter<<endl;

	cout<<"\n\n\n\nRun time before redundancy (in minutes): "<<((float)time(NULL)-START_TIME)/60<<" "<<endl;
	cout<<"Run time before redundancy (in second): "<<(time(NULL)-START_TIME)<<" "<<endl;

	//3- REDUNDANCY ELIMINATION
	util.unifyPatternsOfAllComponents2(masterComponent);
	cout<<"After removing redundancy number of patterns:"<<masterComponent->getMaximalPatterns()->size()<<endl;


	// statistics
	cout<<"\n\n\n\n Final number of patterns:"<<masterComponent->getMaximalPatterns()->size()<<endl;

	masterComponent->printMaximalPatterns();


	//CLEAN MEMORY
	util.deallocateConnectedComponents();
	util.deallocateNodes();
	//cout<<"Pattern counter:"<<Pattern::counter<<endl;
	cout<<"Total run time(minutes): "<<((float)time(NULL)-START_TIME)/60<<" "<<endl;
	cout<<"Total run time(seconds): "<<(time(NULL)-START_TIME)<<" "<<endl;
	return 0;
}