/*
* File: WithinClusterDivergenceWrapper.java
* Authors: Andrew Fisher
* Company: Sandia National Laboratories
* Project: Cognitive Foundry
*
* Copyright July 12, 2016, Sandia Corporation. Under the terms of Contract
* DE-AC04-94AL85000, there is a non-exclusive license for use of this work by
* or on behalf of the U.S. Government. Export of this program may require a
* license from the United States Government. See CopyrightHistory.txt for
* complete details.
*/
package gov.sandia.cognition.learning.algorithm.clustering.divergence;
import gov.sandia.cognition.learning.algorithm.clustering.cluster.Cluster;
import gov.sandia.cognition.math.DivergenceFunction;
import gov.sandia.cognition.util.CloneableSerializable;
/**
* Accumulates the results of a {@link ClusterDivergenceFunction} by summing the
* divergence of each point to its cluster.
*
* @author Andrew N. Fisher <anfishe@sandia.gov>
* @param <ClusterType>
* @param <DataType>
*/
public class WithinClusterDivergenceWrapper<ClusterType extends Cluster<DataType>, DataType extends Object>
implements WithinClusterDivergence<ClusterType, DataType>
{
/** The divergence function. */
protected DivergenceFunction<? super ClusterType, ? super DataType> divergenceFunction;
/**
* Creates a new {@link WithinClusterDivergenceWrapper}.
*
* @param divergenceFunction
* The divergence function to use.
*/
public WithinClusterDivergenceWrapper(
DivergenceFunction<? super ClusterType, ? super DataType> divergenceFunction)
{
this.divergenceFunction = divergenceFunction;
}
@Override
public double evaluate(ClusterType cluster)
{
double total = 0.0;
for (DataType member : cluster.getMembers())
{
total += this.divergenceFunction.evaluate(cluster, member);
}
return total;
}
@Override
public CloneableSerializable clone()
{
return new WithinClusterDivergenceWrapper<>(this.divergenceFunction);
}
}