遗传算法求解一元函数最大值

您所在的位置:网站首页 一元二次函数python 遗传算法求解一元函数最大值

遗传算法求解一元函数最大值

2023-08-10 09:53| 来源: 网络整理| 查看: 265

最近学习了人工智能这门课,就尝试着编写了一个小程序;

话不多说直接上(具体原理就自行百度吧)

例:求一元函数的最大值 f(x) = xsin(10\pi *x)+2.0  其中 x\epsilon [-1,2]

# -*- coding: utf-8 -*- """ Created on Tue Jun 03 16:22:15 2021 @author: Overcoming """ '''求一元函数的最大值 f (x) = xsin(10  x) + 2.0 x[−1,2] ''' import random from math import * import matplotlib.pyplot as plt #没写精英解保持容易陷入局部最优? 和种群数量有关系 N = 200 Pcross = 0.75 Pchange = 0.05 def ori (N): #产生初始种群 X = [] JY1 = [] #JY2 = [] i = 0 while i>d&1 for d in range(22)][::-1] #22位数以列表存储 #JY2.append(jy2) x = (-1.0 + x*(2-(-1))/(2**22 - 1)) #原始坐标上对应的x取值 X.append(x) i+=1 return X,JY1 def Y_v(X): #计算个体适应度 Y = [] for i in range (0,len(X)): y = X[i]*sin(10*pi * X[i]) + 2.0 #适应度 Y.append(y) return Y def cross(JY1,X,N): #单点交叉产生下一代 while len(JY1)< 2*N: p = random.uniform(0,1) # 随机产生概率 if p d&1 for d in range(22)][::-1] #22位数以列表存储 JY2[k] = -JY2[k]+1 #该点突变 jy2 = [str(i) for i in JY2] JY1[k] = ''.join(jy2) x = int(JY1[k],2) X[k] = (-1.0 + x*(2-(-1))/(2**22 - 1)) #算出对应值。 return X,JY1 def P (Y): # 计算个体被挑选概率 N = len(Y) PS = [] PC = [] for i in range(0,N): ps = (Y[i]/sum(Y)) # 被选取概率 PS.append(ps) pc = sum(PS[:i]) + ps #累计概率 PC.append(pc) return PS,PC def sel (PC,N): #轮盘赌挑选新个体 l =[] k = len(l) while k < N: i = random.uniform(0,1) for j in range(0,len(PC)): if PC[j]>= i : l.append(j) break #没加break要命。。。 k = len(l) return l def diedai(X,JY1,N): T =[] Y_m = [] Y_av = [] X_m = [] m = 0 while m


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3