遗传算法的应用实例python实现,人工智能遗传算法例题

  遗传算法的应用实例python实现,人工智能遗传算法例题

  本文主要为大家介绍python人工智能遗传算法实例分析。有需要的朋友可以借鉴一下,希望能有所帮助。祝大家进步很大,早日升职加薪。

  00-1010一、实验目的二。实验原则三。实验条件四。实验内容五、实验结果

  

目录

  熟悉遗传算法的原理、过程和编码策略,运用遗传算法解决函数优化问题,了解求解过程,检验主要参数对结果的影响。

  

一、实验目的

  遗传算法的基本思想是基于模仿生物遗传学的遗传过程。它用基因表示问题的参数,用染色体(计算机中用二进制代码表示)表示问题的解,从而得到一组染色体不同的个体。这个群体在特定问题的环境中生存和竞争,适者生存的机会最大,是由个体组成的群体。后代随机继承了亲代的最佳特征,也在生活环境的控制下延续了这一过程。种群的染色体会逐渐适应环境,不断进化,最终收敛到一个最适应环境的相似个体家族,即得到问题的最优解。

  

二、实验原理

  蟒蛇3,蟒蛇3,皮查姆

  

三、实验条件

  将matplotlib.pyplot作为plt导入

  随机导入

  导入数学

  #计算功能

  def f(参数):

  返回f2(参数)

  定义f1(参数):

  return(3-(math . sin(2 * args[0]))* 2-(math . sin(2 * args[1]))* 2)

  定义f2(参数):

  x=1

  对于范围内的I(len(args)):

  z=0

  对于范围(5):内的j

  z=(j 1)* math . cos((j 1)1)* args[I](j 1))

  x *=z

  返回x

  #自适应功能

  定义s(x):

  返回s2(x)

  定义s1(x):

  return math.exp(-abs(x-1))

  定义s2(x):

  return math.exp(-abs(x 187))

  #计算二进制序列表示的值

  解码并计算值。

  群体染色体

  染色体长度

  最大值、最小值上限和下限

  Div分界点

  def b2d(b,chrom_length,max_value,min_value,div):

  rwno=[]

  #因为染色体中有多个变量,所以需要div来划分。

  对于范围内的I(len(div)):

  如果i==0:

  星号=0

  end=div[i]

  else:

  star=div[i-1] 1

  end=div[i]

  t=0

  对于在范围内(星形,结束): #分离参数[1,2,34,5,6]

  t=b[j] * (math.pow(2,j - star))

  t=t * max_value/(math.pow(2,end - star 1) - 1) - min_value

  rwno .追加(t)

  返回rwno #这是一个列表

  计算当前函数值。

  群体染色体

  染色体长度

  最大值、最小值最大值和最小值

  Divid分割

  def calobjValue(group,chrom_length,max_value,min_value,divid):

  obj_value=[]

  对于范围内的I(透镜(组)):

  X=b2d (group [I],chrom _ length,max _ value,min _ value,divid) #这个里面可能有多个变量。

  obj_value.append(f(x))

  返回对象值

  #获取健身值

  定义校准值(对象值):

  fit_value=[]

  因为我我

  n range(len(obj_value)):

   temp = s(obj_value[i]) # 调用适应函数计算

   fit_value.append(temp)

   return fit_value

  #累计适应值方便计算平均

  def sum_fit(fit_value):

   total = 0

   for i in range(len(fit_value)):

   total += fit_value[i]

   return total

  # 转轮盘选择法

  def selection(group, fit_value):

   newfit_value = [] #[ [[染色体], [锚点]],... ]

   newgroup = [] #[ [父], [母], [父], [母],....]

   # 适应度总和

   total_fit = sum_fit(fit_value)

   # 设置各个的锚点

   t = 0

   for i in range(len(group)):

   t += fit_value[i]/total_fit

   newfit_value.append([group[i], t])

   # 转轮盘选择法

   for i in range(len(newfit_value)):

   parents = len(newfit_value) # 初始化指针

   r = random.random() #指针

   for j in range(len(newfit_value)):#看看指针指到睡了

   if newfit_value[j][1] > r:

   parents = j

   break

   newgroup.append(newfit_value[parents][0])

   return newgroup

  # 交配

  def crossover(group, fit_value, pc):

   parents_group = selection(group, fit_value) #[ [[父], [母]],....]

   group_len = len(parents_group)

   for i in range(0, group_len, 2):

   if(random.random() < pc): # 看看是否要交配

   cpoint = random.randint(0, len(parents_group[0])) # 随机交叉点

   temp1 = []

   temp2 = []

   temp1.extend(parents_group[i][0:cpoint])

   temp1.extend(parents_group[i+1][cpoint:len(parents_group[i])])

   temp2.extend(parents_group[i+1][0:cpoint])

   temp2.extend(parents_group[i][cpoint:len(parents_group[i])])

   group[i] = temp1

   group[i+1] = temp2

  # 基因突变

  def mutation(group, pm):

   px = len(group)

   py = len(group[0])

   for i in range(px): # 遍历

   if(random.random() < pm):

   mpoint = random.randint(0, py-1) # 取要变异哪个

   if(group[i][mpoint] == 1):

   group[i][mpoint] = 0

   else:

   group[i][mpoint] = 1

  找出最优解和最优解的基因编码

  group 种群染色去

  fit_value 种群适应

  def best(group, fit_value):

   px = len(group)

   best_in = group[0]

   best_fit = fit_value[0]

   for i in range(1, px):

   if(fit_value[i] > best_fit):

   best_fit = fit_value[i]

   best_in = group[i]

   #print(best_in)

   return [best_in, best_fit]

  创建初代种群

  group_size 种群大小

  chrom_length 染色体长度

  def getFisrtGroup(group_size, chrom_length):

   #print(初代种群:)

   group = []

   for i in range(group_size):

   temp = []

   for j in range(chrom_length):

   temp.append(random.randint(0, 1))

   group.append(temp)

   #print(group)

   return group

  generation = 50 # 繁衍代数(数量越小,出结果脍,迭代次数越少)

  group_size = 400 # 染色体数量,偶数

  max_value = 20 # 范围

  min_value = 10 # 偏移修正

  chrom_length = 800 # 染色体长度

  divid = [399, chrom_length-1] # 输入值分界点, 最后一位必须是染色体长度

  pc = 0.7 # 交配概率

  pm = 0.1 # 变异概率

  results = [] # 存储每一代的最优解

  fit_value = [] # 个体适应度

  points = [] #多个最优解

  #生成初代

  group = getFisrtGroup(group_size, chrom_length)

  for i in range(generation):

   if i > 100:

   pm = 0.01

   if i > 1000:

   pm = 0.001

   obj_value = calobjValue(group, chrom_length, max_value, min_value, divid) # 个体评价

   fit_value = calfitValue(obj_value) # 获取群体适应值

   best_individual, best_fit = best(group, fit_value) # 返回最优基因, 最优适应值

   xx = b2d(best_individual, chrom_length, max_value, min_value, divid)

   if( abs(f(xx)+186.730909) < 0.000001):#找到最优解

   flag = False

   for p in points:

   if( (abs(xx[0]-p[0]) < 0.1) and (abs(xx[1]-p[1]) < 0.1) ):#剔除重复解

   flag = True

   break

   if flag == False:

   print(xx)

   points.append(xx)

   results.append([i, best_fit, b2d(best_individual, chrom_length, max_value, min_value, divid), best_individual]) #加进坐标里

   crossover(group, fit_value, pc) # 交配

   mutation(group, pm) # 变异

  #results.sort(key=lambda x:x[1])

  rank = sorted(results, key=lambda x:x[1])

  #print(\n, rank[-1])

  #print(results)

  x = b2d(rank[-1][3], chrom_length, max_value, min_value, divid)

  #最终结果

  print("f(x) = " , f(x) , "x = " , x , " 染色体 = ", rank[-1][3], " 适应值 = ", rank[-1][1], "代数:", rank[-1][0])

  #输出适应图

  X = []

  Y = []

  for i in range(generation):

   X.append(i)

   Y.append(results[i][1])

  plt.plot(X, Y)

  plt.show()

  

  

  

五、实验结果

  

  以上就是python人工智能遗传算法示例解析的详细内容,更多关于python人工智能遗传算法的资料请关注盛行IT软件开发工作室其它相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • chatgpt是什么?为什么这么火?
  • 如何看待马斯克等全球千名科技人士联名呼吁暂停更强大的AI开发?
  • ChatGPT为什么注册不了?OpenAI ChatGPT的账号哪里可以注册?
  • OpenAI ChatGPT怎么注册账号?ChatGPT账号注册教程
  • chatgpt什么意思,什么是ChatGPT ?
  • Tiamat人工智能绘画网站,Tiamat自动作图生成器,网址是多少?
  • 盗梦师人工智能绘画网站,盗梦师自动作图生成器,网址是多少?
  • 无界版图人工智能绘画网站,无界版图自动作图生成器,网址是多少?
  • 滴墨社区人工智能绘画网站,滴墨社区自动作图生成器,网址是多少?
  • draft.art官网网址是多少?Draft人工智能绘画网站,Draft art自动作图生成器
  • 6pen.art人工智能绘画网站,6pen.art自动作图生成器,网址是多少?
  • 文心一格人工智能绘画网站,文心一格自动作图生成器,网址是多少?
  • NovelAI人工智能绘画网站,NovelAI自动作图生成器,网址是多少?
  • Parti人工智能绘画网站,Parti自动作图生成器,网址是多少?
  • Disco Diffusion 人工智能绘画网站,Disco Diffusion 自动作图生成器,网址是多少?
  • 留言与评论(共有 条评论)
       
    验证码: