/** * Copyright (C) 2001-2017 by RapidMiner and the contributors * * Complete list of developers available at our web site: * * http://rapidminer.com * * This program is free software: you can redistribute it and/or modify it under the terms of the * GNU Affero General Public License as published by the Free Software Foundation, either version 3 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License along with this program. * If not, see http://www.gnu.org/licenses/. */ package com.rapidminer.tools.math; import com.rapidminer.operator.ResultObjectAdapter; import com.rapidminer.tools.Tools; import java.util.ArrayList; import java.util.Iterator; /** * Collects the average vectors of a run. The averagables can be averaged by using * {@link #average()}. * * @author Ralf Klinkenberg, Ingo Mierswa */ public class RunVector extends ResultObjectAdapter { private static final long serialVersionUID = -5481280692066966385L; /** List of average vectors. */ private ArrayList<AverageVector> vectorList = new ArrayList<AverageVector>(); /** Adds a new average vector. */ public void addVector(AverageVector av) { vectorList.add(av); } /** Returns the average vector with index i. */ public AverageVector getVector(int index) { return vectorList.get(index); } /** Returns all average vectors as list. */ public ArrayList<AverageVector> getVectorList() { return vectorList; } /** Returns the number of average vectors. */ public int size() { return vectorList.size(); } /** * Calculates the mean value of the averagables of the average vectors and returns an average * vector which contains for each averagable the mean value. */ public AverageVector average() { try { AverageVector output = (AverageVector) getVector(0).clone(); for (int i = 1; i < size(); i++) { AverageVector av = getVector(i); for (int j = 0; j < av.size(); j++) { output.getAveragable(j).buildAverage(av.getAveragable(j)); } } return output; } catch (CloneNotSupportedException e) { throw new RuntimeException("Clone of average vector is not supported: " + e.getMessage(), e); } } @Override public String toString() { StringBuffer result = new StringBuffer("RunVector:" + Tools.getLineSeparator()); Iterator<AverageVector> i = vectorList.iterator(); while (i.hasNext()) { result.append(i.next() + Tools.getLineSeparator()); } return result.toString(); } /** * returns a <tt>String</tt> containing a time series of the values of each averagable and the * average of all averagables over all runs. */ @Override public String toResultString() { StringBuffer result = new StringBuffer(""); AverageVector averageVector = average(); // compute the averages // ---- print the series of all performance criteria ---- for (int averagableIndex = 0; averagableIndex < averageVector.size(); averagableIndex++) { result.append("Time series of averagable '" + ((this.getVector(0)).getAveragable(averagableIndex)).getName() + "':"); for (int timeIndex = 0; timeIndex < this.size(); timeIndex++) { AverageVector currentAveragables = getVector(timeIndex); Averagable averagable = currentAveragables.getAveragable(averagableIndex); result.append(" " + averagable.getAverage()); } result.append(Tools.getLineSeparator()); } // ---- print the overall average (and variance) ---- for (int i = 0; i < averageVector.size(); i++) { Averagable averagable = averageVector.getAveragable(i); result.append(" Average of averagable '" + averagable.getName() + "': " + averagable.getAverage()); if (averagable.getVariance() >= 0) { result.append(" (" + averagable.getVariance() + ")"); } result.append(Tools.getLineSeparator()); } result.append(Tools.getLineSeparator()); return result.toString(); } public String getExtension() { return "rvc"; } public String getFileDescription() { return "run vector"; } }