예제 #1
0
        private void Prepare(TransitionMatrix transitionMatrix, TransitionMatrixInput inputTransitionMatrix, XRandom rng)
        {
            _matrixSize = inputTransitionMatrix.WorkingStations.Count;
            TruncatedDiscreteNormal unifyingDistribution = null;

            //darf lowerBound (also Mindestdauer einer Operation) 0 sein? -> wenn 0 selten vorkommt (also z.B. Zeiteinheit nicht Minuten, sondern Sekunden sind), dann ok
            if (inputTransitionMatrix.GeneralMachiningTimeParameterSet != null)
            {
                var normalDistribution = Normal.WithMeanVariance(
                    inputTransitionMatrix.GeneralMachiningTimeParameterSet.MeanMachiningTime,
                    inputTransitionMatrix.GeneralMachiningTimeParameterSet.VarianceMachiningTime,
                    rng.GetRng());
                unifyingDistribution = new TruncatedDiscreteNormal(0, null, normalDistribution);
            }

            var workingStations = inputTransitionMatrix.WorkingStations.ToArray();

            for (var i = 0; i < _matrixSize; i++)
            {
                TruncatedDiscreteNormal truncatedDiscreteNormalDistribution;
                if (unifyingDistribution != null)
                {
                    truncatedDiscreteNormalDistribution = unifyingDistribution;
                }
                else
                {
                    var machiningTime      = workingStations[i].MachiningTimeParameterSet;
                    var normalDistribution = Normal.WithMeanVariance(machiningTime.MeanMachiningTime,
                                                                     machiningTime.VarianceMachiningTime, rng.GetRng());
                    truncatedDiscreteNormalDistribution = new TruncatedDiscreteNormal(0, null, normalDistribution);
                }

                _machiningTimeDistributions.Add(truncatedDiscreteNormalDistribution);
            }
            if (inputTransitionMatrix.ExtendedTransitionMatrix)
            {
                _matrixSize++;
            }

            for (var i = 0; i < _matrixSize; i++)
            {
                var row = new List <KeyValuePair <int, double> >();
                _cumulatedProbabilities.Add(row);
                for (var j = 0; j < _matrixSize; j++)
                {
                    row.Add(new KeyValuePair <int, double>(j, transitionMatrix.Pi[i, j]));
                }

                row.Sort(delegate(KeyValuePair <int, double> o1, KeyValuePair <int, double> o2)
                {
                    if (o1.Value > o2.Value)
                    {
                        return(-1);
                    }
                    return(1);
                });
            }
        }
        private static long GeneratePartsForEachLevel(ProductStructureInput inputParameters,
                                                      ProductStructure productStructure, List <HashSet <long> > availableNodes, MasterTableArticleType articleTypes,
                                                      MasterTableUnit units, M_Unit[] unitCol, XRandom rng, int i, bool sampleWorkPlanLength,
                                                      TruncatedDiscreteNormal truncatedDiscreteNormalDistribution)
        {
            //Problem mit Algorithmus aus SYMTEP: bei ungünstigen Eingabeparametern gibt es auf manchen Fertigungsstufen keine Teile (0 Knoten)
            //-> Es fehlt wohl Nebenbedingung, dass Anzahl an Teilen auf jeden Fertigungsstufe mindestens 1 sein darf
            //-> Entsprechend wurde das hier angepasst
            var nodeCount = Math.Max(1, Convert.ToInt64(Math.Round(
                                                            Math.Pow(inputParameters.ComplexityRatio / inputParameters.ReutilisationRatio, i - 1) *
                                                            inputParameters.EndProductCount)));
            var nodesCurrentLevel = new Dictionary <long, Node>();

            productStructure.NodesPerLevel.Add(nodesCurrentLevel);
            var availableNodesOnThisLevel = new HashSet <long>();

            availableNodes.Add(availableNodesOnThisLevel);

            bool          toPurchase, toBuild;
            M_Unit        unit = null;
            M_ArticleType articleType;

            if (i == 1)
            {
                toPurchase  = false;
                toBuild     = true;
                unit        = units.PIECES;
                articleType = articleTypes.PRODUCT;
            }
            else if (i == inputParameters.DepthOfAssembly)
            {
                toPurchase  = true;
                toBuild     = false;
                articleType = articleTypes.MATERIAL;
            }
            else
            {
                toPurchase  = false;
                toBuild     = true;
                unit        = units.PIECES;
                articleType = articleTypes.ASSEMBLY;
            }

            for (long j = 0; j < nodeCount; j++)
            {
                unit = GeneratePartsForCurrentLevel(inputParameters, unitCol, rng, i, sampleWorkPlanLength,
                                                    truncatedDiscreteNormalDistribution, availableNodesOnThisLevel, j, unit, articleType, toPurchase,
                                                    toBuild, nodesCurrentLevel);
            }

            return(nodeCount);
        }
        private void GenerateParts(ProductStructureInput inputParameters, ProductStructure productStructure,
                                   List <HashSet <long> > availableNodes, MasterTableArticleType articleTypes, MasterTableUnit units,
                                   M_Unit[] unitCol, XRandom rng)
        {
            bool sampleWorkPlanLength = inputParameters.MeanWorkPlanLength != null &&
                                        inputParameters.VarianceWorkPlanLength != null;
            TruncatedDiscreteNormal truncatedDiscreteNormalDistribution = null;

            if (sampleWorkPlanLength)
            {
                truncatedDiscreteNormalDistribution = new TruncatedDiscreteNormal(1, null,
                                                                                  Normal.WithMeanVariance((double)inputParameters.MeanWorkPlanLength,
                                                                                                          (double)inputParameters.VarianceWorkPlanLength, rng.GetRng()));
            }
            for (var i = 1; i <= inputParameters.DepthOfAssembly; i++)
            {
                productStructure.NodesCounter += GeneratePartsForEachLevel(inputParameters, productStructure, availableNodes,
                                                                           articleTypes, units, unitCol, rng, i, sampleWorkPlanLength, truncatedDiscreteNormalDistribution);
            }
        }
        private static M_Unit GeneratePartsForCurrentLevel(ProductStructureInput inputParameters, M_Unit[] unitCol,
                                                           XRandom rng, int i, bool sampleWorkPlanLength, TruncatedDiscreteNormal truncatedDiscreteNormalDistribution,
                                                           HashSet <long> availableNodesOnThisLevel, long j, M_Unit unit, M_ArticleType articleType, bool toPurchase,
                                                           bool toBuild, Dictionary <long, Node> nodesCurrentLevel)
        {
            availableNodesOnThisLevel.Add(j);

            if (i == inputParameters.DepthOfAssembly)
            {
                var pos = rng.Next(unitCol.Length);
                unit = unitCol[pos];
            }

            var node = new Node
            {
                AssemblyLevel = i,
                Article       = new M_Article
                {
                    Name           = "Material " + i + "." + (j + 1),
                    ArticleTypeId  = articleType.Id,
                    CreationDate   = DateTime.Now,
                    DeliveryPeriod = 5,
                    UnitId         = unit.Id,
                    Price          = 10,
                    ToPurchase     = toPurchase,
                    ToBuild        = toBuild
                }
            };

            nodesCurrentLevel[j] = node;
            if (sampleWorkPlanLength && i != inputParameters.DepthOfAssembly)
            {
                node.WorkPlanLength = truncatedDiscreteNormalDistribution.Sample();
            }

            return(unit);
        }
예제 #5
0
        public void Test1()
        {
            var lintMax   = Int32.MaxValue;
            var longMax   = Int64.MaxValue;
            var doubleMax = Double.MaxValue;

            System.Diagnostics.Debug.WriteLine(lintMax.ToString());
            System.Diagnostics.Debug.WriteLine(longMax.ToString());
            System.Diagnostics.Debug.WriteLine(doubleMax.ToString());
            var faculty = new Faculty();
            //var f1 = faculty.Calc(200);
            //var f2 = faculty.Calc(20);
            //var r = Math.Round(f2);
            //var p1 = Math.Pow(100.537, 100);
            //var p2 = Math.Pow(10.1, 20);
            var x1   = Math.Round(Math.Pow(5.0 / 1.0, 19) * 50);
            var x2   = Convert.ToInt64(x1);
            var sum1 = Convert.ToInt64(0);
            var sum2 = 0.0;

            for (int i = 0; i < 20; i++)
            {
                var result = Convert.ToInt64(Math.Round(Math.Pow(5.0 / 1.0, i) * 50));
                sum1 += result;
                sum2 += result;
            }

            sum1 *= 5;
            sum2 *= 5.0;
            var x3 = Convert.ToInt64(Math.Round(sum2));

            var x4 = Math.Round(5.4343454359);

            var n1 = AlphabeticNumbering.GetAlphabeticNumbering(0);
            var n2 = AlphabeticNumbering.GetAlphabeticNumbering(25);
            var n3 = AlphabeticNumbering.GetAlphabeticNumbering(26);
            var n4 = AlphabeticNumbering.GetAlphabeticNumbering(52);
            var n5 = AlphabeticNumbering.GetAlphabeticNumbering(454);
            var n6 = AlphabeticNumbering.GetAlphabeticNumbering(1);
            var n7 = AlphabeticNumbering.GetAlphabeticNumbering(2);
            var n8 = AlphabeticNumbering.GetAlphabeticNumbering(3);

            var n11 = AlphabeticNumbering.GetNumericRepresentation(n1);
            var n12 = AlphabeticNumbering.GetNumericRepresentation(n2);
            var n13 = AlphabeticNumbering.GetNumericRepresentation(n3);
            var n14 = AlphabeticNumbering.GetNumericRepresentation(n4);
            var n15 = AlphabeticNumbering.GetNumericRepresentation(n5);
            var n16 = AlphabeticNumbering.GetNumericRepresentation(n6);
            var n17 = AlphabeticNumbering.GetNumericRepresentation(n7);
            var n18 = AlphabeticNumbering.GetNumericRepresentation(n8);

            var list1 = new List <TruncatedDiscreteNormal>();
            var truncatedDiscreteNormalDistribution =
                new TruncatedDiscreteNormal(9, 11, Normal.WithMeanVariance(5.0, 2.0));

            list1.Add(truncatedDiscreteNormalDistribution);
            list1.Add(truncatedDiscreteNormalDistribution);
            list1.Add(truncatedDiscreteNormalDistribution);
            list1.Add(truncatedDiscreteNormalDistribution);
            var x5 = list1[1].Sample();

            Assert.True(true);
        }