亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么使用Python算法技術

發布時間:2021-11-23 16:50:24 來源:億速云 閱讀:175 作者:iii 欄目:大數據

這篇文章主要介紹“怎么使用Python算法技術”,在日常操作中,相信很多人在怎么使用Python算法技術問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么使用Python算法技術”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

開發工具

Python版本:3.6.4

相關模塊:

numpy模塊;

argparse模塊;

pygame模塊;

以及一些python自帶的模塊。


環境搭建

安裝Python并添加到環境變量,pip安裝需要的相關模塊即可。

原理簡介

遺傳算法,即:

Genetic Algorithm, GA 是一種元啟發式算法,其核心思想與達爾文的進化理論很相似。簡單而言就是物種在進化過程中,好的基因將得到保留,不好的基因將被淘汰。經過很多代的演變之后,物種當前保留下來的基因就可以看作是對當前環境適應度最好的基因了。

具體應用到我們的小恐龍小游戲上,我們設計算法的思路如下。首先,隨機生成若干個小恐龍(比如100個):

self.dinos = [Dinosaur(cfg.IMAGE_PATHS['dino']) for _ in range(self.population_size)]

每個恐龍的行動由一個小的神經網絡來控制:

self.populations = [Network() for _ in range(self.population_size)]

其中,每個神經網絡都是由兩個全連接層組成,且他們的權重矩陣都是隨機生成的:

'''define the network'''
class Network():
  def __init__(self, fc1=None, fc2=None, **kwargs):
    self.fc1 = np.random.randn(5, 16) if fc1 is None else fc1
    self.fc2 = np.random.randn(16, 2) if fc2 is None else fc2
    self.fitness = 0
  '''predict the action'''
  def predict(self, x):
    x = x.dot(self.fc1)
    x = self.activation(x)
    x = x.dot(self.fc2)
    x = self.activation(x)
    return x
  '''activation function'''
  def activation(self, x):
    return 0.5 * (1 + np.tanh(0.5 * x))

每個全連接層的輸出結果由以下函數激活以保證輸出值的范圍都在0到1之間:

怎么使用Python算法技術

網絡的輸入值有5個,分別為:

  1. 當前離小恐龍最近的障礙物與小恐龍的水平距離;

  2. 當前離小恐龍最近的障礙物離地面的高度;

  3. 當前離小恐龍最近的障礙物的寬度;

  4. 當前離小恐龍最近的障礙物的高度;

  5. 小恐龍水平方向上的奔跑速度.

畫個示意圖就是: 怎么使用Python算法技術

接著,我們讓這些神經網絡來控制對應的小恐龍進行游戲:

'''make decision for all dinos'''
def makedecision(self, x):
  threshold = 0.55
  actions = self.ai.predict(x)
  for i in range(len(actions)):
    action = actions[i]
    if self.dinos[i].is_dead:
      continue
    if action[0] >= threshold:
      self.dinos[i].jump(self.sounds)
    elif action[1] >= threshold:
      self.dinos[i].duck()
    else:
      self.dinos[i].unduck()
    self.ai.populations[i].fitness = self.dinos[i].score

直到所有的神經網絡都讓自己控制的小恐龍因為撞到路上的障礙物而死掉。接下來,我們從這些神經網絡中選出幾個讓小恐龍存活的時間最久的(比如選兩個,也就是對應控制的小恐龍得分最高的兩個):

def keepbest(self):
  self.populations.sort(key=lambda x: x.fitness, reverse=True)
  self.keeped_nets = self.populations[:self.num_keeped_nets]

讓選出的神經網絡的權重矩陣進行交叉和變異,從而生成新的一批神經網絡:

'''crossover'''
def crossover(self):
  def crossoverweight(fc1, fc2):
    assert len(fc1) == len(fc2)
    crossover_len = int(len(fc1) * random.uniform(0, 1))
    for i in range(crossover_len):
      fc1[i], fc2[i] = fc2[i], fc1[i]
    return fc1, fc2
  nets_new = []
  size = min(self.num_keeped_nets * self.num_keeped_nets, self.population_size)
  for _ in range(size):
    net_1 = copy.deepcopy(random.choice(self.keeped_nets))
    net_2 = copy.deepcopy(random.choice(self.keeped_nets))
    for _ in range(self.num_crossover_times):
      net_1.fc1, net_2.fc1 = crossoverweight(net_1.fc1, net_2.fc1)
      net_1.fc2, net_2.fc2 = crossoverweight(net_1.fc2, net_2.fc2)
      nets_new.append(net_1)
  return nets_new
'''mutate'''
def mutate(self, net):
  def mutateweight(fc, prob):
    if random.uniform(0, 1) < prob:
      return fc * random.uniform(0.5, 1.5)
    else:
      return fc
  net = copy.deepcopy(net)
  net.fc1 = mutateweight(net.fc1, self.mutation_prob)
  net.fc2 = mutateweight(net.fc2, self.mutation_prob)
  return net

同樣地,這批神經網絡每個都會分別控制一只新的小恐龍來進行游戲,直到這批新的神經網絡控制下的小恐龍再次全部死掉。此時,重復之前的動作,即選擇其中表現最好的幾個神經網絡并進行交叉變異,然后再次開始新的游戲,如此反復循環,直到得到滿意的效果。

到此,關于“怎么使用Python算法技術”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

永新县| 屯门区| 华亭县| 富锦市| 广东省| 石棉县| 永州市| 崇明县| 宕昌县| 社旗县| 麻阳| 慈利县| 保亭| 石首市| 岐山县| 卓资县| 江川县| 黔西县| 手游| 唐山市| 威海市| 柳江县| 侯马市| 宝清县| 上杭县| 永丰县| 庄河市| 响水县| 石楼县| 雷山县| 黄冈市| 枞阳县| 洛南县| 北流市| 新河县| 湟源县| 阳信县| 客服| 仙游县| 昂仁县| 南京市|