package org.cloudbus.cloudsim.container.hostSelectionPolicies; import org.cloudbus.cloudsim.container.core.*; import org.cloudbus.cloudsim.container.utils.Correlation; import java.util.List; import java.util.Set; /** * Created by sareh on 11/08/15. */ public class HostSelectionPolicyMinimumCorrelation extends HostSelectionPolicy { private HostSelectionPolicy fallbackPolicy; /** * Instantiates a new power vm selection policy maximum correlation. * * @param fallbackPolicy the fallback policy */ public HostSelectionPolicyMinimumCorrelation(final HostSelectionPolicy fallbackPolicy) { super(); setFallbackPolicy(fallbackPolicy); } @Override public ContainerHost getHost(List<ContainerHost> hostList, Object obj, Set<? extends ContainerHost> excludedHostList) { double[] utilizationHistory; if (obj instanceof Container) { utilizationHistory = ((PowerContainer) obj).getUtilizationHistoryList(); } else { utilizationHistory = ((PowerContainerVm) obj).getUtilizationHistoryList(); } Correlation correlation = new Correlation(); double minCor = Double.MAX_VALUE; ContainerHost selectedHost = null; for (ContainerHost host : hostList) { if (excludedHostList.contains(host)) { continue; } if (host instanceof PowerContainerHostUtilizationHistory) { double[] hostUtilization = ((PowerContainerHostUtilizationHistory) host).getUtilizationHistory(); if (hostUtilization.length > 5) { double cor = correlation.getCor(hostUtilization, utilizationHistory); if (cor < minCor) { minCor = cor; selectedHost = host; } } } } if (selectedHost == null) { } return selectedHost; } public HostSelectionPolicy getFallbackPolicy() { return fallbackPolicy; } public void setFallbackPolicy(HostSelectionPolicy fallbackPolicy) { this.fallbackPolicy = fallbackPolicy; } }