纯Python实现人工智能

本文介绍如何仅使用Python实现一个基于neuro-evolution的人工智能,该AI能学习躲避屏幕上方的飞机。通过遗传算法不断优化神经网络,经过多代进化,AI的性能逐渐提高。起始的AI表现可能不佳,但经过几百代的进化,AI能够成功地躲飞机。
摘要由CSDN通过智能技术生成
                                   
               

很久以前微信流行过一个小游戏:打飞机,这个游戏简单又无聊。在2017年来临之际,我就实现一个超级弱智的人工智能(AI),这货可以躲避从屏幕上方飞来的飞机。本帖只使用纯Python实现,不依赖任何高级库。

本文的AI基于neuro-evolution,首先简单科普一下neuro-evolution。从neuro-evolution这个名字就可以看出它由两部分组成-neuro and evolution,它是使用进化算法(遗传算法是进化算法的一种)提升人工神经网络的机器学习技术,其实就是用进化算法改进并选出最优的神经网络。如果你觉得这篇文章看起来稍微还有些吃力,或者想要系统地学习人工智能,那么推荐你去看床长人工智能教程。非常棒的大神之作,教程不仅通俗易懂,而且很风趣幽默。点击这里可以查看教程。

neuro-evolution

定义一些变量:


  
  
  
  1. import math
  2. import random
  3. # 神经网络3层, 1个隐藏层; 4个input和1个output
  4. network = [ 4, [ 16], 1]
  5. # 遗传算法相关
  6. population = 50
  7. elitism = 0.2
  8. random_behaviour = 0.1
  9. mutation_rate = 0.5
  10. mutation_range = 2
  11. historic = 0
  12. low_historic = False
  13. score_sort = -1
  14. n_child = 1
  • 1

 

定义神经网络:

 


  
  
  
  1. # 激活函数
  2. def sigmoid(z):
  3. return 1.0/( 1.0+math.exp(-z))
  4. # random number
  5. def random_clamped():
  6. return random.random() 2-1
  7. # "神经元"
  8. class Neuron():
  9. def init(self):
  10.   self.biase = 0
  11.   self.weights = []
  12. def init_weights(self, n):
  13.   self.weights = []
  14.   for i in range(n):
  15.    self.weights.append(random_clamped())
  16. def repr(self):
  17.   return ‘Neuron weight size:{}  biase value:{}’.format(len(self.weights), self.biase)
  18. # 层
  19. class Layer():
  20. def init(self, index):
  21.   self.index = index
  22.   self.neurons = []
  23. def init_neurons(self, n_neuron, n_input):
  24.   self.neurons = []
  25.   for i in range(n_neuron):
  26.    neuron = Neuron()
  27.    neuron.init_weights(n_input)
  28.    self.neurons.append(neuron)
  29. def repr(self):
  30.   return ‘Layer ID:{}  Layer neuron size:{}’.format(self.index, len(self.neurons))
  31. # 神经网络
  32. class NeuroNetwork():
  33. def init(self):
  34.   self.layers = []
  35. # input:输入层神经元数 hiddens:隐藏层 output:输出层神经元数
  36. def init_neuro_network(self, input, hiddens , output):
  37.   index = 0
  38.   previous_neurons = 0
  39.   # input
  40.   layer = Layer(index)
  41.   layer.init_neurons(input, previous_neurons)
  42.   previous_neurons = input
  43.   self.layers.append(layer)
  44.   index += 1
  45.   # hiddens
  46.   for i in range(len(hiddens)):
  47.    layer = Layer(index)
  48.    layer.init_neurons(hiddens[i], previous_neurons)
  49.    previous_neurons = hiddens[i]
  50.    self.layers.append(layer)
  51.    index += 1
  52.   # output
  53.   layer = Layer(index)
  54.   layer.init_neurons(output, previous_neurons)
  55.   self.layers.append(layer)
  56. def get_weights(self):
  57.   data = { ‘network’:[], ‘weights’:[] }
  58.   for layer in self.layers:
  59.    data[ ‘network’].append(len(layer.neurons))
  60.    for neuron in layer.neurons:
  61.     for weight in neuron.weights:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值