public void DrawRace(Policy p, RaceViewer form) { form.StateValues = null; form.Start(); //form.ShowDialog(); while (form.Active) { Thread.Sleep(100); RaceCarState s = (RaceCarState)StartState; VelocityAction a = null; while (form.Active && !IsGoalState(s)) { a = (VelocityAction)p.GetAction(s); if (a == null) { break; } form.CarState = s; //form.Invoke(form.RefreshForm); //form.SetCarState(s); Thread.Sleep(100); RaceCarState sTag = (RaceCarState)s.Apply(a); s = sTag; } } }
public override IEnumerable <State> Successors(Action a) { RaceCarState sTagNoApply = new RaceCarState(this); RaceCarState sTagApply = new RaceCarState(this); sTagApply.Apply((VelocityAction)a, true); sTagNoApply.Apply((VelocityAction)a, false); yield return(sTagApply); yield return(sTagNoApply); }
public override double TransitionProbability(Action a, State sTag) { RaceCarState sTagApply = new RaceCarState(this); sTagApply.Apply((VelocityAction)a, true); if (sTag.Equals(sTagApply)) { return(RaceTrack.ACTION_SUCCESS_PROBABILITY); } RaceCarState sTagNoApply = new RaceCarState(this); sTagNoApply.Apply((VelocityAction)a, false); if (sTag.Equals(sTagNoApply)) { return(1 - RaceTrack.ACTION_SUCCESS_PROBABILITY); } return(0.0); }
public override double Reward(Action a) { if (m_rtTrack.IsRaceEnd(this)) { return(m_rtTrack.MaxReward); } if (m_rtTrack.IsGoalState(this)) { return(0.0); } RaceCarState sTagApply = new RaceCarState(this); bool bNoCollision = sTagApply.Apply((VelocityAction)a, true); if (bNoCollision) { return(-0.01); } else { return(-sTagApply.Velocity); } }
public override State Apply(Action a) { RaceCarState sTag = new RaceCarState(this); sTag.Apply((VelocityAction)a, RandomGenerator.NextDouble() < RaceTrack.ACTION_SUCCESS_PROBABILITY); return sTag; }
public override double TransitionProbability(Action a, State sTag) { RaceCarState sTagApply = new RaceCarState(this); sTagApply.Apply((VelocityAction)a, true); if (sTag.Equals(sTagApply)) return RaceTrack.ACTION_SUCCESS_PROBABILITY; RaceCarState sTagNoApply = new RaceCarState(this); sTagNoApply.Apply((VelocityAction)a, false); if (sTag.Equals(sTagNoApply)) return 1 - RaceTrack.ACTION_SUCCESS_PROBABILITY; return 0.0; }
public override IEnumerable<State> Successors(Action a) { RaceCarState sTagNoApply = new RaceCarState(this); RaceCarState sTagApply = new RaceCarState(this); sTagApply.Apply((VelocityAction)a, true); sTagNoApply.Apply((VelocityAction)a, false); yield return sTagApply; yield return sTagNoApply; }
public override double Reward(Action a) { if (m_rtTrack.IsRaceEnd(this)) return m_rtTrack.MaxReward; if (m_rtTrack.IsGoalState(this)) return 0.0; RaceCarState sTagApply = new RaceCarState(this); bool bNoCollision = sTagApply.Apply((VelocityAction)a, true); if (bNoCollision) return -0.01; else return -sTagApply.Velocity; }