Example #1
0
vector<int*> diversifyPopulation(vector<pdi>& costHeap, vector<int*> population, int numKeep, int numNew, DataFrame dataFrame, vector<int>* conflictGraph) {
	vector<int*> newPopulation;
	double fitness;
	int id;

	//vector<pdi> costHeapAux;
	//make_heap(costHeapAux.begin(), costHeapAux.end(), smallerOp());

	for(int i = 0; i < numKeep; i++) {
		fitness = costHeap.front().first;
		id = costHeap.front().second;

		//costHeapAux.push_back(pdi(fitness, i));
		//push_heap(costHeapAux.begin(), costHeapAux.end(), smallerOp());

		pop_heap(costHeap.begin(), costHeap.end(), smallerOp());
		costHeap.pop_back();

		newPopulation.push_back(population[id]);
	}

	vector<int*> randomIndividuals = getPopulation(dataFrame.getInstance(), numNew);
	for(int i = 0; i < randomIndividuals.size(); i++) {
		KCenterSolver* ind = createSolver(dataFrame, randomIndividuals[i]);
		ind->localSearch(conflictGraph);
		newPopulation.push_back(ind->getSolution());
		
		//costHeapAux.push_back(pdi(ind->getCost(), numKeep+i));
		//push_heap(costHeapAux.begin(), costHeapAux.end(), smallerOp());

		delete ind;
	}

	//vector<pdi>(costHeap).swap(costHeap);
	//costHeap = costHeapAux;

	return newPopulation;
}