###### tags: `reward design` # reward design 問題與討論 ## 09/25 - 要不要試跑看看 basic 版本? - `left_bonus_count` 的機制會不會有 "手臂拿完五次 bonus `reward` 之後 他就不知道要幹嘛了" 的疑慮 因為現在碰到目標沒有分數了 > 當初設計的想法是將 `left_bonus_count` 的初始值設為 `ON_GOAL_FINISH_COUNT` ,希望能讓手臂學會越早到達 target 越好(最好還是連續五 step 都在 target 上) - 想像兩個情況: 1. 手臂很快地到達 target 附近,但是卻不連續的碰了 target 五次,然後離開到很遠的地方 2. 手臂較慢到達 target 附近,接著連續碰了 target 五次,成功完成 task 依照目前 `reward` 的設計方式, 2 所獲得的 `reward` 可能反而會輸給 1 - 目前的 agent 是只看 total reward 還是也同時會看重每個 action, step 所對應的 reward ? - 各種 `reward` 的 scale 是否需要進行調整,已讓每一種 `reward` 都能影響 agent 的學習? ### 可能的改進方法 - 多設計一個獲得 `reward` 的方式:持續 `on_goal` 而 `done` 時,給予 `reward` (與時間成反比) - 不直接給予 `BONUS_REWARD` ,而是先儲存起來,持續 `on_goal` 而 `done` 時才給予 - 儲存倒數 5 個 `BONUS_REWARD` (使得 task 完成的 step 所獲得的 `reward` )會不會比較合理? - 目前 `reward` 的 init 是「上次的距離 - 這次的距離」,如果改成「目前為止最接近的距離 - 這次的距離」......? - 將舊的「與目標距離」和新的「相較前一步接近的距離」融合一起對 `reward` 初始化? ## 09/18 ### _get_reward() - `d *= self.edge` 的用意是? > 看 _get_endpoint_position() 可以發現 d 在傳出之前除以 self.edge ,所以要加回來 - `if distance < 0.015:` 時 `self.on_goal += 10` ,而 `done` 判斷條件是 `if self.on_goal > 30:` ,所以目前只要連續三次就算成功?(還是不小心多打一個 0 ?) > 已修正 ### step() - 之前會檢查各個 joint 的角度是否超過界線 (arm_position_max, arm_position_min) ,若超過則 `done = True` 、`reward -= 1` ,現在好像沒有,當時是為何刪掉? > 目前手臂不會超過界線 若計算出來會超過 則會自動改為上限/下限