All Downloads are FREE. Search and download functionalities are using the official Maven repository.

gov.sandia.cognition.math.Metric Maven / Gradle / Ivy

/*
 * File:                Metric.java
 * Authors:             Justin Basilico and Kevin R. Dixon
 * Company:             Sandia National Laboratories
 * Project:             Cognitive Foundry
 *
 * Copyright February 21, 2006, 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.math;

import gov.sandia.cognition.annotation.CodeReview;
import gov.sandia.cognition.annotation.CodeReviewResponse;
import gov.sandia.cognition.annotation.CodeReviews;
import gov.sandia.cognition.annotation.PublicationReference;
import gov.sandia.cognition.annotation.PublicationType;

/**
 * A metric is a non-negative function that satisfies the following properties
 *
 *     g(x, y) + g(y, z) >= g(x, z)
 *               g(x, y) == g(y, x)
 *               g(x, x) == 0.
 * In other words, a metric is a semimetric that obeys the triangle inequality.
 *
 * @param  Class of objects that this metric can evaluate
 * @author Justin Basilico
 * @author Kevin R. Dixon
 * @since  1.0
 */
@CodeReviews(
    reviews={
        @CodeReview(
            reviewer="Kevin R. Dixon",
            date="2008-02-26",
            changesNeeded=false,
            comments="Looks good."
        ),    
        @CodeReview(
            reviewer="Jonathan McClain",
            date="2006-05-15",
            changesNeeded=true,
            comments={
                "Code is fine, but is it ok to write a new interface that inherits from DivergenceFunction and adds no new functionality?",
                "I can see the value of specifying that a Metric is a special type of DivergenceFunction, but it seems a little overboard to go about making a whole new interface to do it."
            },
            response=@CodeReviewResponse(
                respondent="Justin Basilico",
                date="2006-05-16",
                moreChangesNeeded=false,
                comments={
                    "The Metric interface exists for two reasons.",
                    "The first is that a Metric is a special type of divergence function that obeys special properties that are documented in the class.",
                    "The second is that a Metric is a divergence function between two elements of the same type, which is implied how it changes the DivergenceFunction interface to use the same generic parameter."
                }
            )
        )
    }
)
@PublicationReference(
    author="Wikipedia",
    title="Metric (mathematics)",
    type=PublicationType.WebPage,
    year=2009,
    url="http://en.wikipedia.org/wiki/Metric_(mathematics)"
)
public interface Metric
    extends Semimetric
{
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy