首页 > 解决方案 > Unity ML Agents - 简单的逻辑“和”门示例 - 没有完成任何情节

问题描述

我正在尝试创建一个非常简单的示例,在其中我使用“和”门值训练代理,即

1,0 = 0
1,1 = 1
0,0 = 0
0,1 = 0

我知道这是一个非常奇怪的测试项目,但我需要检查我是否可以使用 ML 来评估数据而不需要游戏对象。

我遵循了这个项目中包含的“基本”示例,但我无法让它工作。我在下面发布了我的代码。任何帮助将非常感激。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using MLAgents;
using UnityEngine.UI;

public class TestAgent : Agent {

    public Text text;

    public List<float[]> inputs = new List<float[]>();
    public List<float[]> answers = new List<float[]>();

    float expectedAnswer;
    float[] inp;
    int rec;

    private void Start()
    {
        inputs.Add(new float[] { 0, 0 });
        answers.Add(new float[] { 0 });

        inputs.Add(new float[] { 1, 1 });
        answers.Add(new float[] { 1 });

        inputs.Add(new float[] { 1, 0 });
        answers.Add(new float[] { 0 });

        inputs.Add(new float[] { 0, 1 });
        answers.Add(new float[] { 0 });
    }

    public override void CollectObservations()
    {
        AddVectorObs(inp);
    }

    public override void AgentAction(float[] vectorAction, string textAction)
    {
        var movement = (int)vectorAction[0];

        text.text += ", Result = " + movement;

        // Time penalty
        AddReward(-0.05f);

        if ((int)movement == (int)expectedAnswer){
            AddReward(1f);
            Done();
        }
        else{
            AddReward(-1f);
            Done();
        }
    }

    public override void AgentOnDone()
    {
        base.AgentOnDone();
        Debug.Log("agent is done");
    }

    public override void AgentReset()
    {
        //this is where we submit the input data, i think
        rec = Random.Range(0, inputs.Count);
        inp = inputs[rec];
        expectedAnswer = answers[rec][0];
        text.text = "Inputs = [" + inp[0] + "," + inp[1] + "], Expecting = " + expectedAnswer;
    }

}

更新 对不起,我忘了提,我在我的 Mac 上按照统一 ml GitHub 页面上的设置指南安装了 python 东西,所以我只运行“mlagents-learn config/trainer_config.yaml --run-id=firstrun --train "然后统一按播放键开始训练过程。

在终端窗口中,我得到了关于训练过程的反馈,起初一切似乎都正常,因为我得到了一个带有奖励值的打印输出,但是在下一个打印输出上它说“自上次总结以来没有完成任何一集”但我有不知道这意味着什么或问题是什么。

我按照要求在场景中有大脑和学院,因为我遵循了 unity ml 项目中的“基本”示例,但由于某种原因它不起作用,但所有示例都这样做,所以我猜这是我的代码中的东西,而不是我的配置,但我不知道是什么。

标签: c#unity3dmachine-learningml-agent

解决方案


推荐阅读