from local_search import local_search from local_search import compute_observation_error from local_search import regression_model from perturbations import melt from perturbations import split from utils import count_elements from utils import copyData def VNS(data,index,method,kMax): K = len(data) kmax = kMax k=1 bestSolution = data.copy() B = regression_model(data,index,{}) bestQuadError = 0 for cluster in data: for obs in data[cluster]: bestQuadError += compute_observation_error(obs,B[cluster],index) iteration = 0 while iteration < 50: result = local_search(data,index) quadError = result[0] print "Iteration", iteration , "k=", k , "iterLS=", result[1] if quadError < bestQuadError: k=1 copyData(data,bestSolution) bestQuadError = quadError print "New best error: ", bestQuadError, " (", iteration, ")" else: k = k + 1 if k == kmax: copyData(bestSolution,data) break copyData(bestSolution,data) if method==1: melt(data,index,k) elif method==2: split(data,index,k) iteration += 1 return bestQuadError