diff --git a/theodolite/src/main/kotlin/theodolite/execution/TheodoliteExecutor.kt b/theodolite/src/main/kotlin/theodolite/execution/TheodoliteExecutor.kt index 77ebd099d4900b32b0724c0c6e50efa305453796..3879e67239c9ba7140114ee605a2e71de3409c98 100644 --- a/theodolite/src/main/kotlin/theodolite/execution/TheodoliteExecutor.kt +++ b/theodolite/src/main/kotlin/theodolite/execution/TheodoliteExecutor.kt @@ -128,12 +128,21 @@ class TheodoliteExecutor( config.searchStrategy.benchmarkExecutor.results, "${resultsFolder}exp${this.config.executionId}-result" ) - // Create expXYZ_demand.csv file - ioHandler.writeToCSVFile( - "${resultsFolder}exp${this.config.executionId}_demand", - calculateDemandMetric(config.loads, config.searchStrategy.benchmarkExecutor.results), - listOf("load","resources") - ) + // Create expXYZ_demand.csv file or expXYZ_capacity.csv depending on metric + when(config.metric) { + Metric.DEMAND -> + ioHandler.writeToCSVFile( + "${resultsFolder}exp${this.config.executionId}_demand", + calculateMetric(config.loads, config.searchStrategy.benchmarkExecutor.results), + listOf("load","resources") + ) + Metric.CAPACITY -> + ioHandler.writeToCSVFile( + "${resultsFolder}exp${this.config.executionId}_capacity", + calculateMetric(config.resources, config.searchStrategy.benchmarkExecutor.results), + listOf("resource", "loads") + ) + } } kubernetesBenchmark.teardownInfrastructure() } @@ -148,8 +157,8 @@ class TheodoliteExecutor( return executionID } - private fun calculateDemandMetric(loads: List<Int>, results: Results): List<List<String>> { - return loads.map { listOf(it.toString(), results.getOptYDimensionValue(it).toString()) } + private fun calculateMetric(xValues: List<Int>, results: Results): List<List<String>> { + return xValues.map { listOf(it.toString(), results.getOptYDimensionValue(it).toString()) } } } diff --git a/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/InitialGuessSearchStrategy.kt b/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/InitialGuessSearchStrategy.kt index 7a7100189368fa3d3ef5735a5e117f956d705245..bd7fa71a2b1245a5a70dc7c2d1b1f6ae6fdb6f02 100644 --- a/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/InitialGuessSearchStrategy.kt +++ b/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/InitialGuessSearchStrategy.kt @@ -19,12 +19,7 @@ class InitialGuessSearchStrategy(benchmarkExecutor: BenchmarkExecutor, guessStra override fun findSuitableResource(load: Int, resources: List<Int>): Int? { - if(resources.isEmpty()) { - logger.info { "You need to specify resources to be checked for the InitialGuessSearchStrategy to work." } - return null - } - - if(guessStrategy == null){ + if(this.guessStrategy == null){ logger.info { "Your InitialGuessSearchStrategy doesn't have a GuessStrategy. This is not supported." } return null } @@ -86,14 +81,9 @@ class InitialGuessSearchStrategy(benchmarkExecutor: BenchmarkExecutor, guessStra return null } - override fun findSuitableLoad(resource: Int, loads: List<Int>): Int? { - - if(loads.isEmpty()) { - logger.info { "You need to specify resources to be checked for the InitialGuessSearchStrategy to work." } - return null - } + override fun findSuitableLoad(resource: Int, loads: List<Int>): Int?{ - if(guessStrategy == null){ + if(this.guessStrategy == null){ logger.info { "Your InitialGuessSearchStrategy doesn't have a GuessStrategy. This is not supported." } return null } diff --git a/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/SearchStrategy.kt b/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/SearchStrategy.kt index 85453934f22238a5d42f8e564887e62a3ef1a2d1..bd380f25a88a34919456be7102737b9168d60ddf 100644 --- a/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/SearchStrategy.kt +++ b/theodolite/src/main/kotlin/theodolite/strategies/searchstrategy/SearchStrategy.kt @@ -27,20 +27,19 @@ abstract class SearchStrategy(val benchmarkExecutor: BenchmarkExecutor, val gues */ fun applySearchStrategyByMetric(loads: List<Int>, resources: List<Int>, metric: Metric) { - if (metric.value == "demand") { - // demand metric - for (load in loads) { - if (benchmarkExecutor.run.get()) { - this.findSuitableResource(load, resources) + when(metric) { + Metric.DEMAND -> + for (load in loads) { + if (benchmarkExecutor.run.get()) { + this.findSuitableResource(load, resources) + } } - } - } else { - // capacity metric - for (resource in resources) { - if (benchmarkExecutor.run.get()) { - this.findSuitableLoad(resource, loads) + Metric.CAPACITY -> + for (resource in resources) { + if (benchmarkExecutor.run.get()) { + this.findSuitableLoad(resource, loads) + } } - } } } diff --git a/theodolite/src/main/kotlin/theodolite/util/Results.kt b/theodolite/src/main/kotlin/theodolite/util/Results.kt index 3d56e0129082a63483a95ca486f4973855fee0cb..b255ec73c9c13dfb2d18c781c9d60b3ec33c99db 100644 --- a/theodolite/src/main/kotlin/theodolite/util/Results.kt +++ b/theodolite/src/main/kotlin/theodolite/util/Results.kt @@ -27,30 +27,31 @@ class Results (val metric: Metric) { fun setResult(experiment: Pair<Int, Int>, successful: Boolean) { this.results[experiment] = successful - if(metric.value == "demand" && optInstances.containsKey(experiment.first)){ - - if (optInstances[experiment.first]!! > experiment.second){ - optInstances[experiment.first] = experiment.second - } - } - else if(metric.value == "demand" && !optInstances.containsKey(experiment.first)){ - if(!successful){ - optInstances[experiment.first] = Int.MAX_VALUE - }else { - optInstances[experiment.first] = experiment.second - } - } - else if(metric.value == "capacity" && optInstances.containsKey(experiment.second)){ - if (optInstances[experiment.second]!! < experiment.first){ - optInstances[experiment.second] = experiment.first - } - } - else if(metric.value == "capacity" && !optInstances.containsKey(experiment.second)){ - if(!successful){ - optInstances[experiment.second] = Int.MIN_VALUE - } else { - optInstances[experiment.second] = experiment.first - } + when (metric) { + Metric.DEMAND -> + if (optInstances.containsKey(experiment.first)) { + if(optInstances[experiment.first]!! > experiment.second) { + optInstances[experiment.first] = experiment.second + } + } else { + if(!successful){ + optInstances[experiment.first] = Int.MAX_VALUE + }else { + optInstances[experiment.first] = experiment.second + } + } + Metric.CAPACITY -> + if (optInstances.containsKey(experiment.second)) { + if (optInstances[experiment.second]!! < experiment.first){ + optInstances[experiment.second] = experiment.first + } + } else { + if(!successful){ + optInstances[experiment.second] = Int.MIN_VALUE + } else { + optInstances[experiment.second] = experiment.first + } + } } }