您可以将命令模式与 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 设置为“Win”,并使用 ML 分类器来预测学习到的下一个动作。
诀窍在于封装丰富而简洁的游戏状态描述,其中考虑了进入当前游戏状态所遵循的步骤历史和游戏的预计未来结果(来自大量历史游戏)。