目录
1.目的
1.1 记录一下
2.参考
1.
3.注意
4. 课时 7 : 104 - 创建场景
4.1 创建代码: MyRollerAgent
5. 课时 8 : 105 - Agent里面的四个函数
6. 课时 9 : 106 - 手动操作智能体
7. 课时 10 : 107 - 重置游戏的函数
8. 课时 11 : 108 - 设置智能体奖励
快速入门Unity机器学习:一:_Smart_zy的博客-CSDN博客目录1.目的1.1 记录一下2.参考1.SIKI学院3.注意4.课时 3 : 100 - Unity机器学习案例下载5.课时 4 : 101 - 狗子的学习6.课时 5 : 102 - 安装Anaconda并且创建环境6.1 安装Anaconda6.2 运行Anaconda6.3 搜索 mlagents1.目的1.1 记录一下2.参考1.SIKI学院登录 - SiKi学院 - 生命不息,学习不止!siki老师的Unity3D专...https://blog.csdn.net/qq_40544338/article/details/124746037
版本
- windows 10 家庭版
- Anaconda Navigator 1.9.7
- Unity 2019.3.15f1
接着
快速入门Unity机器学习:一:_Smart_zy的博客-CSDN博客
俩个球给不同的材质球
AI球给RigidBody组件,使其可以碰撞
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Unity.MLAgents;//【104创建场景:添加】
using Unity.MLAgents.Sensors;//【104创建场景:添加】
public class MyRollerAgent : Agent
{
// Start is called before the first frame update
void Start()
{
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Unity.MLAgents;//【104创建场景:添加】
using Unity.MLAgents.Sensors;//【104创建场景:添加】
///
/// 【function:球代理】【Time:2022 05 14】【104创建场景:添加】
///
public class MyRollerAgent : Agent
{
/// 目标的坐标【105Agent里面的四个函数:添加】
public Transform target;
/// rBody【105Agent里面的四个函数:添加】
private Rigidbody rBody;
void Start()
{
rBody = GetComponent();//【105Agent里面的四个函数:添加】
}
///
/// 【function:进入新的一轮时候调用的函数】【Time:2022 05 14】【105Agent里面的四个函数:添加】
///
public override void OnEpisodeBegin()
{
base.OnEpisodeBegin();
}
///
/// 【function:收集观察的结果】【Time:2022 05 14】【105Agent里面的四个函数:添加】
///
///
public override void CollectObservations(VectorSensor sensor)
{
base.CollectObservations(sensor);
}
///
/// 【function:接受动作,是否给予奖励】【Time:2022 05 14】【105Agent里面的四个函数:添加】
///
///
public override void OnActionReceived(float[] vectorAction)
{
base.OnActionReceived(vectorAction);
}
///
/// 【function:手动操作智能体】【Time:2022 05 14】【105Agent里面的四个函数:添加】
///
///
public override void Heuristic(float[] actionsOut)
{
base.Heuristic(actionsOut);
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Unity.MLAgents;//【104创建场景:添加】
using Unity.MLAgents.Sensors;//【104创建场景:添加】
///
/// 【function:球代理】【Time:2022 05 14】【104创建场景:添加】
///
public class MyRollerAgent : Agent
{
/// 目标的坐标【105Agent里面的四个函数:添加】
public Transform target;
/// rBody【105Agent里面的四个函数:添加】
private Rigidbody rBody;
/// rBody【106手动操作智能体:添加】
private float speed = 10;
void Start()
{
rBody = GetComponent();//【105Agent里面的四个函数:添加】
}
///
/// 【function:进入新的一轮时候调用的函数】【Time:2022 05 14】【105Agent里面的四个函数:添加】
///
public override void OnEpisodeBegin()
{
base.OnEpisodeBegin();
}
///
/// 【function:收集观察的结果】【Time:2022 05 14】【105Agent里面的四个函数:添加】
///
///
public override void CollectObservations(VectorSensor sensor)
{
base.CollectObservations(sensor);
}
///
/// 【function:接受动作,是否给予奖励】【Time:2022 05 14】【105Agent里面的四个函数:添加】
///
///
public override void OnActionReceived(float[] vectorAction)
{
print("Horizontal:"+vectorAction[0]);//【106手动操作智能体:添加】
print("Vertical:"+vectorAction[1]);//【106手动操作智能体:添加】
Vector3 control = Vector3.zero;//【106手动操作智能体:添加】
control.x = vectorAction[0];//【106手动操作智能体:添加】
control.z = vectorAction[1];//【106手动操作智能体:添加】
rBody.AddForce(control * speed);//【106手动操作智能体:添加】
}
///
/// 【function:手动操作智能体】【Time:2022 05 14】【105Agent里面的四个函数:添加】
///
///
public override void Heuristic(float[] actionsOut)
{
//拿到水平和垂直方向
actionsOut[0] = Input.GetAxis("Horizontal");//【106手动操作智能体:添加】
actionsOut[1] = Input.GetAxis("Vertical");//【106手动操作智能体:添加】
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Unity.MLAgents;//【104创建场景:添加】
using Unity.MLAgents.Sensors;//【104创建场景:添加】
///
/// 【function:球代理】【Time:2022 05 14】【104创建场景:添加】
///
public class MyRollerAgent : Agent
{
/// 目标的坐标【105Agent里面的四个函数:添加】
public Transform target;
/// rBody【105Agent里面的四个函数:添加】
private Rigidbody rBody;
/// rBody【106手动操作智能体:添加】
private float speed = 10;
void Start()
{
rBody = GetComponent();//【105Agent里面的四个函数:添加】
}
///
/// 【function:进入新的一轮时候调用的函数】【Time:2022 05 14】【105Agent里面的四个函数:添加】
///
public override void OnEpisodeBegin()
{
print("OnEpisodeBegin");
//重新开始,设置小球的初始位置
this.transform.position = new Vector3(0, 0.5f, 0);//【107重置游戏的函数:添加】
this.rBody.velocity = Vector3.zero;//速度【107重置游戏的函数:添加】
this.rBody.angularVelocity = Vector3.zero;//旋转【107重置游戏的函数:添加】
}
///
/// 【function:收集观察的结果】【Time:2022 05 14】【105Agent里面的四个函数:添加】
///
///
public override void CollectObservations(VectorSensor sensor)
{
base.CollectObservations(sensor);
}
///
/// 【function:接受动作,是否给予奖励】【Time:2022 05 14】【105Agent里面的四个函数:添加】
///
///
public override void OnActionReceived(float[] vectorAction)
{
print("Horizontal:"+vectorAction[0]);//【106手动操作智能体:添加】
print("Vertical:"+vectorAction[1]);//【106手动操作智能体:添加】
Vector3 control = Vector3.zero;//【106手动操作智能体:添加】
control.x = vectorAction[0];//【106手动操作智能体:添加】
control.z = vectorAction[1];//【106手动操作智能体:添加】
rBody.AddForce(control * speed);//【106手动操作智能体:添加】
}
///
/// 【function:手动操作智能体】【Time:2022 05 14】【105Agent里面的四个函数:添加】
///
///
public override void Heuristic(float[] actionsOut)
{
//拿到水平和垂直方向
actionsOut[0] = Input.GetAxis("Horizontal");//【106手动操作智能体:添加】
actionsOut[1] = Input.GetAxis("Vertical");//【106手动操作智能体:添加】
}
}
Max Step:1秒钟,重新开始测试
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Unity.MLAgents;//【104创建场景:添加】
using Unity.MLAgents.Sensors;//【104创建场景:添加】
///
/// 【function:球代理】【Time:2022 05 14】【104创建场景:添加】
///
public class MyRollerAgent : Agent
{
/// 目标的坐标【105Agent里面的四个函数:添加】
public Transform target;
/// rBody【105Agent里面的四个函数:添加】
private Rigidbody rBody;
/// rBody【106手动操作智能体:添加】
private float speed = 10;
void Start()
{
rBody = GetComponent();//【105Agent里面的四个函数:添加】
}
///
/// 【function:进入新的一轮时候调用的函数】【Time:2022 05 14】【105Agent里面的四个函数:添加】
///
public override void OnEpisodeBegin()
{
print("OnEpisodeBegin");
//重新开始,设置小球的初始位置
this.transform.position = new Vector3(0, 0.5f, 0);//【107重置游戏的函数:添加】
this.rBody.velocity = Vector3.zero;//速度【107重置游戏的函数:添加】
this.rBody.angularVelocity = Vector3.zero;//旋转【107重置游戏的函数:添加】
}
///
/// 【function:收集观察的结果】【Time:2022 05 14】【105Agent里面的四个函数:添加】
///
///
public override void CollectObservations(VectorSensor sensor)
{
base.CollectObservations(sensor);
}
///
/// 【function:接受动作,是否给予奖励】【Time:2022 05 14】【105Agent里面的四个函数:添加】
///
///
public override void OnActionReceived(float[] vectorAction)
{
print("Horizontal:"+vectorAction[0]);//【106手动操作智能体:添加】
print("Vertical:"+vectorAction[1]);//【106手动操作智能体:添加】
Vector3 control = Vector3.zero;//【106手动操作智能体:添加】
control.x = vectorAction[0];//【106手动操作智能体:添加】
control.z = vectorAction[1];//【106手动操作智能体:添加】
rBody.AddForce(control * speed);//移动小球【106手动操作智能体:添加】
//狗子出界了,使用y去判断
if (this.transform.position.y<0)
{
EndEpisode();//结束这一轮的测试【108设置智能体奖励:添加】
}
//狗子吃到东西了
float distance = Vector3.Distance(this.transform.position, target.position);//给定奖励【108设置智能体奖励:添加】
if (distance<1.41f)
{
SetReward(1);//给定奖励【108设置智能体奖励:添加】
EndEpisode();//给定奖励【108设置智能体奖励:添加】
}
}
///
/// 【function:手动操作智能体】【Time:2022 05 14】【105Agent里面的四个函数:添加】
///
///
public override void Heuristic(float[] actionsOut)
{
//拿到水平和垂直方向
actionsOut[0] = Input.GetAxis("Horizontal");//【106手动操作智能体:添加】
actionsOut[1] = Input.GetAxis("Vertical");//【106手动操作智能体:添加】
}
}