#http://en.wikipedia.org/wiki/Partition_problem
import random
import logging
logging.basicConfig(level = logging.DEBUG)
log = logging.getLogger('partitionselection')
CROSSOVER_FRACTION = 0.20
SELECTIVE_FRACTION = 0.50
VARIANTS = 5
POPULATION_SIZE = 20
ITERATIONS = 100
def crossover(a,b):
ml = min([len(a), len(b)])
used_indices = []
for i in range(0, int(ml*CROSSOVER_FRACTION)):
ra = random.randint(0,ml-1)
while ra in used_indices:
ra = random.randint(0,ml-1)
a[ra], b[ra] = b[ra], a[ra]
used_indices.append(ra)
return (abs(sum(a)-sum(b)), a, b)
def naturalselection(partition_traids):
global least_diff
new_partition_traids = partition_traids [:]
for partition_traid in partition_traids:
for i in range(VARIANTS):
variant = crossover(*partition_traid[1:])
if variant[0]