private void updateInertia(PSO pso) { int dimension = pso.getTopology().last().getDimension(); if (inertiaWeight.size() < dimension) { Vector.Builder builder = Vector.newBuilder(); builder.repeat(dimension, Real.valueOf(initialInertiaWeight.getParameter())); inertiaWeight = builder.build(); } Vector.Builder builder = Vector.newBuilder(); for (int i = 0; i < dimension; i++) { builder.add( Math.sqrt( Math.pow(absoluteAverageVelocityVector.doubleValueOf(i), 2) + Math.pow(averageSpeedVector.doubleValueOf(i), 2))); } Vector d = builder.build(); // get the degree of convergence vector double max_d = 0; for (Numeric component : d) { if (component.doubleValue() > max_d) { max_d = component.doubleValue(); } } if (max_d != 0) { Vector.Builder builder2 = Vector.newBuilder(); for (Numeric component : d) { builder2.add(max_d / (max_d + component.doubleValue())); } Vector w = builder2.build(); /*double sum_w = 0; for(Numeric component : w) { sum_w += component.doubleValue(); } /* Vector.Builder builder3 = Vector.newBuilder(); for(Numeric component : w) { builder3.add(Math.pow(dimension * component.doubleValue() / sum_w, pwr.getParameter())); } */ /* for(Numeric component : w) { //builder3.add(component.doubleValue() - w_mean / w_stdDiv); builder3.add(component.doubleValue() * initialInertiaWeight.getParameter()); } for(int i = 0; i < inertiaWeight.size(); i++) { builder3.add(w.doubleValueOf(i) * inertiaWeight.doubleValueOf(i)); } */ /* Vector m = builder3.build(); double sum_m = 0; for (Numeric num : m) { sum_m += num.doubleValue(); } double m_mean = sum_m / (double) dimension; double sum_diff_squared = 0; for(Numeric component : m) { sum_diff_squared += Math.pow(component.doubleValue() - m_mean, 2); } double m_stdDiv = Math.sqrt(sum_diff_squared / (double) dimension); */ // System.out.println("VEL: StdDiv of M: " + m_stdDiv + ", mean of M: " + m_mean); for (int i = 0; i < inertiaWeight.size(); i++) { inertiaWeight.setReal( i, (1 - filter.getParameter()) * w.doubleValueOf(i) + filter.getParameter() * inertiaWeight.doubleValueOf(i)); // w.doubleValueOf(i));//; } } }