如何使用ml.net上课堂?

时间:2018-08-17 12:23:04

标签: ml.net

我有一个公开课,有几种公开方法。该类还可以具有指示状态的公共属性。该方法可以具有参数。也许是返回值。也许其中一些被定义为异步的。 可以说该类表示控制游戏的接口。

也许该类具有诸如向左移动,向右移动,跳转,射击等方法。

示例:

public class Game
{
    public int Ammo { get; private set; }

    public void Fire() { /* ... */ }
    public void Jump() { /* ... */ }
    public void MoveRight() { /* ... */ }
    public void MoveLeft() { /* ... */ }
    // more methods
}

我想使用ml.net来上课,玩游戏。 我该怎么办?

2 个答案:

答案 0 :(得分:1)

据我所知,您想构建一个将“控制输入”应用于给定系统(例如您的Game类)的“人工智能”,并学习“玩游戏”。

这似乎与Reinforcement learning的定义非常接近。正如您从Wikipedia文章中看到的那样,存在许多用于强化学习的方法,因此,您现在所说的问题还不够明确,只有一个解决方案。

注释中的mentioned一样,ML.NET当前不支持任何强化学习方案。将来这种情况可能会改变,尤其是如果公众有足够的兴趣的话。

答案 1 :(得分:1)

您可以将Command模式与ML.NET结合使用来解决您的问题。本质上,命令模式会生成命令序列,然后由命令解释器按照传统的体系结构模式执行。

我们使用Command模式来生成游戏训练数据,如下所示:

创建一个名为GameState的类。

public class GameState
{
  public enum GameAction
  {
    Fire,
    Jump,
    MoveRight,
    MoveLeft,
    ...
  }

  public GameState Current { get; set; }
  public GameAction NextAction { get; set; }
  public GameOutcome Outcome { get; set; }

  public string Descriptor { 
    get {
       // returns a string that succinctly and uniquely 
       // describes the current game state
    }
  }
}

并定义一个GameOutcome类:

public class GameOutcome
{
  public int GameID { get; set; }
  public enum OutcomeState
  {
     Win,
     Loss,
     Tie,
     Unfinished
  }
  public OutcomeState Outcome { get; set; }
}

如果您可以从实际游戏中生成GameState序列作为训练数据,则可以使用ML.NET创建一个预测变量(本质上是MultiClassClassifier),该变量将GameState.Descriptor,GameState.Outcome.OutcomeState和GameState.NextAction与描述符和OutcomeState为功能,NextAction为预测标签。

在实时(自动游戏)中,您将初始化游戏状态,然后预测将OutcomeState设置为“ Win”的下一动作,并使用ML分类器来预测学习到的下一动作。

诀窍在于封装一个丰富而简洁的游戏状态描述,其中要考虑到当前游戏状态所遵循的步骤的历史以及游戏的预期未来结果(来自大量历史游戏)。