/*
* File: ParallelizableCostFunction.java
* Authors: Kevin R. Dixon
* Company: Sandia National Laboratories
* Project: Cognitive Foundry
*
* Copyright Sep 22, 2008, 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.function.cost;
import gov.sandia.cognition.evaluator.Evaluator;
import gov.sandia.cognition.learning.algorithm.gradient.GradientDescendable;
import gov.sandia.cognition.math.matrix.Vector;
import java.util.Collection;
/**
* Interface describing a cost function that can (largely) be computed in
* parallel.
* @author Kevin R. Dixon
* @since 2.1
*/
public interface ParallelizableCostFunction
extends SupervisedCostFunction<Vector,Vector>, DifferentiableCostFunction
{
/**
* Computes the partial (linear) component of the cost function.
* This portion will be performed in parallel.
* @param evaluator
* Evaluator to compute the cost of
* @return
* Object that contains the linear component of the cost function
*/
public Object evaluatePartial(
Evaluator<? super Vector, ? extends Vector> evaluator );
/**
* Amalgamates the linear components of the cost function into a single
* Double. This portion will be performed in sequence.
* @param partialResults
* Collection of partial (linear) results
* @return
* Cost function of the partial results
*/
public Double evaluateAmalgamate(
Collection<Object> partialResults );
/**
* Computes the partial (linear) component of the cost function gradient.
* This portion will be performed in parallel.
*
* @param function
* GradientDescendable to compute the gradient of
* @return
* Object that contains the linear component of the gradient
*/
public Object computeParameterGradientPartial(
GradientDescendable function );
/**
* Amalgamates the linear components of the cost gradient function into a
* single Vector. This portion will be performed in sequence.
* @param partialResults
* Collection of partial (linear) gradient components
* @return
* Vector describing the gradient
*/
public Vector computeParameterGradientAmalgamate(
Collection<Object> partialResults );
}