예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }
예제 #4
0
        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();
        }