OpenAI'de yeni bir spor salonu ortamı nasıl oluşturulur?


83

Makine öğrenimi kullanarak bir video oyunu oynamayı öğrenecek bir AI Aracısı yapmak için bir görevim var. OpenAI Gym kullanarak yeni bir ortam oluşturmak istiyorum çünkü mevcut bir ortamı kullanmak istemiyorum. Yeni, özel bir Ortamı nasıl oluşturabilirim?

Ayrıca, AI Aracısını OpenAI Gym'in yardımı olmadan belirli bir video oyununu oynatmak için geliştirmeye başlayabileceğim başka bir yol var mı?

Yanıtlar:


125

banana-gymSon derece küçük bir ortam için benimkine bakın .

Yeni ortamlar oluşturun

Deponun ana sayfasına bakın:

https://github.com/openai/gym/blob/master/docs/creating-environment.md

Adımlar:

  1. PIP paketi yapısına sahip yeni bir havuz oluşturun

Böyle görünmeli

gym-foo/
  README.md
  setup.py
  gym_foo/
    __init__.py
    envs/
      __init__.py
      foo_env.py
      foo_extrahard_env.py

İçeriği için yukarıdaki bağlantıyı takip edin. Burada bahsedilmeyen ayrıntılar, özellikle içindeki bazı işlevlerin nasıl foo_env.pygörünmesi gerektiğidir. Örneklere ve gym.openai.com/docs/ adresine bakmak yardımcı olur. İşte bir örnek:

class FooEnv(gym.Env):
    metadata = {'render.modes': ['human']}

    def __init__(self):
        pass

    def _step(self, action):
        """

        Parameters
        ----------
        action :

        Returns
        -------
        ob, reward, episode_over, info : tuple
            ob (object) :
                an environment-specific object representing your observation of
                the environment.
            reward (float) :
                amount of reward achieved by the previous action. The scale
                varies between environments, but the goal is always to increase
                your total reward.
            episode_over (bool) :
                whether it's time to reset the environment again. Most (but not
                all) tasks are divided up into well-defined episodes, and done
                being True indicates the episode has terminated. (For example,
                perhaps the pole tipped too far, or you lost your last life.)
            info (dict) :
                 diagnostic information useful for debugging. It can sometimes
                 be useful for learning (for example, it might contain the raw
                 probabilities behind the environment's last state change).
                 However, official evaluations of your agent are not allowed to
                 use this for learning.
        """
        self._take_action(action)
        self.status = self.env.step()
        reward = self._get_reward()
        ob = self.env.getState()
        episode_over = self.status != hfo_py.IN_GAME
        return ob, reward, episode_over, {}

    def _reset(self):
        pass

    def _render(self, mode='human', close=False):
        pass

    def _take_action(self, action):
        pass

    def _get_reward(self):
        """ Reward is given for XY. """
        if self.status == FOOBAR:
            return 1
        elif self.status == ABC:
            return self.somestate ** 2
        else:
            return 0

Çevrenizi kullanın

import gym
import gym_foo
env = gym.make('MyEnv-v0')

Örnekler

  1. https://github.com/openai/gym-soccer
  2. https://github.com/openai/gym-wikinav
  3. https://github.com/alibaba/gym-starcraft
  4. https://github.com/endgameinc/gym-malware
  5. https://github.com/hackthemarket/gym-trading
  6. https://github.com/tambetm/gym-minecraft
  7. https://github.com/ppaquette/gym-doom
  8. https://github.com/ppaquette/gym-super-mario
  9. https://github.com/tuzzer/gym-maze

1
Çirkin bir " gym_fooiçe aktarılmış ama kullanılmamış" mesajı alıyorum . Ondan nasıl kurtulabilirim?
hipoglucido

@hipoglucido "gym_foo içe aktarılmış ancak kullanılmamış" durumundan kurtulmak için editörünüze bu içe aktarmayı göz ardı etmesini söylemeniz gerekir. Bu genellikle ile yapılırimport gym_foo # noqa
Martin Thoma

7
Bunların hiçbirine ihtiyacınız olmadığını, sadece türetilmiş sınıfa ihtiyacınız olduğunu yüksek sesle belirtmek gerektiğini düşünüyorum. Spor salonu ekosisteminden uzaklaşmıyorsanız, bir paket oluşturmak için gerçekten bir neden yok mu?
mathtick

yukarıdaki adımları izledikten sonra "gym_foo" içe aktarma hatası için, pip install -e . komutun yerine getirilmesi yardımcı oldu @hipoglucido
praneeth

17

Kesinlikle mümkün. Bunu Dokümantasyon sayfasında sonlara doğru söylüyorlar.

https://gym.openai.com/docs

Nasıl yapılacağına gelince, ilham almak için mevcut ortamların kaynak kodlarına bakmalısınız. GitHub'da mevcuttur:

https://github.com/openai/gym#installation

Ortamlarının çoğunu sıfırdan uygulamadılar, bunun yerine mevcut ortamların etrafında bir sarmalayıcı oluşturdular ve hepsine pekiştirmeli öğrenme için uygun bir arayüz sağladılar.

Kendin yapmak istiyorsan, muhtemelen bu yöne gitmeli ve zaten var olan bir şeyi spor salonu arayüzüne uyarlamaya çalışmalısın. Bununla birlikte, bunun çok zaman alıcı olma ihtimali yüksektir.

Amacınız için ilginç olabilecek başka bir seçenek daha var. OpenAI'nin Evreni

https://universe.openai.com/

Örneğin modellerinizi kongregate oyunlarında eğitebilmeniz için web siteleriyle entegre olabilir. Ancak Evren kullanımı Spor Salonu kadar kolay değil.

Yeni başlayan biriyseniz, tavsiyem standart bir ortamda bir vanilya uygulamasıyla başlamanızdır. Temel konulardaki problemleri aştıktan sonra, artırmaya devam edin ...


Ya bir Tic-Tac-Toe veya Rubik küpü gibi dijital olmayan faaliyetler için olası durumların sonlu olduğu ve iyi tanımlanabileceği bir ortam yaratmak isterse? Tüm olası durumları içeren bir liste oluşturmalı mıyım? Bir simülasyon, belirli bir durumdan geçerli hedef durumlarının ne olduğunu nasıl anlayabilir?
Hendrik
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.