快速入门Unity机器学习:二:

目录

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 - 设置智能体奖励


1.目的

1.1 记录一下

2.参考

1.

快速入门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

3.注意

版本

  • windows 10 家庭版
  • Anaconda Navigator 1.9.7
  • Unity 2019.3.15f1

4. 课时 7 : 104 - 创建场景

接着

快速入门Unity机器学习:一:_Smart_zy的博客-CSDN博客

 

 

俩个球给不同的材质球

AI球给RigidBody组件,使其可以碰撞 

 

4.1 创建代码: MyRollerAgent

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()
    {
        
    }
}

5. 课时 8 : 105 - Agent里面的四个函数

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

using Unity.MLAgents;//【104创建场景:添加】
using Unity.MLAgents.Sensors;//【104创建场景:添加】

/// <summary>
/// 【function:球代理】【Time:2022 05 14】【104创建场景:添加】
/// </summary>
public class MyRollerAgent : Agent
{
    /// <summary>目标的坐标【105Agent里面的四个函数:添加】</summary>
    public Transform target;

    /// <summary>rBody【105Agent里面的四个函数:添加】</summary>
    private Rigidbody rBody;

    void Start()
    {
        rBody = GetComponent<Rigidbody>();//【105Agent里面的四个函数:添加】
    }

    /// <summary>
    /// 【function:进入新的一轮时候调用的函数】【Time:2022 05 14】【105Agent里面的四个函数:添加】
    /// </summary>
    public override void OnEpisodeBegin()
    {
        base.OnEpisodeBegin();
    }

    /// <summary>
    /// 【function:收集观察的结果】【Time:2022 05 14】【105Agent里面的四个函数:添加】
    /// </summary>
    /// <param name="sensor"></param>
    public override void CollectObservations(VectorSensor sensor)
    {
        base.CollectObservations(sensor);
    }

    /// <summary>
    /// 【function:接受动作,是否给予奖励】【Time:2022 05 14】【105Agent里面的四个函数:添加】
    /// </summary>
    /// <param name="vectorAction"></param>
    public override void OnActionReceived(float[] vectorAction)
    {
        base.OnActionReceived(vectorAction);
    }

    /// <summary>
    /// 【function:手动操作智能体】【Time:2022 05 14】【105Agent里面的四个函数:添加】
    /// </summary>
    /// <param name="actionsOut"></param>
    public override void Heuristic(float[] actionsOut)
    {
        base.Heuristic(actionsOut);
    }

}

6. 课时 9 : 106 - 手动操作智能体

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

using Unity.MLAgents;//【104创建场景:添加】
using Unity.MLAgents.Sensors;//【104创建场景:添加】

/// <summary>
/// 【function:球代理】【Time:2022 05 14】【104创建场景:添加】
/// </summary>
public class MyRollerAgent : Agent
{
    /// <summary>目标的坐标【105Agent里面的四个函数:添加】</summary>
    public Transform target;

    /// <summary>rBody【105Agent里面的四个函数:添加】</summary>
    private Rigidbody rBody;

    /// <summary>rBody【106手动操作智能体:添加】</summary>
    private float speed = 10;

    void Start()
    {
        rBody = GetComponent<Rigidbody>();//【105Agent里面的四个函数:添加】
    }

    /// <summary>
    /// 【function:进入新的一轮时候调用的函数】【Time:2022 05 14】【105Agent里面的四个函数:添加】
    /// </summary>
    public override void OnEpisodeBegin()
    {
        base.OnEpisodeBegin();
    }

    /// <summary>
    /// 【function:收集观察的结果】【Time:2022 05 14】【105Agent里面的四个函数:添加】
    /// </summary>
    /// <param name="sensor"></param>
    public override void CollectObservations(VectorSensor sensor)
    {
        base.CollectObservations(sensor);
    }

    /// <summary>
    /// 【function:接受动作,是否给予奖励】【Time:2022 05 14】【105Agent里面的四个函数:添加】
    /// </summary>
    /// <param name="vectorAction"></param>
    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手动操作智能体:添加】
    }

    /// <summary>
    /// 【function:手动操作智能体】【Time:2022 05 14】【105Agent里面的四个函数:添加】
    /// </summary>
    /// <param name="actionsOut"></param>
    public override void Heuristic(float[] actionsOut)
    {
        //拿到水平和垂直方向
        actionsOut[0] = Input.GetAxis("Horizontal");//【106手动操作智能体:添加】
        actionsOut[1] = Input.GetAxis("Vertical");//【106手动操作智能体:添加】
    }

}

 

7. 课时 10 : 107 - 重置游戏的函数

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

using Unity.MLAgents;//【104创建场景:添加】
using Unity.MLAgents.Sensors;//【104创建场景:添加】

/// <summary>
/// 【function:球代理】【Time:2022 05 14】【104创建场景:添加】
/// </summary>
public class MyRollerAgent : Agent
{
    /// <summary>目标的坐标【105Agent里面的四个函数:添加】</summary>
    public Transform target;

    /// <summary>rBody【105Agent里面的四个函数:添加】</summary>
    private Rigidbody rBody;

    /// <summary>rBody【106手动操作智能体:添加】</summary>
    private float speed = 10;

    void Start()
    {
        rBody = GetComponent<Rigidbody>();//【105Agent里面的四个函数:添加】
    }

    /// <summary>
    /// 【function:进入新的一轮时候调用的函数】【Time:2022 05 14】【105Agent里面的四个函数:添加】
    /// </summary>
    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重置游戏的函数:添加】
    }

    /// <summary>
    /// 【function:收集观察的结果】【Time:2022 05 14】【105Agent里面的四个函数:添加】
    /// </summary>
    /// <param name="sensor"></param>
    public override void CollectObservations(VectorSensor sensor)
    {
        base.CollectObservations(sensor);
    }

    /// <summary>
    /// 【function:接受动作,是否给予奖励】【Time:2022 05 14】【105Agent里面的四个函数:添加】
    /// </summary>
    /// <param name="vectorAction"></param>
    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手动操作智能体:添加】
    }

    /// <summary>
    /// 【function:手动操作智能体】【Time:2022 05 14】【105Agent里面的四个函数:添加】
    /// </summary>
    /// <param name="actionsOut"></param>
    public override void Heuristic(float[] actionsOut)
    {
        //拿到水平和垂直方向
        actionsOut[0] = Input.GetAxis("Horizontal");//【106手动操作智能体:添加】
        actionsOut[1] = Input.GetAxis("Vertical");//【106手动操作智能体:添加】
    }

}

Max Step:1秒钟,重新开始测试

8. 课时 11 : 108 - 设置智能体奖励

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

using Unity.MLAgents;//【104创建场景:添加】
using Unity.MLAgents.Sensors;//【104创建场景:添加】

/// <summary>
/// 【function:球代理】【Time:2022 05 14】【104创建场景:添加】
/// </summary>
public class MyRollerAgent : Agent
{
    /// <summary>目标的坐标【105Agent里面的四个函数:添加】</summary>
    public Transform target;

    /// <summary>rBody【105Agent里面的四个函数:添加】</summary>
    private Rigidbody rBody;

    /// <summary>rBody【106手动操作智能体:添加】</summary>
    private float speed = 10;

    void Start()
    {
        rBody = GetComponent<Rigidbody>();//【105Agent里面的四个函数:添加】
    }

    /// <summary>
    /// 【function:进入新的一轮时候调用的函数】【Time:2022 05 14】【105Agent里面的四个函数:添加】
    /// </summary>
    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重置游戏的函数:添加】
    }

    /// <summary>
    /// 【function:收集观察的结果】【Time:2022 05 14】【105Agent里面的四个函数:添加】
    /// </summary>
    /// <param name="sensor"></param>
    public override void CollectObservations(VectorSensor sensor)
    {
        base.CollectObservations(sensor);
    }

    /// <summary>
    /// 【function:接受动作,是否给予奖励】【Time:2022 05 14】【105Agent里面的四个函数:添加】
    /// </summary>
    /// <param name="vectorAction"></param>
    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设置智能体奖励:添加】 
        }

    }

    /// <summary>
    /// 【function:手动操作智能体】【Time:2022 05 14】【105Agent里面的四个函数:添加】
    /// </summary>
    /// <param name="actionsOut"></param>
    public override void Heuristic(float[] actionsOut)
    {
        //拿到水平和垂直方向
        actionsOut[0] = Input.GetAxis("Horizontal");//【106手动操作智能体:添加】
        actionsOut[1] = Input.GetAxis("Vertical");//【106手动操作智能体:添加】
    }

}

猜你喜欢

转载自blog.csdn.net/qq_40544338/article/details/124763962