supporting case with no variables

Change-Id: I7a3baf4757d6f9be75195683e285a060a158394e
This commit is contained in:
Marta 2024-04-15 16:57:41 +02:00
parent 122a1d0f9c
commit 9fbf5be9fc
4 changed files with 15 additions and 7 deletions

View File

@ -9,6 +9,7 @@ import eu.nebulous.utilityevaluator.converter.NodeCandidateConverter;
import eu.nebulous.utilityevaluator.model.Application;
import eu.nebulous.utilityevaluator.model.NodeCandidateDTO;
import eu.nebulous.utilityevaluator.model.VariableDTO;
import eu.nebulous.utilityevaluator.model.VariableType;
import eu.nebulous.utilityevaluator.regression.SimpleCostRegression;
import eu.nebulouscloud.exn.core.Publisher;
import eu.nebulouscloud.exn.core.SyncedPublisher;
@ -47,8 +48,15 @@ public class UtilityEvaluatorController {
}
List<NodeCandidateDTO> convertedNodeCandidates = NodeCandidateConverter.convertToDtoList(nodeCandidates);
List<VariableDTO> componentVariables = application.getVariables().get(component);
SimpleCostRegression regression = new SimpleCostRegression(component, convertedNodeCandidates, componentVariables);
application.getCostPerformanceIndicators().put(component, regression);
if (componentVariables.stream().filter(var -> var.getType().equals(VariableType.CPU) || var.getType().equals(VariableType.RAM)).findAny().isPresent()){
SimpleCostRegression regression = new SimpleCostRegression(component, convertedNodeCandidates, componentVariables);
application.getCostPerformanceIndicators().put(component, regression);
}
else {
log.warn("There are no variables for component {} = it is not possible to create any cost performance indicator!", component);
}
};

View File

@ -54,7 +54,7 @@ public class PerformanceIndicatorSendingService {
String componentNameValidAMPL=component.replaceAll("/", "_").substring(1);
String piName = "cost_pi"+componentNameValidAMPL;
String piName = "cost_pi_"+componentNameValidAMPL;
ObjectNode pi = performanceIndicators.addObject();
//ObjectNode pi = performanceIndicators.withObject(piName);

View File

@ -79,7 +79,7 @@ public class NodeCandidateConverter {
usedNodeParameters.add(node.getCpu());
break;
case RAM:
usedNodeParameters.add(Long.valueOf(node.getRam()).intValue());
usedNodeParameters.add(Long.valueOf(node.getRam()).intValue());
break;
default:
log.debug("Variable type {} is not usable in cost performance indicators", variable.getType());

View File

@ -10,10 +10,7 @@ import eu.nebulous.utilityevaluator.model.VariableDTO;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
/* TODO: comments
this class looks good, except that the coefficient should be filtered based on the variables
*/
@Slf4j
public class SimpleCostRegression {
@ -25,11 +22,14 @@ public class SimpleCostRegression {
public SimpleCostRegression(String componentName, List<NodeCandidateDTO> nodeCandidates, List<VariableDTO> variables){
this.componentName = componentName;
this.regression = new OLSMultipleLinearRegression();
//double[][] argumentsForRegression = NodeCandidateConverter.convertListToDoubleArray (nodeCandidates, variables);
regression.newSampleData(convertPricesToArray(nodeCandidates), NodeCandidateConverter.convertListToDoubleArray (nodeCandidates, variables));
log.info("Data for component {} was loaded", componentName);
this.coefficients = regression.estimateRegressionParameters();
log.info("Coefficients: {}", coefficients);
}
private static double[] convertPricesToArray(List<NodeCandidateDTO> nodeCandidates) {