private Action GetAction() { if (groupMod.WithinGCM()) { return(Action.Driving); } return(Action.Collecting); }
private void LateUpdate() { // 数据统计 if (Config.useStatistical) { // 统计占比 if (groupMod.WithinGCM()) { statistical.driveStep++; } else { statistical.collectStep++; } statistical.step++; statistical.sheepNum = Config.N; statistical.timeOK += Time.fixedDeltaTime; } if (groupMod.IsTargetOk() && groupMod.WithinGCM()) { ReLoad(); } }
public override void AgentAction(float[] vectorAction, string textAction) { time += Time.deltaTime; if (brain.brainParameters.vectorActionSpaceType == SpaceType.continuous) { Vector3 vec = new Vector3(vectorAction[0], vectorAction[1]); Vector2 GCM = groupMod.GetGCM(); if (Vector2.Dot(vec, (GCM - new Vector2(transform.position.x, transform.position.y))) < 0) { vec = new Vector2(-vec.x, -vec.y); } vec.Normalize(); float speed = Mathf.Clamp(vectorAction[2], 1f, 2f); gameObject.transform.position += speed * vec; } if (groupMod.IsTargetOk()) { AddReward(1000f); Done(); } else { if (time >= 20) { AddReward(-200f); Done(); } if (groupMod.WithinGCM()) { AddReward(1); } float dis = CalDistance(); AddReward(Mathf.Clamp((lastDis - dis), -0.1f, 0.1f)); } AddReward(-0.05f); }