看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《netsphere ()》之銘言: : http://pages.cs.wisc.edu/~shavlik/cs540/html/agent-world.html : project要自己設計個Agent並要盡可能拿到高分 : 但我在網路上找了好久都沒有發現如何能設計出比較好Agent的參考資料 : 不知道有沒有大大有設計過這個遊戲的Agent或能告訴小弟那裡有可以參考資料 : 點醒小弟我能設計出比較好的Agent 感謝各位大大的觀看 . 看完以後想到有個叫做「位能場」的賤招應該不錯用 XD 如果不知道這是啥,Google 一下 "AI potential field" 看到 這個 AgentWorld 的重點就是: 1. 不要被壓 2. 不要撞牆 3. 不要撞動物 4. 盡量多壓人 5. 盡量多吃蔬菜 所以我們就把這三種物件當作質點,利用他們來建立位能場, 然後你就盡量往高分的地方走去就好了, 然後不同的物體其質量也不同,因為他們的 reward 不同, 比方說牆是 -1,蔬菜是 +5,其他的動物是 -3。 比較麻煩的是那個很高的 reward +25 的「推礦壓人」。 因為單看「礦」跟「Agent」,我們都會想離他比較遠, 可是如果可以壓到,那就有機會拿到 25 分。 所以一個觀點是當礦跟 Agent 很近的時候,就把礦跟 Agent 合起來看, 就像是原子核跟電子,兩個合在一起就是一顆原子, 但是這顆原子的質量就得考慮一下,不是個定值, 因為我可以壓他,他也可以壓我,所以不是 +25 就是 -25,賭很大。 所以這個值取決於彼此的方位。 比方說,根據說明,我們可以 sense 到其他 object 的面對的方向。 所以如果對方是呈現這種方位 我 礦 對方→ 那我可以假定他看不到我(假設 AgentWorld 裡面的 agent 沒有這麼賤) 這種時候我就可以把其質量視為 +25,馬不停蹄的我就往前衝了。 但是如果是 我 礦 ←對方 他看得到我,這種時候還是不要過去比較好,將其質量視為 -25。 至於其他的情形就自己看要怎麼定,應該是不難。 每一個 iteration, 就是先作位能場的更新, 然後根據建立好的位能場決定移動的方向就可以了。 -- To iterate is human, to recurse, divine. 遞迴只應天上有, 凡人該當用迴圈.   L. Peter Deutsch -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.160.120.35
netsphere:感謝yoco大的回文 努力了解中 04/08 21:46
DigiPrince:好文!感謝這篇分享 ^_^b 04/08 23:00
ktta:感覺相當有趣! 04/09 00:04
VictorTom:推有趣:) 04/09 01:13
PcGrek:推~ 04/10 16:20