implementation of drecon in unity 2022 lts
forked from:
https://github.com/joanllobera/marathon-envs
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.4 KiB
51 lines
1.4 KiB
9 months ago
|
using System.Collections;
|
||
|
using System.Collections.Generic;
|
||
|
using System.Linq;
|
||
|
using Unity.MLAgents;
|
||
|
using UnityEngine;
|
||
|
using ManyWorlds;
|
||
|
|
||
|
public class Scorer : MonoBehaviour
|
||
|
{
|
||
|
public int TotalEpisodesToScore = 100;
|
||
|
public int EpisodesScored;
|
||
|
|
||
|
public float AverageScore;
|
||
|
public float StdDiv;
|
||
|
public string ScoreInfo;
|
||
|
public List<float> scores;
|
||
|
public List<string> scoreInfos;
|
||
|
[TextArea]
|
||
|
public string ScoreReport;
|
||
|
// Start is called before the first frame update
|
||
|
void Start()
|
||
|
{
|
||
|
scores = new List<float>(TotalEpisodesToScore);
|
||
|
scoreInfos = new List<string>(TotalEpisodesToScore);
|
||
|
}
|
||
|
|
||
|
// Update is called once per frame
|
||
|
void Update()
|
||
|
{
|
||
|
|
||
|
}
|
||
|
|
||
|
public void ReportScore(float score, string scoreInfo)
|
||
|
{
|
||
|
if (EpisodesScored >= TotalEpisodesToScore)
|
||
|
return;
|
||
|
scores.Add(score);
|
||
|
scoreInfos.Add(scoreInfo);
|
||
|
ScoreInfo = scoreInfo;
|
||
|
EpisodesScored = scores.Count;
|
||
|
AverageScore = scores.Average();
|
||
|
var sum = scores.Sum(d => (d - AverageScore) * (d - AverageScore));
|
||
|
StdDiv = Mathf.Sqrt(sum / EpisodesScored);
|
||
|
string name = string.Empty;
|
||
|
var spawnEnv = FindObjectOfType<SpawnableEnv>();
|
||
|
if (spawnEnv != null)
|
||
|
name = $"{spawnEnv.gameObject.name} ";
|
||
|
ScoreReport = $"{name}AveScore:{AverageScore}, StdDiv:{StdDiv} over {EpisodesScored} episodes using {scoreInfo}";
|
||
|
}
|
||
|
}
|