作者yoco315 (眠月)
看板C_and_CPP
標題Re: [問題] 關於一個人工智慧小遊戲的問題
時間Thu Apr 8 21:37:54 2010
※ 引述《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