2009-12-01 87 views
1

我正在製作一個簡單的AI,我對這個領域非常陌生。我需要的是一種基於某些參數做出某種決定的算法;但有一點隨機性。到目前爲止,我一直在做的是根據我得到的不同值生成一個隨機數;採取不同的執行路徑。我以某種方式認爲有更好的方法來做這種事情。你能給我一些指點嗎?隨機決策算法

+1

你可以多說一下你想做什麼樣的決定?這是純粹的選擇之間的一些無關的決定,你正在使用一個體面的隨機數字發生器,那麼你在做什麼聽起來不是太糟糕。 – 2009-12-01 18:39:51

+0

這是一款運動模擬器;讓我們說網球。根據球員的反手力量,球的入球方向等參數,我想模擬一個鏡頭;增加一些隨機性;但仍然基於上述參數。 – Anoop 2009-12-02 05:03:50

回答

3

我不認爲有比你所做的更好的方法,因爲問題描述非常模糊,而且它實際上是人工智能問題還是模擬問題尚不清楚。

對於決策部分,通常可以使用簡單的啓發式系統(基於對被建模行爲的直觀理解),這是一系列條件語句,可能有一些隨機因素會使其變化一點。你可以有一個加權平均系統,選擇幾個選項,根據感知質量進行排名,然後隨機選擇一個選項,同時偏向於更好的值。 (這被稱爲輪盤選擇或遺傳算法圓圈中的fitness proportionate selection,但在GA之外也非常有用。)

對於模擬零件,您通常需要對過程進行建模,然後引入隨機性,以模擬更細微的部分該過程。這意味着要清楚地定義你的輸入(反手力量,球的方向,......)和你的輸出(球的行進向量?),並考慮它們如何相互關聯。這意味着你得到了一些已知值的輸出,然後你可以用你的隨機數發生器修改它們。如果您試圖模擬人類的選擇而不僅僅是物理模擬,情況會變得更加複雜,因爲這通常優先於所有其他輸入。

我可以從一個簡單的例子開始,就是玩家AI選擇他們想要擊球的地方。我將球的計劃方向作爲一個矢量來計算,該矢量可以將球準確地發送到計劃的地方。然後系統根據球的方向,速度,球員的能力等計算0%到100%的難度分數。我生成一個'不準確'修飾符,它是0%和難度%之間的一個隨機數,這意味着一個完美的鏡頭將是完全準確的,而半球鏡頭的準確度在0%和50%之間。然後,我計算一個隨機歸一化的單位長度三維矢量,通過這個不準確的值進行縮放,並將其添加到預期的方向。這意味着更難的鏡頭會傾向於進一步偏離目標。

+0

雖然你說問題描述是模糊的,這是很多有價值的信息。我想我正是想要的;非常感謝。 您是否知道任何處理這類事情的網站 - 特別是關於模擬? – Anoop 2009-12-03 06:08:33

+1

不幸的不是。我的專長領域是遊戲和人工智能。大多數現代遊戲基本上是低保真軟實時模擬,所以原理雖然相似。在遊戲中的決策已經被好幾本書所覆蓋(至少在沒有明確解決方案的情況下可以涵蓋),但是我喜歡AI遊戲編程智慧系列,以展示各種各樣的替代方法。 – Kylotan 2009-12-03 11:00:13

0

與大多數關於隨機性的問題一樣,值得一問的是你要找的是真正的隨機性,即白噪聲還是湍流(又名Perlin Noise)。一般來說,在大多數領域中,你更可能從湍流中獲得看起來比白噪聲更「自然」的行爲。

0

根據結果與最佳「期望」狀態或結果的接近程度給每個執行路徑分數。使您的算法根據以前的決策的平均得分選擇其未來的執行路徑,從而以最高得分的決策給出更大的結果概率。這樣,它看起來就好像你的算法不僅僅是學習,而且隨機地探索其他可能性,但比做似乎最好的概率要低。當然,通過不僅考慮每個決策路徑的分數,而且還考慮其增長率或收縮率,可以使其具有適應性。如果一個決定開始是好的,但是經過多次迭代後,得分越來越低,應該避免更頻繁地支持另一個決定誰的得分有增長的趨勢。