public List <HeatMapRegion> LoadHeatMapRegionsToTestWorkspace(string testWorkspaceName) { List <HeatMapRegion> heatMapRegions = new List <HeatMapRegion>(); string workspaceResultsPath = GetWorkspaceRandomExplorationResultsPath(testWorkspaceName); string heatMapRegionsFilePath = workspaceResultsPath + RandomExplorationRun.heatMapRegionsFileName; if (!File.Exists(heatMapRegionsFilePath)) { return(null); } string[] heatMapRegionsFileLines = System.IO.File.ReadAllLines(heatMapRegionsFilePath); MatchCollection wordMatches = Regex.Matches(heatMapRegionsFileLines[0], @"[^,]+"); if (wordMatches.Count != (6 + 3 * 5)) { return(null); } string[] objectiveFunctionsName = new string[5]; for (int i = 0; i < 5; ++i) { objectiveFunctionsName[i] = wordMatches[6 + i * 3].Value; } HeatMap heatMap = new HeatMap(); for (int l = 1; l < heatMapRegionsFileLines.Count(); ++l) { MatchCollection valueMatches = Regex.Matches(heatMapRegionsFileLines[l], @"[^,]+"); if (valueMatches.Count != (6 + 3 * 5)) { return(null); } for (int i = 0; i < 5; ++i) { HeatMapRegion heatMapRegion = new HeatMapRegion(); heatMapRegion.indexX = Int16.Parse(valueMatches[0].Value); heatMapRegion.indexY = Int16.Parse(valueMatches[1].Value); heatMapRegion.xStart = float.Parse(valueMatches[2].Value); heatMapRegion.xEnd = float.Parse(valueMatches[3].Value); heatMapRegion.yStart = float.Parse(valueMatches[4].Value); heatMapRegion.yEnd = float.Parse(valueMatches[5].Value); heatMapRegion.requirementName = objectiveFunctionsName[i]; HeatMapPoint heatMapPoint = new HeatMapPoint(); heatMapPoint.objectiveFunctionValues[heatMapRegion.requirementName] = float.Parse(valueMatches[6 + i * 3].Value); heatMapPoint.x = float.Parse(valueMatches[7 + i * 3].Value); heatMapPoint.y = float.Parse(valueMatches[8 + i * 3].Value); heatMapRegion.worstCasePointFromRandomExploration = heatMapPoint; heatMapRegion.objectiveFunctionAverageValue = heatMapPoint.objectiveFunctionValues[heatMapRegion.requirementName]; heatMapRegions.Add(heatMapRegion); } } return(heatMapRegions); }
public Dictionary <string, List <CCTestCase> > LoadWorstTestCasesToCCTestWorkspace(string testWorkspaceName) { Dictionary <string, List <CCTestCase> > worstTestCases = new Dictionary <string, List <CCTestCase> >(); string singleStateSearchResultsPath = GetWorkspaceSingleStateSearchResultsPath(testWorkspaceName); if (!Directory.Exists(singleStateSearchResultsPath)) { return(worstTestCases); } List <string> requirementDirectories = new List <string>(Directory.EnumerateDirectories(singleStateSearchResultsPath)); foreach (string requirementDirectory in requirementDirectories) { int startIndexOfFileName = requirementDirectory.LastIndexOf('\\'); string requirementDirectoryName = requirementDirectory.Substring(startIndexOfFileName + 1); worstTestCases.Add(requirementDirectoryName, new List <CCTestCase>()); List <string> regionsDirectories = new List <string>(Directory.EnumerateDirectories(requirementDirectory)); foreach (string regionsDirectory in regionsDirectories) { string worstTestCasesFilePath = regionsDirectory + "\\WorstCaseScenarioInTheRegion.csv"; if (!File.Exists(worstTestCasesFilePath)) { continue; } string[] worstTestCasesFileLines = System.IO.File.ReadAllLines(worstTestCasesFilePath); MatchCollection wordMatches = Regex.Matches(worstTestCasesFileLines[0], @"[^,]+"); if (wordMatches.Count != 4) { continue; } MatchCollection valueMatches = Regex.Matches(worstTestCasesFileLines[1], @"[^,]+"); if (valueMatches.Count != 4) { continue; } HeatMapRegion heatMapRegion = new HeatMapRegion(); heatMapRegion.indexX = Int16.Parse(valueMatches[0].Value); heatMapRegion.indexY = Int16.Parse(valueMatches[1].Value); CCTestCase ccTestCase = new CCTestCase(); ccTestCase.initialDesired = float.Parse(valueMatches[2].Value); ccTestCase.finalDesired = float.Parse(valueMatches[3].Value); ccTestCase.heatMapRegion = heatMapRegion; worstTestCases[requirementDirectoryName].Add(ccTestCase); } } return(worstTestCases); }
private List <HeatMapRegion> sortHeatMapRegionsList(List <HeatMapRegion> heatMapRegionsList) { List <HeatMapRegion> sortedList = new List <HeatMapRegion>(); for (int i = 0; i < heatMapRegionsList.Count; ++i) { sortedList.Add(heatMapRegionsList[i]); } for (int i = 0; i < sortedList.Count - 1; ++i) { for (int j = i + 1; j < sortedList.Count; ++j) { if (sortedList[i].objectiveFunctionAverageValue < sortedList[j].objectiveFunctionAverageValue) { HeatMapRegion heatMapRegionTemp = sortedList[i]; sortedList[i] = sortedList[j]; sortedList[j] = heatMapRegionTemp; } } } return(sortedList); }
public void RunSingleStateSearchInRegion(HeatMapRegion heatMapRegion) { MatlabAsyncProgram.KillMatlab(); matlabAsyncProgram = new MatlabAsyncProgram(testWorkspace.modelSettings.MatlabExePath); CCTestWorkspace ccTestWorkspace = (CCTestWorkspace)testWorkspace; if (!Directory.Exists(tempPath)) { Directory.CreateDirectory(tempPath); } File.Delete(outputLogPath); MatlabCommand modelSettingsCommand = MatlabCommandBuilder.GetModelSettingsMatlabCommand(ccTestWorkspace.modelSettings); modelSettingsCommand.SaveToMatlabScript(tempPath + "\\" + MatlabCommandBuilder.ModelSettingsScriptFileName + ".m"); CompositeMatlabCommand mainScriptCommand = new CompositeMatlabCommand(); mainScriptCommand.LoadFromMatlabScript(templatePath + "\\SingleStateSearch\\SingleStateSearch-Common.m"); CompositeMatlabCommand GenerateNewValuesCommand = new CompositeMatlabCommand(); CompositeMatlabCommand ReplaceValuesCommand = new CompositeMatlabCommand(); if (ccTestWorkspace.advancedCCSettings.singelStateSearchAlgorithm == SingelStateSearchAlgorithmsEnum.RandomSearch) { GenerateNewValuesCommand.LoadFromMatlabScript(templatePath + "\\SingleStateSearch\\RandomSearch\\SingleStateSearch-RandomSearchGenerateValues.m"); ReplaceValuesCommand.LoadFromMatlabScript(templatePath + "\\SingleStateSearch\\RandomSearch\\SingleStateSearch-RandomSearchReplaceValues.m"); } else if (ccTestWorkspace.advancedCCSettings.singelStateSearchAlgorithm == SingelStateSearchAlgorithmsEnum.HillClimbing) { GenerateNewValuesCommand.LoadFromMatlabScript(templatePath + "\\SingleStateSearch\\HillClimbing\\SingleStateSearch-HillClimbingGenerateValues.m"); GenerateNewValuesCommand.ReplaceInTemplate("[MiLTester_EASigmalVal]", ccTestWorkspace.GetSigmaForSingleStateSearch().ToString()); ReplaceValuesCommand.LoadFromMatlabScript(templatePath + "\\SingleStateSearch\\HillClimbing\\SingleStateSearch-HillClimbingReplaceValues.m"); } else if (ccTestWorkspace.advancedCCSettings.singelStateSearchAlgorithm == SingelStateSearchAlgorithmsEnum.HCRR) { GenerateNewValuesCommand.LoadFromMatlabScript(templatePath + "\\SingleStateSearch\\HCRR\\SingleStateSearch-HillClimbingGenerateValues.m"); GenerateNewValuesCommand.ReplaceInTemplate("[MiLTester_EASigmalVal]", ccTestWorkspace.GetSigmaForSingleStateSearch().ToString()); ReplaceValuesCommand.LoadFromMatlabScript(templatePath + "\\SingleStateSearch\\HCRR\\SingleStateSearch-HillClimbingReplaceValues.m"); } else if (ccTestWorkspace.advancedCCSettings.singelStateSearchAlgorithm == SingelStateSearchAlgorithmsEnum.SimulatedAnnealing) { GenerateNewValuesCommand.LoadFromMatlabScript(templatePath + "\\SingleStateSearch\\SimulatedAnnealing\\SingleStateSearch-SimulatedAnnealingGenerateValues.m"); GenerateNewValuesCommand.ReplaceInTemplate("[MiLTester_EASigmalVal]", ccTestWorkspace.GetSigmaForSingleStateSearch().ToString()); ReplaceValuesCommand.LoadFromMatlabScript(templatePath + "\\SingleStateSearch\\SimulatedAnnealing\\SingleStateSearch-SimulatedAnnealingReplaceValues.m"); ReplaceValuesCommand.ReplaceInTemplate("[MiLTester_AnnealingScheduleVal]", ccTestWorkspace.GetAnnealingScheduleForSingleStateSearch().ToString()); } mainScriptCommand.ReplaceInTemplate("[MiLTester_GenerateNewValuesCode]", GenerateNewValuesCommand); mainScriptCommand.ReplaceInTemplate("[MiLTester_ReplaceValuesCode]", ReplaceValuesCommand); mainScriptCommand.ReplaceInTemplate("[MiLTester_CodeRootVal]", codePath); mainScriptCommand.ReplaceInTemplate("[MiLTester_SimulationTimeVal]", testWorkspace.GetSimulationTime().ToString()); mainScriptCommand.ReplaceInTemplate("[MiLTester_SimulinkModelPathVal]", testWorkspace.modelSettings.SimulinkModelPath); mainScriptCommand.ReplaceInTemplate("[MiLTester_SearchVariablesCntVal]", ccTestWorkspace.GetSearchVariablesCnt().ToString()); mainScriptCommand.ReplaceInTemplate("[MiLTester_RegionWidthRangeStartVal]", heatMapRegion.xStart.ToString()); mainScriptCommand.ReplaceInTemplate("[MiLTester_RegionWidthRangeStopVal]", heatMapRegion.xEnd.ToString()); mainScriptCommand.ReplaceInTemplate("[MiLTester_RegionHeightRangeStartVal]", heatMapRegion.yStart.ToString()); mainScriptCommand.ReplaceInTemplate("[MiLTester_RegionHeightRangeStopVal]", heatMapRegion.yEnd.ToString()); mainScriptCommand.ReplaceInTemplate("[MiLTester_WorstPointFromRandomExplorationInitialDesiredVal]", heatMapRegion.worstCasePointFromRandomExploration.x.ToString()); mainScriptCommand.ReplaceInTemplate("[MiLTester_WorstPointFromRandomExplorationFinalDesiredVal]", heatMapRegion.worstCasePointFromRandomExploration.y.ToString()); mainScriptCommand.ReplaceInTemplate("[MiLTester_AlgorithmRoundsVal]", ccTestWorkspace.advancedCCSettings.algorithmRounds.ToString()); mainScriptCommand.ReplaceInTemplate("[MiLTester_AlgorithmIterationsVal]", ccTestWorkspace.advancedCCSettings.algorithmIterations.ToString()); mainScriptCommand.ReplaceInTemplate("[MiLTester_SelectedObjectiveFunction]", heatMapRegion.requirementName); mainScriptCommand.ReplaceInTemplate("[MiLTester_DesiredValueVar]", ccTestWorkspace.GetDesiredValueVariable().parameterName); mainScriptCommand.ReplaceInTemplate("[MiLTester_ActualValueVar]", ccTestWorkspace.GetActualValueVariable().parameterName); mainScriptCommand.ReplaceInTemplate("[MiLTester_RegionWidthIndexVal]", heatMapRegion.indexX.ToString()); mainScriptCommand.ReplaceInTemplate("[MiLTester_RegionHeightIndexVal]", heatMapRegion.indexY.ToString()); mainScriptCommand.ReplaceInTemplate("[MiLTester_RangeStartVal]", ccTestWorkspace.GetDesiredValueVariable().from.ToString()); mainScriptCommand.ReplaceInTemplate("[MiLTester_RangeStopVal]", ccTestWorkspace.GetDesiredValueVariable().to.ToString()); mainScriptCommand.ReplaceInTemplate("[MiLTester_AnnealingStartTemprature]", ccTestWorkspace.GetAnnealingStartTemprature().ToString()); mainScriptCommand.SaveToMatlabScript(tempPath + "\\" + MatlabCommandBuilder.MainScriptFileName + ".m"); AsyncRunMainScript(); }