def initializeSolutions(amountSolutions, vectorSize, amountNodes): solutions = [] for i in range(amountSolutions): vector = np.arange(amountNodes) np.random.shuffle(vector) vector = vector[0:vectorSize] solutions.append(ST.Solution(vector.copy())) return solutions
def L2S2intialization(amountSolutions, vectorSize, amountNodes, physicalNetwork, virtualNetwork): solutions = [] for j in range(amountSolutions): vector = [] for i in range(vectorSize): flag2 = True selectedNodes = physicalNetwork.vs.select( CPU_ge=virtualNetwork.vs[i]['CPU']) candidateNodesList = [] for nodo in selectedNodes: candidateNodesList.append(nodo.index) #print len(candidateNodesList) if len(candidateNodesList) != 0: flag2 = False cpu = np.asarray(physicalNetwork.vs[candidateNodesList]['CPU']) sumbandwidth = np.asarray( physicalNetwork.strength(candidateNodesList, weights='bandwidth')) physicalNRU = cpu * sumbandwidth sumNRU = np.sum(physicalNRU) probabilitiesNRU = physicalNRU / float(sumNRU) flag = True count = 0 while flag == True: count += 1 cumulativeSum = 0 coin = np.random.uniform() for k in range(len(probabilitiesNRU)): cumulativeSum = cumulativeSum + probabilitiesNRU[k] if cumulativeSum >= coin and candidateNodesList[ k] not in vector: vector.append(candidateNodesList[k]) flag = False break if count == 1000: flag = False flag2 = True if flag2 == True: number = np.random.randint(0, amountNodes) while number in vector: number = np.random.randint(0, amountNodes) vector.append(number) vector = np.asarray(vector) solutions.append(ST.Solution(vector.copy())) return solutions
def improviseNewHarmony(self, solutions, amountNodes): amountNotes = len(solutions[0].permutation) newVector = np.ones(amountNotes, dtype=int) * amountNodes for i in range(amountNotes): coin = np.random.uniform() if coin <= self.hcmr: memoryPosition = np.random.randint(0, len(solutions)) number = solutions[memoryPosition].permutation[i] count = 0 while number in newVector: count += 1 memoryPosition = np.random.randint(0, len(solutions)) number = solutions[memoryPosition].permutation[i] if count > 1000: number = np.random.randint(0, amountNodes) newVector[i] = number coin = np.random.uniform() if coin <= self.par / float(2): number = newVector[i] - 1 if number < 0: number = amountNodes - 1 while number in newVector: number = number - 1 if number < 0: number = amountNodes - 1 newVector[i] = number elif coin <= self.par: number = newVector[i] + 1 #print numero if number >= amountNodes: number = 0 while number in newVector: number = number + 1 if number >= amountNodes: number = 0 #print numero newVector[i] = number else: number = np.random.randint(0, amountNodes) while number in newVector: number = np.random.randint(0, amountNodes) newVector[i] = number #print newVector return ST.Solution(newVector.copy())
def improviseNewHarmony2(self, solutions, amountNodes): amountNotes = len(solutions[0].permutation) newVector = np.ones(amountNotes, dtype=int) * amountNodes for i in range(amountNotes): vectorPosition = self.order[i] coin = np.random.uniform() size = len(self.candidateNodes[vectorPosition]) if coin <= self.hcmr: memoryPosition = np.random.randint(0, len(solutions)) number = solutions[memoryPosition].permutation[vectorPosition] count = 0 while number in newVector: count += 1 memoryPosition = np.random.randint(0, len(solutions)) number = solutions[memoryPosition].permutation[ vectorPosition] if count > 1000: number = np.random.randint( 0, len(self.candidateNodes[vectorPosition])) number = self.candidateNodes[vectorPosition][number] newVector[vectorPosition] = number coin = np.random.uniform() #print "number: "+str(number) if coin <= self.par / float(2) and size != 1: #print "***************************"+str(vectorPosition) #print self.candidateNodes[vectorPosition] indexList = self.candidateNodes[vectorPosition].index( newVector[vectorPosition]) #print indexList newPosition = indexList - 1 if newPosition < 0: newPosition = len( self.candidateNodes[vectorPosition]) - 1 number = self.candidateNodes[vectorPosition][newPosition] while number in newVector: newPosition = newPosition - 1 if newPosition < 0: newPosition = len( self.candidateNodes[vectorPosition]) - 1 number = self.candidateNodes[vectorPosition][ newPosition] newVector[vectorPosition] = number elif coin <= self.par and size != 1: #print "----------------------------"+str(vectorPosition) #print self.candidateNodes[vectorPosition] indexList = self.candidateNodes[vectorPosition].index( newVector[vectorPosition]) #print indexList newPosition = indexList + 1 if newPosition >= len(self.candidateNodes[vectorPosition]): newPosition = 0 #print "position: "+str(newPosition)+" size: "+str(size) number = self.candidateNodes[vectorPosition][newPosition] while number in newVector: newPosition = newPosition + 1 if newPosition >= len( self.candidateNodes[vectorPosition]): newPosition = 0 #print "position: "+str(newPosition) number = self.candidateNodes[vectorPosition][ newPosition] newVector[vectorPosition] = number else: if size != 1: position = np.random.randint(0, size) number = self.candidateNodes[vectorPosition][position] while number in newVector: position = np.random.randint(0, size) number = self.candidateNodes[vectorPosition][position] newVector[vectorPosition] = number else: newVector[vectorPosition] = self.candidateNodes[ vectorPosition][0] #print newVector #print newVector return ST.Solution(newVector.copy())