public void GenerateBillOfMaterial(BillOfMaterialInput inputParameters, List <Dictionary <long, Node> > nodesPerLevel, TransitionMatrix transitionMatrix, MasterTableUnit units, XRandom rng)
        {
            for (var k = 0; k < nodesPerLevel.Count - 1; k++)
            {
                foreach (var article in nodesPerLevel[k].Values)
                {
                    List <List <Edge> > incomingMaterialAllocation = new List <List <Edge> >();
                    foreach (var operation in article.Operations)
                    {
                        incomingMaterialAllocation.Add(new List <Edge>());
                    }

                    foreach (var edge in article.IncomingEdges)
                    {
                        var operationNumber = rng.Next(incomingMaterialAllocation.Count);
                        incomingMaterialAllocation[operationNumber].Add(edge);
                    }

                    List <List <Edge> > possibleSetsForFirstOperation =
                        incomingMaterialAllocation.FindAll(x => x.Count > 0);
                    var         randomSet      = rng.Next(possibleSetsForFirstOperation.Count);
                    List <Edge> firstOperation = possibleSetsForFirstOperation[randomSet];

                    List <List <Edge> > bom = new List <List <Edge> >();
                    incomingMaterialAllocation.Remove(firstOperation);
                    bom.Add(firstOperation);
                    bom.AddRange(incomingMaterialAllocation);

                    for (var i = 0; i < bom.Count; i++)
                    {
                        for (var j = 0; j < bom[i].Count; j++)
                        {
                            var name = "[" + bom[i][j].Start.Article.Name + "] in (" +
                                       article.Operations[i].MOperation.Name + ")";
                            var weight = (decimal)bom[i][j].Weight;
                            if (inputParameters.RoundEdgeWeight || bom[i][j].Start.Article.UnitId == units.PIECES.Id)
                            {
                                weight = Math.Max(1, Decimal.Round(weight));
                            }
                            else
                            {
                                weight = Math.Max(inputParameters.WeightEpsilon, weight);
                            }
                            var articleBom = new M_ArticleBom()
                            {
                                ArticleChildId  = bom[i][j].Start.Article.Id,
                                Name            = name, Quantity = weight,
                                ArticleParentId = article.Article.Id,
                                OperationId     = article.Operations[i].MOperation.Id
                            };
                            article.Operations[i].Bom.Add(articleBom);
                        }
                    }
                }
            }
        }
Esempio n. 2
0
        public void NextTest()
        {
            Guid g1 = Guid.NewGuid();
            Guid g2 = Guid.NewGuid();

            XRandom x1  = new XRandom(g1);
            XRandom x11 = new XRandom(g1);
            XRandom x2  = new XRandom(g2);

            Assert.AreEqual(x1.Next(), x11.Next());
            Assert.AreNotEqual(x1.Next(), x2.Next());
        }
Esempio n. 3
0
        public void GenerateOperations(List <Dictionary <long, Node> > nodesPerLevel, TransitionMatrix transitionMatrix,
                                       TransitionMatrixInput inputTransitionMatrix, MasterTableResourceCapability resourceCapabilities, XRandom rng)
        {
            Prepare(transitionMatrix, inputTransitionMatrix, rng);

            List <TEnumerator <M_ResourceCapability> > tools = resourceCapabilities.ParentCapabilities.Select(x =>
                                                                                                              new TEnumerator <M_ResourceCapability>(x.ChildResourceCapabilities.ToArray())).ToList();

            for (var i = 0; i < nodesPerLevel.Count - 1; i++)
            {
                foreach (var article in nodesPerLevel[i].Values)
                {
                    var hierarchyNumber       = 0;
                    var currentWorkingMachine = inputTransitionMatrix.ExtendedTransitionMatrix
                        ? DetermineNextWorkingMachine(0, rng)
                        : rng.Next(tools.Count);
                    var lastOperationReached = false;
                    var operationCount       = 0;
                    var correction           = inputTransitionMatrix.ExtendedTransitionMatrix ? 1 : 0;



                    do
                    {
                        int duration;
                        do
                        {
                            duration = _machiningTimeDistributions[currentWorkingMachine].Sample();
                        } while (duration == 0);


                        hierarchyNumber += 10;
                        var operation = new M_Operation
                        {
                            ArticleId            = article.Article.Id,
                            Name                 = "Operation " + (operationCount + 1) + " for [" + article.Article.Name + "]",
                            Duration             = duration,
                            ResourceCapabilityId = tools[currentWorkingMachine].GetNext().Id,
                            HierarchyNumber      = hierarchyNumber
                        };
                        article.Operations.Add(new Operation {
                            MOperation = operation
                        });

                        currentWorkingMachine = DetermineNextWorkingMachine(currentWorkingMachine + correction, rng);
                        operationCount++;
                        if (inputTransitionMatrix.ExtendedTransitionMatrix)
                        {
                            lastOperationReached = _matrixSize == currentWorkingMachine + 1;
                        }
                        else
                        {
                            lastOperationReached = article.WorkPlanLength == operationCount;
                        }
                    } while (!lastOperationReached);
                }
            }
        }
Esempio n. 4
0
        public Contains_int(int count)
        {
            value_List    = new List <int>(count);
            value_Array   = new int[count];
            value_HashSet = new HashSet <int>();

            var index = XRandom.Next(0, count);

            for (int i = 0; i < count; i++)
            {
                var tmpValue = XRandom.Next();
                value_List.Add(tmpValue);
                value_Array[i] = tmpValue;
                value_HashSet.Add(tmpValue);

                if (index == i)
                {
                    value_target = tmpValue;
                }
            }
        }
Esempio n. 5
0
        public Contains_enum(int count)
        {
            value_List    = new List <EnumContains>(count);
            value_Array   = new EnumContains[count];
            value_HashSet = new HashSet <EnumContains>();

            var index = XRandom.Next(0, count);

            for (int i = 0; i < count; i++)
            {
                var tmpValue = (EnumContains)XRandom.Next(0, 1000);
                value_List.Add(tmpValue);
                value_Array[i] = tmpValue;
                value_HashSet.Add(tmpValue);

                if (index == i)
                {
                    value_target = tmpValue;
                }
            }
        }
        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);
        }
Esempio n. 7
0
 public virtual int Next(int minValue = Int32.MinValue, int maxValue = Int32.MaxValue)
 {
     return(r.Next(minValue, maxValue));
 }