""" List of perturbations """ from local_search import * import random from utils import count_elements def melt(data,indice, k): K = len(data) error = [] for nperturb in range(k): rnd1 = random.randrange(K) rnd2 = rnd1 while rnd1==rnd2: rnd2 = random.randrange(K) tmpdata = {} tmpdata[0] = [] tmpdata[1] = [] for i in data[rnd1]: tmpdata[random.randrange(2)].append(i) for i in data[rnd2]: tmpdata[random.randrange(2)].append(i) error = local_search(tmpdata,indice,k) data[rnd1] = tmpdata[0] data[rnd2] = tmpdata[1] return error def split(data,indice, k): K = len(data) error = [] for nperturb in range(k): #Choose randomly a cluster rnd1 = random.randrange(K) #Assign randomly all its observations to other clusters for i in data[rnd1]: rnd2 = rnd1 while rnd1==rnd2: rnd2 = random.randrange(K) data[rnd2].append(i) data[rnd1] = [] #Choose randomly an other cluster rnd2 = rnd1 while rnd1==rnd2: rnd2 = random.randrange(K) #Split this cluster in two using a random solution tmpdata = [[],[]] for i in data[rnd2]: tmpdata[random.randrange(2)].append(i) data[rnd1] = tmpdata[0][:] data[rnd2] = tmpdata[1][:] # and a local search error = local_search(data,indice,k) return data