遗传算法python代码(附详细注释)

本文提供了遗传算法的Python实现代码,并附带详细注释,帮助理解算法原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

遗传算法python代码(附详细注释)

#代码参考:https://blog.youkuaiyun.com/ha_ha_ha233/article/details/91364937
import numpy as np #用于数据操作:【X = np.linspace(*X_BOUND, 100)  #将列表传入收集参数,完成解包】【 Y = np.linspace(*Y_BOUND, 100)】【X, Y = np.meshgrid(X, Y)  #生成网格点坐标矩阵,每个二维矩阵表示一个维度】
import matplotlib.pyplot as plt #用于画图,可画二维【fig = plt.figure()】、三维【ax = fig.add_subplot(111, projection='3d')】;亦可上色【ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap = plt.get_cmap('rainbow'))】
from matplotlib import cm   #绘制3d曲面时用于给图上色:【ax.plot_surface(X, Y, Z, rstride = 1, cstride = 1, cmap = cm.coolwarm)】
from mpl_toolkits.mplot3d import Axes3D #用于画三维图,将二维图变换为三维图: 【fig = plt.figure()】  【ax = Axes3D(fig)】


DNA_SIZE = 24
POP_SIZE = 200
CROSSOVER_RATE = 0.8
MUTATION_RATE = 0.005
N_GENERATIONS = 50
X_BOUND = [-3, 3]
Y_BOUND = [-3, 3]


def F(x, y):
    return 3 * (1 - x) ** 2 * np.exp(-(x ** 2) - (y + 1) ** 2) - 10 * (x / 5 - x ** 3 - y ** 5) * np.exp(
        -x ** 2 - y ** 2) - 1 / 3 ** np.exp(-(x + 1) ** 2 - y ** 2)


def translateDNA(pop):  # pop表示种群矩阵,一行表示一个二进制编码表示的DNA,矩阵的行数为种群数目
    x_pop = pop[:, 1::2]  # 奇数列表示X
    y_pop = pop[:, ::2]  # 偶数列表示y
    '''
    dot()表示矩阵相乘;*表示点积与MATLAB.*相似
    '''
    # pop:(POP_SIZE,DNA_SIZE)*(DNA_SIZE,1) --> (POP_SIZE,1)
    x = x_pop.dot(2 ** np.arange(DNA_SIZE)[::-1]) / float(2 ** DNA_SIZE - 1) * (X_BOUND[1] - X_BOUND[0]) + X_BOUND[0]   #dot()表示矩阵相乘;*表示点积与MATLAB.*相似
    y = y_pop.dot(2 ** np.arange(DNA_SIZE)[::-1
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值