openAI's doc के अलावा, मुझे और अधिक विस्तृत दस्तावेज़ीकरण नहीं मिला।

मुझे बनाने का सही तरीका जानने की जरूरत है:

  1. एक क्रिया स्थान जिसमें 1..n संभावित क्रियाएं हैं। (वर्तमान में असतत क्रिया स्थान का उपयोग कर रहे हैं)

  2. एक ऑब्जर्वेशन स्पेस जिसमें 2^n स्टेट्स हैं - हर संभव कार्रवाई के लिए एक स्टेट जो कि गई है। मुझे एक्शन वेक्टर का एक-गर्म प्रतिनिधित्व चाहिए - action was already taken के लिए 1, action still hadn't been taken के लिए 0

मैं इसे openAI के जिम के साथ कैसे करूँ?

धन्यवाद

1
Gulzar 3 जिंदा 2019, 15:47

2 जवाब

सबसे बढ़िया उत्तर

लेखन के समय gym पैकेज द्वारा प्रदान किए गए gym.Spaces में से कोई भी एक गर्म एन्कोडिंग प्रतिनिधित्व को प्रतिबिंबित करने के लिए उपयोग नहीं किया जा सकता है।

सौभाग्य से हमारे लिए, हम gym.Spaces का चाइल्ड क्लास बनाकर अपने स्पेस को परिभाषित कर सकते हैं।

मैंने ऐसी कक्षा बनाई है, जिसकी आपको आवश्यकता हो सकती है:

import gym
import numpy as np


class OneHotEncoding(gym.Space):
    """
    {0,...,1,...,0}

    Example usage:
    self.observation_space = OneHotEncoding(size=4)
    """
    def __init__(self, size=None):
        assert isinstance(size, int) and size > 0
        self.size = size
        gym.Space.__init__(self, (), np.int64)

    def sample(self):
        one_hot_vector = np.zeros(self.size)
        one_hot_vector[np.random.randint(self.size)] = 1
        return one_hot_vector

    def contains(self, x):
        if isinstance(x, (list, tuple, np.ndarray)):
            number_of_zeros = list(x).contains(0)
            number_of_ones = list(x).contains(1)
            return (number_of_zeros == (self.size - 1)) and (number_of_ones == 1)
        else:
            return False

    def __repr__(self):
        return "OneHotEncoding(%d)" % self.size

    def __eq__(self, other):
        return self.size == other.size

आप इसे इस प्रकार उपयोग कर सकते हैं:

-> space = OneHotEncoding(size=3)
-> space.sample()
array([0., 1., 0.])
-> space.sample()
array([1., 0., 0.])
-> space.sample()
array([0., 0., 1.])

आशा है कि मैं मदद कर सकता हूँ

3
Daniel Hernandez 24 फरवरी 2019, 18:59

आपके द्वारा मांगा गया "मल्टी वन हॉट" स्पेस पहले से ही लागू है

https://github.com/openai/gym/blob/master/gym/spaces/multi_binary.py

import gym

# create a MultiBinary Space
# by passing n=10, each sample will contain 10 elements

mb = gym.spaces.MultiBinary(n=10)

mb.sample()

# array([1, 0, 1, 0, 0, 0, 0, 0, 0, 1], dtype=int8)

यदि आप यह सुनिश्चित करने के लिए अपना स्वयं का कार्यान्वयन करना चाहते हैं कि sample को कॉल करते समय सकारात्मक तत्वों की संख्या x से अधिक न हो, तो आप यादृच्छिक रूप से x सूचकांक चुन सकते हैं। n विकल्प और फिर उन सूचकांकों को सभी 0 की एक सरणी में फ़्लिप करें और फिर उसे वापस कर दें।

1
elliptic_kid 16 सितंबर 2019, 07:39