遗传算法是一种基于自然选择和遗传变异的优化算法,可以用于多目标优化问题。以下是一个遗传算法多目标优化的案例及实现代码。
import numpy as np
# 目标函数
def objective_function(x):
f = x[0]**2 + x[1]**2
g = (x[0] - 2)**2 + (x[1] - 2)**2
return f, g
# 初始化种群
def init_population(pop_size, dim):
population = np.random.uniform(-5, 5, (pop_size, dim))
return population
# 计算适应度
def fitness(population):
fit = np.array([objective_function(x) for x in population])
return fit
# 选择操作
def selection(population, fit):
pop_size = len(population)
idx = np.random.choice(pop_size, pop_size, replace=True, p=fit[:, 0] / np.sum(fit[:, 0]))
return population[idx]
# 交叉操作
def crossover(parent1, parent2):
child = (parent1 + parent2) / 2
return child
# 变异操作
def mutation(child, mutation_rate):
dim = len(child)
if np.random.rand() < mutation_rate:
idx = np.random.randint(dim)
child[idx] = np.random.uniform(-5, 5)
return child
# 遗传算法
def genetic_algorithm(pop_size, dim, generations, mutation_rate):
population = init_population(pop_size, dim)
for _ in range(generations):
fit = fitness(population)
new_population = []
for _ in range(pop_size):
parent1 = population[np.random.randint(pop_size)]
parent2 = population[np.random.randint(pop_size)]
child = crossover(parent1, parent2)
child = mutation(child, mutation_rate)
new_population.append(child)
population = np.array(new_population)
fit = fitness(population)
best_idx = np.argmin(fit[:, 0])
return population[best_idx], fit[best_idx]
你可以使用以下方式调用这个函数:
pop_size = 50
dim = 2
generations = 100
mutation_rate = 0.1
best_solution, best_fitness = genetic_algorithm(pop_size, dim, generations, mutation_rate)
print("Best solution:", best_solution)
print("Best fitness:", best_fitness)