簡體   English   中英

如何告訴代理動作空間中的某些動作當前在健身房中不可用?

[英]How to tell an agent that some actions in the action space are currently not available in gym?

  1. 作為最簡單的情況,我將一個動作空間定義為spaces.Discrete(3) ,但有時,0 不可用,代理只能從 1 和 2 中采樣。有時,2 不可用,或者 1 和 2 不可用。 我如何告訴代理某些選項不可用?

(注意: unavailable ,我的意思是這個動作是不可能的,不會發生,並且它的結果是不確定的;而不是一個導致負面獎勵的錯誤選擇。)

  1. 實際上,我有MultiDiscrete動作空間,有些動作有時不可用(就像問題 1 中一樣)。 或者更糟的是,從這些空間中選擇的動作必須滿足某些條件,例如, Discrete 2 - Discrete 2 MultiDiscrete Discrete 2 - Discrete 2動作空間必須滿足f(a1, a2) <= 1的函數,其中a1是從第一個Discrete 2空間中采樣的, 並且a2是從第二個Discrete 2空間中采樣的。 但是這里的f是一個復雜的函數,它不像 a +那么簡單,而是一個與當前狀態相關的函數。 如果是這種情況,我如何告訴代理某些選項當前不可用?

不確定在構建動作空間時如何指定,但您可以使用條件對動作樣本進行采樣。 對於示例 1,您可以使用while循環來保持從動作空間采樣,並且僅在滿足條件時才返回結果。

from gym import spaces

def conditional_action():
    while True:
        a = spaces.Discrete(3).sample()
        if a == 0:
            continue
        break
    return a

print(conditional_action())

使用相同的邏輯,您可以將其應用於其他 action_space 以使用條件進行采樣,例如,我有一個 MultiDiscrete 操作空間,我指定數組的總和不應超過 6。

def conditional_action():
    while True:
        a = spaces.MultiDiscrete([6 for i in range(3)]).sample()
        if sum(a) > 6:
            continue
        break
    return a

print(conditional_action())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM