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

ai.libs.jaicore.search.algorithms.standard.uncertainty.paretosearch.CosinusDistanceComparator Maven / Gradle / Ivy

package ai.libs.jaicore.search.algorithms.standard.uncertainty.paretosearch;

import java.util.Comparator;

import ai.libs.jaicore.search.algorithms.standard.bestfirst.ENodeAnnotation;
import ai.libs.jaicore.search.model.travesaltree.BackPointerPath;

public class CosinusDistanceComparator> implements Comparator> {

	public final double x1;
	public final double x2;

	public CosinusDistanceComparator(final double x1, final double x2) {
		this.x1 = x1;
		this.x2 = x2;
	}

	/**
	 * Compares the cosine distance of two nodes to x.
	 *
	 * @param first
	 * @param second
	 * @return negative iff first < second, 0 iff first == second, positive iff first > second
	 */
	@Override
	public int compare(final BackPointerPath first, final BackPointerPath second) {

		Double firstF = (Double) first.getAnnotation(ENodeAnnotation.F_SCORE.name());
		Double firstU = (Double) first.getAnnotation(ENodeAnnotation.F_UNCERTAINTY.name());

		Double secondF = (Double) second.getAnnotation(ENodeAnnotation.F_SCORE.name());
		Double secondU = (Double) second.getAnnotation(ENodeAnnotation.F_UNCERTAINTY.name());

		double cosDistanceFirst = 1 - this.cosineSimilarity(firstF, firstU);
		double cosDistanceSecond = 1 - this.cosineSimilarity(secondF, secondU);

		return (int) ((cosDistanceFirst - cosDistanceSecond) * 10000);
	}

	/**
	 * Cosine similarity to x.
	 *
	 * @param f
	 * @param u
	 * @return
	 */
	public double cosineSimilarity(final double f, final double u) {
		return (this.x1 * f + this.x2 * u) / (Math.sqrt(f * f + u * u) * Math.sqrt(this.x1 * this.x1 + this.x2 * this.x2));
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy