/**
* Copyright (c) 2006-2009, NEPOMUK Consortium
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* * Neither the name of the NEPOMUK Consortium nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
**/
package processing.folkrank;
/** The <code>FolkRankParam</code> class holds the parameters of the FolkRank
* algorithm. It does not contain any data used for the computation.
*
* @author rja
*/
public class FolkRankParam {
/* These three parameters must sum up to one. They determine how much of the
* old weight, the new weight (result from weight spreading) and the
* preference determines the new weight vector.
*/
private double alpha = 0.0; // old weight
private double beta = 0.7; // new weight
private double gamma = 0.3; // preference
/** Stopping criterion 1: if computation error is smaller than epsilon (or
* number of iterations larger than maxIter), then computation is stopped.
*/
private double epsilon = 10e-6;
/** Stopping criterion 2: if number of iterations is larger than maxIter (or
* computation error smaller than epsilon), then computation is stopped.
*/
private int maxIter = 10;
/** Since there are several ways how preference and weight could be
* initialized, different strategies how to do this can be implemented and
* given to the FolkRank.
*/
private WeightInitializationStrategy weightInitializationStrategy = new SeparatedWeightInitializationStrategy();
/** Set the main parameters for the FolkRank computation. Alpha, beta and
* gamma determine how much of the old, new, and preference weight, resp.
* is used to determine the new weight.
*
* If alpha + beta + gamma = 1 does not hold, the parameters are normalized
* such that they add up to one.
*
* @param alpha - Factor to determine which fraction of the old weight flows
* into the new weight. The default is 0.0.
* @param beta - Factor to determine which fraction of the new weight from
* the weight spreading flows into the new weight. The default is 0.7.
* @param gamma - Factor to determine which fraction of the preference
* weight flows into the new weight. The default is 0.3.
*/
public void setAlphaBetaGamma (double alpha, double beta, double gamma) {
double sum = alpha + beta + gamma;
if (Math.abs(sum - 1.0) < 10e-6) {
this.alpha = alpha;
this.beta = beta;
this.gamma = gamma;
} else {
/*
* parameters do not add up to 1 ... normalize them
*/
this.alpha = alpha / sum;
this.beta = beta / sum;
this.gamma = gamma / sum;
}
}
/** Set the stopping conditions for the FolkRank computation. If either the
* number of iterations exceeds maxIter or the error drops below epsilon,
* the computation stops.
*
* @param epsilon - The maximal error the computation should have before
* stopping. The default is 10e-6.
* @param maxIter - The maximum number of iterations . The default is 10.
*/
public void setStopCondition (double epsilon, int maxIter) {
this.epsilon = epsilon;
this.maxIter = maxIter;
}
/** Returns alpha.
*
* @return The parameter alpha.
*/
public double getAlpha() {
return alpha;
}
/** Returns beta.
*
* @return The parameter beta.
*/
public double getBeta() {
return beta;
}
/** Returns gamma.
*
* @return The parameter gamma.
*/
public double getGamma() {
return gamma;
}
/** Returns epsilon, the error bound for the computation.
*
* @return The error bound for the computation.
*/
public double getEpsilon() {
return epsilon;
}
/** Returns the maximal number of iterations.
*
* @return The maximal number of iterations.
*/
public int getMaxIter() {
return maxIter;
}
/** Returns the weight initialization strategy.
*
* @return The weight initialization strategy.
*/
public WeightInitializationStrategy getWeightInitializationStrategy() {
return weightInitializationStrategy;
}
/** Set the weight initialization strategy.
* @param weightStrategy - The weight initialization strategy.
*/
public void setWeightInitializationStrategy(WeightInitializationStrategy weightStrategy) {
this.weightInitializationStrategy = weightStrategy;
}
}