Esempio n. 1
0
    private void YieldRewards()
    {
        // sudden deaths
        if (BallOut() || PoleOut())
        {
            statistics.AddOut();
            ResetPole();
            // EndEpisode();
        }

        if (BallRest())
        {
            // Debug.Log("Ball rests");
            AddReward(BallRestPenalty);
            statistics.AddRest();
            SpawnTheBall();
            // EndEpisode();
        }

        // Rewards
        AddReward(BallContact());

        //for precise kicks towards the goal
        AddReward(AimingAccuracy());
        AddReward(TargetApproximation());

        //try to penalty heavy rotation
        AddReward(HeavyRotation());


        if (_ballColliders.touchedHomeZone)
        {
            // Debug.Log("penalty area");
            AddReward(LameDefensePenalty);
            _ballColliders.touchedHomeZone = false;
        }

        // if (SlowDownTheBall())
        //     AddReward(0.3f);

        // Toooor
        if (_ballColliders.touchedTarget)
        {
            AddReward(Goal);
            _ballColliders.ResetValues();
            EndEpisode();
        }

        // doh, own goal
        if (_ballColliders.touchedSelfGoal)
        {
            AddReward(SelfGoal);
            _ballColliders.ResetValues();
            EndEpisode();
        }
    }
Esempio n. 2
0
    public override void OnActionReceived(float[] vectorAction)
    {
        // Actions, size = 1 //weil nur Drehung der einen Achse, würde ich sagen.
        Vector3 controlSignal = Vector3.zero;

        controlSignal.x = vectorAction[0] * 200;
        pole.AddTorque(controlSignal);

        // sudden deaths
        if (BallOut())
        {
            Debug.Log("Out!");
            EndEpisode();
        }

        if (BallRest())
        {
            EndEpisode();
        }

        // Rewards
        if (_ballColliders.touchedHomeZone)
        {
            // Debug.Log("Strafraum");
            SetReward(-0.3f);
            _ballColliders.touchedHomeZone = false;
        }

        if (SlowDownTheBall())
        {
            SetReward(0.3f);
        }

        // Reached target
        if (_ballColliders.touchedTarget)
        {
            // Debug.Log("Toooor");
            SetReward(1.0f);
            _ballColliders.ResetValues();
            EndEpisode();
        }

        // Tor kassiert
        if (_ballColliders.touchedSelfGoal)
        {
            // Debug.Log("EIGENTOR");
            SetReward(-1.0f);
            _ballColliders.ResetValues();
            EndEpisode();
        }

        cumulativeReward.text = GetCumulativeReward().ToString("R");
    }