public static void Run() { // ExStart:PrepareAnalysisSettings RiskAnalysisSettings settings = new RiskAnalysisSettings(); // Set number of iterations for Monte Carlo simulation (the default value is 100). settings.IterationsCount = 200; // ExEnd:PrepareAnalysisSettings string dataDir = RunExamples.GetDataDir(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName); // ExStart:IdentifyAnalysisInput Project project = new Project(dataDir + "Software Development Plan-1.mpp"); Task task = project.RootTask.Children.GetById(17); // Initialize a risk pattern RiskPattern pattern = new RiskPattern(task); // Select a distribution type for the random number generator to generate possible values from (only two types currently supported, namely normal and uniform) // For more details see here: https://en.wikipedia.org/wiki/Normal_distribution) pattern.Distribution = ProbabilityDistributionType.Normal; // Set the percentage of the most likely task duration which can happen in the best possible project scenario // The default value is 75, which means that if the estimated specified task duration is 4 days then the optimistic duration will be 3 days pattern.Optimistic = 70; // Set the percentage of the most likely task duration which can happen in the worst possible project scenario // The defaut value is 125, which means that if the estimated specified task duration is 4 days then the pessimistic duration will be 5 days. pattern.Pessimistic = 130; // Set a confidence level that correspond to the percentage of the time the actual values will be within optimistic and pessimistic estimates. // You can think of it as a value of standard deviation: the more uncertain about your estimates you are, the more the value of standard deviation used in random number generator is pattern.ConfidenceLevel = ConfidenceLevel.CL75; settings.Patterns.Add(pattern); // ExEnd:IdentifyAnalysisInput // ExStart:AnalyzeRisks // Analyze the project risks RiskAnalyzer analyzer = new RiskAnalyzer(settings); RiskAnalysisResult analysisResult = analyzer.Analyze(project); // ExEnd:AnalyzeRisks // ExStart:UseAnalysisResult // Select the desired output (here we get early finish of the root task) RiskItemStatistics rootEarlyFinish = analysisResult.GetRiskItems(RiskItemType.EarlyFinish).Get(project.RootTask); Console.WriteLine("Expected value: {0}", rootEarlyFinish.ExpectedValue); Console.WriteLine("StandardDeviation: {0}", rootEarlyFinish.StandardDeviation); Console.WriteLine("10% Percentile: {0}", rootEarlyFinish.GetPercentile(10)); Console.WriteLine("50% Percentile: {0}", rootEarlyFinish.GetPercentile(50)); Console.WriteLine("90% Percentile: {0}", rootEarlyFinish.GetPercentile(90)); Console.WriteLine("Minimum: {0}", rootEarlyFinish.Minimum); Console.WriteLine("Maximum: {0}", rootEarlyFinish.Maximum); // Save PDF report which is rendered for Project Root Task Finish date analysisResult.SaveReport(dataDir + "AnalysisReport_out.pdf"); // ExEnd:UseAnalysisResult }
public void UseRiskPattern() { // ExStart:UseRiskPattern // ExFor: RiskPattern // ExFor: RiskPattern.#ctor(Task) // ExFor: RiskPattern.Distribution // ExFor: RiskPattern.Optimistic // ExFor: RiskPattern.Pessimistic // ExFor: RiskPattern.ConfidenceLevel // ExFor: RiskPattern.Task // ExSummary: Shows how to define risk simulation settings. var settings = new RiskAnalysisSettings(); settings.IterationsCount = 200; var project = new Project(DataDir + "Software Development Plan-1.mpp"); var task = project.RootTask.Children.GetById(17); // Initialize a risk pattern var pattern = new RiskPattern(task); // Select a distribution type for the random number generator to generate possible values from (only two types currently supported, namely normal and uniform) // For more details see here: https://en.wikipedia.org/wiki/Normal_distribution) pattern.Distribution = ProbabilityDistributionType.Normal; // Set the percentage of the most likely task duration which can happen in the best possible project scenario // The default value is 75, which means that if the estimated specified task duration is 4 days then the optimistic duration will be 3 days pattern.Optimistic = 70; // Set the percentage of the most likely task duration which can happen in the worst possible project scenario // The default value is 125, which means that if the estimated specified task duration is 4 days then the pessimistic duration will be 5 days. pattern.Pessimistic = 130; // Set a confidence level that correspond to the percentage of the time the actual values will be within optimistic and pessimistic estimates. // You can think of it as a value of standard deviation: the more uncertain about your estimates you are, the more the value of standard deviation used in random number generator is pattern.ConfidenceLevel = ConfidenceLevel.CL75; settings.Patterns.Add(pattern); var analyzer = new RiskAnalyzer(settings); var analysisResult = analyzer.Analyze(project); var earlyFinish = analysisResult.GetRiskItems(RiskItemType.EarlyFinish).Get(project.RootTask); Console.WriteLine("Expected value: {0}", earlyFinish.ExpectedValue); Console.WriteLine("StandardDeviation: {0}", earlyFinish.StandardDeviation); Console.WriteLine("10% Percentile: {0}", earlyFinish.GetPercentile(10)); Console.WriteLine("50% Percentile: {0}", earlyFinish.GetPercentile(50)); Console.WriteLine("90% Percentile: {0}", earlyFinish.GetPercentile(90)); Console.WriteLine("Minimum: {0}", earlyFinish.Minimum); Console.WriteLine("Maximum: {0}", earlyFinish.Maximum); analysisResult.SaveReport(OutDir + "AnalysisReport_out.pdf"); // ExEnd:UseRiskPattern }
public void WorkWithRiskAnalysisResult() { // ExStart // ExFor: RiskAnalysis.RiskAnalysisResult // ExFor: RiskAnalysis.RiskAnalysisResult.GetRiskItems(RiskItemType) // ExFor: RiskAnalysis.RiskAnalysisResult.SaveReport(Stream) // ExFor: RiskAnalysis.RiskAnalysisResult.SaveReport(String) // ExFor: RiskItemType // ExSummary: Shows how to calculate statistic of risks and save it into as PDF report. var settings = new RiskAnalysisSettings { IterationsCount = 200 }; var project = new Project(DataDir + "Software Development Plan-1.mpp"); var task = project.RootTask.Children.GetById(17); // Initialize a risk pattern var pattern = new RiskPattern(task) { // Select a distribution type for the random number generator to generate possible values from (only two types currently supported, namely normal and uniform) // For more details see here: https://en.wikipedia.org/wiki/Normal_distribution) Distribution = ProbabilityDistributionType.Normal, // Set the percentage of the most likely task duration which can happen in the best possible project scenario // The default value is 75, which means that if the estimated specified task duration is 4 days then the optimistic duration will be 3 days Optimistic = 70, // Set the percentage of the most likely task duration which can happen in the worst possible project scenario // The default value is 125, which means that if the estimated specified task duration is 4 days then the pessimistic duration will be 5 days. Pessimistic = 130, // Set a confidence level that correspond to the percentage of the time the actual values will be within optimistic and pessimistic estimates. // You can think of it as a value of standard deviation: the more uncertain about your estimates you are, the more the value of standard deviation used in random number generator is ConfidenceLevel = ConfidenceLevel.CL75 }; settings.Patterns.Add(pattern); // Analyze the project risks var analyzer = new RiskAnalyzer(settings); var analysisResult = analyzer.Analyze(project); // save analysis as a report into a file by file path analysisResult.SaveReport(OutDir + "AnalysisResult_out.pdf"); // or save analysis into a stream using (var stream = new FileStream(OutDir + "AnalysisResult_out1.pdf", FileMode.Create)) { analysisResult.SaveReport(stream); } // ExEnd }
public void WorkWithRiskItemStatisticsCollection() { // ExStart // ExFor: RiskAnalysis.RiskItemStatisticsCollection // ExFor: RiskAnalysis.RiskItemStatisticsCollection.Get(Task) // ExFor: RiskAnalysis.RiskItemStatisticsCollection.GetEnumerator // ExSummary: Shows how to work with collection of risk statistics. var settings = new RiskAnalysisSettings { IterationsCount = 200 }; var project = new Project(DataDir + "Software Development Plan-1.mpp"); var task = project.RootTask.Children.GetById(17); // Initialize a risk pattern var pattern = new RiskPattern(task) { // Select a distribution type for the random number generator to generate possible values from (only two types currently supported, namely normal and uniform) // For more details see here: https://en.wikipedia.org/wiki/Normal_distribution) Distribution = ProbabilityDistributionType.Normal, // Set the percentage of the most likely task duration which can happen in the best possible project scenario // The default value is 75, which means that if the estimated specified task duration is 4 days then the optimistic duration will be 3 days Optimistic = 70, // Set the percentage of the most likely task duration which can happen in the worst possible project scenario // The default value is 125, which means that if the estimated specified task duration is 4 days then the pessimistic duration will be 5 days. Pessimistic = 130, // Set a confidence level that correspond to the percentage of the time the actual values will be within optimistic and pessimistic estimates. // You can think of it as a value of standard deviation: the more uncertain about your estimates you are, the more the value of standard deviation used in random number generator is ConfidenceLevel = ConfidenceLevel.CL75 }; settings.Patterns.Add(pattern); var analyzer = new RiskAnalyzer(settings); var analysisResult = analyzer.Analyze(project); // iterate over all statistic items var statistics = analysisResult.GetRiskItems(RiskItemType.EarlyFinish); foreach (var statistic in statistics) { Console.WriteLine("Short statistic: " + statistic); Console.WriteLine(); Console.WriteLine("Statistic details: "); Console.WriteLine("Item Type: {0}", statistic.ItemType); Console.WriteLine("Expected value: {0}", statistic.ExpectedValue); Console.WriteLine("StandardDeviation: {0}", statistic.StandardDeviation); Console.WriteLine("10% Percentile: {0}", statistic.GetPercentile(10)); Console.WriteLine("50% Percentile: {0}", statistic.GetPercentile(50)); Console.WriteLine("90% Percentile: {0}", statistic.GetPercentile(90)); Console.WriteLine("Minimum: {0}", statistic.Minimum); Console.WriteLine("Maximum: {0}", statistic.Maximum); } // or get a specific stats var itemStatistics = analysisResult.GetRiskItems(RiskItemType.EarlyFinish).Get(project.RootTask); Console.WriteLine("Print the specific statistic: "); Console.WriteLine("Expected value: {0}", itemStatistics.ExpectedValue); Console.WriteLine("StandardDeviation: {0}", itemStatistics.StandardDeviation); Console.WriteLine("10% Percentile: {0}", itemStatistics.GetPercentile(10)); Console.WriteLine("50% Percentile: {0}", itemStatistics.GetPercentile(50)); Console.WriteLine("90% Percentile: {0}", itemStatistics.GetPercentile(90)); Console.WriteLine("Minimum: {0}", itemStatistics.Minimum); Console.WriteLine("Maximum: {0}", itemStatistics.Maximum); // ExEnd }