Example #1
0
 /// <summary>
 /// すべての取り得るStateを生成
 /// </summary>
 /// <param name="Length">Multiplexerの長さ</param>
 /// <returns>すべての取り得るState</returns>
 public static State[] AllState(int Length)
 {
     State[] All = new State[(int)Math.Pow(Number, Length)];
     for (int i = 0; i < All.Length; i++)
     {
         string S = Convert.ToString(i, Number);
         // 頭に足りない分0を付加
         while (S.Length < Length)
         {
             S = "0" + S;
         }
         All[i] = new IntegralState(S);
     }
     return(All);
 }
        // situationに合うものをPopulationから取り、足りないときはCovering
        protected override void Covering(State S, Population P)
        {
            while (this.CList.Count == 0)
            {
                // situationにあうものをPopulationから探す
                this.CList = P.MatchSituation(S);

                if (CList.Count == 0)
                {
                    // 一部を変化させたCondition
                    State state = new IntegralState(S);
                    state.Covering();

                    Classifier CC;

                    if (Configuration.ASName == "CS" || Configuration.ASName == "MaxCS" || Configuration.ASName == "Max" || Configuration.ASName == "Updatee0CS")
                    {
                        CC = new SigmaNormalClassifier(state, Configuration.ExpThreshold);
                    }
                    else
                    {
                        CC = new NormalClassifier(state);
                    }

                    P.Add(CC);
                    // 整理
                    P.Delete();
                    this.CList = new List <Classifier>();
                }
            }

            /*while( this.CList.Count == 0 )
             *  {
             *          // situationにあうものをPopulationから探す
             *          this.CList = P.MatchSituation( S );
             *
             *          // Actionの種類
             *          List<char> Actions = new List<char>();
             *          int NumberOfActions = 0;
             *
             *          // Multiplexer(2進数)
             *          if( Configuration.Type == "Binary" )
             *          {
             *                  Actions.Add( '0' );
             *                  Actions.Add( '1' );
             *                  foreach( Classifier C in this.CList )
             *                  {
             *                          Actions.Remove( C.A );
             *                  }
             *                  NumberOfActions = 2 - Actions.Count;
             *          }
             *
             *          // MatchSetにある行動が少ないとき
             *          if( NumberOfActions < Configuration.Theta_mna )
             *          {
             *                  // 一部を変化させたCondition
             *                  State state = new BinaryState( S );
             *                  state.Covering();
             *
             *                  Classifier CC;
             *                  if( Configuration.ASName == "CS" || Configuration.ASName == "MaxCS" || Configuration.ASName == "Max" || Configuration.ASName == "Updatee0CS" )
             *                  {
             *                          CC = new SigmaNormalClassifier( state, Actions, Configuration.ExpThreshold );
             *                  }
             *                  else
             *                  {
             *                          CC = new NormalClassifier( state, Actions );
             *                  }
             *                  P.Add( CC );
             *                  // 整理
             *                  P.Delete();
             *                  this.CList = new List<Classifier>();
             *          }
             *  }*/
        }