python遗传算法代码
下面是一个简单的Python遗传算法代码示例:
import random
# 遗传算法参数
POPULATION_SIZE = 100 # 种群数量
P_CROSSOVER = 0.9 # 交叉概率
P_MUTATION = 0.1 # 变异概率
MAX_GENERATIONS = 50 # 最大迭代次数
# 问题参数
TARGET = "Hello, World!" # 目标字符串
GENE_SIZE = len(TARGET) # 基因长度
# 初始化种群
def init_population():
population = []
for _ in range(POPULATION_SIZE):
individual = ''.join(random.choice('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ,.!') for _ in range(GENE_SIZE))
population.append(individual)
return population
# 计算适应度(目标字符串与个体之间的差异程度)
def fitness(individual):
score = 0
for i in range(GENE_SIZE):
if individual[i] == TARGET[i]:
score += 1
return score
# 选择操作(轮盘赌算法)
def selection(population):
total_fitness = sum(fitness(individual) for individual in population)
probabilities = [fitness(individual) / total_fitness for individual in population]
selected = random.choices(population, probabilities, k=2)
return selected[0], selected[1]
# 交叉操作(单点交叉)
def crossover(parent1, parent2):
crossover_point = random.randint(1, GENE_SIZE - 1)
child1 = parent1[:crossover_point] + parent2[crossover_point:]
child2 = parent2[:crossover_point] + parent1[crossover_point:]
return child1, child2
# 变异操作(随机选择一个位置进行变异)
def mutation(individual):
mutated_index = random.randint(0, GENE_SIZE - 1)
mutated_char = random.choice('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ,.!')
individual = individual[:mutated_index] + mutated_char + individual[mutated_index+1:]
return individual
# 主函数
def main():
population = init_population()
for generation in range(MAX_GENERATIONS):
print("Generation:", generation)
for individual in population:
print(individual)
if individual == TARGET:
print("Target found!")
return
new_population = []
while len(new_population) < POPULATION_SIZE:
parent1, parent2 = selection(population)
if random.random() < P_CROSSOVER:
child1, child2 = crossover(parent1, parent2)
parent1, parent2 = child1, child2
if random.random() < P_MUTATION:
parent1 = mutation(parent1)
parent2 = mutation(parent2)
new_population.append(parent1)
new_population.append(parent2)
population = new_population
if __name__ == '__main__':
main()
这个代码实现了一个简单的遗传算法来逼近目标字符串"Hello, World!"。代码中使用了轮盘赌算法进行选择操作,单点交叉进行交叉操作,随机选择一个位置进行变异操作。每一代都会输出当前种群中的个体,并在找到目标字符串时停止迭代。
原文地址: http://www.cveoy.top/t/topic/iMDY 著作权归作者所有。请勿转载和采集!