linux小主机玩法,遗传算法有好多有趣的玩法,不只能用来凑论文
有一款非常魔性的小游戲叫《Boxcar 2D》,游戲主要內(nèi)容是用幾何圖形和圓形的輪子組成小汽車,不斷走過一條有上下波動的“路”,看什么形狀的小車可以走的更遠。
但和大部分游戲不一樣的是,不用玩家自己手動拼裝小車,整個過程完全由算法自動進行,每次隨機生成小車,卡到路上了就重新來過。最后小車會越走越遠,整個過程中小車的形狀會越來越合適,一開始可能只是個“獨輪車”,到后期則會很接近我們生活中摩托車的樣子。
要問有什么案例能簡單明晰的體現(xiàn)出“智能”、“自學習”的概念,這款游戲一定是我的首選。而這款游戲中,應用的就是遺傳算法。
什么是遺傳算法?
簡單來說,遺傳算法是一種隨機搜索算法,主要目的是用來優(yōu)化。和自然界的遺傳一樣,遺傳算法秉持的是適者生存、優(yōu)勝劣汰。通過選擇、交叉和變異,不斷迭代出更優(yōu)秀的解法。
通過編碼,將解空間變成編碼空間,從中選擇當前較為優(yōu)秀的解當做“父母”,下一步則是將多種解的特征進行交叉,誕生下一代,最后再經(jīng)過變異成為“子嗣”。如果“子嗣”還是不能符合要求,那就再進行一次上述步驟,直到滿足要求。過程中,較差的基因就會一步步被淘汰。最后再進行解碼,就能得到我們想要的結果。
總之,這是一個枚舉的過程。就像長頸鹿的進化一樣,樹葉長在高處,每一只鹿都去嘗試吃樹葉,只有符合“標準”的長頸鹿能夠吃到食物、生產(chǎn)下來并誕生后代。
但要注意的是,這種算法很多時候不會給出一個“最優(yōu)解”,而是給出一些較為接近的次優(yōu)解,從中矮子里面拔將軍。
在哪里能看到遺傳算法?
遺傳算法經(jīng)常被用來解決一些調(diào)度類的問題,比如確定車間工程流程、飛機航線等等。工程、航行中所需要的資源消耗、時間等等權值看做“染色體”,幾種染色體排列組合,最終選擇其中的較優(yōu)方案。
此外,機器人中也會用到遺傳算法,尤其是快速定位、路徑規(guī)劃等。就像Boxcar這個游戲一樣,機器人在仿真環(huán)境中不斷嘗試接近目標,路線的優(yōu)越度隨著路線的長度減少,結合機器人對自身位置的感知,最后得出較優(yōu)解。
同時,遺傳算法也可以被應用于幫助神經(jīng)網(wǎng)絡調(diào)參數(shù),只是這種方式需要的時間太長、運算量太大,屬于性價比較低的參數(shù)調(diào)整方式。
在游戲中,也能見到遺傳算法的影子。比如說很多游戲會有在同一場景面對多輪敵人的“生存模式”,在這一模式中,敵人的屬性是會不斷增強的,有了遺傳算法,就可以根據(jù)你自身屬性的變化不斷改變敵人的屬性,以增強游戲的難度。比如說你的法術強度高,敵人就會增加法術防御度,你的攻擊穿透性高,敵人就會增加血量。這樣一來相比直接的增加屬性,可以有更好的游戲體驗。
從騙人到寫詩,遺傳算法有什么好玩的應用?
以上都是一些適用于實際場景的應用,由于遺傳算法簡單易用,我們可以看到很多娛樂化的、有趣的應用。
比如說,模仿圖形。在一款程序中,我們可以看到遺傳算法通過幾何圖形的不斷組合,最終慢慢變成接近案例圖形的樣子。
同時你還可以親自調(diào)整變異的傾向,最終成果雖然和原圖相比還有很大差距,但也不乏自己的風格。不過嘗試時就可以發(fā)現(xiàn),整個過程時間很長,某種程度上也體現(xiàn)了遺傳算法的低效。
基于上述的功能,遺傳算法還有一個非常有趣的玩法,那就是“欺騙”深度學習模型。
2014年有一篇論文曾經(jīng)寫過,深度神經(jīng)網(wǎng)絡(DNN)在圖片識別上有著很優(yōu)異的表現(xiàn)。可當用遺傳算法模擬圖片時,兩張圖片在人眼看來一模一樣,可深度神經(jīng)網(wǎng)絡卻完全識別不出來。或者遺傳算法可以模擬出一張人眼看起來是“亂碼”的圖片,卻被深度神經(jīng)網(wǎng)絡識別成正常的圖片。
這一點讓人們注意到了機器視覺和人類視覺的區(qū)別,和人類不一樣,機器還是會把圖像轉(zhuǎn)化為“數(shù)字”,再進行比對、識別。這也導致了,有時候深度神經(jīng)網(wǎng)絡會把一張噪聲圖識別成動物、建筑等等。
除了生成圖片,遺傳算法還可以生成音樂、宋詞等等。將詞語和音符輸入,讓機器隨機組合,加入人類評分機制。整個過程幾乎和“讓猴子在打字前坐幾十年可以寫出莎翁作品”的假說差不多。基本上只能用于娛樂,不太適合實操。
其實,目前遺傳算法已經(jīng)慢慢淡出了主流算法舞臺。雖然主旨是為了避開局部最優(yōu)誤區(qū),為無限解集問題尋找答案,可在實際應用時相比梯度和蒙特卡羅算法都沒有明顯的差異和優(yōu)勢,常常被視作“玄學算法”。比如計算結果的穩(wěn)定性差、求解過程沒有可復制性等等都是遺傳算法的缺點。很長一段時間里,遺傳算法都被看做只能用來湊論文的算法。
不過理論也和技術一樣,會隨著實踐和研究不斷發(fā)展,曾經(jīng)的神經(jīng)網(wǎng)絡也曾被打入冷宮。最近DeepMind還提出了把神經(jīng)網(wǎng)絡和遺傳算法結合,應用到遷移學習中的案例。或許,有朝一日遺傳算法還會重新進入我們的視野。
總結
以上是生活随笔為你收集整理的linux小主机玩法,遗传算法有好多有趣的玩法,不只能用来凑论文的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言阶乘编程题,C语言编程题:阶乘计算
- 下一篇: MAC系统 如何显示隐藏的文件(文件夹)