private IEnumerable <ValueFactoryWithOptionalConcreteValue> GetValues(IExplorationStrategy strategy) { foreach (IValueFactory value in strategy.BaseExplore()) { yield return(new ValueFactoryWithOptionalConcreteValue(value)); } }
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; }
/// <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); }
/// <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; }
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)); }