コード例 #1
0
        /// <summary>
        /// Inserts the specified replacement value for the indicator parameter,
        /// if <see cref="CheckIfOverrideIsRequired"/>.
        /// Note:
        /// <see cref="ParameterReplacementDefinition.IndicatorParameterIdentifier"/> is removed from
        /// <paramref name="parameters"/>, if it is contained <c>and</c> the current value
        /// matches <see cref="ParameterReplacementDefinition.IndicatorParameterValue"/>.
        /// </summary>
        /// <param name="parameters">
        /// The genome's <see cref="Genome.GetActiveGenes"/>.
        /// </param>
        /// <param name="parameterReplacementDefinition">
        /// The parameter wrapper to handle.
        /// </param>
        private static void InsertNativeParameterForIndicator(
            Dictionary <string, IAllele> parameters,
            ParameterReplacementDefinition parameterReplacementDefinition)
        {
            IAllele dummyIndicatorParameter;

            if (!parameters.TryGetValue(parameterReplacementDefinition.IndicatorParameterIdentifier, out dummyIndicatorParameter))
            {
                return;
            }

            var overrideOrSetNativeValue = CheckIfOverrideIsRequired(dummyIndicatorParameter, parameterReplacementDefinition);

            if (overrideOrSetNativeValue)
            {
                parameters[parameterReplacementDefinition.ControlledParameterIdentifier] = parameterReplacementDefinition.NativeOverrideValue;
                parameters.Remove(parameterReplacementDefinition.IndicatorParameterIdentifier);
            }
        }
コード例 #2
0
        /// <summary>
        /// Defines a new replacement for an artifical parameter.
        /// </summary>
        /// <param name="indicatorParameterIdentifier">
        /// The identifier of the indicator (=dummy) parameter that needs to be replaced.
        /// This parameter will always be removed from the genomes set of active parameters.
        /// </param>
        /// <param name="indicatorParameterValue">
        /// If the <paramref name="indicatorParameterIdentifier"/> is set to <paramref name="indicatorParameterValue"/>
        /// in the current genome, the <paramref name="controlledParameterIdentifier"/>/<paramref name="nativeOverrideValue"/>
        /// will be inserted in the set of the <see cref="Genome.GetActiveGenes"/>.
        /// </param>
        /// <param name="controlledParameterIdentifier">
        /// The identifier of the parameter that will be inserted for <paramref name="indicatorParameterIdentifier"/>
        /// when it has the value <paramref name="indicatorParameterValue"/>.
        /// </param>
        /// <param name="nativeOverrideValue">
        /// The value to insert for <paramref name="controlledParameterIdentifier"/>.
        /// </param>
        /// <typeparam name="T">
        /// The value type of the inserted <see cref="Allele{T}"/>.
        /// </typeparam>
        /// <returns>
        /// The added <see cref="ParameterReplacementDefinition"/>.
        /// </returns>
        public ParameterReplacementDefinition DefineParameterReplacement <T>(
            string indicatorParameterIdentifier,
            object indicatorParameterValue,
            string controlledParameterIdentifier,
            T nativeOverrideValue)
        {
            lock (this._filterLock)
            {
                if (this.IsIndicatorParameterAndValueCombinationDefined(indicatorParameterIdentifier, indicatorParameterValue))
                {
                    throw new InvalidOperationException(
                              $"You cannot add more than one active ParameterReplacementDefinition for a given combination of {nameof(indicatorParameterIdentifier)}/{nameof(indicatorParameterValue)}.\r\nA replacement for <{indicatorParameterIdentifier}, {indicatorParameterValue}> is already defined.");
                }

                var wrapper = new ParameterReplacementDefinition(
                    indicatorParameterIdentifier,
                    indicatorParameterValue,
                    controlledParameterIdentifier);
                wrapper.SetNativeOverrideValue(nativeOverrideValue);
                this.ActiveParameterReplacements.Add(wrapper);
                return(wrapper);
            }
        }
コード例 #3
0
 /// <summary>
 /// Check if override of <see cref="ParameterReplacementDefinition.IndicatorParameterIdentifier"/> is required.
 /// </summary>
 /// <param name="indicatorInCurrentTree">
 /// The indicator's value in the current tree.
 /// </param>
 /// <param name="replacementDefinitionWithOverride">
 /// The wrapper with override.
 /// </param>
 /// <returns>
 /// True, if <paramref name="indicatorInCurrentTree"/>.GetValue().Equals(<see cref="ParameterReplacementDefinition.IndicatorParameterValue"/>).
 /// </returns>
 private static bool CheckIfOverrideIsRequired(
     IAllele indicatorInCurrentTree,
     ParameterReplacementDefinition replacementDefinitionWithOverride)
 {
     return(object.Equals(indicatorInCurrentTree.GetValue(), replacementDefinitionWithOverride.IndicatorParameterValue));
 }