1

我做了一個簡單版本的曲線發燒,也被稱爲「Achtung Die Kurve」。我想讓機器弄清楚如何最佳地玩遊戲。我從谷歌的Tensorflow製作的一些Atari遊戲例子中複製並略微修改了現有的DQN。學習與DQN玩曲線發燒遊戲的獎勵功能

我想找出一個合適的獎勵功能。目前,我用這個獎勵設置:

  • 0.1每一幀它不會崩潰
  • -500每次崩潰

這是正確的做法?我需要調整值嗎?或者我需要一個完全不同的方法?

+0

您是否設法讓DQN工作? – ericwenn

+0

是的,我實現瞭如下所述的評分。 –

+0

所以-​​1死亡,+1殺死。你有沒有使用任何小的恆值來存活? – ericwenn

回答

1

-500的回報會破壞你的網絡。您應該將獎勵縮放到1和-1之間的值。 (也可以在-1和1或0和1之間縮放輸入圖像)。

只要你的網絡獲得-1的獎勵,一旦敵人崩潰,就會造成墜毀,獎勵+1。沒有敵人的情況下,-1的獎勵應該足夠了。在一些情況下(例如,當網絡必須在兩個不可避免的崩潰之間做出決定,其中一個會發生得比另一個崩潰更快)時,持續積極的小額生活獎勵可能是有益的,但是它也會使得Q函數的學習更加複雜。你可以嘗試帶着或不帶有恆定的獎勵,看看最好的效果。

不可避免的崩潰的例子也說明了爲什麼你不應該使用一個小的負面生活獎勵。在這種情況下,網絡會選擇最快的崩潰路徑,儘可能延遲崩潰將是更好的策略。

0

當獎勵功能完全編碼您希望代理追求的目標時最好。在曲線發熱,目標是成爲最後一個活着的球員。如果您使用獎勵功能只是爲了留在遊戲中,那麼最好的策略就是無限期地抽出遊戲。你可能希望代理人儘可能快地獲勝,所以你應該在每個時間步驟中給予一個小的負面獎勵,並且在贏得一輪時給予一些積極的獎勵。這是一個快點贏得獎勵功能。

+0

這是真的。但是我想要實現的第一件事就是讓這個特工獨自呆在這個世界上,並且不要讓它掉入自己的尾巴。我對積極的獎勵是爲了保持活力,並且對於崩潰的懲罰很大,但我不確定這是否是正確的方法。 –