diff options
author | Trygve Laugstøl <trygvis@inamo.no> | 2021-01-25 21:29:12 +0100 |
---|---|---|
committer | Trygve Laugstøl <trygvis@inamo.no> | 2021-01-25 21:29:12 +0100 |
commit | 912bc8b903dfa6d438c2469ecdad35c181c71830 (patch) | |
tree | 1e6ee9fdcb2b9d488914b80623d68189867533bb /module/acme-planner/src/main/java/io/trygvis/acme/planning/machine/CloudBalancingEasyScoreCalculator.java | |
parent | 92b957036218c03a20ba35c19a70bdf5e2333fd3 (diff) | |
download | rules-sandbox-912bc8b903dfa6d438c2469ecdad35c181c71830.tar.gz rules-sandbox-912bc8b903dfa6d438c2469ecdad35c181c71830.tar.bz2 rules-sandbox-912bc8b903dfa6d438c2469ecdad35c181c71830.tar.xz rules-sandbox-912bc8b903dfa6d438c2469ecdad35c181c71830.zip |
Improving usability, massive refactoring.
* Moving all Drools code into their own modules. This fixes ri-engine
to acme dependency.
* Now they all inherit from their own parent, should be used by
third party code too.
* Separating acme planning code into its own module.
* Splitting rules code from ri-engine into ri-base. ri-engine is now
a pure launcher for modules.
* Dumping kogito for the most part, but it seems like the planner still
requires that.
Diffstat (limited to 'module/acme-planner/src/main/java/io/trygvis/acme/planning/machine/CloudBalancingEasyScoreCalculator.java')
-rw-r--r-- | module/acme-planner/src/main/java/io/trygvis/acme/planning/machine/CloudBalancingEasyScoreCalculator.java | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/module/acme-planner/src/main/java/io/trygvis/acme/planning/machine/CloudBalancingEasyScoreCalculator.java b/module/acme-planner/src/main/java/io/trygvis/acme/planning/machine/CloudBalancingEasyScoreCalculator.java new file mode 100644 index 0000000..6a14372 --- /dev/null +++ b/module/acme-planner/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); + } +} |