最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

關(guān)于人工智能錯誤算法的認識 改正及思考

2023-07-31 09:11 作者:bili_88659275947  | 我要投稿


經(jīng)過我今年對深度學(xué)習(xí) 機器學(xué)習(xí)的研究發(fā)現(xiàn) 其算法是錯誤的

計算機是一臺以指令為單位的機器 它是不會學(xué)習(xí)的 所以沒有學(xué)習(xí)算法一說 那是沒有認清計算機的本質(zhì) 學(xué)習(xí)是人才有的行為 機器怎么會學(xué)習(xí)嗎 它只有指令啊 經(jīng)過研究發(fā)現(xiàn)我們常說的人工智能 主要是如下四個函數(shù)構(gòu)成的 下面我以常見的游戲AI為例講解其實現(xiàn) 由于已有多年未碰編程 這里只給出大致算法

在游戲中 當(dāng)角色或者NPC看/聽到什么的時候 就開始學(xué)習(xí)過程 如何學(xué)習(xí)呢 其實所有的學(xué)習(xí)都是從理解開始的 下面給出Understand()函數(shù)

int Understand(string type, string action, string p1, string p2)

{

? ? string memory;

? ? switch(type)

? ? {

? ? ? ? case 'walk'

? ? ? ? memory=Walk(action,p1,p2);? // Walk()函數(shù)根據(jù)詞典定義及參數(shù)p1, p2解釋action并將相應(yīng)的字符串寫入memory

? ? ? ? break;

? ? ? ? case 'run'

? ? ? ? memory=Run(action,p1,p2);

? ? ? ? break;

? ? ? ? case 'fight'

? ? ? ? memory=Fight(action,p1,p2);

? ? ? ? break;

? ? ? ? case 'look'

? ? ? ? memory=Look(action,p1,p2);? // 比如看這個行為 Understand()函數(shù)會把它解釋成使視線接觸人或事物 并把記憶記在數(shù)據(jù)庫里

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 實際上人在想看東西的時候 檢索記憶也是找到上面的解釋并做出相應(yīng)的行為的

? ? ? ? break;

? ? ? ? ......

? ? ? ? 各種人的行為的函數(shù)? // 這里要注意的是行為的歸類一定要仔細不要冗余 比如躺和側(cè)躺是一類不能歸為2類 我個人估算25個行為左右已經(jīng)有很好

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 的人工智能70個基本上完美 這個時候Understand才兩三百行 對游戲來說是個微不足道的小函數(shù)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 要特別指出的是像跳繩 踢毽子等應(yīng)該歸屬于一類Playing()玩游戲

? ? ? ? break;

? ? }

? ? Remember(action, memory);? // 記憶理解所得的結(jié)果即把原始記憶和理解得出的記憶寫入數(shù)據(jù)庫 如表hero/NPC

}

第二個函數(shù)是Study() 人要認識世界就要各種學(xué)習(xí) 理解了就學(xué)習(xí)了 所以

bool Study(string action)

{

? ? action=Look()/action=Listen();? // 通過看或者聽學(xué)習(xí)

? ? string type=IsAction(action);? // 判斷是某種行為 比如走 跑 說話 看等

? ? string p1,p2;

? ? p1=IsParam1(action); p2=IsParam2(action);? // 對行為的一些描述p1 p2

? ? Understand(type, action, p1, p2);? // 對行為進行理解并記憶

}

然后 NPC在空閑的時候還會想事情(就是普通的漫無目的想 假定其函數(shù)名為Thinking) 想了之后就做某種事情 第三個函數(shù)如下

int Thinking()

{

? ? int n=0;? // n是隨機數(shù) NPC在空閑的時候想什么事情是個隨機事件 它隨機性的發(fā)生

? ? int type=rand()/2;? // 2可用其它值 處于某種想之中

? ? switch(type)

? ? {

? ? ? ? case 1:

? ? ? ? n=OnIdle();? // 在空想 函數(shù)給n賦予隨機值

? ? ? ? break;

? ? ? ? case 2:

? ? ? ? n=Memory();? // 在回憶 函數(shù)給n賦予隨機值

? ? ? ? break;

? ? ? ? ......

? ? ?}

? ? switch(n)

? ? {

? ? ? ? case 1:

? ? ? ? Walk();? // 某種形式某種目的的行走 與Understand()中那個不同這個是實際的行為 那個是把行走理解成某種行動的字符串?dāng)?shù)據(jù)

? ? ? ? break;

? ? ? ? case 2:

? ? ? ? Talk();? ?// 某種目的某種內(nèi)容的談話

? ? ? ? break;

? ? ? ? ......

? ? ? ? default

? ? ? ? break;

? ? ?}

}

最后一個函數(shù) 也是最難的一個函數(shù) 就是思考(Thought) 對某個問題經(jīng)過思考得出結(jié)果

int Thought(string question)

{

? ? if(LookupMemory(question))? // 在記憶中查找看是否找到 實際上是一個查找數(shù)據(jù)庫的表并在表中的數(shù)據(jù)項查找的函數(shù)?

? ? {

? ? ? ? string law;

? ? ? ? law=Haslaw(question);? // 函數(shù)中可用IsNum() IsMathChar() IsLaw()等函數(shù)判斷question里面是否有數(shù)字 數(shù)學(xué)符號 數(shù)學(xué)/物理法則等

? ? ? ? if(law.IsNotNull())? // 看是否包含有法則

? ? ? ? {

? ? ? ? ? ? RunLogic(law);? // 運行相應(yīng)的邏輯法則

? ? ? ? }

? ? ? ? else

? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 做其它的事 比如和某個NPC對話

? ? ? ? }

? ? ? ? return 1;

? ? }

? ? else

? ? {

? ? ? ? if(Research(question))? // 研究問題

? ? ? ? {

? ? ? ? ? ? ......? ? // 成功相應(yīng)的行為

? ? ? ? ? ? return 1;

? ? ? ? }

? ? ? ? else

? ? ? ?{

? ? ? ? ? ?......? ? // 失敗相應(yīng)的行為

? ? ? ? ? ?return 0;

? ? ? ?}

? ? }

}

通過以上四個函數(shù)就可以把理解 學(xué)習(xí) 想事情 思考問題完整的實現(xiàn)出來 完成人工智能的全部功能 這里根本不需要什么深度學(xué)習(xí) 機器學(xué)習(xí) 這就是全部的人工智能函數(shù)

下面再寫兩個跟游戲有關(guān)及常用的人工智能函數(shù) 第一個自動尋路/自動駕駛

自動尋路要注意的一點就是不能把HitTest()當(dāng)成"輕重緩急"算法寫在判斷避讓那里 因為自動尋路避讓障礙的時候是個輕重緩急行為 不是進行碰撞檢測

bool AutoDriving(int Character)

{

? ? bool obstacle=Look();? // 看道路上有無障礙

? ? if(obstacle)

? ? {

? ? ? ? ?int distance=OrderofPriority(Character);? // 判斷輕重緩急

? ? ? ? ?int direction=GetInput(keyboard);

? ? ? ? ?ChangeDirection(direction, distance);? // 在距離distance處轉(zhuǎn)向

? ? }

}

一個可能的輕重緩急算法是

int OrderofPriority(int Character)

{

? ? int type=rand()/2;? // 輕和重 緩和急是個隨機產(chǎn)生的情況 這是客觀世界的真實反應(yīng) 游戲世界也是一樣的

? ? switch(type)

? ? {

? ? ? ? int min=GetMinimum();? // 測出物體中心到前端的距離的最大值即碰撞距離 不碰撞只要大于它就行了 比如可以略大于它 也可以+1 +2 +5厘米或者加個隨機數(shù)

? ? ? ? int senmin,senmax;

? ? ? ? GetDistanceSensitivity(Character,senmin,senmax);? // 得到角色的最小最大距離敏感度 一個查詢數(shù)據(jù)庫的函數(shù)

? ? ? ? case 1:? // 輕/緩

? ? ? ? return min+(rand()/0.1~1)+senmax;? //? 大于碰撞距離小于等于角色最大距離敏感度并略有出入的隨機數(shù) 或者其它可自定

? ? ? ? break;

? ? ? ? case 2:? // 重/急

? ? ? ? return min+(rand()/0.1~1)+senmin;? //? 大于碰撞距離小于等于角色最小距離敏感度并略有出入的隨機數(shù) 或者其它可自定

? ? ? ? break;

? ? }

}

第二個真實打斗 主要用在怪物和敵人與角色打斗/戰(zhàn)斗 這個函數(shù)主要是隨機數(shù)加上一些三十六計計謀即可 如

int RealFighting()

{

? ? ?int type=rand()/50;? // 計謀中的一種 包括連環(huán)計 計中計

? ? ?switch(type)

? ? ?{

? ? ? ? ? case 1:

? ? ? ? ? 聲東擊西();

? ? ? ? ? break;

? ? ? ? ? case 2:

? ? ? ? ? 圍魏救趙();

? ? ? ? ? break;

? ? ? ? ? case 3:

? ? ? ? ? 四面楚歌();

? ? ? ? ? 火上澆油();

? ? ? ? ? break;

? ? ? ? ? ......

? ? ?}

}

甚至還可以寫出復(fù)合體及變體

提到游戲中人工智能 很多時候都是個隨機數(shù)問題 因為自然界中的事都是隨機發(fā)生的 當(dāng)然到了虛擬世界里面 各種事情也是個隨機性的 恰好有rand()函數(shù)能很好的解決這一問題

歡迎轉(zhuǎn)載


關(guān)于人工智能錯誤算法的認識 改正及思考的評論 (共 條)

分享到微博請遵守國家法律
荣成市| 弋阳县| 关岭| 蕉岭县| 盐源县| 宜兴市| 茶陵县| 京山县| 云南省| 通化市| 策勒县| 九龙县| 志丹县| 长沙市| 孝感市| 谢通门县| 平江县| 缙云县| 三都| 辰溪县| 石柱| 平舆县| 晋城| 海丰县| 镇远县| 尚志市| 富宁县| 依兰县| 三穗县| 霍林郭勒市| 通山县| 泰来县| 黑河市| 十堰市| 太保市| 南丹县| 台南县| 尖扎县| 原平市| 永春县| 河源市|