python遗传算法找到了最优解

python遗传算法找到了最优解,python,genetic,Python,Genetic,我解释说,我正试图开发一个程序,根据接收到的参数对系统进行优化。我的程序将不得不改变这些参数,试图找到最好的组合 下面是一个简化我的问题的代码: parameters=[["toto1","toto2","toto3"],["tutu1","tutu2","tutu3"],["titi1","titi2","titi3"],["tata1","tata2","tata3"]] def MySysteme(param1,param2,param3,param4): result=0

我解释说,我正试图开发一个程序,根据接收到的参数对系统进行优化。我的程序将不得不改变这些参数,试图找到最好的组合

下面是一个简化我的问题的代码:

parameters=[["toto1","toto2","toto3"],["tutu1","tutu2","tutu3"],["titi1","titi2","titi3"],["tata1","tata2","tata3"]]

def MySysteme(param1,param2,param3,param4):
    result=0

    for i in range(0,len(param1)):
        result+=ord(param1[i])

    for i in range(0,len(param2)):
        result+=ord(param1[i])

    for i in range(0,len(param3)):
        result+=ord(param1[i])

    for i in range(0,len(param4)):
        result+=ord(param1[i])

    return result

print(MySysteme(parameters[0][0],parameters[1][2],parameters[2][2],parameters[3][0]))
print(MySysteme(parameters[1][0],parameters[2][2],parameters[3][2],parameters[0][0]))
print(MySysteme(parameters[3][1],parameters[1][2],parameters[2][2],parameters[0][0]))


#how to find the highest value?
我试图(尝试)找到最高的数字,而不天真地测试所有参数。因此使用了遗传算法。1参数是列表参数中包含的列表,列表的内容是my参数的变量

知道在my function/my system中,不应该有2倍相同的参数,例如,不应该出现这种情况:打印(MySystem(参数[1][0],参数[1][0])或此打印(MySystem(参数[2][1],参数[2][0]))

另一方面,参数数量包含在1和4中(可以有1、2、3或4个参数)

为了解决我的问题,这里是我考虑的数据:个体:它是一个带有名称的参数变量(“toto1”、“tata3”、“toto2=12”…等等)。总体:参数适应度的变量集:它是根据参数的函数结果电路:一组参数

但与商业旅行者不同,我没有起始数据=>也就是说,我没有GPS坐标。正是在这个层次上,我被困在解决我的问题

有人能帮我吗

编辑:

我一直在寻找一些例子,说明如何使用Python中的遗传算法方法找到函数达到最大值的点。我看了这个教程

我的目标是找到“mySysteme”函数的较小数字 我设置了一个新代码: 我重新解释了一个简单的问题。J'ai遇到了联合国代码加上complet,再加上clair avec和algo génétique

from random import randint, random
from operator import add
from functools import reduce

parameters=[["toto123","toto27","toto3000"],["tu","tut","tutu378694245"],["t","choicezaert","titi3=78965"],["blabla","2","conjoncture_is_enable"]]

def individual(length, min, max):
    return [ randint(min,max) for x in range(length) ]

def population(count, length, min, max):
    return [ individual(length, min, max) for x in range(count) ]

def fitness(individual, target):
    sum = reduce(add, individual, 0)
    return abs(target-sum)

def grade(pop, target):
    individu_number_parameters=randint(1, len(parameters)-1)
    for j in range(0,individu_number_parameters):
        position=randint(1, len(parameters)-1)
        parameter=parameters[position]
        if isinstance(parameter, list):
            parameter=parameters[position][randint(1, len(parameters[position])-1)]
    result=0

    for i in range(0,len(parameter)):
        result+=ord(parameter[i])
    return result

def evolve(pop, target, retain=0.2, random_select=0.05, mutate=0.01):
    graded = [ (fitness(x, target), x) for x in pop]
    graded = [ x[1] for x in sorted(graded)]
    retain_length = int(len(graded)*retain)
    parents = graded[:retain_length]
    for individual in graded[retain_length:]:
        if random_select > random():
            parents.append(individual)
    for individual in parents:
        if mutate > random():
            pos_to_mutate = randint(0, len(individual)-1)
            individual[pos_to_mutate] = randint(
                min(individual), max(individual))
    parents_length = len(parents)
    desired_length = len(pop) - parents_length
    children = []
    while len(children) < desired_length:
        male = randint(0, parents_length-1)
        female = randint(0, parents_length-1)
        if male != female:
            male = parents[male]
            female = parents[female]
            half = int(len(male) / 2)
            child = male[:half] + female[half:]
            children.append(child)
    parents.extend(children)
    return parents


target = 0
p_count = 100
i_length = 6
i_min = 0
i_max = 100
p = population(p_count, i_length, i_min, i_max)
fitness_history = [grade(p, target),]

for i in range(1000):
    p = evolve(p, target)
    fitness_history.append(grade(p, target))

for datum in fitness_history:
   print(datum)
print(len(fitness_history))
从随机导入randint,随机
从操作员导入添加
从functools导入reduce
参数=[“toto123”、“toto27”、“toto3000”]、[“tu”、“tut”、“TUTUTU378694245”]、[“t”、“choicezaert”、“titi3=78965”]、[“Blablabla”、“2”、“联合体启用”]
def单个(长度、最小值、最大值):
返回[randint(最小值,最大值)表示范围(长度)内的x]
def填充(计数、长度、最小值、最大值):
返回[范围内x的单个(长度、最小值、最大值)(计数)]
def适合度(个人、目标):
总和=减少(相加,单个,0)
返回abs(目标总和)
def等级(pop、目标):
个体数量参数=randint(1,len(参数)-1)
对于范围内的j(0,单个数字参数):
位置=randint(1,len(参数)-1)
参数=参数[位置]
如果isinstance(参数,列表):
参数=参数[位置][randint(1,len(参数[位置])-1)]
结果=0
对于范围(0,len(参数))中的i:
结果+=ord(参数[i])
返回结果
def进化(pop、目标、保留=0.2、随机选择=0.05、变异=0.01):
分级=[(适用性(x,目标),x)适用于pop中的x]
分级=[x[1]表示已排序(分级)中的x]
保留长度=整数(长度(分级)*保留)
父母=分级[:保留长度]
对于分级的个人[保留长度:]:
如果随机选择>随机()
父母。附加(个人)
对于父母中的个人:
如果mutate>random():
pos_to_mutate=randint(0,len(个体)-1)
个体[pos_to_mutate]=randint(
最小值(单个)、最大值(单个))
父项长度=len(父项)
所需长度=长度(pop)-父项长度
儿童=[]
而len(儿童)<所需长度:
男性=randint(0,父母长度-1)
女性=randint(0,双亲长度-1)
如果是男性!=女性:
男=父母[男]
女性=父母[女性]
一半=整数(长(公)/2)
儿童=男性[一半]+女性[一半]
children.append(child)
父母(子女)
回归父母
目标=0
p_计数=100
i_长度=6
i_min=0
i_max=100
p=总体(p_计数、i_长度、i_最小值、i_最大值)
健康史=[成绩(p,目标),]
对于范围(1000)内的i:
p=发展(p,目标)
健康史附加(等级(p,目标))
适用性历史中的数据:
打印(基准)
打印(len(健身历史))

我更新了新代码。我的问题:我想让我的程序找到更小的数字

我什么都不懂。。费曼说了一些类似的话,如果你不能解释,你就不明白。所以,请你自己先了解一下,我想找到一个最佳的解决方案,在我的建议中有一个更大的数字。使用遗传算法,你可以随机初始化你的遗传算法。除了指定问题,你还没有真正展示任何工作,我怀疑是否有人会为你的遗传算法编写代码。我更新了新代码。我的问题:我想让我的程序找到更小的数字。这看起来像是一个迭代过程,让别人为你写代码。我一点都不懂。。费曼说了一些类似的话,如果你不能解释,你就不明白。所以,请你自己先了解一下,我想找到一个最佳的解决方案,在我的建议中有一个更大的数字。使用遗传算法,你可以随机初始化你的遗传算法。除了指定问题,你还没有真正展示任何工作,我怀疑是否有人会为你的遗传算法编写代码。我更新了新代码。我的问题是:我希望我的程序找到更小的数字。这看起来像是一个迭代过程,让别人为你写代码。