public override void AgentAction(float[] vectorAction, string textAction) { var forward = vectorAction[0]; var rotation = vectorAction[1]; switch (forward) { case 1: CarDriver.Accelerate(1); break; case 2: CarDriver.Accelerate(-1); break; default: CarDriver.Accelerate(0); CarDriver.Brake(); break; } switch (rotation) { case 1: CarDriver.Steer(-1); break; case 2: CarDriver.Steer(1); break; default: CarDriver.Steer(0); break; } AddReward(-(1f / agentParameters.maxStep) * (Vector3.Distance(transform.position, TargetPoint.transform.position) / StartDistance)); var angle = Mathf.Abs(Vector3.Dot(transform.forward, transform.InverseTransformVector(TargetPoint.transform.position))); //if(angle <= 30) //{ // AddReward(0.03f); //} //else //{ // AddReward(-0.03f); //} }
//------------------------------------------------------------------ public void Start() { Car closest = driver.FindClosestCar(driver.Car.Lane.Cars.Where(driver.IsCarAhead)); if (driver.Distance(closest) > driver.SafeZone.LowDanger) { driver.Accelerate(this); } }