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

com.powsybl.openrao.searchtreerao.result.api.ObjectiveFunctionResult Maven / Gradle / Ivy

/*
 * Copyright (c) 2021, RTE (http://www.rte-france.com)
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 */

package com.powsybl.openrao.searchtreerao.result.api;

import com.powsybl.openrao.data.cracapi.cnec.FlowCnec;
import com.powsybl.openrao.raoapi.parameters.RaoParameters;
import com.powsybl.openrao.searchtreerao.commons.objectivefunctionevaluator.ObjectiveFunction;

import java.util.List;
import java.util.Set;

/**
 * @author Joris Mancini {@literal }
 */
public interface ObjectiveFunctionResult {

    /**
     * It gives the global cost of the situation according to the objective function defined in
     * the {@link RaoParameters}.
     *
     * @return The global cost of the situation.
     */
    default double getCost() {
        return getFunctionalCost() + getVirtualCost();
    }

    /**
     * It gives the functional cost of the situation according to the objective function defined in the
     * {@link RaoParameters}. It represents the main part of the objective function.
     *
     * @return The functional cost of the situation.
     */
    double getFunctionalCost();

    // A voir dans l'implem si on stocke ou non
    List getMostLimitingElements(int number);

    /**
     * It gives the sum of virtual costs of the situation according to the objective function defined in
     * the {@link RaoParameters}. It represents the secondary parts of the objective function.
     *
     * @return The global virtual cost of the situation.
     */
    double getVirtualCost();

    /**
     * It gives the names of the different virtual cost implied in the objective function defined in
     * the {@link RaoParameters}.
     *
     * @return The set of virtual cost names.
     */
    Set getVirtualCostNames();

    /**
     * It gives the specified virtual cost of the situation. It represents the secondary parts of the objective. If the
     * specified name is not part of the virtual costs defined in the objective function, this method could
     * return {@code Double.NaN} values.
     *
     * @param virtualCostName: The name of the virtual cost.
     * @return The specific virtual cost of the situation.
     */
    double getVirtualCost(String virtualCostName);

    /**
     * It gives an ordered list of the costly {@link FlowCnec} according to the specified virtual cost. If the
     * virtual is null the list would be empty. If the specified virtual cost does not imply any branch in its
     * computation the list would be empty. Elements with a null virtual cost are not present in the list.
     *
     * @param virtualCostName: The name of the virtual cost.
     * @param number:          The size of the list to be studied, so the number of costly elements to be retrieved.
     * @return The ordered list of the n first costly elements according to the given virtual cost.
     */
    List getCostlyElements(String virtualCostName, int number);

    void excludeContingencies(Set contingenciesToExclude);

    ObjectiveFunction getObjectiveFunction();

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy