예제 #1
0
    def iteration(self):
        """
        算法迭代主程序
        :return: 最后迭代完成的排序,去重的种群
        """
        node_count = len(self.read_json())
        pop = population(self.pop_size, self.individuals_num, node_count)
        node_dirt = self.read_json()
        func_obj = MinMax2(pop, node_dirt)

        for i in range(self.iterations_num):
            copy_pop = pop.copy()
            selection(pop, func_obj)
            crossover(pop, self.cross_probability)
            mutation(pop, self.mutation_probability, node_count - 1)
            origin_pop = pop
            temp_pop = vstack((copy_pop, origin_pop))
            func_obj = MinMax2(temp_pop, node_dirt)
            pop = dominanceMain(temp_pop, func_obj)
            print("第 %d 次迭代" % i)

        # estimate(pop, func_obj)
        pop_node = array(list(set([tuple(sorted(t))
                                   for t in pop])))  # 个体按数值大小排序, 去重
        return pop_node
    for i in range(N):
        r = random()
        n = randint(0, V // 2)  # 在个体的前半段随机选取一个点进行变异
        m = randint(V // 2, V - 1)  # 在个体的后半段随机选取一个点进行变异
        if r <= belta:
            if population[i][n] + 1 <= max_num:
                population[i][n] = population[i][n] + 1  # 整数编码,随机+1或者减1

            if population[i][m] - 1 >= 0:
                population[i][m] = population[i][m] - 1
    for i in range(N):
        m = len(set(population[i]))
        # print(m)
        if m < V:
            # print(population[i],old_population[i])
            population[i] = old_population[i]


# 以下是测试用例
if __name__ == "__main__":
    from numpy import random
    random.seed(0)
    xN = 5
    yN = 3
    belta = 1

    p = population(4, 7)
    print(p)
    mutation(p, belta, 29)
    print(p)
예제 #3
0
    V = population.shape[1]  # 列

    for i in range(N - 1):
        r = random()
        if r < alfa:
            i_p = V // 2
            for n in range(i_p, V):  # 选择是在个体一半处进行交叉,交换两个个体的后半段
                mid = population[i][n]
                population[i][n] = population[i + 1][n]
                population[i + 1][n] = mid
    # for i in range(N-1):
    # population[i]=np.sort(population[i])    # 个体基因大小的排序
    for i in range(N):
        m = len(set(population[i]))
        if m < V:
            population[i] = old_population[i]


# 以下是测试用例
if __name__ == "__main__":
    from numpy import random
    random.seed(0)
    xN = 5
    yN = 3
    alfa = 0.8
    p = population(5, 6, 13)

    print(p)
    crossover(p, alfa)
    print(p)
        N = ceng_population.shape[0]
        n = len(array(list(set([tuple(t) for t in ceng_population]))))
        print("第 ", i, "层的重复率:", n / N, "--该层个体数量:", N, "--不重复个体数量:", n)

    print(len(indicate))
    # 返回新种群
    return population[indicate]


if __name__ == "__main__":
    #np.random.seed(0)
    #random.seed(0)     # 显示此行会固定初始化的种群
    #from function.funUserDefine import *
    #population=np.random.rand(10, 3)
    #print(population)
    #functionObject=ZDT1(population)
    #print(functionObject)
    #print(dominanceMain(population, functionObject))

    print("#################################")

    p = population(20, 3, 94)
    #print(p)
    from function.funUserDefine import *
    f = MinMax2(p)
    #print(f.objFun_1())
    #print(f.objFun_2())
    #d = dominanceMain(p, f)
    d = dominanceMain(p, f)
    print(d)
예제 #5
0
                monitored = monitored + float(pDirt[str(i)][3])
            # 2 单以管长来计算
            for i in monitorednode:
            monitored = monitored + float(pDirt[str(i)][2])
            '''
            monitored = 0
            for i in monitored_node:
                monitored = monitored + float(node_dirt[str(i)][2])
            #monitored = len(monitorednode)*(1/66383)       # 1.平均概率

            #monitored = len(monitorednode)/len(pDirt)
            unmonitored = 1 - monitored
            unmonitored = float('%.3f' % unmonitored)
            unmonitored_result.append(unmonitored)
        return unmonitored_result


# 测试函数  如下
if __name__ == "__main__":
    from population_init import population
    import numpy as np
    import json
    jsonFile = "F:\\AWorkSpace\\data\\3628node.json"
    with open(jsonFile, "r") as f:
        nodeJson = json.load(f)
    nodeDirt2 = json.loads(nodeJson)
    p = population(500, 100, 3628)
    m3 = MinMax2(p, nodeDirt2)
    print(m3.objFun_1())
    print(m3.objFun_2())