- 一個關于算法的游戲
在開始之前我想起了一個古老的windows自帶的游戲“掃雷”。只不過這個游戲與一個編程競賽結合之后變成了一個更有趣的思維訓練游戲。
游戲內容是這樣的:
一個大正方形被劃分為64x64的小正方形,大正方形區域內隨機的散布著64x3顆地雷和64x3塊石頭。參與游戲的者不是擁有上帝視角的人,而是一輛掃雷車。每輛掃雷車都從區域的右下角進入雷區。
掃雷車擁有“探查”,清除,移動,轉向四個功能。
探查:對正前方的3個小方格繼續分析,通過探查可以確定探查區域內的是地雷,石塊,還是空地。每次探查耗時3個單位時間.
移動:向正前方移動,每次移動花費1個單位時間。如果移動進入區域內有石塊,則掃雷測會被損壞,需要10個單位時間進行修理。如果移動進入的是未清楚的地雷區域則Game Over。
清除:清除正前方的小方塊區域,如果清除方塊內是地雷,則將清除區域重置為空地。如果清除區域為石塊則清除失敗,清除區域依然為石塊。對于空地清除方法則不做任何事。不光清除區域內有什么,都花費1個單位時間。
轉向:掃雷車在原地將車頭轉到上下左右四個方向中的一個,每一步轉向都花費1個單位時間。轉向必須按順序進行。例如:掉頭這個動作,必須先用一個單位時間轉到←或者→,然后再花費1單位時間從左或者右將掃雷車的屁股和腦袋對調。
- 程序要怎么實現呢?
定義一個小方格的土地類,屬性為:size1x1, 位置x,y,x/y(1~64)
定義空地繼承土地類,自有屬性空。
定義石塊繼承土地類,自有屬性破壞,不可被清除。
定義地雷繼承土地類,自有屬性爆炸,爆炸屬性可被清除。
定義掃雷車,方法探查,清除,移動,轉向。
屬性狀態:正常/待修理/損壞。位置:x,y;方向:前后左右
- 棋盤布置好了,現在由玩家拿著遙控器控制這輛掃雷車進入雷區執行掃雷任務,最快將雷區內的所有地雷清理干凈或者標記出來的玩家獲勝。
- 第一階段
有“頭鐵”的玩家把掃雷車當一級方程式,管你有沒有雷,沖鴨。其中運氣最好的沖過了四分之一的地圖,最差出發既游戲結束。
有謹慎的玩家每塊前方區域都必探查,一步一挪。小蝸牛一呀一點點的挪,一蛄蛹一蛄蛹真勤奮……
最穩健外加強迫癥外加運氣極差的玩家在在所有區域都掃過一遍后完成了游戲,用時10086*10086個單位時間。但不是所有玩家中最慢完成游戲的,有的玩家花了超過探查所用的時間去猜測前方區域的空地內是否有地雷了石塊。單細胞腦回路的玩家的操作基本是公式化的,雖然速度慢,但是安全可控,非常適合規范化之后代碼化。最后他的執行過程編程后稱為第一版自動掃雷車的控制程序。
- 第二階段
恰逢此時這時候游戲比賽加入和新得規則:每個玩家有三臺掃雷車但只能有一臺在雷區內進行掃雷,空閑的掃雷車可以用于更換當前在雷區被摧毀或者被損壞的掃雷車,而且替換過程無時間損耗。損壞的掃雷車可以瞬間移動至雷區外進行修理,雷區外損壞掃雷車的修理可以與雷區內的掃雷車作業同時進行。當沒有完好的掃雷車在雷區內時,則需等待至少一臺損壞掃雷車修理完后再進行掃雷,修理時間記入游戲時間。如果三輛掃雷車都被炸毀則游戲結束。
為掃雷車添加自動化功能,可以根據玩家預先設置的策略自動掃雷。
這一規則改變勾動了各位編程,算法大佬們的神經。各位程序員們蠢蠢欲動。只不過這些數學,編程大佬們更感興趣的是修改掃雷車的自動化程序。
新規則下的比賽結果在剛開始的時候讓眾大佬們氣餒。他們冥思苦想出來的算法并沒有打敗那些 “幸運的莽漢”。最直接的原因是地圖是隨機生成的,固定算法在某一張地圖上取得較好的成績,但是在其他隨機生成的地圖上則一敗涂地。但是大佬們并不氣餒,不斷的修改算法的適配性,算法也越來越復雜。
漸漸的大佬們發現固定算法在隨機圖集上運行結果的平均值無限接近原始“單細胞玩家“算法的效果。
沮喪開始在大佬之間蔓延……
游戲也成為一種純粹的消磨時間的娛樂。
- 第三階段
一個應用數學的導師將歷年掃雷游戲玩家們的算法和結果扔給一群學生,讓他們用來實踐統計學理論。其中一個學生在對算法結果進行統計計算的時候對算法產生了興趣。他將大神們貢獻的海量算法進行了提煉,將連續多次探查后的結果進行統計后得出一個分布公式。例如:當連續探查出兩顆地雷后第三次探查區域是地雷的概率為46%,當兩次探查出三顆地雷后,第四次探查出是地雷的概率為12%。于是他以此為基礎,將大神們的尋路算法進行整合。例如:A尋路算法在密集雷區內的掃雷效率較高,那么當連續探查兩顆地雷時使用A尋路算法。B尋路算法對于松散雷區的掃雷效率較高,那么當連續探查為空地時調用B算法。
到此掃雷游戲就從一個操作掃雷車的游戲變成了一個選擇算法的游戲。為了做到更廣泛的適應性,在做了大量統計工作后,他為探查結果建立了一個復雜的計算公式,用以判斷何種情況下適配哪種算法。這個公式的輸出結果為當前已知條件下,對每種算法的選擇權值。
于是一種對算法進行計算的算法出現了,被稱為遺傳學算法。而且這位學生發現,算法的種類越多,經過公式復合計算后得出的綜合選擇方案效率越高。
最終遺傳學算法終結了掃雷游戲的算法比賽。
- 第四階段
遺傳學的出現讓人們意識到一種可能性,計算機程序具備了通過已知推導未知問題答案的可能。
計算機程序具備了根據實際情況進行動態調整自身以適應環境變化的能力。
人們開始尋找將這種方法,思路應用到更多領域的實踐。
笨的辦法總是最容易被最先想到的,不就是一個64x64的雷區嗎?窮舉法將所有可能的64x3的地雷和石頭的分布場,在被探查出一定數量區域的結果后的特征值(地雷,石塊的分布情況)保存在一個巨大數組之中,然后將不同特征地形下不同尋路算法的權值與地形特征一同存入表格。
至此一個高效,快速的檢索,優選系統就完成了。這個系統雖然還不具備通用性,但已經在某些方面展現出了獨特的優勢。
某個策略完備的優選系統在一場棋類對抗比賽中打敗了此棋類對抗比賽的冠軍,從而轟動一時。
更高效的數據庫檢索方法和硬件成為了制約計算機程序做出最優判斷的瓶頸。同時人們發現似乎離“預測未來”和“適應環境”以及“廣泛應用”的目標需要新的思路。
- 第五階段
第四階段需要大量的人工搜集素材,提取素材中的“特征”,計算并為素材添加權值。這哪里智能了?一點也不智能好不好。
在面對問題的時候,一些計算機技術人員開始思考人類是如何產生智能的,于是將目光投向了生物學家。
生物學(實際上是一個心理學家定義的)上對于神經元的定義是一個多個輸入,單個輸出,內含算法的計算單位。
每個神經元可以是不同的算法,也可以是相同的算法,將某類型問題的多種可能場景投入到不同的神經元組成的網絡中進行計算,不同的樣本會根據特征經由必要的神經元計算后輸出結果。而沒有必要像數據庫查詢那樣遍歷足夠的元素后才能得到想要的最優結果。
而由神經元聚集起來的系統則被稱為神經網絡。這個網絡是多種算法聚集體的同時還擁有最優化的效率。
高效,靈活的網絡有了。如何讓網絡實現某項功能呢?回到掃雷游戲,我們需要算法來填充神經元,我們需要為每個神經元制定特征標簽。
可以很容易發現,為一個神經網絡進行初始化是一個非常耗時,費力的工作。這個過程需要大量的樣本來填充神經元,和對神經元打標簽。其過程就像交一個未成年的孩子學習一樣,提供基礎的理論,大量的練習,讓孩子靈活應用其中的規律用于未來的計算。
到此一門新的計算機應用學科----機械學習就產生了。
機器學習的概念,基礎理論和技術一經提出,就出現了兩種基本類型。
監督式機器學習模型和非監督式機器學習模型。
監督式機器學習模型在回歸算法的加持之下,可以通過數據的相關性“預測”結果。
非監督式機器學習模型中集中了多種功能迥異的算法和原始樣本分析工具,可以在大量樣本的加持下,從樣本中提取出多種“特征”。我們可以利用這些自動識別出來的特征對樣本進行分類。
當監督式機器學習與非監督式機器學習模型逐步成熟的時候,財大氣粗的人開始搭建更復雜的,將監督式和非監督式學習模型結合起來,構建多層神經網絡系統。
一個容器,一個快速搭建神經網絡的工具被好事的工程師們建立起來。其中封裝了具備基本算法的神經元,向神經網絡注入學習樣本的工具,將多層網絡中神經元的輸入輸出連接起來的結構。這些多事的工程師成這些為搭建機器學習模型的平臺。
經過大量樣本完成了學習的多層神經網絡系統可以做什么呢?
它可以提取文本/圖像中的特征,并對特征進行自動分類。根據分類特征通過網絡或者已有樣本/特征元素尋找與這些特征匹配度最高的結果,將這些結果二次組合/排序/轉化/編碼生成一個新的樣本。Transformer真是一種天才的取巧。
例如:回答人們的問題。由文字生成圖像,視頻,音樂。
至此生成式大模型應運而生。這個模型根據功能設計,經過學習之后(訓練),它可以聽取你的需求(特征理解和語義分析),最后給出滿足你需求的答案(答案是否符合需求,取決于你的成長學習環境與模型學習時使用的樣本數據有多相似)。它甚至可以在概率加持下給出模糊的答案和預測某種趨勢,甚至創造性的給一些意外(當然大多數情況是因為個體視角的局限看不到某些可能性)。
第六階段
我不知道機器學習將來的樣子,也不知道在人工智能獲取了自我訓練和自我迭代的能力后能多快擁有人類的智力水平。他們是否會產生倫理的觀念,是否受到法律的約束。
對于我們普通人來說,柴米油鹽才是當下最重要的問題。
將來?關我什么事?
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.