コード例 #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="oConfiguration"></param>
        /// <returns></returns>
        public List <CPeriodSet> GetPeriods(CConfiguration oConfiguration, IPrimeNumberGenerator primeGenerator)
        {
            List <List <double> > allCombinations;
            List <CPeriodSet>     allPeriodSets = new List <CPeriodSet>();
            List <double>         mainSet       = generateMainSet(oConfiguration.MinPeriod, oConfiguration.MaxPeriod);

            CCombinationGenerator comb = new CCombinationGenerator();

            _Message = "";

            allCombinations = comb.GenerateCombinations(mainSet, oConfiguration.NumberOfTasksPerSet);



            //Convert allCombinations to allPeriodSets
            CPeriodSet ps;

            foreach (List <double> c in allCombinations)
            {
                ps = new CPeriodSet();

                foreach (double d in c)
                {
                    ps.Add(d);
                }

                allPeriodSets.Add(ps);
            }


            return(allPeriodSets);
        }
コード例 #2
0
        /// <summary>
        /// Generate all possible unique sets of iSizeOfSubet from elements inside mainSet
        /// </summary>
        /// <param name="listOfElement"></param>
        /// <param name="iSizeOfCombinations"></param>
        //private void GenerateCombinations(List<double> mainSet, int iSizeOfSubSet)
        //{
        //    double multiple;
        //    List<double> tmp = new List<double>();
        //    //Start from min
        //    //Find first divisor for prime
        //    //Then find all divisors till max and add them to List
        //    multiple = min;
        //    while (multiple % prime != 0) { multiple++; }


        //    while (multiple <= max)
        //    {
        //        tmp.Add(multiple);
        //        multiple += prime;
        //    }

        //    return tmp;

        //}


        /// <summary>
        /// Get Maximum Possible Unique Period Sets
        /// </summary>
        /// <param name="oConfiguration"></param>
        /// <returns></returns>



        public long GetMaximumUniquePeriodSets(CConfiguration oConfiguration)
        {
            int  idxMaxGroups;
            long noOfFactors;
            long lMaxPeriodSets        = 0;
            CCombinationGenerator comb = new CCombinationGenerator();

            int idx;

            if (_primes == null)
            {
                GeneratePrimes(oConfiguration);
            }

            idxMaxGroups = GetMaximumGroups(oConfiguration.MinPeriod, oConfiguration.MaxPeriod,
                                            oConfiguration.NumberOfTasksPerSet);
            idxMaxGroups--; //idxMaxGroups = 2



            //for(idx = 0;idx <= idxMaxGroups;idx++)
            for (idx = idxMaxGroups; idx > 0; idx--)
            {
                noOfFactors    = GetNumberOfFactors(_primes[idx - 1], oConfiguration.MinPeriod, oConfiguration.MaxPeriod);
                lMaxPeriodSets = lMaxPeriodSets + (long)comb.GetNumberOfCombinations(noOfFactors,
                                                                                     oConfiguration.NumberOfTasksPerSet);
            }

            return(lMaxPeriodSets);
        }
コード例 #3
0
        private double GetMaximumPossibleSets(CConfiguration config)
        {
            double sum;
            long   delta;
            long   MxSize;
            CCombinationGenerator comb  = new CCombinationGenerator();
            CSieveOfEratosthenes  sieve = new CSieveOfEratosthenes();


            delta = (long)(config.MaxPeriod - config.MinPeriod + 1);

            List <double> primes = sieve.GeneratePrimeNumbers(0.0, config.MaxPeriod);

            sum = 0;
            foreach (double prime in primes)
            {
                if (prime <= delta / 2)
                {
                    MxSize = (long)(delta / prime + 1);
                    sum   += comb.GetNumberOfCombinations(MxSize, config.NumberOfTasksPerSet);
                }
            }

            return(sum);
        }
コード例 #4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="oConfiguration"></param>
        /// <returns></returns>
        public long GetMaximumUniquePeriodSets(CConfiguration oConfiguration)
        {
            long lMaxPeriodSets;

            CCombinationGenerator comb = new CCombinationGenerator();

            lMaxPeriodSets = (long)comb.GetNumberOfCombinations(oConfiguration.NumberOfDiscretePeriods,
                                                                oConfiguration.NumberOfTasksPerSet);

            return(lMaxPeriodSets);
        }
コード例 #5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="oConfiguration"></param>
        /// <returns></returns>
        public List <CPeriodSet> GetPeriods(CConfiguration oConfiguration,
                                            IPrimeNumberGenerator primeGenerator)
        {
            int           maxGroups;
            int           maxIdx;
            int           idx = 0;
            double        maxFactor;
            List <double> tmpList;
            int           ii;
            double        delta;
            double        maxPrime;

            delta    = oConfiguration.MaxPeriod - oConfiguration.MinPeriod + 1;
            maxPrime = Math.Ceiling(delta / 2);

            _allPeriods = new List <CPeriodSet>();
            //Generate Primes
            if (_primes == null)
            {
                GeneratePrimes(oConfiguration);
            }

            maxGroups = GetMaximumGroups(oConfiguration.MinPeriod, oConfiguration.MaxPeriod,
                                         oConfiguration.NumberOfTasksPerSet);
            _Message = "";

            _groups = new List <double> [maxGroups];

            maxFactor = GetMaximumFactor(oConfiguration.MinPeriod, oConfiguration.MaxPeriod,
                                         oConfiguration.NumberOfTasksPerSet);


            maxIdx = GetIndexOfMaxPrime(maxFactor);


            //Fill in Periods in All Groups
            //Starting with Highest Index First
            idx = 0;
            int primeIdx = maxIdx;

            while (primeIdx >= 0)
            {
                tmpList = GeneratePeriods(oConfiguration.MinPeriod,
                                          oConfiguration.MaxPeriod, _primes[primeIdx--]);

                _groups[idx++] = tmpList;
            }

            //Now Return Periods
            CCombinationGenerator oComb = new CCombinationGenerator();
            CPeriodSet            ps;

            //Customize the group number here
            for (ii = 0; ii < _groups.Length; ii++)
            {
                tmpList = _groups[ii];
                List <List <double> > indexes;

                indexes = oComb.GenerateCombinations(tmpList,
                                                     oConfiguration.NumberOfTasksPerSet);

                foreach (List <double> lst in indexes)
                {
                    ps = new CPeriodSet();
                    foreach (double p in lst)
                    {
                        ps.Add(p);
                    }
                    _allPeriods.Add(ps);
                }
            }

            return(_allPeriods);
        }