Cloudsim: org. apache .commons.math3.exception.NoDataException: нет данных - PullRequest
0 голосов
/ 07 мая 2020

У меня есть этот код:

@Override
    protected boolean isHostOverUtilized(PowerHost host) {      

        PowerHostUtilizationHistory _host = (PowerHostUtilizationHistory) host;

        double[] utilizationHistory = removeZeros(_host.getUtilizationHistory());
        double[] ramUtilizationHistory = removeZeros(_host.getRamUtilizationHistory());
        double[] bwUtilizationHistory = removeZeros(_host.getBWUtilizationHistory());

        OLSMultipleLinearRegression regression = new OLSMultipleLinearRegression();

        final List<double[]> utiLizationList = Arrays.asList(utilizationHistory, ramUtilizationHistory, bwUtilizationHistory);
        double x[][] = new double[utilizationHistory.length][3];

        for(int i = 0; i< utilizationHistory.length;i++)
        {   
            for(int j=0; j<utiLizationList.size(); j++){
                x[i][j] = utiLizationList.get(j)[i];
                //System.out.print("UtilizationList___ "+ x[i][j] +"");
            }
            //System.out.println();
        }

        double[] y = new double[utilizationHistory.length];

        for(int i=0; i<utilizationHistory.length; i++)
        {
            y[i] = 
                    (double) utilizationHistory[i]/1-(double) utilizationHistory[i] *
                    (double) ramUtilizationHistory[i]/1-(double) ramUtilizationHistory[i] *
                    (double) bwUtilizationHistory[i]/1-(double) bwUtilizationHistory[i] ;
        }

        MathUtil.createLinearRegression(x, y);
        double[] estimates = regression.estimateRegressionParameters();

        double predictedUtilization = 0.0;

        for(int i=0; i<utilizationHistory.length; i++)
        {
             predictedUtilization = estimates[0] +
                    (estimates[1] * utilizationHistory[i]) +
                    (estimates[2] * ramUtilizationHistory[i])+
                    (estimates[3] * bwUtilizationHistory[i]);
        }   

        //predictedUtilization *= getSafetyParameter();

        addHistoryEntry(host, predictedUtilization);
        return predictedUtilization >= 1;
    }

и этот метод

public static OLSMultipleLinearRegression createLinearRegression(
    final double[][] x, final double[] y) {
    OLSMultipleLinearRegression regression = new OLSMultipleLinearRegression();
    regression.newSampleData(y, x);
    return regression;
}

Приведенный выше код отлично работает до тех пор, пока createLinearRegression (x , y) функция. На самом деле два массива x и y имеют свои значения, поэтому я не понимаю, почему, когда я передаю массивы x и y функции createLinearRegression, я получаю следующую ошибку:

Кто-нибудь может сказать мне, в чем проблема и как мне исправить это?

org.apache.commons.math3.exception.NoDataException: no data
    at org.apache.commons.math3.stat.regression.AbstractMultipleLinearRegression.validateSampleData(AbstractMultipleLinearRegression.java:233)
    at org.apache.commons.math3.stat.regression.OLSMultipleLinearRegression.newSampleData(OLSMultipleLinearRegression.java:70)
    at org.cloudbus.cloudsim.util.MathUtil.createLinearRegression(MathUtil.java:259)
...