Exemple #1
0
        private void InitProbabilisticCombinations(Dictionary <int, Combination> combinations)
        {
            foreach (var comb in combinations)
            {
                float totalWeight        = 0;
                int   probabilisticCount = 0;
                int   determinedCount    = 0;
                comb.Value.WeightedPackages.ForEach(
                    x =>
                {
                    totalWeight += x.Weight;
                    if (x.Weight == 0)
                    {
                        determinedCount++;
                    }
                    else
                    {
                        probabilisticCount++;
                    }
                });

                var probabilisticComb = new ProbabilisticCombination();
                probabilisticComb.Id = comb.Key;
                probabilisticComb.DeterminedPackages    = new ProbabilisticPackage[determinedCount];
                probabilisticComb.ProbabilisticPackages = new ProbabilisticPackage[probabilisticCount];

                int currentWeight = 0;
                int d = 0, p = 0;
                foreach (var pac in comb.Value.WeightedPackages)
                {
                    var probPac = new ProbabilisticPackage();
                    probPac.Id = pac.Id;
                    probPac.DeterminedResourceItems    = _packages[pac.Id].DeterminedResourceItems;
                    probPac.ProbabilisticResourceItems = _packages[pac.Id].ProbabilisticResourceItems;

                    if (pac.Weight == 0)
                    {
                        probPac.Probability = 1;
                        probabilisticComb.DeterminedPackages[d] = probPac;

                        d++;
                    }
                    else
                    {
                        currentWeight      += pac.Weight;
                        probPac.Probability = currentWeight / totalWeight;
                        probabilisticComb.ProbabilisticPackages[p] = probPac;

                        p++;
                    }
                }

                _combinations.Add(comb.Key, probabilisticComb);
            }
        }
Exemple #2
0
        private void InitProbabilisticPackages(Dictionary <int, Package> packages)
        {
            foreach (var pac in packages)
            {
                float totalWeight        = 0;
                int   probabilisticCount = 0;
                int   determinedCount    = 0;
                pac.Value.WeightedResourceItems.ForEach(
                    x =>
                {
                    totalWeight += x.Weight;
                    if (x.Weight == 0)
                    {
                        determinedCount++;
                    }
                    else
                    {
                        probabilisticCount++;
                    }
                });

                var probabilisticPac = new ProbabilisticPackage();
                probabilisticPac.Id = pac.Key;
                probabilisticPac.DeterminedResourceItems    = new ProbabilisticResourceItem[determinedCount];
                probabilisticPac.ProbabilisticResourceItems = new ProbabilisticResourceItem[probabilisticCount];

                int currentWeight = 0;
                int d = 0, p = 0;
                foreach (var item in pac.Value.WeightedResourceItems)
                {
                    var resourceItem = new ProbabilisticResourceItem();
                    resourceItem.Id     = item.Id;
                    resourceItem.Number = item.Number;

                    if (item.Weight == 0)
                    {
                        resourceItem.Probability = 1;
                        probabilisticPac.DeterminedResourceItems[d] = resourceItem;

                        d++;
                    }
                    else
                    {
                        currentWeight           += item.Weight;
                        resourceItem.Probability = currentWeight / totalWeight;
                        probabilisticPac.ProbabilisticResourceItems[p] = resourceItem;

                        p++;
                    }
                }

                _packages.Add(pac.Key, probabilisticPac);
            }
        }
Exemple #3
0
        private void PackageGeneration(ProbabilisticPackage package, Dictionary <int, DeterminedResourceItem> result)
        {
            foreach (var item in package.DeterminedResourceItems)
            {
                var id = _genrerationId++;
                result.Add(id, new DeterminedResourceItem {
                    Id = id, ResourceItemId = item.Id, Number = item.Number
                });
            }

            double r = _randomizer.NextDouble();

            foreach (var item in package.ProbabilisticResourceItems)
            {
                if (r < item.Probability)
                {
                    var id = _genrerationId++;
                    result.Add(id, new DeterminedResourceItem {
                        Id = id, ResourceItemId = item.Id, Number = item.Number
                    });
                    break;
                }
            }
        }