Exemple #1
0
 private IEnumerable <ValueFactoryWithOptionalConcreteValue> GetValues(IExplorationStrategy strategy)
 {
     foreach (IValueFactory value in strategy.BaseExplore())
     {
         yield return(new ValueFactoryWithOptionalConcreteValue(value));
     }
 }
Exemple #2
0
        private void SetDimensionStrategyBase(QualifiedDimension dimension, IExplorationStrategy strategy)
        {
            Matrix        currentMatrix = _targetMatrix;
            List <Matrix> innerPath     = new List <Matrix>();

            foreach (Matrix innerMatrix in dimension.Path)
            {
                if (!currentMatrix.Dimensions.Contains(innerMatrix))
                {
                    throw new DimensionNotInMatrixException(innerMatrix);
                }
                if (strategy != null)
                {
                    _explorationStrategies.Remove(QualifiedDimension.Create(innerMatrix, innerPath));
                }
                currentMatrix = innerMatrix;
                innerPath.Add(innerMatrix);
            }
            if (strategy == null)
            {
                _explorationStrategies.Remove(dimension);
            }
            else if (_explorationStrategies.ContainsKey(dimension))
            {
                _explorationStrategies[dimension] = strategy;
            }
            else
            {
                _explorationStrategies.Add(dimension, strategy);
            }
        }
 /// <summary>
 /// Constructs a new instance.
 /// </summary>
 /// <param name="explorationStrategy">The exploration strategy.</param>
 /// <param name="playoutStrategy">The playout strategy.</param>
 /// <param name="samplingStrategy">The sampling strategy.</param>
 /// <param name="solutionStrategy">The solution strategy.</param>
 /// <param name="policyGlobal">The global policy.</param>
 public NMCTSBuilder(IExplorationStrategy <D, P, A, S, Sol> explorationStrategy, IPlayoutStrategy <D, P, A, S, Sol> playoutStrategy, ISamplingStrategy <P, A> samplingStrategy, ISolutionStrategy <D, P, A, S, Sol, TreeSearchNode <P, A> > solutionStrategy, double policyGlobal)
 {
     ExplorationStrategy = explorationStrategy;
     PlayoutStrategy     = playoutStrategy;
     SamplingStrategy    = samplingStrategy;
     SolutionStrategy    = solutionStrategy;
     PolicyGlobal        = policyGlobal;
 }
Exemple #4
0
        /// <summary>
        /// Sets the exploration strategy for the given dimension.
        /// </summary>
        /// <param name="dimension">The dimension.</param>
        /// <param name="strategy">The strategy. Can be null which will clear out the strategy for <paramref name="dimension"/>.</param>
        /// <remarks>
        /// Strategies should be set for all the dimensions in the test matrix;
        /// except for enum and bool dimensions, which are exhaustive by default.
        /// </remarks>
        /// <exception cref="ArgumentNullException"><paramref name="dimension"/> is null.</exception>
        /// <exception cref="DimensionNotInMatrixException"><paramref name="dimension"/> is not in the target matrix.</exception>
        public void SetDimensionStrategy(Dimension dimension, IExplorationStrategy strategy)
        {
            if (dimension == null)
            {
                throw new ArgumentNullException("dimension");
            }

            if (!_targetMatrix.Dimensions.Contains(dimension))
            {
                throw new DimensionNotInMatrixException(dimension);
            }

            SetDimensionStrategyBase((QualifiedDimension)dimension, strategy);
        }
Exemple #5
0
 /// <summary>
 /// Constructs a new instance.
 /// </summary>
 /// <param name="selectionStrategy">The selection strategy.</param>
 /// <param name="expansionStrategy">The expansion strategy.</param>
 /// <param name="backPropagationStrategy">The back propagation strategy.</param>
 /// <param name="finalNodeSelectionStrategy">The final node selection strategy.</param>
 /// <param name="evaluationStrategy">The state evaluation strategy.</param>
 /// <param name="explorationStrategy">The exploration strategy.</param>
 /// <param name="solutionStrategy">The solution strategy.</param>
 /// <param name="samplingStrategy">The sampling strategy.</param>
 /// <param name="playoutStrategy">The playout strategy.</param>
 /// <param name="time">The amount of time allowed for the search.</param>
 /// <param name="iterations">The amount of iterations allowed for the search.</param>
 /// <param name="globalPolicy">The global policy.</param>
 public NMCTS(ITreeSelection <D, P, A, S, Sol> selectionStrategy,
              ITreeExpansion <D, P, A, S, Sol> expansionStrategy,
              ITreeBackPropagation <D, P, A, S, Sol> backPropagationStrategy,
              ITreeFinalNodeSelection <D, P, A, S, Sol> finalNodeSelectionStrategy,
              IStateEvaluation <D, P, A, S, Sol, TreeSearchNode <P, A> > evaluationStrategy,
              IExplorationStrategy <D, P, A, S, Sol> explorationStrategy,
              ISolutionStrategy <D, P, A, S, Sol, TreeSearchNode <P, A> > solutionStrategy,
              ISamplingStrategy <P, A> samplingStrategy,
              IPlayoutStrategy <D, P, A, S, Sol> playoutStrategy, long time, int iterations, double globalPolicy) :
     base(selectionStrategy, expansionStrategy, backPropagationStrategy, finalNodeSelectionStrategy,
          evaluationStrategy, solutionStrategy, time, iterations)
 {
     ExplorationStrategy = explorationStrategy;
     SamplingStrategy    = samplingStrategy;
     PlayoutStrategy     = playoutStrategy;
     PolicyGlobal        = globalPolicy;
 }
Exemple #6
0
        private KeyValuePair <Dimension, IExplorationStrategy> GetDimensionWithStrategy(TestMatrixDimensionAttribute dimensionAttribute)
        {
            Dimension dimension;
            Type      domain = dimensionAttribute.Domain ?? typeof(object);

            dimension = (Dimension)typeof(Dimension <>).MakeGenericType(domain).GetInstanceConstructor(true, new Type[] { typeof(string) }).Invoke(new object[] { dimensionAttribute.Name });

            // Note: for closed domains like bool or enum types values don't need to be specified
            // which means such dimensions should be explored exhaustively and we don't need to create strategy in this case
            IExplorationStrategy strategy = null;

            // Setup exhaustive strategy for exploring dimension when values are provided.
            ExceptionUtilities.Assert(dimensionAttribute.Values != null, "Values cannnot be null. Dimension: '{0}'.", dimensionAttribute.Name);
            if (dimensionAttribute.Values.Length > 0)
            {
                var typedValuesArray = Array.CreateInstance(domain, dimensionAttribute.Values.Length);
                dimensionAttribute.Values.CopyTo(typedValuesArray, 0);
                strategy = (IExplorationStrategy)typeof(ExhaustiveIEnumerableStrategy <>).MakeGenericType(domain)
                           .GetInstanceConstructor(true, new Type[] { typedValuesArray.GetType() }).Invoke(new object[] { typedValuesArray });
            }

            return(new KeyValuePair <Dimension, IExplorationStrategy>(dimension, strategy));
        }