From 1525fb49bb6964f5a807f129df8914de5b9b2431 Mon Sep 17 00:00:00 2001 From: Simon Ehrenstein <simon.ehrenstein@gmail.com> Date: Wed, 6 Jan 2021 18:09:16 +0100 Subject: [PATCH] Implement search strategies Co-authored-by: Benedikt Wetzel <stu126940@mail.uni-kiel.de> --- .../kotlin/theodolite/ExperimentConfig.kt | 26 +++++++++++++++++++ .../kotlin/theodolite/ExperimentExecutor.kt | 9 +++++++ .../src/main/kotlin/theodolite/Main.kt | 24 +++++++++++++++-- .../theodolite/strategies/BinarySearch.kt | 10 +++++++ .../strategies/EvenResourcesRestriction.kt | 12 +++++++++ .../theodolite/strategies/LinearSearch.kt | 14 ++++++++++ .../strategies/LowerBoundRestriction.kt | 16 ++++++++++++ .../restriction/CompositeRestriction.kt | 4 +++ .../restriction/PrimitiveRestriction.kt | 7 +++++ .../strategies/restriction/Restriction.kt | 5 ++++ .../strategies/searchstrategy/Benchmark.kt | 7 +++++ .../searchstrategy/SearchStrategy.kt | 5 ++++ 12 files changed, 137 insertions(+), 2 deletions(-) create mode 100644 theodolite-quarkus/src/main/kotlin/theodolite/ExperimentConfig.kt create mode 100644 theodolite-quarkus/src/main/kotlin/theodolite/ExperimentExecutor.kt create mode 100644 theodolite-quarkus/src/main/kotlin/theodolite/strategies/BinarySearch.kt create mode 100644 theodolite-quarkus/src/main/kotlin/theodolite/strategies/EvenResourcesRestriction.kt create mode 100644 theodolite-quarkus/src/main/kotlin/theodolite/strategies/LinearSearch.kt create mode 100644 theodolite-quarkus/src/main/kotlin/theodolite/strategies/LowerBoundRestriction.kt create mode 100644 theodolite-quarkus/src/main/kotlin/theodolite/strategies/restriction/CompositeRestriction.kt create mode 100644 theodolite-quarkus/src/main/kotlin/theodolite/strategies/restriction/PrimitiveRestriction.kt create mode 100644 theodolite-quarkus/src/main/kotlin/theodolite/strategies/restriction/Restriction.kt create mode 100644 theodolite-quarkus/src/main/kotlin/theodolite/strategies/searchstrategy/Benchmark.kt create mode 100644 theodolite-quarkus/src/main/kotlin/theodolite/strategies/searchstrategy/SearchStrategy.kt diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/ExperimentConfig.kt b/theodolite-quarkus/src/main/kotlin/theodolite/ExperimentConfig.kt new file mode 100644 index 000000000..5b2fb22c0 --- /dev/null +++ b/theodolite-quarkus/src/main/kotlin/theodolite/ExperimentConfig.kt @@ -0,0 +1,26 @@ +package theodolite + +import theodolite.strategies.SearchAlgorithm + +data class ExperimentConfig( + val useCase: Int, + val expId: Int, + val dimValues: Array<Int>, + val replicass: Array<Int>, + val partitions: Int, + val cpuLimit: String, + val memoryLimit: String, + val executionMinutes: Float, + val prometheusBaseUrl: String, + val reset: Boolean, + val namespace: String, + val resultPath: String, + val configurations: Any, + val restrictionStrategy: SearchAlgorithm, + val searchStrategy: SearchStrategy, + val benchmark: Any, // TODO + val sloChecker: Any // TODO +) { + + +} \ No newline at end of file diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/ExperimentExecutor.kt b/theodolite-quarkus/src/main/kotlin/theodolite/ExperimentExecutor.kt new file mode 100644 index 000000000..9c68ca5cf --- /dev/null +++ b/theodolite-quarkus/src/main/kotlin/theodolite/ExperimentExecutor.kt @@ -0,0 +1,9 @@ +package theodolite + +class ExperimentExecutor( + val config: ExperimentConfig +) { + fun run() { + this.config.restrictionStrategy.restrictResource(); + } +} \ No newline at end of file diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/Main.kt b/theodolite-quarkus/src/main/kotlin/theodolite/Main.kt index cf6a7cb5d..d606aedd8 100644 --- a/theodolite-quarkus/src/main/kotlin/theodolite/Main.kt +++ b/theodolite-quarkus/src/main/kotlin/theodolite/Main.kt @@ -6,9 +6,29 @@ import io.quarkus.runtime.annotations.QuarkusMain object Main { @JvmStatic fun main(args: Array<String>) { - println("Running main method") + println("Starting Benchmarks") + val config: ExperimentConfig = ExperimentConfig( + exp_id = 0, + use_case = 1, + dim_values = arrayOf(1,2,3), + configurations = TODO(), + domain_restriction_strategy = TODO(), + cpu_limit = "1000m", + execution_minutes = 5f, + memory_limit = "4gb", + namespace = "default", + partitions = 10, + prometheus_base_url = "http://localhost:9090", + replicass = arrayOf(1,2,3), + reset = false, + result_path = "./results", + search_strategy = TODO(), + subexperiment_evaluator = TODO(), + subexperiment_executor = TODO() + ) - //Quarkus.run() + val executor: ExperimentExecutor = ExperimentExecutor(config) + executor.run() } } diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/strategies/BinarySearch.kt b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/BinarySearch.kt new file mode 100644 index 000000000..c9fd0f498 --- /dev/null +++ b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/BinarySearch.kt @@ -0,0 +1,10 @@ +package theodolite.strategies + +import theodolite.strategies.searchstrategy.Benchmark +import theodolite.strategies.searchstrategy.SearchStrategy + +class BinarySearch(benchmark: Benchmark) : SearchStrategy(benchmark) { + override fun findSuitableResources(load: Int, resources: List<Int>): Int { + + } +} \ No newline at end of file diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/strategies/EvenResourcesRestriction.kt b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/EvenResourcesRestriction.kt new file mode 100644 index 000000000..24078a23d --- /dev/null +++ b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/EvenResourcesRestriction.kt @@ -0,0 +1,12 @@ +package theodolite.strategies + +import theodolite.strategies.restriction.CompositeRestriction +import theodolite.strategies.restriction.Restriction + +class EvenResourcesRestriction(childRestriction: Restriction) : CompositeRestriction(childRestriction) { + override fun restrict(loads: List<Int>, resources: List<Int>) { + val filteredResources: List<Int> = resources.filter { x -> x % 2 == 0 }; + this.childRestriction.restrict(loads, filteredResources); + } + +} \ No newline at end of file diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/strategies/LinearSearch.kt b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/LinearSearch.kt new file mode 100644 index 000000000..79938f7fa --- /dev/null +++ b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/LinearSearch.kt @@ -0,0 +1,14 @@ +package theodolite.strategies + +import theodolite.strategies.searchstrategy.Benchmark +import theodolite.strategies.searchstrategy.SearchStrategy + +class LinearSearch(benchmark: Benchmark) : SearchStrategy(benchmark) { + + override fun findSuitableResources(load: Int, resources: List<Int>): Int { + for (res in resources) { + if (this.benchmark.execute(load, res)) return resources.indexOf(res); + } + return resources.size; + } +} \ No newline at end of file diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/strategies/LowerBoundRestriction.kt b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/LowerBoundRestriction.kt new file mode 100644 index 000000000..157281a4c --- /dev/null +++ b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/LowerBoundRestriction.kt @@ -0,0 +1,16 @@ +package theodolite.strategies + +import theodolite.strategies.restriction.PrimitiveRestriction +import theodolite.strategies.searchstrategy.SearchStrategy + +class LowerBoundRestriction(searchStrategy: SearchStrategy) : PrimitiveRestriction(searchStrategy) { + override fun restrict(loads: List<Int>, resources: List<Int>): List<Int> { + val lowerBounds: MutableList<Int> = ArrayList<Int>(); + var lowerBound = 0; + for (load in loads) { + lowerBound = this.searchStrategy.findSuitableResources(load, resources.subList(lowerBound, resources.size)); + lowerBounds.add(lowerBound); + } + return lowerBounds; + } +} \ No newline at end of file diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/strategies/restriction/CompositeRestriction.kt b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/restriction/CompositeRestriction.kt new file mode 100644 index 000000000..6f61dc2ad --- /dev/null +++ b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/restriction/CompositeRestriction.kt @@ -0,0 +1,4 @@ +package theodolite.strategies.restriction + +abstract class CompositeRestriction(val childRestriction: Restriction): Restriction { +} \ No newline at end of file diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/strategies/restriction/PrimitiveRestriction.kt b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/restriction/PrimitiveRestriction.kt new file mode 100644 index 000000000..0e1873ec2 --- /dev/null +++ b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/restriction/PrimitiveRestriction.kt @@ -0,0 +1,7 @@ +package theodolite.strategies.restriction + +import theodolite.strategies.searchstrategy.SearchStrategy + +abstract class PrimitiveRestriction(val searchStrategy: SearchStrategy): Restriction { + +} \ No newline at end of file diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/strategies/restriction/Restriction.kt b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/restriction/Restriction.kt new file mode 100644 index 000000000..4dc5ca524 --- /dev/null +++ b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/restriction/Restriction.kt @@ -0,0 +1,5 @@ +package theodolite.strategies.restriction + +interface Restriction { + fun restrict(loads: List<Int>, resources: List<Int>): List<Int>; +} \ No newline at end of file diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/strategies/searchstrategy/Benchmark.kt b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/searchstrategy/Benchmark.kt new file mode 100644 index 000000000..eb3e22a36 --- /dev/null +++ b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/searchstrategy/Benchmark.kt @@ -0,0 +1,7 @@ +package theodolite.strategies.searchstrategy + +class Benchmark { + fun execute(load: Int, res: Int): Boolean { + return true; + } +} \ No newline at end of file diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/strategies/searchstrategy/SearchStrategy.kt b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/searchstrategy/SearchStrategy.kt new file mode 100644 index 000000000..b42e78c9e --- /dev/null +++ b/theodolite-quarkus/src/main/kotlin/theodolite/strategies/searchstrategy/SearchStrategy.kt @@ -0,0 +1,5 @@ +package theodolite.strategies.searchstrategy + +abstract class SearchStrategy(val benchmark: Benchmark) { + abstract fun findSuitableResources(load: Int, resources: List<Int>): Int; +} \ No newline at end of file -- GitLab