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