RLMatrix 入门指南
简介
在编写传统程序时,我们会告诉计算机在每种情况下准确应该做什么。例如,如果我们想编写一个匹配数字的程序,可能会这样写:
if (input == pattern){ return "正确!";}else{ return "再试一次!";}但如果我们希望程序自己学习呢?如果规则太复杂无法写出来,或者我们自己甚至不知道规则呢?这就是强化学习的用武之地。
设置您的项目
您可以跟随本教程操作或克隆这个 GitHub 仓库。 首先,让我们安装所有必要组件:
dotnet add package RLMatrixdotnet add package RLMatrix.Toolkit您的第一个学习环境
让我们创建一个简单但有意义的环境——让 AI 学习匹配模式。虽然这看起来很基础(直接编程实现也很简单),但它引入了我们所需的所有关键概念。
以下是我们完整的环境代码:
using RLMatrix.Toolkit;
namespace PatternMatchingExample;
[RLMatrixEnvironment]public partial class PatternMatchingEnvironment{ private int pattern = 0; private int aiChoice = 0; private bool roundFinished = false;
// 最近 50 步的简单计数器 private int correct = 0; private int total = 0;
// 简单的准确率计算 public float RecentAccuracy => total > 0 ? (float)correct / total * 100 : 0;
[RLMatrixObservation] public float SeePattern() => pattern;
[RLMatrixActionDiscrete(2)] public void MakeChoice(int choice) { aiChoice = choice; roundFinished = true;
// 更新计数器 total++; if (aiChoice == pattern) correct++; }
[RLMatrixReward] public float GiveReward() => aiChoice == pattern ? 1.0f : -1.0f;
[RLMatrixDone] public bool IsRoundOver() => roundFinished;
[RLMatrixReset] public void StartNewRound() { pattern = Random.Shared.Next(2); aiChoice = 0; roundFinished = false; }
public void ResetStats() { correct = 0; total = 0; }}训练您的 AI
现在进入有趣的部分——教 AI 匹配模式。我们将使用一种称为 DQN(深度 Q 网络)的算法。不必太担心这个名称——这只是教 AI 做决策的一种方式。
以下是我们如何设置训练:
using RLMatrix.Agents.Common;using RLMatrix;using PatternMatchingExample;
Console.WriteLine("开始模式匹配训练...\n");
// 设置 AI 如何学习var learningSetup = new DQNAgentOptions( batchSize: 32, // 一次从 32 个经验中学习 memorySize: 1000, // 记住最近 1000 次尝试 gamma: 0.99f, // 非常重视未来奖励 epsStart: 1f, // 开始时尝试所有可能 epsEnd: 0.05f, // 最终坚持使用有效策略 epsDecay: 150f // 转变的速度);
// 创建我们的环境var environment = new PatternMatchingEnvironment().RLInit();var env = new List<IEnvironmentAsync<float[]>> { environment, //new PatternMatchingEnvironment().RLInit() //你可以添加多个环境并行训练};
// 创建学习智能体var agent = new LocalDiscreteRolloutAgent<float[]>(learningSetup, env);
// 开始学习!for (int i = 0; i < 1000; i++){ await agent.Step();
if ((i + 1) % 50 == 0) { Console.WriteLine($"步骤 {i + 1}/1000 - 最近 50 步准确率: {environment.RecentAccuracy:F1}%"); environment.ResetStats();
Console.WriteLine("\n按回车键继续..."); Console.ReadLine(); }}
Console.WriteLine("\n训练完成!");Console.ReadLine();当您运行此代码时,您将看到每 50 步显示的训练进度:
开始模式匹配训练...
步骤 50/1000 - 最近 50 步准确率: 48.0%按回车键继续...
步骤 100/1000 - 最近 50 步准确率: 68.0%按回车键继续...
步骤 150/1000 - 最近 50 步准确率: 86.0%按回车键继续...
步骤 200/1000 - 最近 50 步准确率: 82.0%按回车键继续...超越简单匹配
虽然我们的例子很直接,但相同的原则适用于更复杂的问题:
测试您的理解
理解强化学习基础
后续步骤
准备更进一步?您的下一步可以是:
我们有两种主要算法可用:
- DQN:我们刚刚使用的,适合简单选择,受益于大型重放内存。
- PPO:更高级,处理连续动作(如控制速度或方向)