Antares Simulator
Power System Simulator
Loading...
Searching...
No Matches
constraint-slack-analysis.h
1/*
2 * Copyright 2007-2024, RTE (https://www.rte-france.com)
3 * See AUTHORS.txt
4 * SPDX-License-Identifier: MPL-2.0
5 * This file is part of Antares-Simulator,
6 * Adequacy and Performance assessment for interconnected energy networks.
7 *
8 * Antares_Simulator is free software: you can redistribute it and/or modify
9 * it under the terms of the Mozilla Public Licence 2.0 as published by
10 * the Mozilla Foundation, either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * Antares_Simulator is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * Mozilla Public Licence 2.0 for more details.
17 *
18 * You should have received a copy of the Mozilla Public Licence 2.0
19 * along with Antares_Simulator. If not, see <https://opensource.org/license/mpl-2-0/>.
20 */
21#pragma once
22
23#include <vector>
24
25#include "unfeasibility-analysis.h"
26#include "watched-constraints.h"
27
28namespace operations_research
29{
30class MPConstraint;
31class MPVariable;
32class MPSolver;
33} // namespace operations_research
34
36{
37
43{
44public:
45 ~ConstraintSlackAnalysis() override = default;
46
47 void run(operations_research::MPSolver* problem) override;
48 void printReport() const override;
49
50 std::string title() const override
51 {
52 return "Slack variables analysis";
53 }
54
55 const std::vector<const operations_research::MPVariable*>& largestSlackVariables();
56
57private:
58 void selectConstraintsToWatch(operations_research::MPSolver* problem);
59 void addSlackVariablesToConstraints(operations_research::MPSolver* problem);
60 void buildObjective(operations_research::MPSolver* problem) const;
61 void sortSlackVariablesByValue();
62 void trimSlackVariables();
63 bool anySlackVariableNonZero();
64
65 std::vector<operations_research::MPConstraint*> constraintsToWatch_;
66 std::vector<const operations_research::MPVariable*> slackVariables_;
67 const double thresholdNonZero = 1e-06;
68};
69
70} // namespace Antares::Optimization
Definition constraint-slack-analysis.h:43
Definition unfeasibility-analysis.h:38
Definition constraint-slack-analysis.cpp:45