【问题标题】:How to act on a class with ml.net?如何使用 ml.net 处理课程?
【发布时间】:2019-03-26 02:16:22
【问题描述】:

我有一个带有几个公共方法的公共类。该类还可能具有指示状态的公共属性。这些方法可能有参数。也许是一个返回值。也许其中一些被定义为异步的。 假设这个类代表一个控制游戏的接口。

可能类有左移、右移、跳跃、开火等方法

例子:

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 来上课,玩游戏。 我该怎么做?

【问题讨论】:

  • 您想使用 ML.NET 进行强化学习吗?如果是这样,这个comment on an issue 表示它还不可用。
  • @Jon,我不了解 ML 或 AI,所以我不知道,但听起来这可能是我想做的事情。

标签: ml.net


【解决方案1】:

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

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

与 cmets 中的 mentioned 一样,ML.NET 目前不支持任何强化学习方案。这可能会在未来发生变化,特别是如果公众对它们有足够的兴趣。

【讨论】:

  • 我有一个模糊的想法,强化学习是我想要的,但不知道如何实现它,或者哪种算法适合。
  • @Fred ,我建议您参考学习资源。维基百科是一个好的开始。
【解决方案2】:

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

我们使用命令模式生成游戏训练数据如下:

创建一个名为 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 以及Descriptor 和 OutcomeState 作为特征,NextAction 作为预测标签。

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

诀窍在于封装丰富而简洁的游戏状态描述,该描述考虑了进入当前游戏状态所遵循的步骤历史和游戏的预计未来结果(来自大量历史游戏)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 2021-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多