/// <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>(); * } * }*/ }