我正在尝试创建一个非常简单的示例,在该示例中,我使用“和”门值来训练代理,即
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上unity ml GitHub页面上的设置指南,并安装了python工具,因此我只运行“ mlagents-learn config / trainer_config.yaml --run-id = firstrun --train”然后统一按下播放按钮以开始训练过程。
在终端窗口中,我收到有关培训过程的反馈,起初,一切似乎都正常,因为我得到了带有奖励值的打印输出,但是随后在下一个打印输出中,它说“自上次总结以来没有完成任何情节”但我不知道这意味着什么或问题所在。
我按照unity ml项目中的“ Basic”示例进行操作时,我在现场有需要的大脑和学院,但是由于某些原因,它不起作用,但是所有示例都如此,我猜这是我的想法代码而不是我的配置,但是我无法计算出什么。