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

org.drools.planner.core.score.Score Maven / Gradle / Ivy

Go to download

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.

There is a newer version: 6.0.0.Alpha9
Show newest version
/*
 * 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(); }