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 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 void DeterminationOfEdgeWeights(ProductStructureInput inputParameters, ProductStructure productStructure, XRandom rng) { var logNormalDistribution = LogNormal.WithMeanVariance(inputParameters.MeanIncomingMaterialAmount, Math.Pow(inputParameters.StdDevIncomingMaterialAmount, 2), rng.GetRng()); foreach (var edge in productStructure.Edges) { edge.Weight = logNormalDistribution.Sample(); } }