org.drools.planner.core.score.Score Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of drools-planner-core Show documentation
Show all versions of drools-planner-core Show documentation
Drools Planner optimizes automated planning by combining metaheuristic search algorithms with rule
engine powered score calculation. This is the drools-planner-core module which contains metaheuristic
algorithms.
/*
* Copyright 2010 JBoss Inc
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.drools.planner.core.score;
import org.drools.planner.core.score.buildin.hardandsoft.DefaultHardAndSoftScore;
/**
* A Score is result of the score function (AKA fitness function) on a single possible solution.
*
* Implementations must be immutable.
* @see AbstractScore
* @see DefaultHardAndSoftScore
*/
public interface Score extends Comparable {
/**
* Returns a Score whose value is (this + augment).
* @param augment value to be added to this Score
* @return this + augment
*/
S add(S augment);
/**
* Returns a Score whose value is (this - subtrahend).
* @param subtrahend value to be subtracted from this Score
* @return this - subtrahend, rounded as necessary
*/
S subtract(S subtrahend);
/**
* Returns a Score whose value is (this * multiplicand).
* When rounding is needed, it should be floored (as defined by {@link Math#floor(double)}.
* @param multiplicand value to be multiplied by this Score.
* @return this * multiplicand
*/
S multiply(double multiplicand);
/**
* Returns a Score whose value is (this / divisor).
* When rounding is needed, it should be floored (as defined by {@link Math#floor(double)}.
* @param divisor value by which this Score is to be divided
* @return this / divisor
*/
S divide(double divisor);
/**
* Returns an array of doubles representing the Score.
* When rounding is needed, each rounding should be floored (as defined by {@link Math#floor(double)}.
*
* A greater score level uses a lower array index than a lesser score level.
* The length of the returned array is stable for a specific Score implementation.
* For example: -0hard/-7soft returns new double{-0.0, -7.0}
* @return never null
*/
double[] toDoubleArray();
}