/// <summary>
 /// Initializes a new instance of the <see cref="PNormProportionalSelection"/> class.
 /// </summary>
 /// <param name="direction">The direction.</param>
 /// <param name="AlwaysKeepBest">The always keep best.</param>
 /// <param name="Q">The q.</param>
 public PNormProportionalSelection(optimize direction, Boolean AlwaysKeepBest, double Q = 0.5)
     : base(new[] { direction })
 {
     rnd            = new Random();
     alwaysKeepBest = AlwaysKeepBest;
     this.Q         = Q;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="StochasticNeighborGenerator"/> class.
 /// </summary>
 /// <param name="discreteSpaceDescriptor">The discrete space descriptor.</param>
 /// <param name="direction">The direction.</param>
 /// <param name="maxNumNeighbors">The maximum number neighbors.</param>
 public StochasticNeighborGenerator(DesignSpaceDescription discreteSpaceDescriptor, optimize direction,
                                    int maxNumNeighbors = 250)
     : base(discreteSpaceDescriptor)
 {
     r              = new Random();
     changeVectors  = discreteSpaceDescriptor.CreateNeighborChangeVectors(maxNumNeighbors);
     this.direction = direction;
     ResetStats();
 }
        /// <summary>
        ///   Does c1 dominate c2? assuming this is a minimization of all objectives
        /// </summary>
        /// <param name = "c1">the subject candidate, c1 (does this dominate...).</param>
        /// <param name = "c2">the object candidate, c2 (is dominated by).</param>
        /// <returns></returns>
        protected static Boolean dominates(candidate c1, candidate c2)
        {
            var length    = Math.Min(c1.performanceParams.Count, c2.performanceParams.Count);
            var optvector = new optimize[length];

            for (var i = 0; i < length; i++)
            {
                optvector[i] = optimize.minimize;
            }
            return(dominates(c1, c2, optvector));
        }
Пример #4
0
        /// <summary>
        /// Initializes a new instance of the <see cref="SimulatedAnnealing"/> class.
        /// </summary>
        /// <param name="direction">The direction.</param>
        /// <param name="ConstraintsSolvedWithPenalties">The constraints solved with penalties.</param>
        public SimulatedAnnealing(optimize direction, Boolean ConstraintsSolvedWithPenalties = true)
        {
            RequiresObjectiveFunction           = true;
            this.ConstraintsSolvedWithPenalties = ConstraintsSolvedWithPenalties;
            InequalitiesConvertedToEqualities   = false;
            RequiresSearchDirectionMethod       = false;
            RequiresLineSearchMethod            = false;
            RequiresAnInitialPoint          = true;
            RequiresConvergenceCriteria     = true;
            RequiresFeasibleStartPoint      = false;
            RequiresDiscreteSpaceDescriptor = true;

            selector = new MetropolisCriteria(direction);
        }
Пример #5
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ImplicitEnueration" /> class.
 /// </summary>
 /// <param name="SpaceDescription">The space description.</param>
 /// <param name="direction">The direction.</param>
 public ImplicitEnueration(DesignSpaceDescription SpaceDescription, optimize direction)
 {
     spaceDescription                  = SpaceDescription;
     this.direction                    = direction;
     comparer                          = new optimizeSort(direction);
     RequiresObjectiveFunction         = false;
     ConstraintsSolvedWithPenalties    = false;
     InequalitiesConvertedToEqualities = false;
     RequiresSearchDirectionMethod     = false;
     RequiresLineSearchMethod          = false;
     RequiresAnInitialPoint            = false;
     RequiresConvergenceCriteria       = false;
     RequiresFeasibleStartPoint        = false;
     RequiresDiscreteSpaceDescriptor   = true;
 }
Пример #6
0
 public ExhaustiveSearch(DesignSpaceDescription SpaceDescription, optimize direction)
 {
     spaceDescription = SpaceDescription;
     if (!SpaceDescription.AllDiscrete)
     {
         throw new Exception("Exhaustive Search can only be used when Space is all discrete");
     }
     comparer = new optimizeSort(direction);
     RequiresObjectiveFunction         = false;
     ConstraintsSolvedWithPenalties    = false;
     InequalitiesConvertedToEqualities = false;
     RequiresSearchDirectionMethod     = false;
     RequiresLineSearchMethod          = false;
     RequiresAnInitialPoint            = false;
     RequiresConvergenceCriteria       = false;
     RequiresFeasibleStartPoint        = false;
     RequiresDiscreteSpaceDescriptor   = true;
 }
Пример #7
0
        /* if using with SortedList, set AllowEqualInSorting to false, otherwise
         * it will crash when equal values are encountered. If using in Linq's
         * OrderBy then the equal is need (AllowEqualInSorting = true) otherwise
         * the program will hang. */

        /// <summary>
        /// Initializes a new instance of the <see cref="optimizeSort"/> class.
        /// </summary>
        /// <param name="direction">The direction.</param>
        /// <param name="AllowEqualInSort">The allow equal in sort.</param>
        public optimizeSort(optimize direction, Boolean AllowEqualInSort = false)
        {
            this.direction        = (int)direction;
            this.AllowEqualInSort = AllowEqualInSort;
        }
Пример #8
0
 /// <summary>
 /// Initializes a new instance of the <see cref="KeepSingleBest"/> class.
 /// </summary>
 /// <param name="direction">The direction.</param>
 public KeepSingleBest(optimize direction)
     : base(new [] { direction })
 {
 }
Пример #9
0
 /// <summary>
 /// Initializes a new instance of the <see cref="RandomPairwiseCompare"/> class.
 /// </summary>
 /// <param name="direction">The direction.</param>
 public RandomPairwiseCompare(optimize direction)
     : base(new[] { direction })
 {
     rnd = new Random();
 }
Пример #10
0
 public Elitism(optimize direction)
     : base(new[] { direction })
 {
 }
Пример #11
0
 public MetropolisCriteria(optimize direction)
     : base(new[] { direction })
 {
     rnd = new Random();
 }