2017-04-13 59 views
2

我嘗試使用強化學習來重複選擇指定點集合中出發點的最近點,直到達到複雜(和無關的)結束條件。 (這是對我主要問題的簡化。)選擇最接近原點的強化學習

包含可能點的二維數組傳遞給強化學習算法,該算法可以選擇它認爲最理想的點。

A [1, 10] 
B [100, 0] 
C [30, 30] 
D [5, 7] 
E [20, 50] 

在這種情況下,D將是最好的選擇。 (該算法應該理想地輸出3,從範圍04

但是,每當我訓練的算法,它似乎沒有學到什麼「概念」是的,而是僅僅是選擇,比如說,C通常是的最佳選擇,所以它應該總是選擇那個。

import numpy as np 
import rl.core as krl 


class FindOriginEnv(krl.Env): 

    def observe(self): 
     return np.array([ 
      [np.random.randint(100), np.random.randint(100)] for _ in range(5) 
     ]) 

    def step(self, action): 

     observation = self.observe() 

     done = np.random.rand() < 0.01 # eventually 

     reward = 1 if done else 0 

     return observation, reward, done, {} 

    # ... 

我應該修改一下關於我的算法的內容,以便它真正瞭解它正試圖完成的目標?

  • 觀察形狀?
  • 獎勵功能?
  • 行動選擇?

Keras代碼將不勝感激,但不是必需的;純粹的算法解釋也會非常有幫助。

回答

2

從你的描述勾畫出的MDP,有幾個問題:

  • 你的觀察功能似乎回到5分,這樣就意味着一個國家可以是10個整數任何配置[0 ,99]。這是100^10個可能的狀態!你的狀態空間需要小得多。正如所寫,observe似乎正在產生可能的行動,而不是國家觀察。

  • 您建議您從[0,4]中選擇動作,其中每個動作本質上都是索引到可供代理使用的點陣列中。行動空間的這個定義並沒有給代理人足夠的信息來區分你說你喜歡的東西(更小的幅度點更好),因爲你只根據點的索引行事!如果你想稍微調整一下這個公式,你可以定義一個動作,在[0,99]中選擇每個維度的2D點。這意味着您可能會有100^2個可能的操作,但爲了保持多選方面,您可以限制代理根據當前狀態在給定步驟(5種可能的操作)中選擇一個子集。

  • 最後,獎勵函數給出零獎勵,直到終止意味着您允許大量可能的最優策略。從本質上講,任何終止的政策,無論情節花了多長時間,都是最優的!如果你想鼓勵快速終止的政策,你應該在每個步驟中以小負面獎勵懲罰代理人。