Skip to content

Commit

Permalink
wip for range actions
Browse files Browse the repository at this point in the history
  • Loading branch information
Pauline Jean-Marie committed Oct 23, 2024
1 parent 4d496c1 commit 5bee729
Show file tree
Hide file tree
Showing 47 changed files with 867 additions and 615 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -31,16 +31,18 @@ private RaoParametersCommons() {
// range actions optimization parameters
public static final String RANGE_ACTIONS_OPTIMIZATION = "range-actions-optimization";
public static final String RANGE_ACTIONS_OPTIMIZATION_SECTION = "rao-range-actions-optimization";
public static final String ST_RANGE_ACTIONS_OPTIMIZATION_SECTION = "search-tree-range-actions-optimization";

public static final String MAX_MIP_ITERATIONS = "max-mip-iterations";
public static final String PST_PENALTY_COST = "pst-penalty-cost";
public static final String PST_RA_MIN_IMPACT_THRESHOLD = "pst-ra-min-impact-threshold";
public static final String PST_SENSITIVITY_THRESHOLD = "pst-sensitivity-threshold";
public static final String PST_MODEL = "pst-model";
public static final String HVDC_PENALTY_COST = "hvdc-penalty-cost";
public static final String HVDC_RA_MIN_IMPACT_THRESHOLD = "hvdc-ra-min-impact-threshold";
public static final String HVDC_SENSITIVITY_THRESHOLD = "hvdc-sensitivity-threshold";
public static final String INJECTION_RA_PENALTY_COST = "injection-ra-penalty-cost";
public static final String INJECTION_RA_MIN_IMPACT_THRESHOLD = "injection-ra-min-impact-threshold";
public static final String INJECTION_RA_SENSITIVITY_THRESHOLD = "injection-ra-sensitivity-threshold";
public static final String LINEAR_OPTIMIZATION_SOLVER = "linear-optimization-solver";
public static final String LINEAR_OPTIMIZATION_SOLVER_SECTION = "rao-linear-optimization-solver";
public static final String LINEAR_OPTIMIZATION_SOLVER_SECTION = "search-tree-linear-optimization-solver";
public static final String SOLVER = "solver";
public static final String RELATIVE_MIP_GAP = "relative-mip-gap";
public static final String SOLVER_SPECIFIC_PARAMETERS = "solver-specific-parameters";
Expand Down Expand Up @@ -120,6 +122,8 @@ private RaoParametersCommons() {
public static final String PTDF_BOUNDARIES = "ptdf-boundaries";
public static final String PTDF_SUM_LOWER_BOUND = "ptdf-sum-lower-bound";

public static final String SEARCH_TREE_PARAMETERS = "open-rao-search-tree-parameters";

public static PtdfApproximation stringToPtdfApproximation(String string) {
try {
return PtdfApproximation.valueOf(string);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
package com.powsybl.openrao.raoapi.json;

import com.powsybl.openrao.commons.OpenRaoException;
import com.powsybl.openrao.raoapi.parameters.RangeActionsOptimizationParameters;
import com.powsybl.openrao.raoapi.parameters.RaoParameters;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
Expand All @@ -26,111 +25,30 @@ private JsonRangeActionsOptimizationParameters() {

static void serialize(RaoParameters parameters, JsonGenerator jsonGenerator) throws IOException {
jsonGenerator.writeObjectFieldStart(RANGE_ACTIONS_OPTIMIZATION);
jsonGenerator.writeNumberField(MAX_MIP_ITERATIONS, parameters.getRangeActionsOptimizationParameters().getMaxMipIterations());
jsonGenerator.writeNumberField(PST_PENALTY_COST, parameters.getRangeActionsOptimizationParameters().getPstPenaltyCost());
jsonGenerator.writeNumberField(PST_SENSITIVITY_THRESHOLD, parameters.getRangeActionsOptimizationParameters().getPstSensitivityThreshold());
jsonGenerator.writeObjectField(PST_MODEL, parameters.getRangeActionsOptimizationParameters().getPstModel());
jsonGenerator.writeNumberField(HVDC_PENALTY_COST, parameters.getRangeActionsOptimizationParameters().getHvdcPenaltyCost());
jsonGenerator.writeNumberField(HVDC_SENSITIVITY_THRESHOLD, parameters.getRangeActionsOptimizationParameters().getHvdcSensitivityThreshold());
jsonGenerator.writeNumberField(INJECTION_RA_PENALTY_COST, parameters.getRangeActionsOptimizationParameters().getInjectionRaPenaltyCost());
jsonGenerator.writeNumberField(INJECTION_RA_SENSITIVITY_THRESHOLD, parameters.getRangeActionsOptimizationParameters().getInjectionRaSensitivityThreshold());
jsonGenerator.writeObjectField(RA_RANGE_SHRINKING, parameters.getRangeActionsOptimizationParameters().getRaRangeShrinking());
jsonGenerator.writeObjectFieldStart(LINEAR_OPTIMIZATION_SOLVER);
jsonGenerator.writeObjectField(SOLVER, parameters.getRangeActionsOptimizationParameters().getLinearOptimizationSolver().getSolver());
jsonGenerator.writeNumberField(RELATIVE_MIP_GAP, parameters.getRangeActionsOptimizationParameters().getLinearOptimizationSolver().getRelativeMipGap());
jsonGenerator.writeStringField(SOLVER_SPECIFIC_PARAMETERS, parameters.getRangeActionsOptimizationParameters().getLinearOptimizationSolver().getSolverSpecificParameters());
jsonGenerator.writeEndObject();
jsonGenerator.writeNumberField(PST_RA_MIN_IMPACT_THRESHOLD, parameters.getRangeActionsOptimizationParameters().getPstRAMinImpactThreshold());
jsonGenerator.writeNumberField(HVDC_RA_MIN_IMPACT_THRESHOLD, parameters.getRangeActionsOptimizationParameters().getHvdcRAMinImpactThreshold());
jsonGenerator.writeNumberField(INJECTION_RA_MIN_IMPACT_THRESHOLD, parameters.getRangeActionsOptimizationParameters().getInjectionRAMinImpactThreshold());
jsonGenerator.writeEndObject();
}

static void deserialize(JsonParser jsonParser, RaoParameters raoParameters) throws IOException {
while (!jsonParser.nextToken().isStructEnd()) {
switch (jsonParser.getCurrentName()) {
case MAX_MIP_ITERATIONS:
case PST_RA_MIN_IMPACT_THRESHOLD:
jsonParser.nextToken();
raoParameters.getRangeActionsOptimizationParameters().setMaxMipIterations(jsonParser.getIntValue());
raoParameters.getRangeActionsOptimizationParameters().setPstRAMinImpactThreshold(jsonParser.getDoubleValue());
break;
case PST_PENALTY_COST:
case HVDC_RA_MIN_IMPACT_THRESHOLD:
jsonParser.nextToken();
raoParameters.getRangeActionsOptimizationParameters().setPstPenaltyCost(jsonParser.getDoubleValue());
raoParameters.getRangeActionsOptimizationParameters().setHvdcRAMinImpactThreshold(jsonParser.getDoubleValue());
break;
case PST_SENSITIVITY_THRESHOLD:
case INJECTION_RA_MIN_IMPACT_THRESHOLD:
jsonParser.nextToken();
raoParameters.getRangeActionsOptimizationParameters().setPstSensitivityThreshold(jsonParser.getDoubleValue());
break;
case PST_MODEL:
raoParameters.getRangeActionsOptimizationParameters().setPstModel(stringToPstModel(jsonParser.nextTextValue()));
break;
case HVDC_PENALTY_COST:
jsonParser.nextToken();
raoParameters.getRangeActionsOptimizationParameters().setHvdcPenaltyCost(jsonParser.getDoubleValue());
break;
case HVDC_SENSITIVITY_THRESHOLD:
jsonParser.nextToken();
raoParameters.getRangeActionsOptimizationParameters().setHvdcSensitivityThreshold(jsonParser.getDoubleValue());
break;
case INJECTION_RA_PENALTY_COST:
jsonParser.nextToken();
raoParameters.getRangeActionsOptimizationParameters().setInjectionRaPenaltyCost(jsonParser.getDoubleValue());
break;
case INJECTION_RA_SENSITIVITY_THRESHOLD:
jsonParser.nextToken();
raoParameters.getRangeActionsOptimizationParameters().setInjectionRaSensitivityThreshold(jsonParser.getDoubleValue());
break;
case LINEAR_OPTIMIZATION_SOLVER:
jsonParser.nextToken();
deserializeLinearOptimizationSolver(jsonParser, raoParameters);
break;
case RA_RANGE_SHRINKING:
raoParameters.getRangeActionsOptimizationParameters().setRaRangeShrinking(stringToRaRangeShrinking(jsonParser.nextTextValue()));
raoParameters.getRangeActionsOptimizationParameters().setInjectionRAMinImpactThreshold(jsonParser.getDoubleValue());
break;
default:
throw new OpenRaoException(String.format("Cannot deserialize range action optimization parameters: unexpected field in %s (%s)", RANGE_ACTIONS_OPTIMIZATION, jsonParser.getCurrentName()));
}
}
}

private static void deserializeLinearOptimizationSolver(JsonParser jsonParser, RaoParameters raoParameters) throws IOException {
while (!jsonParser.nextToken().isStructEnd()) {
switch (jsonParser.getCurrentName()) {
case SOLVER:
raoParameters.getRangeActionsOptimizationParameters().getLinearOptimizationSolver().setSolver(stringToSolver(jsonParser.nextTextValue()));
break;
case RELATIVE_MIP_GAP:
jsonParser.nextToken();
raoParameters.getRangeActionsOptimizationParameters().getLinearOptimizationSolver().setRelativeMipGap(jsonParser.getDoubleValue());
break;
case SOLVER_SPECIFIC_PARAMETERS:
jsonParser.nextToken();
raoParameters.getRangeActionsOptimizationParameters().getLinearOptimizationSolver().setSolverSpecificParameters(jsonParser.getValueAsString());
break;
default:
throw new OpenRaoException(String.format("Cannot deserialize linear optimization solver in range action optimization parameters: unexpected field in %s (%s)", LINEAR_OPTIMIZATION_SOLVER, jsonParser.getCurrentName()));
}
}
}

private static RangeActionsOptimizationParameters.PstModel stringToPstModel(String string) {
try {
return RangeActionsOptimizationParameters.PstModel.valueOf(string);
} catch (IllegalArgumentException e) {
throw new OpenRaoException(String.format("Unknown Pst model: %s", string));
}
}

private static RangeActionsOptimizationParameters.RaRangeShrinking stringToRaRangeShrinking(String string) {
try {
return RangeActionsOptimizationParameters.RaRangeShrinking.valueOf(string);
} catch (IllegalArgumentException e) {
throw new OpenRaoException(String.format("Unknown Pst variation range shrinking: %s", string));
}
}

private static RangeActionsOptimizationParameters.Solver stringToSolver(String string) {
try {
return RangeActionsOptimizationParameters.Solver.valueOf(string);
} catch (IllegalArgumentException e) {
throw new OpenRaoException(String.format("Unknown solver: %s", string));
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
/*
* Copyright (c) 2024, 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/.
* SPDX-License-Identifier: MPL-2.0
*/

package com.powsybl.openrao.raoapi.json.extensions;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.google.auto.service.AutoService;
import com.powsybl.openrao.commons.OpenRaoException;
import com.powsybl.openrao.raoapi.json.*;
import com.powsybl.openrao.raoapi.parameters.extensions.OpenRaoSearchTreeParameters;

import java.io.IOException;

import static com.powsybl.openrao.raoapi.RaoParametersCommons.*;

@AutoService(JsonRaoParameters.ExtensionSerializer.class)
public class JsonOpenRaoSearchTreeParameters implements JsonRaoParameters.ExtensionSerializer<OpenRaoSearchTreeParameters> {
@Override
public void serialize(OpenRaoSearchTreeParameters parameters, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeStartObject();
JsonRangeActionsOptimizationParameters.serialize(parameters, jsonGenerator);
jsonGenerator.writeEndObject();
}

@Override
public OpenRaoSearchTreeParameters deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
return deserializeAndUpdate(jsonParser, deserializationContext, new OpenRaoSearchTreeParameters());
}

@Override
public OpenRaoSearchTreeParameters deserializeAndUpdate(JsonParser parser, DeserializationContext deserializationContext, OpenRaoSearchTreeParameters parameters) throws IOException {
while (parser.nextToken() != JsonToken.END_OBJECT) {
switch (parser.getCurrentName()) {
case RANGE_ACTIONS_OPTIMIZATION:
parser.nextToken();
JsonRangeActionsOptimizationParameters.deserialize(parser, parameters);
break;
default:
throw new OpenRaoException("Unexpected field in open rao search tree parameters: " + parser.getCurrentName());
}
}
return parameters;
}

@Override
public String getExtensionName() {
return SEARCH_TREE_PARAMETERS;
}

@Override
public String getCategoryName() {
return "rao-parameters";
}

@Override
public Class<? super OpenRaoSearchTreeParameters> getExtensionClass() {
return OpenRaoSearchTreeParameters.class;
}

}
Loading

0 comments on commit 5bee729

Please sign in to comment.