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); } } } } }
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()); }
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); } } }
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; } } }
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); }
public virtual int Next(int minValue = Int32.MinValue, int maxValue = Int32.MaxValue) { return(r.Next(minValue, maxValue)); }