PartitionList *AbstractSet::getOptimalPartitionList (double threshold)
{
	PartitionList *partitionList = new PartitionList();

	Partition *minPartition = getOptimalPartition(objective->getParameter(0));
	Partition *maxPartition = getOptimalPartition(objective->getParameter(1));

	partitionList->push_back(minPartition);
	addOptimalPartitionList(partitionList,minPartition,maxPartition,0,1,threshold);
	partitionList->push_back(maxPartition);
	
	Partition *currentPartition;
	bool first = true;
	
	
	for (PartitionList::iterator it = partitionList->begin(); it != partitionList->end(); )
	{
		Partition *newPartition = *it;
		if (first)
		{
			currentPartition = newPartition;
			first = false;
			++it;
		}
		else
		{
			if (!newPartition->equal(currentPartition))
			{
				currentPartition = newPartition;
				++it;
			}
			else
			{
				partitionList->erase(it++);
				delete newPartition;
			}
		}
	}
	
	return partitionList;
}