コード例 #1
0
    public override void AgentAction(float[] vectorAction, string textAction)
    {
        bool[] inputs = new bool[4];
        for (int i = 0; i < 4; i++)
        {
            inputs[i] = vectorAction[i] > 0f && vectorAction[i] <= 1f;
        }
        Catapult.Controls(inputs, Catapult.leftSide ? 1 : 2);

        //SetReward(0.1f);

        //reward -= (previousNoOfDead - MyPop.noOfDead) * 1f/maxStep;
        foreach (Vector2 explosion in explosions)
        {
            if (OtherPop.bounds.Contains(explosion))
            {
                SetReward(0.3f);
            }

            //else
            //reward -= 3f / maxStep;
        }

        //reward -= noOfOutPlayingArea * 3f / maxStep;

        if (Time.timeScale < 5)
        {
            Monitor.SetActive(true);
            Monitor.Log("Reward", GetReward() * 10, MonitorType.slider, transform);
            Monitor.Log("Deads", MyPop.noOfDead / 10f, MonitorType.slider, transform);
            Monitor.Log("Flying", flyingBodies.Count / 10f, MonitorType.slider, transform);
        }

        if (MyPop.noOfDead == 0 && Catapult.NoOfLoadedBodies == 0 && flyingBodies.Count == 0)
        {
            Done();
        }
        previousNoOfDead = MyPop.noOfDead;
        explosions.Clear();
        noOfOutPlayingArea = 0;
    }