遗传算法多目标优化案例及实现代码

遗传算法是一种基于自然选择和遗传变异的优化算法,可以用于多目标优化问题。以下是一个遗传算法多目标优化的案例及实现代码。

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值