/// <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); }
/// <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); }
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); }
/// <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); }
/// <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); }