多父部分映射交叉(MPPMX) - 伪代码无限循环?

时间:2015-12-31 14:18:40

标签: python-2.6 genetic-algorithm crossover

我有以下伪代码: http://i.imgur.com/ls6NECn.png?1

7 :我们使用bool值创建一个数组(显然,文中未对此进行解释)。我们分配当前值(value = index)“true”

18 :此时,我们可以有一个数组,其中所有值都可以为“true”并达到k = len(父项)的条件 19-22 :这会创建一个无限循环

我错过了什么吗?

论文:用于组合优化问题的部分映射交叉的多父扩展。 Chuan-Kang Tinga ,, Chien-Hao Lee,Chien-Nan Leeb,

http://www.sciencedirect.com/science/article/pii/S0957417409006800

//编辑:这是我的代码PYTHON-2.6

def MappingListDetermination(parents):
    mapping_list = []
    startparent = parents[random.sample(xrange(0, len(parents)), 1)[0]]
    ptr = random.sample(xrange(0, len(startparent)), 1)[0]
    temp_value = startparent[ptr]
    boolean = [False] * listSize
    for j in xrange(0,len(startparent)):
        mapping_list.append(temp_value)
        boolean[temp_value-1] = True
        arr = random.sample(xrange(0, n), n)
        if arr[0] == parents.index(startparent):
          arr[0] = arr[random.sample(xrange(1, len(arr)), 1)[0]]
        endparent = parents[arr[0]]
        ptr = endparent.index(temp_value)
        k = 0
        while((boolean[startparent[ptr]-1] is True) and (k is not len(parents)-1)):
            k = k + 1           
            startparent = parents[arr[k]]
        if((boolean[startparent[ptr]-1] is True) and (k is len(parents)-1)):
            while(boolean[startparent[ptr]-1] is True ):
                startparent = parents[random.sample(xrange(0, len(parents)), 1)[0]]
                ptr = startparent[random.sample(xrange(0, len(startparent)), 1)[0]]-1
        temp_value = startparent[ptr]ere

1 个答案:

答案 0 :(得分:2)

我刚刚下载了一份纸张并撇去了它。它确实看起来很有趣,但你确定boolean没有定义。在上下文中,它似乎是一个数组,其长度是父项的数量,它跟踪在算法的特定阶段选择了哪些父项。因此 - 它从所有条目false开始,在伪代码中的第7行之后只有一个条目是true - 因此没有无限循环的危险(假设至少有三个父项)

随着伪代码的出现 - 这不是非常有用。我建议几乎忽略伪代码,而是集中在周围的讨论和图表上,并尝试使用像Python这样的语言来实现它,你应该能够获得比文章伪代码更短的工作函数。