用遗传算法写一个多参量离散变量全局优化算法代码
以下是一个使用遗传算法进行多参数离散变量全局优化的示例代码:
import random
# 定义目标函数(这里以一个简单的多参数离散变量函数为例)
def objective_function(x):
return sum(x)
# 定义遗传算法参数
population_size = 100 # 种群大小
num_generations = 100 # 迭代代数
mutation_rate = 0.01 # 变异率
num_variables = 5 # 变量个数
variable_domain = [0, 1, 2, 3, 4] # 变量取值范围
# 初始化种群
population = []
for _ in range(population_size):
individual = [random.choice(variable_domain) for _ in range(num_variables)]
population.append(individual)
# 遗传算法主循环
for generation in range(num_generations):
# 计算适应度
fitness_scores = [objective_function(individual) for individual in population]
# 选择
selected_population = []
for _ in range(population_size):
# 锦标赛选择,选择两个个体中适应度更高的个体
tournament_size = 5
tournament_individuals = random.sample(list(enumerate(population)), tournament_size)
tournament_fitness_scores = [fitness_scores[i] for (i, _) in tournament_individuals]
selected_individual = tournament_individuals[tournament_fitness_scores.index(max(tournament_fitness_scores))][1]
selected_population.append(selected_individual)
# 交叉
crossover_population = []
for _ in range(population_size):
parent1, parent2 = random.sample(selected_population, 2)
crossover_point = random.randint(1, num_variables - 1)
child = parent1[:crossover_point] + parent2[crossover_point:]
crossover_population.append(child)
# 变异
mutated_population = []
for individual in crossover_population:
if random.random() < mutation_rate:
mutation_point = random.randint(0, num_variables - 1)
individual[mutation_point] = random.choice(variable_domain)
mutated_population.append(individual)
# 更新种群
population = mutated_population
# 打印最优解
best_individual = max(population, key=objective_function)
print("最优解:", best_individual)
print("最优值:", objective_function(best_individual))
这个示例代码中,目标函数定义为一个简单的求和函数,种群大小为100,迭代代数为100,变异率为0.01,变量个数为5,变量取值范围为[0, 1, 2, 3, 4]。种群初始化为随机的离散变量取值。然后,遗传算法进行多轮的选择、交叉和变异操作,最终得到最优解和最优值
原文地址: https://www.cveoy.top/t/topic/hAUD 著作权归作者所有。请勿转载和采集!