Example #1
0
File: GA.py Project: XZZMemory/GA
 def ga(self, population, gaFilePath):
     population.creatPopulation()  # 生成种群
     points = []
     painter = Painter()
     painter.paintNetworkTopology(population.baseRadius,
                                  population.locationOfBase,
                                  population.locationOfUser,
                                  population.basevisitedUE, gaFilePath)
     '''存储结果,用于绘图,文件操作'''
     f = open(gaFilePath, 'w')
     iterations = 1  # 当前迭代次数
     while (iterations <= population.iterations):
         fitness = population.getAllFitnessIntegral()
         maxFitnessInCurrentPopulation = max(fitness)
         print("代数:" + str(iterations) + "  最好值:" +
               str(maxFitnessInCurrentPopulation))
         f.write("iterations: " + str(iterations) + " fitness: " +
                 str(maxFitnessInCurrentPopulation) + '\n')
         if iterations == 1:
             maxFitness = maxFitnessInCurrentPopulation
         else:
             maxFitness = maxFitness if maxFitness > maxFitnessInCurrentPopulation else maxFitnessInCurrentPopulation
         points.append([iterations, maxFitnessInCurrentPopulation])
         tempIndividulalList = []
         while (len(tempIndividulalList) < population.sizeOfPopulation):
             individualForCrossover = population.select()  # 选择--锦标赛选择法
             if len(individualForCrossover) != 2:
                 print("select error! " + str(len(individualForCrossover)))
                 exit(1)
             individualForMutate = population.crossover(
                 individualForCrossover)  # 交叉随机点位的交叉操作,交叉完毕之后判断是否满足约束
             if (len(individualForMutate) == 2):
                 population.mutate(individualForCrossover)
                 for i in range(len(individualForCrossover)):
                     tempIndividulalList.append(individualForCrossover[i])
         tempFitness = []
         for i in range(len(tempIndividulalList)):
             fit = tempIndividulalList[i].getFitnessOfMatching()
             tempFitness.append(fit)
         for i in range(population.sizeOfPopulation):
             if tempIndividulalList == None:
                 print(str(i) + "个体是空!")
                 exit(1)
             if (tempFitness[i] > fitness[i]):
                 population.individualList[i] = copy.deepcopy(
                     tempIndividulalList[i])
         iterations += 1
     fitness = population.getAllFitnessIntegral()
     index = Utils.getImportant(fitness)
     print(
         "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%9090909090"
     )
     print(population.individualList[index].getFitnessOfMatching())
     print("asm_array: " + str(population.individualList[index].asm_array))
     print("ansArray: " + str(population.individualList[index].ansArray))
     print("VN: " + str(population.VN))
     print("C: " + str(population.individualList[index].C))
     print("P: " + str(population.individualList[index].P))
     f.write("end" + '\n' + "C: " +
             str(population.individualList[index].C) + '\n' + "P: " +
             str(population.individualList[index].P))
     return [
         population.individualList[index].C,
         population.individualList[index].P, fitness[index],
         population.individualList[index].ansArray
     ]
Example #2
0
def ga(population, fileName, maxFitnessFile, typeOfVQD):
    population.initializationOfVQD(typeOfVQD)
    population.creatPopulation()  # 生成种群
    print(str(fileName) + " VQD: " + str(population.VQD))
    print("typeOfVQD: " + str(typeOfVQD))
    # 存储结果,用于绘图
    points = []
    maxFitness = -100
    minFitness = -100
    f = open(fileName, 'w')
    f.write(fileName + '\n')
    m = open(maxFitnessFile, 'w')
    m.write(maxFitnessFile + '\n')
    painter = Painter()
    painter.paintNetworkTopology(population.baseRadius,
                                 population.locationOfBase,
                                 population.locationOfUser,
                                 population.basevisitedUE, maxFitnessFile)
    '''存储结果,用于绘图,文件操作'''
    iterations = 1  # 当前迭代次数
    while (iterations <= population.iterations):
        fitness = population.getAllFitnessIntegral()
        maxFitness = max(maxFitness, max(fitness))
        minFitness = min(minFitness, min(fitness))
        print("代数:" + str(iterations) + "  最好值:" +
              str(maxFitness / population.VNTimes))
        m.write("iterations " + str(iterations) + ": " +
                str(maxFitness / population.VNTimes) + '\n')
        f.write("iterations " + str(iterations + 1) + '\n')
        f.write(str(fitness) + '\n')
        points.append([iterations, maxFitness])
        tempIndividulalList = []
        while (len(tempIndividulalList) < population.sizeOfPopulation):
            individualForCrossover = population.select()  # 选择--锦标赛选择法
            if len(individualForCrossover) != 2:
                print("select error! " + str(len(individualForCrossover)))
                exit(1)
            individualForMutate = population.crossover(
                individualForCrossover)  # 交叉随机点位的交叉操作,交叉完毕之后判断是否满足约束
            if (len(individualForMutate) == 2):
                population.mutate(individualForCrossover)
                for i in range(len(individualForCrossover)):
                    tempIndividulalList.append(individualForCrossover[i])
        tempFitness = []
        for i in range(len(tempIndividulalList)):
            fit = tempIndividulalList[i].getFitnessWithIntegral()
            tempFitness.append(fit)
        for i in range(population.sizeOfPopulation):
            if tempIndividulalList == None:
                print(str(i) + "个体是空!")
                exit(1)
            if (tempFitness[i] > fitness[i]):
                population.individualList[i] = copy.deepcopy(
                    tempIndividulalList[i])
        iterations += 1
    m.write(str(points) + '\n')
    f.close()
    m.close()
    # 返回画图所需的数据
    result = Result(fileName, minFitness, points, maxFitness)
    return result