def getElementValueAndFitness(el):
	mid = el.size/2

	maxValueBS = BinaryString([0] + (mid-1)*[1])
	multiplier = 1.0/maxValueBS.binToInt()

	[x,y] = divideElement(el)
	xValue = abs(10 * x.binToInt() * multiplier) - 5
	yValue = abs(10 * y.binToInt() * multiplier) - 5

	value = f(xValue,yValue)

	return [xValue, yValue, value]
def populationFitnessCalculation(population):	
	fitnessList = []
	bestFitness = 0
	bestIndex = 0
	maxValueBS = BinaryString([0] + (population[0].size-1)*[1])
	multiplier = 1.0/maxValueBS.binToInt()	
	for i in range(len(population)):
		value = abs(population[i].binToInt() * multiplier)
		fitnessList.append(g(value))
		if fitnessList[i] > bestFitness:
			bestFitness = fitnessList[i]
			bestIndex = i

	return [fitnessList, bestIndex]
def populationFitnessCalculation(population):	
	fitnessList = []
	bestFitness = float('inf')
	bestIndex = 0

	mid = population[0].size/2

	maxValueBS = BinaryString([0] + (mid-1)*[1])
	multiplier = 1.0/maxValueBS.binToInt()

	for i in range(len(population)):
		[x,y] = divideElement(population[i])
		xValue = abs(10 * x.binToInt() * multiplier) - 5
		yValue = abs(10 * y.binToInt() * multiplier) - 5
	 	value = f(xValue,yValue)
		fitnessList.append(value)
		if fitnessList[i] < bestFitness:
			bestFitness = fitnessList[i]
			bestIndex = i

	return [fitnessList, bestIndex]
def getElementValueAndFitness(x):	
	maxValueBS = BinaryString([0] + (x.size-1)*[1])
	multiplier = 1.0/maxValueBS.binToInt()	
	value = abs(x.binToInt() * multiplier)
	return [value, g(value)]