コード例 #1
0
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
コード例 #2
0
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
コード例 #3
0
    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())
コード例 #4
0
 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())