summaryrefslogtreecommitdiff
path: root/module/acme/src/main/java/io/trygvis/acme/planning/machine/CloudBalancingEasyScoreCalculator.java
diff options
context:
space:
mode:
authorTrygve Laugstøl <trygvis@inamo.no>2021-01-24 21:43:30 +0100
committerTrygve Laugstøl <trygvis@inamo.no>2021-01-24 21:43:30 +0100
commit0037e24177fe9fc28809b8afd67a881af94037c0 (patch)
tree57de3f5c3ed2e06272d2a80086375176df4d5f3d /module/acme/src/main/java/io/trygvis/acme/planning/machine/CloudBalancingEasyScoreCalculator.java
parent35942469a41df149fe35b113d6f228b654616757 (diff)
downloadrules-sandbox-0037e24177fe9fc28809b8afd67a881af94037c0.tar.gz
rules-sandbox-0037e24177fe9fc28809b8afd67a881af94037c0.tar.bz2
rules-sandbox-0037e24177fe9fc28809b8afd67a881af94037c0.tar.xz
rules-sandbox-0037e24177fe9fc28809b8afd67a881af94037c0.zip
WIP: Optaplanner.
Diffstat (limited to 'module/acme/src/main/java/io/trygvis/acme/planning/machine/CloudBalancingEasyScoreCalculator.java')
-rw-r--r--module/acme/src/main/java/io/trygvis/acme/planning/machine/CloudBalancingEasyScoreCalculator.java45
1 files changed, 45 insertions, 0 deletions
diff --git a/module/acme/src/main/java/io/trygvis/acme/planning/machine/CloudBalancingEasyScoreCalculator.java b/module/acme/src/main/java/io/trygvis/acme/planning/machine/CloudBalancingEasyScoreCalculator.java
new file mode 100644
index 0000000..6a14372
--- /dev/null
+++ b/module/acme/src/main/java/io/trygvis/acme/planning/machine/CloudBalancingEasyScoreCalculator.java
@@ -0,0 +1,45 @@
+package io.trygvis.acme.planning.machine;
+
+import org.optaplanner.core.api.score.buildin.hardsoft.HardSoftScore;
+import org.optaplanner.core.api.score.calculator.EasyScoreCalculator;
+
+public class CloudBalancingEasyScoreCalculator implements EasyScoreCalculator<CloudBalance, HardSoftScore> {
+
+ @Override
+ public HardSoftScore calculateScore(CloudBalance cloudBalance) {
+ int hardScore = 0;
+ int softScore = 0;
+ for (CloudComputer computer : cloudBalance.getComputerList()) {
+ int cpu = 0;
+ int memory = 0;
+ boolean used = false;
+
+ // Calculate usage
+ for (CloudProcess process : cloudBalance.getProcessList()) {
+ if (computer.equals(process.computer)) {
+ cpu += process.requiredCpu;
+ memory += process.requiredMemory;
+ used = true;
+ }
+ }
+
+ var instance = computer.instance;
+
+ // Hard constraints
+ int cpuPowerAvailable = instance.cpu - cpu;
+ if (cpuPowerAvailable < 0) {
+ hardScore += cpuPowerAvailable;
+ }
+ int memoryAvailable = instance.memory - memory;
+ if (memoryAvailable < 0) {
+ hardScore += memoryAvailable;
+ }
+
+ // Soft constraints
+ if (used) {
+ softScore -= instance.cost;
+ }
+ }
+ return HardSoftScore.of(hardScore, softScore);
+ }
+}