Beispiel #1
0
 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;
         }
     }
 }
Beispiel #2
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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
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;
 }