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

ai.libs.jaicore.search.exampleproblems.samegame.SameGamePathEvaluator Maven / Gradle / Ivy

package ai.libs.jaicore.search.exampleproblems.samegame;

import org.api4.java.ai.graphsearch.problem.pathsearch.pathevaluation.IPathEvaluator;
import org.api4.java.ai.graphsearch.problem.pathsearch.pathevaluation.PathEvaluationException;
import org.api4.java.datastructure.graph.ILabeledPath;

import ai.libs.jaicore.problems.samegame.SameGameCell;
import ai.libs.jaicore.problems.samegame.SameGameState;

public class SameGamePathEvaluator implements IPathEvaluator {

	private final boolean maximize;
	private final int minScore;
	private final int maxScore;
	private final boolean relativeScores;

	public SameGamePathEvaluator(final SameGameState initState, final boolean maximize, final boolean relativeScores) {
		this.minScore = -10000;
		this.maxScore = (int) Math.pow(initState.getNumberOfPiecesPerColor().values().stream().max(Integer::compare).get() - 2.0, 2);
		this.relativeScores = relativeScores;
		this.maximize = maximize;
	}

	@Override
	public Double evaluate(final ILabeledPath path) throws PathEvaluationException, InterruptedException {
		double unitVal = ((double) path.getHead().getScore() - this.minScore) / (this.relativeScores ? (this.maxScore - this.minScore) : 1);
		return this.maximize ? unitVal : (1 - unitVal);
	}

	public double getOriginalScoreFromRelativeScore(final double relativeScore) {
		double relOriginalScore = this.maximize ? relativeScore : (1-relativeScore);
		return relOriginalScore * (this.maxScore - this.minScore) + this.minScore;
	}

	public boolean isMaximize() {
		return this.maximize;
	}

	public int getMinScore() {
		return this.minScore;
	}

	public int getMaxScore() {
		return this.maxScore;
	}

	public boolean isRelativeScores() {
		return this.relativeScores;
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy