Unity 机器学习代理工具包 (ML-Agents) 是一个开源项目,它使游戏和模拟能够作为训练智能代理的环境。
您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 

103 行
4.2 KiB

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.Linq;
using Newtonsoft.Json;
using System.Net;
using System.Net.Sockets;
using System.Text;
public class GridAcademy : Academy
{
[HideInInspector]
public List<GameObject> actorObjs;
[HideInInspector]
public string[] players;
[HideInInspector]
public GameObject trueAgent;
[HideInInspector]
public GameObject visualAgent;
public override void InitializeAcademy()
{
}
public void SetEnvironment()
{
trueAgent = GameObject.Find("trueAgent");
List<string> playersList = new List<string>();
actorObjs = new List<GameObject>();
for (int i = 0; i < (int)resetParameters["numObstacles"]; i++)
{
playersList.Add("pit");
}
playersList.Add("agent");
for (int i = 0; i < (int)resetParameters["numGoals"]; i++)
{
playersList.Add("goal");
}
players = playersList.ToArray();
Camera cam = GameObject.Find("Main Camera").GetComponent<Camera>();
cam.transform.position = new Vector3(-((int)resetParameters["gridSize"] - 1) / 2f, (int)resetParameters["gridSize"] * 1.25f, -((int)resetParameters["gridSize"] - 1) / 2f);
cam.orthographicSize = ((int)resetParameters["gridSize"] + 5f) / 2f;
GameObject.Find("Plane").transform.localScale = new Vector3((int)resetParameters["gridSize"] / 10.0f, 1f, (int)resetParameters["gridSize"] / 10.0f);
GameObject.Find("Plane").transform.position = new Vector3(((int)resetParameters["gridSize"] - 1) / 2f, -0.5f, ((int)resetParameters["gridSize"] - 1) / 2f);
GameObject.Find("sN").transform.localScale = new Vector3(1, 1, (int)resetParameters["gridSize"] + 2);
GameObject.Find("sS").transform.localScale = new Vector3(1, 1, (int)resetParameters["gridSize"] + 2);
GameObject.Find("sN").transform.position = new Vector3(((int)resetParameters["gridSize"] - 1) / 2f, 0.0f, (int)resetParameters["gridSize"]);
GameObject.Find("sS").transform.position = new Vector3(((int)resetParameters["gridSize"] - 1) / 2f, 0.0f, -1);
GameObject.Find("sE").transform.localScale = new Vector3(1, 1, (int)resetParameters["gridSize"] + 2);
GameObject.Find("sW").transform.localScale = new Vector3(1, 1, (int)resetParameters["gridSize"] + 2);
GameObject.Find("sE").transform.position = new Vector3((int)resetParameters["gridSize"], 0.0f, ((int)resetParameters["gridSize"] - 1) / 2f);
GameObject.Find("sW").transform.position = new Vector3(-1, 0.0f, ((int)resetParameters["gridSize"] - 1) / 2f);
Camera aCam = GameObject.Find("agentCam").GetComponent<Camera>();
aCam.orthographicSize = ((int)resetParameters["gridSize"]) / 2f;
aCam.transform.position = new Vector3(((int)resetParameters["gridSize"] - 1) / 2f, (int)resetParameters["gridSize"] + 1f, ((int)resetParameters["gridSize"] - 1) / 2f);
}
public override void AcademyReset()
{
foreach (GameObject actor in actorObjs)
{
DestroyImmediate(actor);
}
SetEnvironment();
actorObjs = new List<GameObject>();
HashSet<int> numbers = new HashSet<int>();
while (numbers.Count < players.Length)
{
numbers.Add(Random.Range(0, (int)resetParameters["gridSize"] * (int)resetParameters["gridSize"]));
}
int[] numbersA = Enumerable.ToArray(numbers);
for (int i = 0; i < players.Length; i++)
{
int x = (numbersA[i]) / (int)resetParameters["gridSize"];
int y = (numbersA[i]) % (int)resetParameters["gridSize"];
GameObject actorObj = (GameObject)GameObject.Instantiate(Resources.Load(players[i]));
actorObj.transform.position = new Vector3(x, -0.25f, y);
actorObj.name = players[i];
actorObjs.Add(actorObj);
if (players[i] == "agent")
{
trueAgent.transform.position = actorObj.transform.position;
trueAgent.transform.rotation = actorObj.transform.rotation;
visualAgent = actorObj;
}
}
}
public override void AcademyStep()
{
}
}