Агенты Unity ML - Пример простой логики "и" - ни один эпизод не был завершен - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь создать действительно простой пример, в котором я обучаю агента значениям "и", т.е.

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;
    }

}

ОБНОВЛЕНИЕ Извините, я забыл упомянуть, я следовал руководству по установке на странице GitHub Unity ml на моем Mac и установил Python, так чтоя просто запускаю "mlagents-learn config / trainer_config.yaml --run-id = firstrun --train" и затем нажимаю кнопку воспроизведения в единстве, чтобы начать процесс обучения.

В окне терминала я получаю обратную связьв процессе обучения сначала кажется, что все работает нормально, так как я получаю распечатку со значением вознаграждения, но затем на следующей распечатке написано «эпизод не завершен со времени последнего резюме», но я понятия не имею, что это значит или чтопроблема в том.

У меня есть мозг и академия на сцене, как и требовалось, поскольку я следовал «базовому» примеру в проекте Unity ML, но по какой-то причине он не работает, но все примеры делают это, яЯ предполагаю, что это что-то в моем коде, а не в моей конфигурации, но я не могу понять, что.

...