请问如何用python模拟基于遗传算法的回归测试?

比如有以下数组:
[0,0,0,0,0,0,1,0]
[1,1,0,1,0,1,1,1]
[0,0,0,1,0,0,1,0]
[1,0,0,0,0,0,1,1]
[1,1,0,1,0,1,1,1]
[1,1,0,1,0,0,1,1]
[1,0,1,0,1,1,1,0]
[0,0,0,0,0,0,0,0]
数组的每一位代表一个测试结果。
三个数组的组合保证三个数组每一位都至少有一个1。
原数组不可变异,只能变异数组标号。
每个新的子代要打印出被组合在一起的是第几个数组。

代码和运行结果已给出,请采纳
我的博客内有一篇关于遗传算法的粗略解释,有兴趣也可以看一下。https://blog.csdn.net/soar3033/article/details/101682243

import random

source=[[0,0,0,0,0,0,1,0],
[1,1,0,1,0,1,1,1],
[0,0,0,1,0,0,1,0],
[1,0,0,0,0,0,1,1],
[1,1,0,1,0,1,1,1],
[1,1,0,1,0,0,1,1],
[1,0,1,0,1,1,1,0],
[0,0,0,0,0,0,0,0]]  #基因源

fathers=[] #父代list
childs=[]  #子代list
values=[]  #评分list
l=[] #去重list
flag=False #出现符合基因配合

def makeFathers():
    for i in range(10): #随机生成10个父代
        fathers.append([random.randint(0,7),random.randint(0,7),random.randint(0,7)]) #随机生成父代的基因号

def change(father): #对父代进行变异
    for i in range(1): #每个父代产生1个子代
        child=father.copy() #子代复制父代基因       
        for i in range(3): #遍历父代的三个基因组
            if(random.randint(0,10)>7): #每个基因组30%的概率变异
                child[i]=random.randint(0,7) #变异为基因源内的某个基因组
            print("子代三个基因分别为第%d,%d,%d号基因" %(child[0],child[1],child[2]))
        childs.append(child) #向子代list添加子代

def calculate(child):   #评判函数
    global flag
    value=0 #初始评分
    for i in range(8): #对父代目标的各个基因位进行遍历
        if(not(source[child[0]][i]==1 or source[child[1]][i]==1 or source[child[2]][i]==1)): #如果某个基因位三个基因组都不为1,则评分+1
            value+=1
    if value==0:  #评分为零说明基因符合要求
        flag=True
        flag_again=False
        for i in child:   #去重判断        
            if i in l:
                flag_again=True
        if not flag_again: #不重复则输出
            child.sort()   #排序 方便下一步判断
            for i in range(2):
                if child[2-i]==child[1-i]:   #如果后续基因和前面一样 则舍弃后续。例如【1,1,3】 变为【1,3】
                    del(child[2-i])
            if len(child)==3:
                print("出现符合基因,基因为%d,%d,%d号基因" % (child[0],child[1],child[2]))
            if len(child)==2:
                print("出现符合基因,基因为%d,%d号基因" % (child[0],child[1]))
        for i in child:  #将基因添加到去重列表
            l.append(i)
    return value

def make(): #交配
    tmp=[]
    for i in range(len(fathers)-1):
        for j in range(len(fathers)-1-i):  #将两两father的基因重组
            tmp.append([fathers[i][0],fathers[i][1],fathers[j][2]])
    return tmp

makeFathers()  #生成父代
while 1:  #开始进化循环
    childs=[]  #清空上一代子代
    fathers=make()  #交配产生子代,并放入fathers暂存
    for i in fathers: #遍历父代
        change(i)   #基因编号变异
    values=[]  #清空上一次的评分
    for i in childs:
        values.append(calculate(i))
    if flag:  #如果发现符合的变异则停止进化
        break 
    values_copy=values.copy() #复制评分
    values_copy.sort()  #排序评分
    value=values_copy[9] #取第十名的评分
    fathers=[]  #清空上一代父代
    for i in range(len(childs)):
        if values[i]<=value:
            fathers.append(childs[i])   #如果子代的评分小于第十位评分则作为新父代
            if len(fathers)==10:   #如果已有10个新父代,跳出
                break



运行结果
图片说明

https://ask.csdn.net/questions/864358 一样的问题,这是之前的程序

# -*- coding: UTF-8 -*-
from itertools import combinations

a1=[ 1,0,0,1,0,0,0,1]
a2=[ 0,0,0,0,1,1,1,1]
a3=[ 0,1,0,1,0,1,0,0]
a4=[ 1,0,1,1,1,1,0,0]
a5=[ 1,1,1,1,1,1,1,0]
a6=[ 0,0,0,0,0,0,0,1]
a=[a1,a2,a3,a4,a5,a6]
al = list(combinations(list(i for i in range(0, 6)),3))
used = []
for i in al:
    flag = False
    if not(i[0] in used or i[1] in used or i[2] in used):
        flag = True
        for j in range(7):
            if (a[i[0]][j] + a[i[1]][j] + a[i[2]][j] == 0):
                flag = False
                break
    if flag:
        used.append(i[0])
        used.append(i[1])
        used.append(i[2])
        print(' '.join(map(str, a[i[0]])) + "; " + ' '.join(map(str, a[i[1]])) + "; " + ' '.join(map(str, a[i[2]])))

你起码给出一个预期的结果,因为你的描述模棱两可。