From c4683a8997605d189da498e5a542dcf73e14e644 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jason=20Mar=C3=A9chal?= <45510813+JasonMarechal25@users.noreply.github.com> Date: Tue, 21 Jan 2025 16:48:39 +0100 Subject: [PATCH] [ANT-2299] Enable save/restore with xpress and enable by default (ProblemGeneration) (#959) Expend solver API with save_prob and restore_prob. Mirror Xpress API to save and restore problems Coin solvers lack save/restore options. Using those method default to writing mps files - New Benders option to pilot if we need to use save/restore or read/write[mps] - Xpansion use Save/restore by default. - ProblemGeneration use save/restore by default. When using xpress it'll work as expected. When using Coin it'll fallback to writing MPS Note: - The scope of this PR is limited to the frontier between problemGeneration and Benders - For lpnamer e2e test with xpress, we only test the existence of a .svf file. We rely on xpansion e2e test for correctness. Having to develop a mean to check correctness of svf is time consuming and svf support is just an intermediate step and will be retired in a short horizon of time. - Benders should still support mps files as input for all solver (r&d use case) --- .../output/economy/reference_lp/master.mps | 12 - .../output/economy/reference_lp/master.svf | Bin 0 -> 4078 bytes .../reference_lp/problem-1-1--optim-nb-1.mps | 4207 ----------------- .../reference_lp/problem-1-1--optim-nb-1.svf | Bin 0 -> 16860 bytes .../output/economy/reference_lp/structure.txt | 2 +- docs/changelog/CHANGELOG.md | 3 +- .../xpansion_steps/0-overview.md | 3 +- .../xpansion_steps/2-problem-modification.md | 24 +- src/cpp/benders/benders_core/BendersBase.cpp | 9 +- src/cpp/benders/benders_core/CMakeLists.txt | 8 +- .../benders_core/SimulationOptions.cpp | 4 + src/cpp/benders/benders_core/Worker.cpp | 20 +- .../benders_core/BendersStructsDatas.h | 39 +- .../benders/benders_core/ProblemFormat.h | 29 + .../benders_core/SimulationOptions.hxx | 3 + .../benders/benders_core/Worker.h | 4 + .../benders/benders_core/common.h | 4 + .../helper/ProblemGenerationLogger.cpp | 2 +- .../lpnamer/helper/ProblemGenerationLogger.h | 8 +- .../AdditionalConstraintsReader.cpp | 2 +- .../input_reader/CandidatesINIReader.cpp | 2 +- .../input_reader/GeneralDataReader.cpp | 2 +- .../input_reader/VariableFileReader.cpp | 4 +- .../AdditionalConstraintsReader.h | 6 +- .../input_reader/CandidatesINIReader.h | 6 +- .../lpnamer/input_reader/GeneralDataReader.h | 4 +- .../lpnamer/input_reader/LinkProfileReader.h | 4 +- .../lpnamer/input_reader/LpFilesExtractor.h | 4 +- .../lpnamer/input_reader/VariableFileReader.h | 6 +- .../lpnamer/input_reader/WeightsFileReader.h | 4 +- src/cpp/lpnamer/main/ProblemGeneration.cpp | 23 +- .../lpnamer/main/ProblemGeneration.h | 6 +- src/cpp/lpnamer/model/ActiveLinks.cpp | 8 +- src/cpp/lpnamer/model/Problem.cpp | 7 + .../lpnamer/model/ActiveLinks.h | 12 +- .../lpnamer/model/ChronicleMapProvider.h | 4 +- .../lpnamer/model/LinkProfile.h | 4 +- .../antares-xpansion/lpnamer/model/Problem.h | 2 + .../AdditionalConstraints.cpp | 2 +- .../lpnamer/problem_modifier/CMakeLists.txt | 4 +- .../lpnamer/problem_modifier/FileWriter.cpp | 13 + .../problem_modifier/LauncherHelpers.cpp | 10 +- .../problem_modifier/MPSFileWriter.cpp | 14 - .../problem_modifier/MasterGeneration.cpp | 41 +- .../XpansionProblemsFromAntaresProvider.cpp | 13 +- .../problem_modifier/AdditionalConstraints.h | 6 +- .../{MPSFileWriter.h => FileWriter.h} | 8 +- .../problem_modifier/LauncherHelpers.h | 10 +- .../problem_modifier/LinkProblemsGenerator.h | 4 +- .../problem_modifier/MasterGeneration.h | 17 +- .../problem_modifier/ProblemModifier.h | 4 +- src/cpp/multisolver_interface/SolverCbc.cpp | 34 +- src/cpp/multisolver_interface/SolverClp.cpp | 30 +- .../multisolver_interface/SolverConfig.cpp | 14 + .../multisolver_interface/SolverFactory.cpp | 48 +- .../multisolver_interface/SolverXpress.cpp | 14 + src/cpp/multisolver_interface/environment.cc | 16 +- .../multisolver_interface/SolverAbstract.h | 18 + .../multisolver_interface/SolverConfig.h | 2 + .../multisolver_interface/SolverFactory.h | 8 +- .../multisolver_interface/environment.h | 4 + .../multisolver_interface/private/SolverCbc.h | 2 + .../multisolver_interface/private/SolverClp.h | 2 + .../private/SolverXpress.h | 2 + .../StudyUpdateLinkCapacitiesStrategy.cpp | 2 +- .../StudyUpdateLinkParameterStrategy.cpp | 2 +- src/cpp/study-updater/StudyUpdateRunner.cpp | 2 +- src/cpp/study-updater/StudyUpdateStrategy.cpp | 2 +- src/cpp/study-updater/StudyUpdater.cpp | 2 +- .../LinkParametersCSVOverwriter.h | 4 +- .../StudyUpdateLinkCapacitiesStrategy.h | 2 +- .../StudyUpdateLinkParameterStrategy.h | 2 +- .../study-updater/StudyUpdateRunner.h | 2 +- .../study-updater/StudyUpdateStrategy.h | 4 +- .../study-updater/StudyUpdater.h | 4 +- .../antares_xpansion/full_run_driver.py | 2 +- .../antares_xpansion/optimisation_keys.py | 4 + .../antares_xpansion/study_output_cleaner.py | 1 + src/python/antares_xpansion/xpansionConfig.py | 5 + tests/cpp/benders/benders_sequential_test.cpp | 204 +- tests/cpp/full_run/CMakeLists.txt | 2 +- ...FullRunTest.cpp => FullRunOptionsTest.cpp} | 0 tests/cpp/lp_namer/ActiveLinkTest.cpp | 2 +- tests/cpp/lp_namer/CMakeLists.txt | 2 + .../cpp/lp_namer/CandidatesINIReaderTest.cpp | 2 +- .../cpp/lp_namer/ChronicleMapProviderTest.cpp | 2 +- tests/cpp/lp_namer/LinkProfileReaderTest.cpp | 2 +- tests/cpp/lp_namer/LoggerBuilder.cpp | 8 +- tests/cpp/lp_namer/LoggerBuilder.h | 8 +- tests/cpp/lp_namer/LpFilesExtractorTest.cpp | 2 +- tests/cpp/lp_namer/MasterGenerationTest.cpp | 178 + tests/cpp/lp_namer/NOOPSolver.h | 2 + .../ProblemGenerationExeOptionsTest.cpp | 2 +- .../lp_namer/ProblemGenerationLoggerTest.cpp | 2 +- tests/cpp/lp_namer/ProblemModifierTest.cpp | 2 +- tests/cpp/lp_namer/StudyUpdateTest.cc | 4 +- tests/cpp/lp_namer/WeightsFileReaderTest.cpp | 2 +- .../features/outer_loop_tests.feature | 4 +- .../cucumber/features/steps/steps.py | 4 +- tests/end_to_end/examples/example_test.py | 6 +- .../lpnamer/test_lpnamerEndToEnd.py | 24 +- 101 files changed, 850 insertions(+), 4485 deletions(-) delete mode 100644 data_test/tests_lpnamer/tests_integer/test_lpnamer_Xpress/output/economy/reference_lp/master.mps create mode 100644 data_test/tests_lpnamer/tests_integer/test_lpnamer_Xpress/output/economy/reference_lp/master.svf delete mode 100644 data_test/tests_lpnamer/tests_integer/test_lpnamer_Xpress/output/economy/reference_lp/problem-1-1--optim-nb-1.mps create mode 100644 data_test/tests_lpnamer/tests_integer/test_lpnamer_Xpress/output/economy/reference_lp/problem-1-1--optim-nb-1.svf create mode 100644 src/cpp/benders/benders_core/include/antares-xpansion/benders/benders_core/ProblemFormat.h create mode 100644 src/cpp/lpnamer/problem_modifier/FileWriter.cpp delete mode 100644 src/cpp/lpnamer/problem_modifier/MPSFileWriter.cpp rename src/cpp/lpnamer/problem_modifier/include/antares-xpansion/lpnamer/problem_modifier/{MPSFileWriter.h => FileWriter.h} (76%) rename tests/cpp/full_run/{FullRunTest.cpp => FullRunOptionsTest.cpp} (100%) create mode 100644 tests/cpp/lp_namer/MasterGenerationTest.cpp diff --git a/data_test/tests_lpnamer/tests_integer/test_lpnamer_Xpress/output/economy/reference_lp/master.mps b/data_test/tests_lpnamer/tests_integer/test_lpnamer_Xpress/output/economy/reference_lp/master.mps deleted file mode 100644 index 321978c06..000000000 --- a/data_test/tests_lpnamer/tests_integer/test_lpnamer_Xpress/output/economy/reference_lp/master.mps +++ /dev/null @@ -1,12 +0,0 @@ -NAME empty -ROWS - N __OBJ___ - E R1 -COLUMNS - transmission_line __OBJ___ 10000 - transmission_line R1 1 - nb_units_transmission_line R1 -400 -BOUNDS - UP BND00001 transmission_line 3200 - UI BND00001 nb_units_transmission_line 8 -ENDATA diff --git a/data_test/tests_lpnamer/tests_integer/test_lpnamer_Xpress/output/economy/reference_lp/master.svf b/data_test/tests_lpnamer/tests_integer/test_lpnamer_Xpress/output/economy/reference_lp/master.svf new file mode 100644 index 0000000000000000000000000000000000000000..c0b5c4f23a79b9007dc5a6a9e762e4e290ab54d9 GIT binary patch literal 4078 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::hour<0> - L FictiveLoads::area::hour<0> - E AreaBalance::area::hour<0> - L FictiveLoads::area::hour<0> - E AreaBalance::area::hour<1> - L FictiveLoads::area::hour<1> - E AreaBalance::area::hour<1> - L FictiveLoads::area::hour<1> - E AreaBalance::area::hour<2> - L FictiveLoads::area::hour<2> - E AreaBalance::area::hour<2> - L FictiveLoads::area::hour<2> - E AreaBalance::area::hour<3> - L FictiveLoads::area::hour<3> - E AreaBalance::area::hour<3> - L FictiveLoads::area::hour<3> - E AreaBalance::area::hour<4> - L FictiveLoads::area::hour<4> - E AreaBalance::area::hour<4> - L FictiveLoads::area::hour<4> - E AreaBalance::area::hour<5> - L FictiveLoads::area::hour<5> - E AreaBalance::area::hour<5> - L FictiveLoads::area::hour<5> - E AreaBalance::area::hour<6> - L FictiveLoads::area::hour<6> - E AreaBalance::area::hour<6> - L FictiveLoads::area::hour<6> - E AreaBalance::area::hour<7> - L FictiveLoads::area::hour<7> - E AreaBalance::area::hour<7> - L FictiveLoads::area::hour<7> - E AreaBalance::area::hour<8> - L FictiveLoads::area::hour<8> - E AreaBalance::area::hour<8> - L FictiveLoads::area::hour<8> - E AreaBalance::area::hour<9> - L FictiveLoads::area::hour<9> - E AreaBalance::area::hour<9> - L FictiveLoads::area::hour<9> - E AreaBalance::area::hour<10> - L FictiveLoads::area::hour<10> - E AreaBalance::area::hour<10> - L FictiveLoads::area::hour<10> - E AreaBalance::area::hour<11> - L FictiveLoads::area::hour<11> - E AreaBalance::area::hour<11> - L FictiveLoads::area::hour<11> - E AreaBalance::area::hour<12> - L FictiveLoads::area::hour<12> - E AreaBalance::area::hour<12> - L FictiveLoads::area::hour<12> - E AreaBalance::area::hour<13> - L FictiveLoads::area::hour<13> - E AreaBalance::area::hour<13> - L FictiveLoads::area::hour<13> - E AreaBalance::area::hour<14> - L FictiveLoads::area::hour<14> - E AreaBalance::area::hour<14> - L FictiveLoads::area::hour<14> - E AreaBalance::area::hour<15> - L FictiveLoads::area::hour<15> - E AreaBalance::area::hour<15> - L FictiveLoads::area::hour<15> - E AreaBalance::area::hour<16> - L FictiveLoads::area::hour<16> - E AreaBalance::area::hour<16> - L FictiveLoads::area::hour<16> - E AreaBalance::area::hour<17> - L FictiveLoads::area::hour<17> - E AreaBalance::area::hour<17> - L FictiveLoads::area::hour<17> - E AreaBalance::area::hour<18> - L FictiveLoads::area::hour<18> - E AreaBalance::area::hour<18> - L FictiveLoads::area::hour<18> - E AreaBalance::area::hour<19> - L FictiveLoads::area::hour<19> - E AreaBalance::area::hour<19> - L FictiveLoads::area::hour<19> - E AreaBalance::area::hour<20> - L FictiveLoads::area::hour<20> - E AreaBalance::area::hour<20> - L FictiveLoads::area::hour<20> - E AreaBalance::area::hour<21> - L FictiveLoads::area::hour<21> - E AreaBalance::area::hour<21> - L FictiveLoads::area::hour<21> - E AreaBalance::area::hour<22> - L FictiveLoads::area::hour<22> - E AreaBalance::area::hour<22> - L FictiveLoads::area::hour<22> - E AreaBalance::area::hour<23> - L FictiveLoads::area::hour<23> - E AreaBalance::area::hour<23> - L FictiveLoads::area::hour<23> - E AreaBalance::area::hour<24> - L FictiveLoads::area::hour<24> - E AreaBalance::area::hour<24> - L FictiveLoads::area::hour<24> - E AreaBalance::area::hour<25> - L FictiveLoads::area::hour<25> - E AreaBalance::area::hour<25> - L FictiveLoads::area::hour<25> - E AreaBalance::area::hour<26> - L FictiveLoads::area::hour<26> - E AreaBalance::area::hour<26> - L FictiveLoads::area::hour<26> - E AreaBalance::area::hour<27> - L FictiveLoads::area::hour<27> - E AreaBalance::area::hour<27> - L FictiveLoads::area::hour<27> - E AreaBalance::area::hour<28> - L FictiveLoads::area::hour<28> - E AreaBalance::area::hour<28> - L FictiveLoads::area::hour<28> - E AreaBalance::area::hour<29> - L FictiveLoads::area::hour<29> - E AreaBalance::area::hour<29> - L FictiveLoads::area::hour<29> - E AreaBalance::area::hour<30> - L FictiveLoads::area::hour<30> - E AreaBalance::area::hour<30> - L FictiveLoads::area::hour<30> - E AreaBalance::area::hour<31> - L FictiveLoads::area::hour<31> - E AreaBalance::area::hour<31> - L FictiveLoads::area::hour<31> - E AreaBalance::area::hour<32> - L FictiveLoads::area::hour<32> - E AreaBalance::area::hour<32> - L FictiveLoads::area::hour<32> - E AreaBalance::area::hour<33> - L FictiveLoads::area::hour<33> - E AreaBalance::area::hour<33> - L FictiveLoads::area::hour<33> - E AreaBalance::area::hour<34> - L FictiveLoads::area::hour<34> - E AreaBalance::area::hour<34> - L FictiveLoads::area::hour<34> - E AreaBalance::area::hour<35> - L FictiveLoads::area::hour<35> - E AreaBalance::area::hour<35> - L FictiveLoads::area::hour<35> - E AreaBalance::area::hour<36> - L FictiveLoads::area::hour<36> - E AreaBalance::area::hour<36> - L FictiveLoads::area::hour<36> - E AreaBalance::area::hour<37> - L FictiveLoads::area::hour<37> - E AreaBalance::area::hour<37> - L FictiveLoads::area::hour<37> - E AreaBalance::area::hour<38> - L FictiveLoads::area::hour<38> - E AreaBalance::area::hour<38> - L FictiveLoads::area::hour<38> - E AreaBalance::area::hour<39> - L FictiveLoads::area::hour<39> - E AreaBalance::area::hour<39> - L FictiveLoads::area::hour<39> - E AreaBalance::area::hour<40> - L FictiveLoads::area::hour<40> - E AreaBalance::area::hour<40> - L FictiveLoads::area::hour<40> - E AreaBalance::area::hour<41> - L FictiveLoads::area::hour<41> - E AreaBalance::area::hour<41> - L FictiveLoads::area::hour<41> - E AreaBalance::area::hour<42> - L FictiveLoads::area::hour<42> - E AreaBalance::area::hour<42> - L FictiveLoads::area::hour<42> - E AreaBalance::area::hour<43> - L FictiveLoads::area::hour<43> - E AreaBalance::area::hour<43> - L FictiveLoads::area::hour<43> - E AreaBalance::area::hour<44> - L FictiveLoads::area::hour<44> - E AreaBalance::area::hour<44> - L FictiveLoads::area::hour<44> - E AreaBalance::area::hour<45> - L FictiveLoads::area::hour<45> - E AreaBalance::area::hour<45> - L FictiveLoads::area::hour<45> - E AreaBalance::area::hour<46> - L FictiveLoads::area::hour<46> - E AreaBalance::area::hour<46> - L FictiveLoads::area::hour<46> - E AreaBalance::area::hour<47> - L FictiveLoads::area::hour<47> - E AreaBalance::area::hour<47> - L FictiveLoads::area::hour<47> - E AreaBalance::area::hour<48> - L FictiveLoads::area::hour<48> - E AreaBalance::area::hour<48> - L FictiveLoads::area::hour<48> - E AreaBalance::area::hour<49> - L FictiveLoads::area::hour<49> - E AreaBalance::area::hour<49> - L FictiveLoads::area::hour<49> - E AreaBalance::area::hour<50> - L FictiveLoads::area::hour<50> - E AreaBalance::area::hour<50> - L FictiveLoads::area::hour<50> - E AreaBalance::area::hour<51> - L FictiveLoads::area::hour<51> - E AreaBalance::area::hour<51> - L FictiveLoads::area::hour<51> - E AreaBalance::area::hour<52> - L FictiveLoads::area::hour<52> - E AreaBalance::area::hour<52> - L FictiveLoads::area::hour<52> - E AreaBalance::area::hour<53> - L FictiveLoads::area::hour<53> - E AreaBalance::area::hour<53> - L FictiveLoads::area::hour<53> - E AreaBalance::area::hour<54> - L FictiveLoads::area::hour<54> - E AreaBalance::area::hour<54> - L FictiveLoads::area::hour<54> - E AreaBalance::area::hour<55> - L FictiveLoads::area::hour<55> - E AreaBalance::area::hour<55> - L FictiveLoads::area::hour<55> - E AreaBalance::area::hour<56> - L FictiveLoads::area::hour<56> - E AreaBalance::area::hour<56> - L FictiveLoads::area::hour<56> - E AreaBalance::area::hour<57> - L FictiveLoads::area::hour<57> - E AreaBalance::area::hour<57> - L FictiveLoads::area::hour<57> - E AreaBalance::area::hour<58> - L FictiveLoads::area::hour<58> - E AreaBalance::area::hour<58> - L FictiveLoads::area::hour<58> - E AreaBalance::area::hour<59> - L FictiveLoads::area::hour<59> - E AreaBalance::area::hour<59> - L FictiveLoads::area::hour<59> - E AreaBalance::area::hour<60> - L FictiveLoads::area::hour<60> - E AreaBalance::area::hour<60> - L FictiveLoads::area::hour<60> - E AreaBalance::area::hour<61> - L FictiveLoads::area::hour<61> - E AreaBalance::area::hour<61> - L FictiveLoads::area::hour<61> - E AreaBalance::area::hour<62> - L FictiveLoads::area::hour<62> - E AreaBalance::area::hour<62> - L FictiveLoads::area::hour<62> - E AreaBalance::area::hour<63> - L FictiveLoads::area::hour<63> - E AreaBalance::area::hour<63> - L FictiveLoads::area::hour<63> - E AreaBalance::area::hour<64> - L FictiveLoads::area::hour<64> - E AreaBalance::area::hour<64> - L FictiveLoads::area::hour<64> - E AreaBalance::area::hour<65> - L FictiveLoads::area::hour<65> - E AreaBalance::area::hour<65> - L FictiveLoads::area::hour<65> - E AreaBalance::area::hour<66> - L FictiveLoads::area::hour<66> - E AreaBalance::area::hour<66> - L FictiveLoads::area::hour<66> - E AreaBalance::area::hour<67> - L FictiveLoads::area::hour<67> - E AreaBalance::area::hour<67> - L FictiveLoads::area::hour<67> - E AreaBalance::area::hour<68> - L FictiveLoads::area::hour<68> - E AreaBalance::area::hour<68> - L FictiveLoads::area::hour<68> - E AreaBalance::area::hour<69> - L FictiveLoads::area::hour<69> - E AreaBalance::area::hour<69> - L FictiveLoads::area::hour<69> - E AreaBalance::area::hour<70> - L FictiveLoads::area::hour<70> - E AreaBalance::area::hour<70> - L FictiveLoads::area::hour<70> - E AreaBalance::area::hour<71> - L FictiveLoads::area::hour<71> - E AreaBalance::area::hour<71> - L FictiveLoads::area::hour<71> - E AreaBalance::area::hour<72> - L FictiveLoads::area::hour<72> - E AreaBalance::area::hour<72> - L FictiveLoads::area::hour<72> - E AreaBalance::area::hour<73> - L FictiveLoads::area::hour<73> - E AreaBalance::area::hour<73> - L FictiveLoads::area::hour<73> - E AreaBalance::area::hour<74> - L FictiveLoads::area::hour<74> - E AreaBalance::area::hour<74> - L FictiveLoads::area::hour<74> - E AreaBalance::area::hour<75> - L FictiveLoads::area::hour<75> - E AreaBalance::area::hour<75> - L FictiveLoads::area::hour<75> - E AreaBalance::area::hour<76> - L FictiveLoads::area::hour<76> - E AreaBalance::area::hour<76> - L FictiveLoads::area::hour<76> - E AreaBalance::area::hour<77> - L FictiveLoads::area::hour<77> - E AreaBalance::area::hour<77> - L FictiveLoads::area::hour<77> - E AreaBalance::area::hour<78> - L FictiveLoads::area::hour<78> - E AreaBalance::area::hour<78> - L FictiveLoads::area::hour<78> - E AreaBalance::area::hour<79> - L FictiveLoads::area::hour<79> - E AreaBalance::area::hour<79> - L FictiveLoads::area::hour<79> - E AreaBalance::area::hour<80> - L FictiveLoads::area::hour<80> - E AreaBalance::area::hour<80> - L FictiveLoads::area::hour<80> - E AreaBalance::area::hour<81> - L FictiveLoads::area::hour<81> - E AreaBalance::area::hour<81> - L FictiveLoads::area::hour<81> - E AreaBalance::area::hour<82> - L FictiveLoads::area::hour<82> - E AreaBalance::area::hour<82> - L FictiveLoads::area::hour<82> - E AreaBalance::area::hour<83> - L FictiveLoads::area::hour<83> - E AreaBalance::area::hour<83> - L FictiveLoads::area::hour<83> - E AreaBalance::area::hour<84> - L FictiveLoads::area::hour<84> - E AreaBalance::area::hour<84> - L FictiveLoads::area::hour<84> - E AreaBalance::area::hour<85> - L FictiveLoads::area::hour<85> - E AreaBalance::area::hour<85> - L FictiveLoads::area::hour<85> - E AreaBalance::area::hour<86> - L FictiveLoads::area::hour<86> - E AreaBalance::area::hour<86> - L FictiveLoads::area::hour<86> - E AreaBalance::area::hour<87> - L FictiveLoads::area::hour<87> - E AreaBalance::area::hour<87> - L FictiveLoads::area::hour<87> - E AreaBalance::area::hour<88> - L FictiveLoads::area::hour<88> - E AreaBalance::area::hour<88> - L FictiveLoads::area::hour<88> - E AreaBalance::area::hour<89> - L FictiveLoads::area::hour<89> - E AreaBalance::area::hour<89> - L FictiveLoads::area::hour<89> - E AreaBalance::area::hour<90> - L FictiveLoads::area::hour<90> - E AreaBalance::area::hour<90> - L FictiveLoads::area::hour<90> - E AreaBalance::area::hour<91> - L FictiveLoads::area::hour<91> - E AreaBalance::area::hour<91> - L FictiveLoads::area::hour<91> - E AreaBalance::area::hour<92> - L FictiveLoads::area::hour<92> - E AreaBalance::area::hour<92> - L FictiveLoads::area::hour<92> - E AreaBalance::area::hour<93> - L FictiveLoads::area::hour<93> - E AreaBalance::area::hour<93> - L FictiveLoads::area::hour<93> - E AreaBalance::area::hour<94> - L FictiveLoads::area::hour<94> - E AreaBalance::area::hour<94> - L FictiveLoads::area::hour<94> - E AreaBalance::area::hour<95> - L FictiveLoads::area::hour<95> - E AreaBalance::area::hour<95> - L FictiveLoads::area::hour<95> - E AreaBalance::area::hour<96> - L FictiveLoads::area::hour<96> - E AreaBalance::area::hour<96> - L FictiveLoads::area::hour<96> - E AreaBalance::area::hour<97> - L FictiveLoads::area::hour<97> - E AreaBalance::area::hour<97> - L FictiveLoads::area::hour<97> - E AreaBalance::area::hour<98> - L FictiveLoads::area::hour<98> - E AreaBalance::area::hour<98> - L FictiveLoads::area::hour<98> - E AreaBalance::area::hour<99> - L FictiveLoads::area::hour<99> - E AreaBalance::area::hour<99> - L FictiveLoads::area::hour<99> - E AreaBalance::area::hour<100> - L FictiveLoads::area::hour<100> - E AreaBalance::area::hour<100> - L FictiveLoads::area::hour<100> - E AreaBalance::area::hour<101> - L FictiveLoads::area::hour<101> - E AreaBalance::area::hour<101> - L FictiveLoads::area::hour<101> - E AreaBalance::area::hour<102> - L FictiveLoads::area::hour<102> - E AreaBalance::area::hour<102> - L FictiveLoads::area::hour<102> - E AreaBalance::area::hour<103> - L FictiveLoads::area::hour<103> - E AreaBalance::area::hour<103> - L FictiveLoads::area::hour<103> - E AreaBalance::area::hour<104> - L FictiveLoads::area::hour<104> - E AreaBalance::area::hour<104> - L FictiveLoads::area::hour<104> - E AreaBalance::area::hour<105> - L FictiveLoads::area::hour<105> - E AreaBalance::area::hour<105> - L FictiveLoads::area::hour<105> - E AreaBalance::area::hour<106> - L FictiveLoads::area::hour<106> - E AreaBalance::area::hour<106> - L FictiveLoads::area::hour<106> - E AreaBalance::area::hour<107> - L FictiveLoads::area::hour<107> - E AreaBalance::area::hour<107> - L FictiveLoads::area::hour<107> - E AreaBalance::area::hour<108> - L FictiveLoads::area::hour<108> - E AreaBalance::area::hour<108> - L FictiveLoads::area::hour<108> - E AreaBalance::area::hour<109> - L FictiveLoads::area::hour<109> - E AreaBalance::area::hour<109> - L FictiveLoads::area::hour<109> - E AreaBalance::area::hour<110> - L FictiveLoads::area::hour<110> - E AreaBalance::area::hour<110> - L FictiveLoads::area::hour<110> - E AreaBalance::area::hour<111> - L FictiveLoads::area::hour<111> - E AreaBalance::area::hour<111> - L FictiveLoads::area::hour<111> - E AreaBalance::area::hour<112> - L FictiveLoads::area::hour<112> - E AreaBalance::area::hour<112> - L FictiveLoads::area::hour<112> - E AreaBalance::area::hour<113> - L FictiveLoads::area::hour<113> - E AreaBalance::area::hour<113> - L FictiveLoads::area::hour<113> - E AreaBalance::area::hour<114> - L FictiveLoads::area::hour<114> - E AreaBalance::area::hour<114> - L FictiveLoads::area::hour<114> - E AreaBalance::area::hour<115> - L FictiveLoads::area::hour<115> - E AreaBalance::area::hour<115> - L FictiveLoads::area::hour<115> - E AreaBalance::area::hour<116> - L FictiveLoads::area::hour<116> - E AreaBalance::area::hour<116> - L FictiveLoads::area::hour<116> - E AreaBalance::area::hour<117> - L FictiveLoads::area::hour<117> - E AreaBalance::area::hour<117> - L FictiveLoads::area::hour<117> - E AreaBalance::area::hour<118> - L FictiveLoads::area::hour<118> - E AreaBalance::area::hour<118> - L FictiveLoads::area::hour<118> - E AreaBalance::area::hour<119> - L FictiveLoads::area::hour<119> - E AreaBalance::area::hour<119> - L FictiveLoads::area::hour<119> - E AreaBalance::area::hour<120> - L FictiveLoads::area::hour<120> - E AreaBalance::area::hour<120> - L FictiveLoads::area::hour<120> - E AreaBalance::area::hour<121> - L FictiveLoads::area::hour<121> - E AreaBalance::area::hour<121> - L FictiveLoads::area::hour<121> - E AreaBalance::area::hour<122> - L FictiveLoads::area::hour<122> - E AreaBalance::area::hour<122> - L FictiveLoads::area::hour<122> - E AreaBalance::area::hour<123> - L FictiveLoads::area::hour<123> - E AreaBalance::area::hour<123> - L FictiveLoads::area::hour<123> - E AreaBalance::area::hour<124> - L FictiveLoads::area::hour<124> - E AreaBalance::area::hour<124> - L FictiveLoads::area::hour<124> - E AreaBalance::area::hour<125> - L FictiveLoads::area::hour<125> - E AreaBalance::area::hour<125> - L FictiveLoads::area::hour<125> - E AreaBalance::area::hour<126> - L FictiveLoads::area::hour<126> - E AreaBalance::area::hour<126> - L FictiveLoads::area::hour<126> - E AreaBalance::area::hour<127> - L FictiveLoads::area::hour<127> - E AreaBalance::area::hour<127> - L FictiveLoads::area::hour<127> - E AreaBalance::area::hour<128> - L FictiveLoads::area::hour<128> - E AreaBalance::area::hour<128> - L FictiveLoads::area::hour<128> - E AreaBalance::area::hour<129> - L FictiveLoads::area::hour<129> - E AreaBalance::area::hour<129> - L FictiveLoads::area::hour<129> - E AreaBalance::area::hour<130> - L FictiveLoads::area::hour<130> - E AreaBalance::area::hour<130> - L FictiveLoads::area::hour<130> - E AreaBalance::area::hour<131> - L FictiveLoads::area::hour<131> - E AreaBalance::area::hour<131> - L FictiveLoads::area::hour<131> - E AreaBalance::area::hour<132> - L FictiveLoads::area::hour<132> - E AreaBalance::area::hour<132> - L FictiveLoads::area::hour<132> - E AreaBalance::area::hour<133> - L FictiveLoads::area::hour<133> - E AreaBalance::area::hour<133> - L FictiveLoads::area::hour<133> - E AreaBalance::area::hour<134> - L FictiveLoads::area::hour<134> - E AreaBalance::area::hour<134> - L FictiveLoads::area::hour<134> - E AreaBalance::area::hour<135> - L FictiveLoads::area::hour<135> - E AreaBalance::area::hour<135> - L FictiveLoads::area::hour<135> - E AreaBalance::area::hour<136> - L FictiveLoads::area::hour<136> - E AreaBalance::area::hour<136> - L FictiveLoads::area::hour<136> - E AreaBalance::area::hour<137> - L FictiveLoads::area::hour<137> - E AreaBalance::area::hour<137> - L FictiveLoads::area::hour<137> - E AreaBalance::area::hour<138> - L FictiveLoads::area::hour<138> - E AreaBalance::area::hour<138> - L FictiveLoads::area::hour<138> - E AreaBalance::area::hour<139> - L FictiveLoads::area::hour<139> - E AreaBalance::area::hour<139> - L FictiveLoads::area::hour<139> - E AreaBalance::area::hour<140> - L FictiveLoads::area::hour<140> - E AreaBalance::area::hour<140> - L FictiveLoads::area::hour<140> - E AreaBalance::area::hour<141> - L FictiveLoads::area::hour<141> - E AreaBalance::area::hour<141> - L FictiveLoads::area::hour<141> - E AreaBalance::area::hour<142> - L FictiveLoads::area::hour<142> - E AreaBalance::area::hour<142> - L FictiveLoads::area::hour<142> - E AreaBalance::area::hour<143> - L FictiveLoads::area::hour<143> - E AreaBalance::area::hour<143> - L FictiveLoads::area::hour<143> - E AreaBalance::area::hour<144> - L FictiveLoads::area::hour<144> - E AreaBalance::area::hour<144> - L FictiveLoads::area::hour<144> - E AreaBalance::area::hour<145> - L FictiveLoads::area::hour<145> - E AreaBalance::area::hour<145> - L FictiveLoads::area::hour<145> - E AreaBalance::area::hour<146> - L FictiveLoads::area::hour<146> - E AreaBalance::area::hour<146> - L FictiveLoads::area::hour<146> - E AreaBalance::area::hour<147> - L FictiveLoads::area::hour<147> - E AreaBalance::area::hour<147> - L FictiveLoads::area::hour<147> - E AreaBalance::area::hour<148> - L FictiveLoads::area::hour<148> - E AreaBalance::area::hour<148> - L FictiveLoads::area::hour<148> - E AreaBalance::area::hour<149> - L FictiveLoads::area::hour<149> - E AreaBalance::area::hour<149> - L FictiveLoads::area::hour<149> - E AreaBalance::area::hour<150> - L FictiveLoads::area::hour<150> - E AreaBalance::area::hour<150> - L FictiveLoads::area::hour<150> - E AreaBalance::area::hour<151> - L FictiveLoads::area::hour<151> - E AreaBalance::area::hour<151> - L FictiveLoads::area::hour<151> - E AreaBalance::area::hour<152> - L FictiveLoads::area::hour<152> - E AreaBalance::area::hour<152> - L FictiveLoads::area::hour<152> - E AreaBalance::area::hour<153> - L FictiveLoads::area::hour<153> - E AreaBalance::area::hour<153> - L FictiveLoads::area::hour<153> - E AreaBalance::area::hour<154> - L FictiveLoads::area::hour<154> - E AreaBalance::area::hour<154> - L FictiveLoads::area::hour<154> - E AreaBalance::area::hour<155> - L FictiveLoads::area::hour<155> - E AreaBalance::area::hour<155> - L FictiveLoads::area::hour<155> - E AreaBalance::area::hour<156> - L FictiveLoads::area::hour<156> - E AreaBalance::area::hour<156> - L FictiveLoads::area::hour<156> - E AreaBalance::area::hour<157> - L FictiveLoads::area::hour<157> - E AreaBalance::area::hour<157> - L FictiveLoads::area::hour<157> - E AreaBalance::area::hour<158> - L FictiveLoads::area::hour<158> - E AreaBalance::area::hour<158> - L FictiveLoads::area::hour<158> - E AreaBalance::area::hour<159> - L FictiveLoads::area::hour<159> - E AreaBalance::area::hour<159> - L FictiveLoads::area::hour<159> - E AreaBalance::area::hour<160> - L FictiveLoads::area::hour<160> - E AreaBalance::area::hour<160> - L FictiveLoads::area::hour<160> - E AreaBalance::area::hour<161> - L FictiveLoads::area::hour<161> - E AreaBalance::area::hour<161> - L FictiveLoads::area::hour<161> - E AreaBalance::area::hour<162> - L FictiveLoads::area::hour<162> - E AreaBalance::area::hour<162> - L FictiveLoads::area::hour<162> - E AreaBalance::area::hour<163> - L FictiveLoads::area::hour<163> - E AreaBalance::area::hour<163> - L FictiveLoads::area::hour<163> - E AreaBalance::area::hour<164> - L FictiveLoads::area::hour<164> - E AreaBalance::area::hour<164> - L FictiveLoads::area::hour<164> - E AreaBalance::area::hour<165> - L FictiveLoads::area::hour<165> - E AreaBalance::area::hour<165> - L FictiveLoads::area::hour<165> - E AreaBalance::area::hour<166> - L FictiveLoads::area::hour<166> - E AreaBalance::area::hour<166> - L FictiveLoads::area::hour<166> - E AreaBalance::area::hour<167> - L FictiveLoads::area::hour<167> - E AreaBalance::area::hour<167> - L FictiveLoads::area::hour<167> - L R673 - G R674 - L R675 - G R676 - L R677 - G R678 - L R679 - G R680 - L R681 - G R682 - L R683 - G R684 - L R685 - G R686 - L R687 - G R688 - L R689 - G R690 - L R691 - G R692 - L R693 - G R694 - L R695 - G R696 - L R697 - G R698 - L R699 - G R700 - L R701 - G R702 - L R703 - G R704 - L R705 - G R706 - L R707 - G R708 - L R709 - G R710 - L R711 - G R712 - L R713 - G R714 - L R715 - G R716 - L R717 - G R718 - L R719 - G R720 - L R721 - G R722 - L R723 - G R724 - L R725 - G R726 - L R727 - G R728 - L R729 - G R730 - L R731 - G R732 - L R733 - G R734 - L R735 - G R736 - L R737 - G R738 - L R739 - G R740 - L R741 - G R742 - L R743 - G R744 - L R745 - G R746 - L R747 - G R748 - L R749 - G R750 - L R751 - G R752 - L R753 - G R754 - L R755 - G R756 - L R757 - G R758 - L R759 - G R760 - L R761 - G R762 - L R763 - G R764 - L R765 - G R766 - L R767 - G R768 - L R769 - G R770 - L R771 - G R772 - L R773 - G R774 - L R775 - G R776 - L R777 - G R778 - L R779 - G R780 - L R781 - G R782 - L R783 - G R784 - L R785 - G R786 - L R787 - G R788 - L R789 - G R790 - L R791 - G R792 - L R793 - G R794 - L R795 - G R796 - L R797 - G R798 - L R799 - G R800 - L R801 - G R802 - L R803 - G R804 - L R805 - G R806 - L R807 - G R808 - L R809 - G R810 - L R811 - G R812 - L R813 - G R814 - L R815 - G R816 - L R817 - G R818 - L R819 - G R820 - L R821 - G R822 - L R823 - G R824 - L R825 - G R826 - L R827 - G R828 - L R829 - G R830 - L R831 - G R832 - L R833 - G R834 - L R835 - G R836 - L R837 - G R838 - L R839 - G R840 - L R841 - G R842 - L R843 - G R844 - L R845 - G R846 - L R847 - G R848 - L R849 - G R850 - L R851 - G R852 - L R853 - G R854 - L R855 - G R856 - L R857 - G R858 - L R859 - G R860 - L R861 - G R862 - L R863 - G R864 - L R865 - G R866 - L R867 - G R868 - L R869 - G R870 - L R871 - G R872 - L R873 - G R874 - L R875 - G R876 - L R877 - G R878 - L R879 - G R880 - L R881 - G R882 - L R883 - G R884 - L R885 - G R886 - L R887 - G R888 - L R889 - G R890 - L R891 - G R892 - L R893 - G R894 - L R895 - G R896 - L R897 - G R898 - L R899 - G R900 - L R901 - G R902 - L R903 - G R904 - L R905 - G R906 - L R907 - G R908 - L R909 - G R910 - L R911 - G R912 - L R913 - G R914 - L R915 - G R916 - L R917 - G R918 - L R919 - G R920 - L R921 - G R922 - L R923 - G R924 - L R925 - G R926 - L R927 - G R928 - L R929 - G R930 - L R931 - G R932 - L R933 - G R934 - L R935 - G R936 - L R937 - G R938 - L R939 - G R940 - L R941 - G R942 - L R943 - G R944 - L R945 - G R946 - L R947 - G R948 - L R949 - G R950 - L R951 - G R952 - L R953 - G R954 - L R955 - G R956 - L R957 - G R958 - L R959 - G R960 - L R961 - G R962 - L R963 - G R964 - L R965 - G R966 - L R967 - G R968 - L R969 - G R970 - L R971 - G R972 - L R973 - G R974 - L R975 - G R976 - L R977 - G R978 - L R979 - G R980 - L R981 - G R982 - L R983 - G R984 - L R985 - G R986 - L R987 - G R988 - L R989 - G R990 - L R991 - G R992 - L R993 - G R994 - L R995 - G R996 - L R997 - G R998 - L R999 - G R1000 - L R1001 - G R1002 - L R1003 - G R1004 - L R1005 - G R1006 - L R1007 - G R1008 -COLUMNS - NTCDirect::link::hour<0> AreaBalance::area::hour<0> 1 - NTCDirect::link::hour<0> AreaBalance::area::hour<0> -1 - NTCDirect::link::hour<0> R673 1 - NTCDirect::link::hour<0> R674 1 - PositiveUnsuppliedEnergy::area::hour<0> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<0> AreaBalance::area::hour<0> -1 - NegativeUnsuppliedEnergy::area::hour<0> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<0> AreaBalance::area::hour<0> 1 - NegativeUnsuppliedEnergy::area::hour<0> FictiveLoads::area::hour<0> 1 - PositiveUnsuppliedEnergy::area::hour<0> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<0> AreaBalance::area::hour<0> -1 - NegativeUnsuppliedEnergy::area::hour<0> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<0> AreaBalance::area::hour<0> 1 - NegativeUnsuppliedEnergy::area::hour<0> FictiveLoads::area::hour<0> 1 - NTCDirect::link::hour<1> AreaBalance::area::hour<1> 1 - NTCDirect::link::hour<1> AreaBalance::area::hour<1> -1 - NTCDirect::link::hour<1> R675 1 - NTCDirect::link::hour<1> R676 1 - PositiveUnsuppliedEnergy::area::hour<1> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<1> AreaBalance::area::hour<1> -1 - NegativeUnsuppliedEnergy::area::hour<1> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<1> AreaBalance::area::hour<1> 1 - NegativeUnsuppliedEnergy::area::hour<1> FictiveLoads::area::hour<1> 1 - PositiveUnsuppliedEnergy::area::hour<1> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<1> AreaBalance::area::hour<1> -1 - NegativeUnsuppliedEnergy::area::hour<1> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<1> AreaBalance::area::hour<1> 1 - NegativeUnsuppliedEnergy::area::hour<1> FictiveLoads::area::hour<1> 1 - NTCDirect::link::hour<2> AreaBalance::area::hour<2> 1 - NTCDirect::link::hour<2> AreaBalance::area::hour<2> -1 - NTCDirect::link::hour<2> R677 1 - NTCDirect::link::hour<2> R678 1 - PositiveUnsuppliedEnergy::area::hour<2> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<2> AreaBalance::area::hour<2> -1 - NegativeUnsuppliedEnergy::area::hour<2> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<2> AreaBalance::area::hour<2> 1 - NegativeUnsuppliedEnergy::area::hour<2> FictiveLoads::area::hour<2> 1 - PositiveUnsuppliedEnergy::area::hour<2> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<2> AreaBalance::area::hour<2> -1 - NegativeUnsuppliedEnergy::area::hour<2> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<2> AreaBalance::area::hour<2> 1 - NegativeUnsuppliedEnergy::area::hour<2> FictiveLoads::area::hour<2> 1 - NTCDirect::link::hour<3> AreaBalance::area::hour<3> 1 - NTCDirect::link::hour<3> AreaBalance::area::hour<3> -1 - NTCDirect::link::hour<3> R679 1 - NTCDirect::link::hour<3> R680 1 - PositiveUnsuppliedEnergy::area::hour<3> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<3> AreaBalance::area::hour<3> -1 - NegativeUnsuppliedEnergy::area::hour<3> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<3> AreaBalance::area::hour<3> 1 - NegativeUnsuppliedEnergy::area::hour<3> FictiveLoads::area::hour<3> 1 - PositiveUnsuppliedEnergy::area::hour<3> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<3> AreaBalance::area::hour<3> -1 - NegativeUnsuppliedEnergy::area::hour<3> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<3> AreaBalance::area::hour<3> 1 - NegativeUnsuppliedEnergy::area::hour<3> FictiveLoads::area::hour<3> 1 - NTCDirect::link::hour<4> AreaBalance::area::hour<4> 1 - NTCDirect::link::hour<4> AreaBalance::area::hour<4> -1 - NTCDirect::link::hour<4> R681 1 - NTCDirect::link::hour<4> R682 1 - PositiveUnsuppliedEnergy::area::hour<4> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<4> AreaBalance::area::hour<4> -1 - NegativeUnsuppliedEnergy::area::hour<4> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<4> AreaBalance::area::hour<4> 1 - NegativeUnsuppliedEnergy::area::hour<4> FictiveLoads::area::hour<4> 1 - PositiveUnsuppliedEnergy::area::hour<4> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<4> AreaBalance::area::hour<4> -1 - NegativeUnsuppliedEnergy::area::hour<4> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<4> AreaBalance::area::hour<4> 1 - NegativeUnsuppliedEnergy::area::hour<4> FictiveLoads::area::hour<4> 1 - NTCDirect::link::hour<5> AreaBalance::area::hour<5> 1 - NTCDirect::link::hour<5> AreaBalance::area::hour<5> -1 - NTCDirect::link::hour<5> R683 1 - NTCDirect::link::hour<5> R684 1 - PositiveUnsuppliedEnergy::area::hour<5> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<5> AreaBalance::area::hour<5> -1 - NegativeUnsuppliedEnergy::area::hour<5> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<5> AreaBalance::area::hour<5> 1 - NegativeUnsuppliedEnergy::area::hour<5> FictiveLoads::area::hour<5> 1 - PositiveUnsuppliedEnergy::area::hour<5> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<5> AreaBalance::area::hour<5> -1 - NegativeUnsuppliedEnergy::area::hour<5> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<5> AreaBalance::area::hour<5> 1 - NegativeUnsuppliedEnergy::area::hour<5> FictiveLoads::area::hour<5> 1 - NTCDirect::link::hour<6> AreaBalance::area::hour<6> 1 - NTCDirect::link::hour<6> AreaBalance::area::hour<6> -1 - NTCDirect::link::hour<6> R685 1 - NTCDirect::link::hour<6> R686 1 - PositiveUnsuppliedEnergy::area::hour<6> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<6> AreaBalance::area::hour<6> -1 - NegativeUnsuppliedEnergy::area::hour<6> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<6> AreaBalance::area::hour<6> 1 - NegativeUnsuppliedEnergy::area::hour<6> FictiveLoads::area::hour<6> 1 - PositiveUnsuppliedEnergy::area::hour<6> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<6> AreaBalance::area::hour<6> -1 - NegativeUnsuppliedEnergy::area::hour<6> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<6> AreaBalance::area::hour<6> 1 - NegativeUnsuppliedEnergy::area::hour<6> FictiveLoads::area::hour<6> 1 - NTCDirect::link::hour<7> AreaBalance::area::hour<7> 1 - NTCDirect::link::hour<7> AreaBalance::area::hour<7> -1 - NTCDirect::link::hour<7> R687 1 - NTCDirect::link::hour<7> R688 1 - PositiveUnsuppliedEnergy::area::hour<7> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<7> AreaBalance::area::hour<7> -1 - NegativeUnsuppliedEnergy::area::hour<7> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<7> AreaBalance::area::hour<7> 1 - NegativeUnsuppliedEnergy::area::hour<7> FictiveLoads::area::hour<7> 1 - PositiveUnsuppliedEnergy::area::hour<7> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<7> AreaBalance::area::hour<7> -1 - NegativeUnsuppliedEnergy::area::hour<7> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<7> AreaBalance::area::hour<7> 1 - NegativeUnsuppliedEnergy::area::hour<7> FictiveLoads::area::hour<7> 1 - NTCDirect::link::hour<8> AreaBalance::area::hour<8> 1 - NTCDirect::link::hour<8> AreaBalance::area::hour<8> -1 - NTCDirect::link::hour<8> R689 1 - NTCDirect::link::hour<8> R690 1 - PositiveUnsuppliedEnergy::area::hour<8> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<8> AreaBalance::area::hour<8> -1 - NegativeUnsuppliedEnergy::area::hour<8> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<8> AreaBalance::area::hour<8> 1 - NegativeUnsuppliedEnergy::area::hour<8> FictiveLoads::area::hour<8> 1 - PositiveUnsuppliedEnergy::area::hour<8> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<8> AreaBalance::area::hour<8> -1 - NegativeUnsuppliedEnergy::area::hour<8> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<8> AreaBalance::area::hour<8> 1 - NegativeUnsuppliedEnergy::area::hour<8> FictiveLoads::area::hour<8> 1 - NTCDirect::link::hour<9> AreaBalance::area::hour<9> 1 - NTCDirect::link::hour<9> AreaBalance::area::hour<9> -1 - NTCDirect::link::hour<9> R691 1 - NTCDirect::link::hour<9> R692 1 - PositiveUnsuppliedEnergy::area::hour<9> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<9> AreaBalance::area::hour<9> -1 - NegativeUnsuppliedEnergy::area::hour<9> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<9> AreaBalance::area::hour<9> 1 - NegativeUnsuppliedEnergy::area::hour<9> FictiveLoads::area::hour<9> 1 - PositiveUnsuppliedEnergy::area::hour<9> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<9> AreaBalance::area::hour<9> -1 - NegativeUnsuppliedEnergy::area::hour<9> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<9> AreaBalance::area::hour<9> 1 - NegativeUnsuppliedEnergy::area::hour<9> FictiveLoads::area::hour<9> 1 - NTCDirect::link::hour<10> AreaBalance::area::hour<10> 1 - NTCDirect::link::hour<10> AreaBalance::area::hour<10> -1 - NTCDirect::link::hour<10> R693 1 - NTCDirect::link::hour<10> R694 1 - PositiveUnsuppliedEnergy::area::hour<10> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<10> AreaBalance::area::hour<10> -1 - NegativeUnsuppliedEnergy::area::hour<10> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<10> AreaBalance::area::hour<10> 1 - NegativeUnsuppliedEnergy::area::hour<10> FictiveLoads::area::hour<10> 1 - PositiveUnsuppliedEnergy::area::hour<10> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<10> AreaBalance::area::hour<10> -1 - NegativeUnsuppliedEnergy::area::hour<10> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<10> AreaBalance::area::hour<10> 1 - NegativeUnsuppliedEnergy::area::hour<10> FictiveLoads::area::hour<10> 1 - NTCDirect::link::hour<11> AreaBalance::area::hour<11> 1 - NTCDirect::link::hour<11> AreaBalance::area::hour<11> -1 - NTCDirect::link::hour<11> R695 1 - NTCDirect::link::hour<11> R696 1 - PositiveUnsuppliedEnergy::area::hour<11> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<11> AreaBalance::area::hour<11> -1 - NegativeUnsuppliedEnergy::area::hour<11> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<11> AreaBalance::area::hour<11> 1 - NegativeUnsuppliedEnergy::area::hour<11> FictiveLoads::area::hour<11> 1 - PositiveUnsuppliedEnergy::area::hour<11> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<11> AreaBalance::area::hour<11> -1 - NegativeUnsuppliedEnergy::area::hour<11> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<11> AreaBalance::area::hour<11> 1 - NegativeUnsuppliedEnergy::area::hour<11> FictiveLoads::area::hour<11> 1 - NTCDirect::link::hour<12> AreaBalance::area::hour<12> 1 - NTCDirect::link::hour<12> AreaBalance::area::hour<12> -1 - NTCDirect::link::hour<12> R697 1 - NTCDirect::link::hour<12> R698 1 - PositiveUnsuppliedEnergy::area::hour<12> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<12> AreaBalance::area::hour<12> -1 - NegativeUnsuppliedEnergy::area::hour<12> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<12> AreaBalance::area::hour<12> 1 - NegativeUnsuppliedEnergy::area::hour<12> FictiveLoads::area::hour<12> 1 - PositiveUnsuppliedEnergy::area::hour<12> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<12> AreaBalance::area::hour<12> -1 - NegativeUnsuppliedEnergy::area::hour<12> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<12> AreaBalance::area::hour<12> 1 - NegativeUnsuppliedEnergy::area::hour<12> FictiveLoads::area::hour<12> 1 - NTCDirect::link::hour<13> AreaBalance::area::hour<13> 1 - NTCDirect::link::hour<13> AreaBalance::area::hour<13> -1 - NTCDirect::link::hour<13> R699 1 - NTCDirect::link::hour<13> R700 1 - PositiveUnsuppliedEnergy::area::hour<13> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<13> AreaBalance::area::hour<13> -1 - NegativeUnsuppliedEnergy::area::hour<13> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<13> AreaBalance::area::hour<13> 1 - NegativeUnsuppliedEnergy::area::hour<13> FictiveLoads::area::hour<13> 1 - PositiveUnsuppliedEnergy::area::hour<13> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<13> AreaBalance::area::hour<13> -1 - NegativeUnsuppliedEnergy::area::hour<13> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<13> AreaBalance::area::hour<13> 1 - NegativeUnsuppliedEnergy::area::hour<13> FictiveLoads::area::hour<13> 1 - NTCDirect::link::hour<14> AreaBalance::area::hour<14> 1 - NTCDirect::link::hour<14> AreaBalance::area::hour<14> -1 - NTCDirect::link::hour<14> R701 1 - NTCDirect::link::hour<14> R702 1 - PositiveUnsuppliedEnergy::area::hour<14> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<14> AreaBalance::area::hour<14> -1 - NegativeUnsuppliedEnergy::area::hour<14> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<14> AreaBalance::area::hour<14> 1 - NegativeUnsuppliedEnergy::area::hour<14> FictiveLoads::area::hour<14> 1 - PositiveUnsuppliedEnergy::area::hour<14> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<14> AreaBalance::area::hour<14> -1 - NegativeUnsuppliedEnergy::area::hour<14> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<14> AreaBalance::area::hour<14> 1 - NegativeUnsuppliedEnergy::area::hour<14> FictiveLoads::area::hour<14> 1 - NTCDirect::link::hour<15> AreaBalance::area::hour<15> 1 - NTCDirect::link::hour<15> AreaBalance::area::hour<15> -1 - NTCDirect::link::hour<15> R703 1 - NTCDirect::link::hour<15> R704 1 - PositiveUnsuppliedEnergy::area::hour<15> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<15> AreaBalance::area::hour<15> -1 - NegativeUnsuppliedEnergy::area::hour<15> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<15> AreaBalance::area::hour<15> 1 - NegativeUnsuppliedEnergy::area::hour<15> FictiveLoads::area::hour<15> 1 - PositiveUnsuppliedEnergy::area::hour<15> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<15> AreaBalance::area::hour<15> -1 - NegativeUnsuppliedEnergy::area::hour<15> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<15> AreaBalance::area::hour<15> 1 - NegativeUnsuppliedEnergy::area::hour<15> FictiveLoads::area::hour<15> 1 - NTCDirect::link::hour<16> AreaBalance::area::hour<16> 1 - NTCDirect::link::hour<16> AreaBalance::area::hour<16> -1 - NTCDirect::link::hour<16> R705 1 - NTCDirect::link::hour<16> R706 1 - PositiveUnsuppliedEnergy::area::hour<16> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<16> AreaBalance::area::hour<16> -1 - NegativeUnsuppliedEnergy::area::hour<16> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<16> AreaBalance::area::hour<16> 1 - NegativeUnsuppliedEnergy::area::hour<16> FictiveLoads::area::hour<16> 1 - PositiveUnsuppliedEnergy::area::hour<16> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<16> AreaBalance::area::hour<16> -1 - NegativeUnsuppliedEnergy::area::hour<16> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<16> AreaBalance::area::hour<16> 1 - NegativeUnsuppliedEnergy::area::hour<16> FictiveLoads::area::hour<16> 1 - NTCDirect::link::hour<17> AreaBalance::area::hour<17> 1 - NTCDirect::link::hour<17> AreaBalance::area::hour<17> -1 - NTCDirect::link::hour<17> R707 1 - NTCDirect::link::hour<17> R708 1 - PositiveUnsuppliedEnergy::area::hour<17> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<17> AreaBalance::area::hour<17> -1 - NegativeUnsuppliedEnergy::area::hour<17> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<17> AreaBalance::area::hour<17> 1 - NegativeUnsuppliedEnergy::area::hour<17> FictiveLoads::area::hour<17> 1 - PositiveUnsuppliedEnergy::area::hour<17> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<17> AreaBalance::area::hour<17> -1 - NegativeUnsuppliedEnergy::area::hour<17> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<17> AreaBalance::area::hour<17> 1 - NegativeUnsuppliedEnergy::area::hour<17> FictiveLoads::area::hour<17> 1 - NTCDirect::link::hour<18> AreaBalance::area::hour<18> 1 - NTCDirect::link::hour<18> AreaBalance::area::hour<18> -1 - NTCDirect::link::hour<18> R709 1 - NTCDirect::link::hour<18> R710 1 - PositiveUnsuppliedEnergy::area::hour<18> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<18> AreaBalance::area::hour<18> -1 - NegativeUnsuppliedEnergy::area::hour<18> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<18> AreaBalance::area::hour<18> 1 - NegativeUnsuppliedEnergy::area::hour<18> FictiveLoads::area::hour<18> 1 - PositiveUnsuppliedEnergy::area::hour<18> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<18> AreaBalance::area::hour<18> -1 - NegativeUnsuppliedEnergy::area::hour<18> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<18> AreaBalance::area::hour<18> 1 - NegativeUnsuppliedEnergy::area::hour<18> FictiveLoads::area::hour<18> 1 - NTCDirect::link::hour<19> AreaBalance::area::hour<19> 1 - NTCDirect::link::hour<19> AreaBalance::area::hour<19> -1 - NTCDirect::link::hour<19> R711 1 - NTCDirect::link::hour<19> R712 1 - PositiveUnsuppliedEnergy::area::hour<19> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<19> AreaBalance::area::hour<19> -1 - NegativeUnsuppliedEnergy::area::hour<19> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<19> AreaBalance::area::hour<19> 1 - NegativeUnsuppliedEnergy::area::hour<19> FictiveLoads::area::hour<19> 1 - PositiveUnsuppliedEnergy::area::hour<19> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<19> AreaBalance::area::hour<19> -1 - NegativeUnsuppliedEnergy::area::hour<19> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<19> AreaBalance::area::hour<19> 1 - NegativeUnsuppliedEnergy::area::hour<19> FictiveLoads::area::hour<19> 1 - NTCDirect::link::hour<20> AreaBalance::area::hour<20> 1 - NTCDirect::link::hour<20> AreaBalance::area::hour<20> -1 - NTCDirect::link::hour<20> R713 1 - NTCDirect::link::hour<20> R714 1 - PositiveUnsuppliedEnergy::area::hour<20> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<20> AreaBalance::area::hour<20> -1 - NegativeUnsuppliedEnergy::area::hour<20> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<20> AreaBalance::area::hour<20> 1 - NegativeUnsuppliedEnergy::area::hour<20> FictiveLoads::area::hour<20> 1 - PositiveUnsuppliedEnergy::area::hour<20> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<20> AreaBalance::area::hour<20> -1 - NegativeUnsuppliedEnergy::area::hour<20> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<20> AreaBalance::area::hour<20> 1 - NegativeUnsuppliedEnergy::area::hour<20> FictiveLoads::area::hour<20> 1 - NTCDirect::link::hour<21> AreaBalance::area::hour<21> 1 - NTCDirect::link::hour<21> AreaBalance::area::hour<21> -1 - NTCDirect::link::hour<21> R715 1 - NTCDirect::link::hour<21> R716 1 - PositiveUnsuppliedEnergy::area::hour<21> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<21> AreaBalance::area::hour<21> -1 - NegativeUnsuppliedEnergy::area::hour<21> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<21> AreaBalance::area::hour<21> 1 - NegativeUnsuppliedEnergy::area::hour<21> FictiveLoads::area::hour<21> 1 - PositiveUnsuppliedEnergy::area::hour<21> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<21> AreaBalance::area::hour<21> -1 - NegativeUnsuppliedEnergy::area::hour<21> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<21> AreaBalance::area::hour<21> 1 - NegativeUnsuppliedEnergy::area::hour<21> FictiveLoads::area::hour<21> 1 - NTCDirect::link::hour<22> AreaBalance::area::hour<22> 1 - NTCDirect::link::hour<22> AreaBalance::area::hour<22> -1 - NTCDirect::link::hour<22> R717 1 - NTCDirect::link::hour<22> R718 1 - PositiveUnsuppliedEnergy::area::hour<22> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<22> AreaBalance::area::hour<22> -1 - NegativeUnsuppliedEnergy::area::hour<22> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<22> AreaBalance::area::hour<22> 1 - NegativeUnsuppliedEnergy::area::hour<22> FictiveLoads::area::hour<22> 1 - PositiveUnsuppliedEnergy::area::hour<22> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<22> AreaBalance::area::hour<22> -1 - NegativeUnsuppliedEnergy::area::hour<22> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<22> AreaBalance::area::hour<22> 1 - NegativeUnsuppliedEnergy::area::hour<22> FictiveLoads::area::hour<22> 1 - NTCDirect::link::hour<23> AreaBalance::area::hour<23> 1 - NTCDirect::link::hour<23> AreaBalance::area::hour<23> -1 - NTCDirect::link::hour<23> R719 1 - NTCDirect::link::hour<23> R720 1 - PositiveUnsuppliedEnergy::area::hour<23> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<23> AreaBalance::area::hour<23> -1 - NegativeUnsuppliedEnergy::area::hour<23> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<23> AreaBalance::area::hour<23> 1 - NegativeUnsuppliedEnergy::area::hour<23> FictiveLoads::area::hour<23> 1 - PositiveUnsuppliedEnergy::area::hour<23> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<23> AreaBalance::area::hour<23> -1 - NegativeUnsuppliedEnergy::area::hour<23> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<23> AreaBalance::area::hour<23> 1 - NegativeUnsuppliedEnergy::area::hour<23> FictiveLoads::area::hour<23> 1 - NTCDirect::link::hour<24> AreaBalance::area::hour<24> 1 - NTCDirect::link::hour<24> AreaBalance::area::hour<24> -1 - NTCDirect::link::hour<24> R721 1 - NTCDirect::link::hour<24> R722 1 - PositiveUnsuppliedEnergy::area::hour<24> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<24> AreaBalance::area::hour<24> -1 - NegativeUnsuppliedEnergy::area::hour<24> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<24> AreaBalance::area::hour<24> 1 - NegativeUnsuppliedEnergy::area::hour<24> FictiveLoads::area::hour<24> 1 - PositiveUnsuppliedEnergy::area::hour<24> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<24> AreaBalance::area::hour<24> -1 - NegativeUnsuppliedEnergy::area::hour<24> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<24> AreaBalance::area::hour<24> 1 - NegativeUnsuppliedEnergy::area::hour<24> FictiveLoads::area::hour<24> 1 - NTCDirect::link::hour<25> AreaBalance::area::hour<25> 1 - NTCDirect::link::hour<25> AreaBalance::area::hour<25> -1 - NTCDirect::link::hour<25> R723 1 - NTCDirect::link::hour<25> R724 1 - PositiveUnsuppliedEnergy::area::hour<25> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<25> AreaBalance::area::hour<25> -1 - NegativeUnsuppliedEnergy::area::hour<25> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<25> AreaBalance::area::hour<25> 1 - NegativeUnsuppliedEnergy::area::hour<25> FictiveLoads::area::hour<25> 1 - PositiveUnsuppliedEnergy::area::hour<25> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<25> AreaBalance::area::hour<25> -1 - NegativeUnsuppliedEnergy::area::hour<25> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<25> AreaBalance::area::hour<25> 1 - NegativeUnsuppliedEnergy::area::hour<25> FictiveLoads::area::hour<25> 1 - NTCDirect::link::hour<26> AreaBalance::area::hour<26> 1 - NTCDirect::link::hour<26> AreaBalance::area::hour<26> -1 - NTCDirect::link::hour<26> R725 1 - NTCDirect::link::hour<26> R726 1 - PositiveUnsuppliedEnergy::area::hour<26> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<26> AreaBalance::area::hour<26> -1 - NegativeUnsuppliedEnergy::area::hour<26> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<26> AreaBalance::area::hour<26> 1 - NegativeUnsuppliedEnergy::area::hour<26> FictiveLoads::area::hour<26> 1 - PositiveUnsuppliedEnergy::area::hour<26> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<26> AreaBalance::area::hour<26> -1 - NegativeUnsuppliedEnergy::area::hour<26> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<26> AreaBalance::area::hour<26> 1 - NegativeUnsuppliedEnergy::area::hour<26> FictiveLoads::area::hour<26> 1 - NTCDirect::link::hour<27> AreaBalance::area::hour<27> 1 - NTCDirect::link::hour<27> AreaBalance::area::hour<27> -1 - NTCDirect::link::hour<27> R727 1 - NTCDirect::link::hour<27> R728 1 - PositiveUnsuppliedEnergy::area::hour<27> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<27> AreaBalance::area::hour<27> -1 - NegativeUnsuppliedEnergy::area::hour<27> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<27> AreaBalance::area::hour<27> 1 - NegativeUnsuppliedEnergy::area::hour<27> FictiveLoads::area::hour<27> 1 - PositiveUnsuppliedEnergy::area::hour<27> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<27> AreaBalance::area::hour<27> -1 - NegativeUnsuppliedEnergy::area::hour<27> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<27> AreaBalance::area::hour<27> 1 - NegativeUnsuppliedEnergy::area::hour<27> FictiveLoads::area::hour<27> 1 - NTCDirect::link::hour<28> AreaBalance::area::hour<28> 1 - NTCDirect::link::hour<28> AreaBalance::area::hour<28> -1 - NTCDirect::link::hour<28> R729 1 - NTCDirect::link::hour<28> R730 1 - PositiveUnsuppliedEnergy::area::hour<28> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<28> AreaBalance::area::hour<28> -1 - NegativeUnsuppliedEnergy::area::hour<28> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<28> AreaBalance::area::hour<28> 1 - NegativeUnsuppliedEnergy::area::hour<28> FictiveLoads::area::hour<28> 1 - PositiveUnsuppliedEnergy::area::hour<28> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<28> AreaBalance::area::hour<28> -1 - NegativeUnsuppliedEnergy::area::hour<28> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<28> AreaBalance::area::hour<28> 1 - NegativeUnsuppliedEnergy::area::hour<28> FictiveLoads::area::hour<28> 1 - NTCDirect::link::hour<29> AreaBalance::area::hour<29> 1 - NTCDirect::link::hour<29> AreaBalance::area::hour<29> -1 - NTCDirect::link::hour<29> R731 1 - NTCDirect::link::hour<29> R732 1 - PositiveUnsuppliedEnergy::area::hour<29> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<29> AreaBalance::area::hour<29> -1 - NegativeUnsuppliedEnergy::area::hour<29> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<29> AreaBalance::area::hour<29> 1 - NegativeUnsuppliedEnergy::area::hour<29> FictiveLoads::area::hour<29> 1 - PositiveUnsuppliedEnergy::area::hour<29> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<29> AreaBalance::area::hour<29> -1 - NegativeUnsuppliedEnergy::area::hour<29> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<29> AreaBalance::area::hour<29> 1 - NegativeUnsuppliedEnergy::area::hour<29> FictiveLoads::area::hour<29> 1 - NTCDirect::link::hour<30> AreaBalance::area::hour<30> 1 - NTCDirect::link::hour<30> AreaBalance::area::hour<30> -1 - NTCDirect::link::hour<30> R733 1 - NTCDirect::link::hour<30> R734 1 - PositiveUnsuppliedEnergy::area::hour<30> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<30> AreaBalance::area::hour<30> -1 - NegativeUnsuppliedEnergy::area::hour<30> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<30> AreaBalance::area::hour<30> 1 - NegativeUnsuppliedEnergy::area::hour<30> FictiveLoads::area::hour<30> 1 - PositiveUnsuppliedEnergy::area::hour<30> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<30> AreaBalance::area::hour<30> -1 - NegativeUnsuppliedEnergy::area::hour<30> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<30> AreaBalance::area::hour<30> 1 - NegativeUnsuppliedEnergy::area::hour<30> FictiveLoads::area::hour<30> 1 - NTCDirect::link::hour<31> AreaBalance::area::hour<31> 1 - NTCDirect::link::hour<31> AreaBalance::area::hour<31> -1 - NTCDirect::link::hour<31> R735 1 - NTCDirect::link::hour<31> R736 1 - PositiveUnsuppliedEnergy::area::hour<31> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<31> AreaBalance::area::hour<31> -1 - NegativeUnsuppliedEnergy::area::hour<31> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<31> AreaBalance::area::hour<31> 1 - NegativeUnsuppliedEnergy::area::hour<31> FictiveLoads::area::hour<31> 1 - PositiveUnsuppliedEnergy::area::hour<31> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<31> AreaBalance::area::hour<31> -1 - NegativeUnsuppliedEnergy::area::hour<31> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<31> AreaBalance::area::hour<31> 1 - NegativeUnsuppliedEnergy::area::hour<31> FictiveLoads::area::hour<31> 1 - NTCDirect::link::hour<32> AreaBalance::area::hour<32> 1 - NTCDirect::link::hour<32> AreaBalance::area::hour<32> -1 - NTCDirect::link::hour<32> R737 1 - NTCDirect::link::hour<32> R738 1 - PositiveUnsuppliedEnergy::area::hour<32> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<32> AreaBalance::area::hour<32> -1 - NegativeUnsuppliedEnergy::area::hour<32> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<32> AreaBalance::area::hour<32> 1 - NegativeUnsuppliedEnergy::area::hour<32> FictiveLoads::area::hour<32> 1 - PositiveUnsuppliedEnergy::area::hour<32> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<32> AreaBalance::area::hour<32> -1 - NegativeUnsuppliedEnergy::area::hour<32> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<32> AreaBalance::area::hour<32> 1 - NegativeUnsuppliedEnergy::area::hour<32> FictiveLoads::area::hour<32> 1 - NTCDirect::link::hour<33> AreaBalance::area::hour<33> 1 - NTCDirect::link::hour<33> AreaBalance::area::hour<33> -1 - NTCDirect::link::hour<33> R739 1 - NTCDirect::link::hour<33> R740 1 - PositiveUnsuppliedEnergy::area::hour<33> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<33> AreaBalance::area::hour<33> -1 - NegativeUnsuppliedEnergy::area::hour<33> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<33> AreaBalance::area::hour<33> 1 - NegativeUnsuppliedEnergy::area::hour<33> FictiveLoads::area::hour<33> 1 - PositiveUnsuppliedEnergy::area::hour<33> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<33> AreaBalance::area::hour<33> -1 - NegativeUnsuppliedEnergy::area::hour<33> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<33> AreaBalance::area::hour<33> 1 - NegativeUnsuppliedEnergy::area::hour<33> FictiveLoads::area::hour<33> 1 - NTCDirect::link::hour<34> AreaBalance::area::hour<34> 1 - NTCDirect::link::hour<34> AreaBalance::area::hour<34> -1 - NTCDirect::link::hour<34> R741 1 - NTCDirect::link::hour<34> R742 1 - PositiveUnsuppliedEnergy::area::hour<34> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<34> AreaBalance::area::hour<34> -1 - NegativeUnsuppliedEnergy::area::hour<34> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<34> AreaBalance::area::hour<34> 1 - NegativeUnsuppliedEnergy::area::hour<34> FictiveLoads::area::hour<34> 1 - PositiveUnsuppliedEnergy::area::hour<34> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<34> AreaBalance::area::hour<34> -1 - NegativeUnsuppliedEnergy::area::hour<34> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<34> AreaBalance::area::hour<34> 1 - NegativeUnsuppliedEnergy::area::hour<34> FictiveLoads::area::hour<34> 1 - NTCDirect::link::hour<35> AreaBalance::area::hour<35> 1 - NTCDirect::link::hour<35> AreaBalance::area::hour<35> -1 - NTCDirect::link::hour<35> R743 1 - NTCDirect::link::hour<35> R744 1 - PositiveUnsuppliedEnergy::area::hour<35> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<35> AreaBalance::area::hour<35> -1 - NegativeUnsuppliedEnergy::area::hour<35> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<35> AreaBalance::area::hour<35> 1 - NegativeUnsuppliedEnergy::area::hour<35> FictiveLoads::area::hour<35> 1 - PositiveUnsuppliedEnergy::area::hour<35> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<35> AreaBalance::area::hour<35> -1 - NegativeUnsuppliedEnergy::area::hour<35> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<35> AreaBalance::area::hour<35> 1 - NegativeUnsuppliedEnergy::area::hour<35> FictiveLoads::area::hour<35> 1 - NTCDirect::link::hour<36> AreaBalance::area::hour<36> 1 - NTCDirect::link::hour<36> AreaBalance::area::hour<36> -1 - NTCDirect::link::hour<36> R745 1 - NTCDirect::link::hour<36> R746 1 - PositiveUnsuppliedEnergy::area::hour<36> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<36> AreaBalance::area::hour<36> -1 - NegativeUnsuppliedEnergy::area::hour<36> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<36> AreaBalance::area::hour<36> 1 - NegativeUnsuppliedEnergy::area::hour<36> FictiveLoads::area::hour<36> 1 - PositiveUnsuppliedEnergy::area::hour<36> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<36> AreaBalance::area::hour<36> -1 - NegativeUnsuppliedEnergy::area::hour<36> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<36> AreaBalance::area::hour<36> 1 - NegativeUnsuppliedEnergy::area::hour<36> FictiveLoads::area::hour<36> 1 - NTCDirect::link::hour<37> AreaBalance::area::hour<37> 1 - NTCDirect::link::hour<37> AreaBalance::area::hour<37> -1 - NTCDirect::link::hour<37> R747 1 - NTCDirect::link::hour<37> R748 1 - PositiveUnsuppliedEnergy::area::hour<37> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<37> AreaBalance::area::hour<37> -1 - NegativeUnsuppliedEnergy::area::hour<37> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<37> AreaBalance::area::hour<37> 1 - NegativeUnsuppliedEnergy::area::hour<37> FictiveLoads::area::hour<37> 1 - PositiveUnsuppliedEnergy::area::hour<37> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<37> AreaBalance::area::hour<37> -1 - NegativeUnsuppliedEnergy::area::hour<37> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<37> AreaBalance::area::hour<37> 1 - NegativeUnsuppliedEnergy::area::hour<37> FictiveLoads::area::hour<37> 1 - NTCDirect::link::hour<38> AreaBalance::area::hour<38> 1 - NTCDirect::link::hour<38> AreaBalance::area::hour<38> -1 - NTCDirect::link::hour<38> R749 1 - NTCDirect::link::hour<38> R750 1 - PositiveUnsuppliedEnergy::area::hour<38> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<38> AreaBalance::area::hour<38> -1 - NegativeUnsuppliedEnergy::area::hour<38> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<38> AreaBalance::area::hour<38> 1 - NegativeUnsuppliedEnergy::area::hour<38> FictiveLoads::area::hour<38> 1 - PositiveUnsuppliedEnergy::area::hour<38> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<38> AreaBalance::area::hour<38> -1 - NegativeUnsuppliedEnergy::area::hour<38> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<38> AreaBalance::area::hour<38> 1 - NegativeUnsuppliedEnergy::area::hour<38> FictiveLoads::area::hour<38> 1 - NTCDirect::link::hour<39> AreaBalance::area::hour<39> 1 - NTCDirect::link::hour<39> AreaBalance::area::hour<39> -1 - NTCDirect::link::hour<39> R751 1 - NTCDirect::link::hour<39> R752 1 - PositiveUnsuppliedEnergy::area::hour<39> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<39> AreaBalance::area::hour<39> -1 - NegativeUnsuppliedEnergy::area::hour<39> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<39> AreaBalance::area::hour<39> 1 - NegativeUnsuppliedEnergy::area::hour<39> FictiveLoads::area::hour<39> 1 - PositiveUnsuppliedEnergy::area::hour<39> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<39> AreaBalance::area::hour<39> -1 - NegativeUnsuppliedEnergy::area::hour<39> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<39> AreaBalance::area::hour<39> 1 - NegativeUnsuppliedEnergy::area::hour<39> FictiveLoads::area::hour<39> 1 - NTCDirect::link::hour<40> AreaBalance::area::hour<40> 1 - NTCDirect::link::hour<40> AreaBalance::area::hour<40> -1 - NTCDirect::link::hour<40> R753 1 - NTCDirect::link::hour<40> R754 1 - PositiveUnsuppliedEnergy::area::hour<40> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<40> AreaBalance::area::hour<40> -1 - NegativeUnsuppliedEnergy::area::hour<40> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<40> AreaBalance::area::hour<40> 1 - NegativeUnsuppliedEnergy::area::hour<40> FictiveLoads::area::hour<40> 1 - PositiveUnsuppliedEnergy::area::hour<40> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<40> AreaBalance::area::hour<40> -1 - NegativeUnsuppliedEnergy::area::hour<40> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<40> AreaBalance::area::hour<40> 1 - NegativeUnsuppliedEnergy::area::hour<40> FictiveLoads::area::hour<40> 1 - NTCDirect::link::hour<41> AreaBalance::area::hour<41> 1 - NTCDirect::link::hour<41> AreaBalance::area::hour<41> -1 - NTCDirect::link::hour<41> R755 1 - NTCDirect::link::hour<41> R756 1 - PositiveUnsuppliedEnergy::area::hour<41> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<41> AreaBalance::area::hour<41> -1 - NegativeUnsuppliedEnergy::area::hour<41> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<41> AreaBalance::area::hour<41> 1 - NegativeUnsuppliedEnergy::area::hour<41> FictiveLoads::area::hour<41> 1 - PositiveUnsuppliedEnergy::area::hour<41> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<41> AreaBalance::area::hour<41> -1 - NegativeUnsuppliedEnergy::area::hour<41> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<41> AreaBalance::area::hour<41> 1 - NegativeUnsuppliedEnergy::area::hour<41> FictiveLoads::area::hour<41> 1 - NTCDirect::link::hour<42> AreaBalance::area::hour<42> 1 - NTCDirect::link::hour<42> AreaBalance::area::hour<42> -1 - NTCDirect::link::hour<42> R757 1 - NTCDirect::link::hour<42> R758 1 - PositiveUnsuppliedEnergy::area::hour<42> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<42> AreaBalance::area::hour<42> -1 - NegativeUnsuppliedEnergy::area::hour<42> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<42> AreaBalance::area::hour<42> 1 - NegativeUnsuppliedEnergy::area::hour<42> FictiveLoads::area::hour<42> 1 - PositiveUnsuppliedEnergy::area::hour<42> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<42> AreaBalance::area::hour<42> -1 - NegativeUnsuppliedEnergy::area::hour<42> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<42> AreaBalance::area::hour<42> 1 - NegativeUnsuppliedEnergy::area::hour<42> FictiveLoads::area::hour<42> 1 - NTCDirect::link::hour<43> AreaBalance::area::hour<43> 1 - NTCDirect::link::hour<43> AreaBalance::area::hour<43> -1 - NTCDirect::link::hour<43> R759 1 - NTCDirect::link::hour<43> R760 1 - PositiveUnsuppliedEnergy::area::hour<43> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<43> AreaBalance::area::hour<43> -1 - NegativeUnsuppliedEnergy::area::hour<43> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<43> AreaBalance::area::hour<43> 1 - NegativeUnsuppliedEnergy::area::hour<43> FictiveLoads::area::hour<43> 1 - PositiveUnsuppliedEnergy::area::hour<43> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<43> AreaBalance::area::hour<43> -1 - NegativeUnsuppliedEnergy::area::hour<43> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<43> AreaBalance::area::hour<43> 1 - NegativeUnsuppliedEnergy::area::hour<43> FictiveLoads::area::hour<43> 1 - NTCDirect::link::hour<44> AreaBalance::area::hour<44> 1 - NTCDirect::link::hour<44> AreaBalance::area::hour<44> -1 - NTCDirect::link::hour<44> R761 1 - NTCDirect::link::hour<44> R762 1 - PositiveUnsuppliedEnergy::area::hour<44> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<44> AreaBalance::area::hour<44> -1 - NegativeUnsuppliedEnergy::area::hour<44> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<44> AreaBalance::area::hour<44> 1 - NegativeUnsuppliedEnergy::area::hour<44> FictiveLoads::area::hour<44> 1 - PositiveUnsuppliedEnergy::area::hour<44> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<44> AreaBalance::area::hour<44> -1 - NegativeUnsuppliedEnergy::area::hour<44> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<44> AreaBalance::area::hour<44> 1 - NegativeUnsuppliedEnergy::area::hour<44> FictiveLoads::area::hour<44> 1 - NTCDirect::link::hour<45> AreaBalance::area::hour<45> 1 - NTCDirect::link::hour<45> AreaBalance::area::hour<45> -1 - NTCDirect::link::hour<45> R763 1 - NTCDirect::link::hour<45> R764 1 - PositiveUnsuppliedEnergy::area::hour<45> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<45> AreaBalance::area::hour<45> -1 - NegativeUnsuppliedEnergy::area::hour<45> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<45> AreaBalance::area::hour<45> 1 - NegativeUnsuppliedEnergy::area::hour<45> FictiveLoads::area::hour<45> 1 - PositiveUnsuppliedEnergy::area::hour<45> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<45> AreaBalance::area::hour<45> -1 - NegativeUnsuppliedEnergy::area::hour<45> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<45> AreaBalance::area::hour<45> 1 - NegativeUnsuppliedEnergy::area::hour<45> FictiveLoads::area::hour<45> 1 - NTCDirect::link::hour<46> AreaBalance::area::hour<46> 1 - NTCDirect::link::hour<46> AreaBalance::area::hour<46> -1 - NTCDirect::link::hour<46> R765 1 - NTCDirect::link::hour<46> R766 1 - PositiveUnsuppliedEnergy::area::hour<46> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<46> AreaBalance::area::hour<46> -1 - NegativeUnsuppliedEnergy::area::hour<46> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<46> AreaBalance::area::hour<46> 1 - NegativeUnsuppliedEnergy::area::hour<46> FictiveLoads::area::hour<46> 1 - PositiveUnsuppliedEnergy::area::hour<46> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<46> AreaBalance::area::hour<46> -1 - NegativeUnsuppliedEnergy::area::hour<46> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<46> AreaBalance::area::hour<46> 1 - NegativeUnsuppliedEnergy::area::hour<46> FictiveLoads::area::hour<46> 1 - NTCDirect::link::hour<47> AreaBalance::area::hour<47> 1 - NTCDirect::link::hour<47> AreaBalance::area::hour<47> -1 - NTCDirect::link::hour<47> R767 1 - NTCDirect::link::hour<47> R768 1 - PositiveUnsuppliedEnergy::area::hour<47> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<47> AreaBalance::area::hour<47> -1 - NegativeUnsuppliedEnergy::area::hour<47> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<47> AreaBalance::area::hour<47> 1 - NegativeUnsuppliedEnergy::area::hour<47> FictiveLoads::area::hour<47> 1 - PositiveUnsuppliedEnergy::area::hour<47> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<47> AreaBalance::area::hour<47> -1 - NegativeUnsuppliedEnergy::area::hour<47> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<47> AreaBalance::area::hour<47> 1 - NegativeUnsuppliedEnergy::area::hour<47> FictiveLoads::area::hour<47> 1 - NTCDirect::link::hour<48> AreaBalance::area::hour<48> 1 - NTCDirect::link::hour<48> AreaBalance::area::hour<48> -1 - NTCDirect::link::hour<48> R769 1 - NTCDirect::link::hour<48> R770 1 - PositiveUnsuppliedEnergy::area::hour<48> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<48> AreaBalance::area::hour<48> -1 - NegativeUnsuppliedEnergy::area::hour<48> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<48> AreaBalance::area::hour<48> 1 - NegativeUnsuppliedEnergy::area::hour<48> FictiveLoads::area::hour<48> 1 - PositiveUnsuppliedEnergy::area::hour<48> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<48> AreaBalance::area::hour<48> -1 - NegativeUnsuppliedEnergy::area::hour<48> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<48> AreaBalance::area::hour<48> 1 - NegativeUnsuppliedEnergy::area::hour<48> FictiveLoads::area::hour<48> 1 - NTCDirect::link::hour<49> AreaBalance::area::hour<49> 1 - NTCDirect::link::hour<49> AreaBalance::area::hour<49> -1 - NTCDirect::link::hour<49> R771 1 - NTCDirect::link::hour<49> R772 1 - PositiveUnsuppliedEnergy::area::hour<49> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<49> AreaBalance::area::hour<49> -1 - NegativeUnsuppliedEnergy::area::hour<49> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<49> AreaBalance::area::hour<49> 1 - NegativeUnsuppliedEnergy::area::hour<49> FictiveLoads::area::hour<49> 1 - PositiveUnsuppliedEnergy::area::hour<49> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<49> AreaBalance::area::hour<49> -1 - NegativeUnsuppliedEnergy::area::hour<49> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<49> AreaBalance::area::hour<49> 1 - NegativeUnsuppliedEnergy::area::hour<49> FictiveLoads::area::hour<49> 1 - NTCDirect::link::hour<50> AreaBalance::area::hour<50> 1 - NTCDirect::link::hour<50> AreaBalance::area::hour<50> -1 - NTCDirect::link::hour<50> R773 1 - NTCDirect::link::hour<50> R774 1 - PositiveUnsuppliedEnergy::area::hour<50> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<50> AreaBalance::area::hour<50> -1 - NegativeUnsuppliedEnergy::area::hour<50> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<50> AreaBalance::area::hour<50> 1 - NegativeUnsuppliedEnergy::area::hour<50> FictiveLoads::area::hour<50> 1 - PositiveUnsuppliedEnergy::area::hour<50> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<50> AreaBalance::area::hour<50> -1 - NegativeUnsuppliedEnergy::area::hour<50> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<50> AreaBalance::area::hour<50> 1 - NegativeUnsuppliedEnergy::area::hour<50> FictiveLoads::area::hour<50> 1 - NTCDirect::link::hour<51> AreaBalance::area::hour<51> 1 - NTCDirect::link::hour<51> AreaBalance::area::hour<51> -1 - NTCDirect::link::hour<51> R775 1 - NTCDirect::link::hour<51> R776 1 - PositiveUnsuppliedEnergy::area::hour<51> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<51> AreaBalance::area::hour<51> -1 - NegativeUnsuppliedEnergy::area::hour<51> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<51> AreaBalance::area::hour<51> 1 - NegativeUnsuppliedEnergy::area::hour<51> FictiveLoads::area::hour<51> 1 - PositiveUnsuppliedEnergy::area::hour<51> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<51> AreaBalance::area::hour<51> -1 - NegativeUnsuppliedEnergy::area::hour<51> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<51> AreaBalance::area::hour<51> 1 - NegativeUnsuppliedEnergy::area::hour<51> FictiveLoads::area::hour<51> 1 - NTCDirect::link::hour<52> AreaBalance::area::hour<52> 1 - NTCDirect::link::hour<52> AreaBalance::area::hour<52> -1 - NTCDirect::link::hour<52> R777 1 - NTCDirect::link::hour<52> R778 1 - PositiveUnsuppliedEnergy::area::hour<52> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<52> AreaBalance::area::hour<52> -1 - NegativeUnsuppliedEnergy::area::hour<52> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<52> AreaBalance::area::hour<52> 1 - NegativeUnsuppliedEnergy::area::hour<52> FictiveLoads::area::hour<52> 1 - PositiveUnsuppliedEnergy::area::hour<52> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<52> AreaBalance::area::hour<52> -1 - NegativeUnsuppliedEnergy::area::hour<52> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<52> AreaBalance::area::hour<52> 1 - NegativeUnsuppliedEnergy::area::hour<52> FictiveLoads::area::hour<52> 1 - NTCDirect::link::hour<53> AreaBalance::area::hour<53> 1 - NTCDirect::link::hour<53> AreaBalance::area::hour<53> -1 - NTCDirect::link::hour<53> R779 1 - NTCDirect::link::hour<53> R780 1 - PositiveUnsuppliedEnergy::area::hour<53> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<53> AreaBalance::area::hour<53> -1 - NegativeUnsuppliedEnergy::area::hour<53> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<53> AreaBalance::area::hour<53> 1 - NegativeUnsuppliedEnergy::area::hour<53> FictiveLoads::area::hour<53> 1 - PositiveUnsuppliedEnergy::area::hour<53> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<53> AreaBalance::area::hour<53> -1 - NegativeUnsuppliedEnergy::area::hour<53> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<53> AreaBalance::area::hour<53> 1 - NegativeUnsuppliedEnergy::area::hour<53> FictiveLoads::area::hour<53> 1 - NTCDirect::link::hour<54> AreaBalance::area::hour<54> 1 - NTCDirect::link::hour<54> AreaBalance::area::hour<54> -1 - NTCDirect::link::hour<54> R781 1 - NTCDirect::link::hour<54> R782 1 - PositiveUnsuppliedEnergy::area::hour<54> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<54> AreaBalance::area::hour<54> -1 - NegativeUnsuppliedEnergy::area::hour<54> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<54> AreaBalance::area::hour<54> 1 - NegativeUnsuppliedEnergy::area::hour<54> FictiveLoads::area::hour<54> 1 - PositiveUnsuppliedEnergy::area::hour<54> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<54> AreaBalance::area::hour<54> -1 - NegativeUnsuppliedEnergy::area::hour<54> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<54> AreaBalance::area::hour<54> 1 - NegativeUnsuppliedEnergy::area::hour<54> FictiveLoads::area::hour<54> 1 - NTCDirect::link::hour<55> AreaBalance::area::hour<55> 1 - NTCDirect::link::hour<55> AreaBalance::area::hour<55> -1 - NTCDirect::link::hour<55> R783 1 - NTCDirect::link::hour<55> R784 1 - PositiveUnsuppliedEnergy::area::hour<55> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<55> AreaBalance::area::hour<55> -1 - NegativeUnsuppliedEnergy::area::hour<55> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<55> AreaBalance::area::hour<55> 1 - NegativeUnsuppliedEnergy::area::hour<55> FictiveLoads::area::hour<55> 1 - PositiveUnsuppliedEnergy::area::hour<55> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<55> AreaBalance::area::hour<55> -1 - NegativeUnsuppliedEnergy::area::hour<55> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<55> AreaBalance::area::hour<55> 1 - NegativeUnsuppliedEnergy::area::hour<55> FictiveLoads::area::hour<55> 1 - NTCDirect::link::hour<56> AreaBalance::area::hour<56> 1 - NTCDirect::link::hour<56> AreaBalance::area::hour<56> -1 - NTCDirect::link::hour<56> R785 1 - NTCDirect::link::hour<56> R786 1 - PositiveUnsuppliedEnergy::area::hour<56> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<56> AreaBalance::area::hour<56> -1 - NegativeUnsuppliedEnergy::area::hour<56> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<56> AreaBalance::area::hour<56> 1 - NegativeUnsuppliedEnergy::area::hour<56> FictiveLoads::area::hour<56> 1 - PositiveUnsuppliedEnergy::area::hour<56> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<56> AreaBalance::area::hour<56> -1 - NegativeUnsuppliedEnergy::area::hour<56> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<56> AreaBalance::area::hour<56> 1 - NegativeUnsuppliedEnergy::area::hour<56> FictiveLoads::area::hour<56> 1 - NTCDirect::link::hour<57> AreaBalance::area::hour<57> 1 - NTCDirect::link::hour<57> AreaBalance::area::hour<57> -1 - NTCDirect::link::hour<57> R787 1 - NTCDirect::link::hour<57> R788 1 - PositiveUnsuppliedEnergy::area::hour<57> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<57> AreaBalance::area::hour<57> -1 - NegativeUnsuppliedEnergy::area::hour<57> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<57> AreaBalance::area::hour<57> 1 - NegativeUnsuppliedEnergy::area::hour<57> FictiveLoads::area::hour<57> 1 - PositiveUnsuppliedEnergy::area::hour<57> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<57> AreaBalance::area::hour<57> -1 - NegativeUnsuppliedEnergy::area::hour<57> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<57> AreaBalance::area::hour<57> 1 - NegativeUnsuppliedEnergy::area::hour<57> FictiveLoads::area::hour<57> 1 - NTCDirect::link::hour<58> AreaBalance::area::hour<58> 1 - NTCDirect::link::hour<58> AreaBalance::area::hour<58> -1 - NTCDirect::link::hour<58> R789 1 - NTCDirect::link::hour<58> R790 1 - PositiveUnsuppliedEnergy::area::hour<58> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<58> AreaBalance::area::hour<58> -1 - NegativeUnsuppliedEnergy::area::hour<58> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<58> AreaBalance::area::hour<58> 1 - NegativeUnsuppliedEnergy::area::hour<58> FictiveLoads::area::hour<58> 1 - PositiveUnsuppliedEnergy::area::hour<58> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<58> AreaBalance::area::hour<58> -1 - NegativeUnsuppliedEnergy::area::hour<58> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<58> AreaBalance::area::hour<58> 1 - NegativeUnsuppliedEnergy::area::hour<58> FictiveLoads::area::hour<58> 1 - NTCDirect::link::hour<59> AreaBalance::area::hour<59> 1 - NTCDirect::link::hour<59> AreaBalance::area::hour<59> -1 - NTCDirect::link::hour<59> R791 1 - NTCDirect::link::hour<59> R792 1 - PositiveUnsuppliedEnergy::area::hour<59> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<59> AreaBalance::area::hour<59> -1 - NegativeUnsuppliedEnergy::area::hour<59> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<59> AreaBalance::area::hour<59> 1 - NegativeUnsuppliedEnergy::area::hour<59> FictiveLoads::area::hour<59> 1 - PositiveUnsuppliedEnergy::area::hour<59> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<59> AreaBalance::area::hour<59> -1 - NegativeUnsuppliedEnergy::area::hour<59> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<59> AreaBalance::area::hour<59> 1 - NegativeUnsuppliedEnergy::area::hour<59> FictiveLoads::area::hour<59> 1 - NTCDirect::link::hour<60> AreaBalance::area::hour<60> 1 - NTCDirect::link::hour<60> AreaBalance::area::hour<60> -1 - NTCDirect::link::hour<60> R793 1 - NTCDirect::link::hour<60> R794 1 - PositiveUnsuppliedEnergy::area::hour<60> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<60> AreaBalance::area::hour<60> -1 - NegativeUnsuppliedEnergy::area::hour<60> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<60> AreaBalance::area::hour<60> 1 - NegativeUnsuppliedEnergy::area::hour<60> FictiveLoads::area::hour<60> 1 - PositiveUnsuppliedEnergy::area::hour<60> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<60> AreaBalance::area::hour<60> -1 - NegativeUnsuppliedEnergy::area::hour<60> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<60> AreaBalance::area::hour<60> 1 - NegativeUnsuppliedEnergy::area::hour<60> FictiveLoads::area::hour<60> 1 - NTCDirect::link::hour<61> AreaBalance::area::hour<61> 1 - NTCDirect::link::hour<61> AreaBalance::area::hour<61> -1 - NTCDirect::link::hour<61> R795 1 - NTCDirect::link::hour<61> R796 1 - PositiveUnsuppliedEnergy::area::hour<61> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<61> AreaBalance::area::hour<61> -1 - NegativeUnsuppliedEnergy::area::hour<61> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<61> AreaBalance::area::hour<61> 1 - NegativeUnsuppliedEnergy::area::hour<61> FictiveLoads::area::hour<61> 1 - PositiveUnsuppliedEnergy::area::hour<61> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<61> AreaBalance::area::hour<61> -1 - NegativeUnsuppliedEnergy::area::hour<61> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<61> AreaBalance::area::hour<61> 1 - NegativeUnsuppliedEnergy::area::hour<61> FictiveLoads::area::hour<61> 1 - NTCDirect::link::hour<62> AreaBalance::area::hour<62> 1 - NTCDirect::link::hour<62> AreaBalance::area::hour<62> -1 - NTCDirect::link::hour<62> R797 1 - NTCDirect::link::hour<62> R798 1 - PositiveUnsuppliedEnergy::area::hour<62> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<62> AreaBalance::area::hour<62> -1 - NegativeUnsuppliedEnergy::area::hour<62> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<62> AreaBalance::area::hour<62> 1 - NegativeUnsuppliedEnergy::area::hour<62> FictiveLoads::area::hour<62> 1 - PositiveUnsuppliedEnergy::area::hour<62> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<62> AreaBalance::area::hour<62> -1 - NegativeUnsuppliedEnergy::area::hour<62> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<62> AreaBalance::area::hour<62> 1 - NegativeUnsuppliedEnergy::area::hour<62> FictiveLoads::area::hour<62> 1 - NTCDirect::link::hour<63> AreaBalance::area::hour<63> 1 - NTCDirect::link::hour<63> AreaBalance::area::hour<63> -1 - NTCDirect::link::hour<63> R799 1 - NTCDirect::link::hour<63> R800 1 - PositiveUnsuppliedEnergy::area::hour<63> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<63> AreaBalance::area::hour<63> -1 - NegativeUnsuppliedEnergy::area::hour<63> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<63> AreaBalance::area::hour<63> 1 - NegativeUnsuppliedEnergy::area::hour<63> FictiveLoads::area::hour<63> 1 - PositiveUnsuppliedEnergy::area::hour<63> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<63> AreaBalance::area::hour<63> -1 - NegativeUnsuppliedEnergy::area::hour<63> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<63> AreaBalance::area::hour<63> 1 - NegativeUnsuppliedEnergy::area::hour<63> FictiveLoads::area::hour<63> 1 - NTCDirect::link::hour<64> AreaBalance::area::hour<64> 1 - NTCDirect::link::hour<64> AreaBalance::area::hour<64> -1 - NTCDirect::link::hour<64> R801 1 - NTCDirect::link::hour<64> R802 1 - PositiveUnsuppliedEnergy::area::hour<64> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<64> AreaBalance::area::hour<64> -1 - NegativeUnsuppliedEnergy::area::hour<64> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<64> AreaBalance::area::hour<64> 1 - NegativeUnsuppliedEnergy::area::hour<64> FictiveLoads::area::hour<64> 1 - PositiveUnsuppliedEnergy::area::hour<64> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<64> AreaBalance::area::hour<64> -1 - NegativeUnsuppliedEnergy::area::hour<64> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<64> AreaBalance::area::hour<64> 1 - NegativeUnsuppliedEnergy::area::hour<64> FictiveLoads::area::hour<64> 1 - NTCDirect::link::hour<65> AreaBalance::area::hour<65> 1 - NTCDirect::link::hour<65> AreaBalance::area::hour<65> -1 - NTCDirect::link::hour<65> R803 1 - NTCDirect::link::hour<65> R804 1 - PositiveUnsuppliedEnergy::area::hour<65> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<65> AreaBalance::area::hour<65> -1 - NegativeUnsuppliedEnergy::area::hour<65> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<65> AreaBalance::area::hour<65> 1 - NegativeUnsuppliedEnergy::area::hour<65> FictiveLoads::area::hour<65> 1 - PositiveUnsuppliedEnergy::area::hour<65> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<65> AreaBalance::area::hour<65> -1 - NegativeUnsuppliedEnergy::area::hour<65> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<65> AreaBalance::area::hour<65> 1 - NegativeUnsuppliedEnergy::area::hour<65> FictiveLoads::area::hour<65> 1 - NTCDirect::link::hour<66> AreaBalance::area::hour<66> 1 - NTCDirect::link::hour<66> AreaBalance::area::hour<66> -1 - NTCDirect::link::hour<66> R805 1 - NTCDirect::link::hour<66> R806 1 - PositiveUnsuppliedEnergy::area::hour<66> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<66> AreaBalance::area::hour<66> -1 - NegativeUnsuppliedEnergy::area::hour<66> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<66> AreaBalance::area::hour<66> 1 - NegativeUnsuppliedEnergy::area::hour<66> FictiveLoads::area::hour<66> 1 - PositiveUnsuppliedEnergy::area::hour<66> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<66> AreaBalance::area::hour<66> -1 - NegativeUnsuppliedEnergy::area::hour<66> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<66> AreaBalance::area::hour<66> 1 - NegativeUnsuppliedEnergy::area::hour<66> FictiveLoads::area::hour<66> 1 - NTCDirect::link::hour<67> AreaBalance::area::hour<67> 1 - NTCDirect::link::hour<67> AreaBalance::area::hour<67> -1 - NTCDirect::link::hour<67> R807 1 - NTCDirect::link::hour<67> R808 1 - PositiveUnsuppliedEnergy::area::hour<67> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<67> AreaBalance::area::hour<67> -1 - NegativeUnsuppliedEnergy::area::hour<67> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<67> AreaBalance::area::hour<67> 1 - NegativeUnsuppliedEnergy::area::hour<67> FictiveLoads::area::hour<67> 1 - PositiveUnsuppliedEnergy::area::hour<67> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<67> AreaBalance::area::hour<67> -1 - NegativeUnsuppliedEnergy::area::hour<67> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<67> AreaBalance::area::hour<67> 1 - NegativeUnsuppliedEnergy::area::hour<67> FictiveLoads::area::hour<67> 1 - NTCDirect::link::hour<68> AreaBalance::area::hour<68> 1 - NTCDirect::link::hour<68> AreaBalance::area::hour<68> -1 - NTCDirect::link::hour<68> R809 1 - NTCDirect::link::hour<68> R810 1 - PositiveUnsuppliedEnergy::area::hour<68> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<68> AreaBalance::area::hour<68> -1 - NegativeUnsuppliedEnergy::area::hour<68> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<68> AreaBalance::area::hour<68> 1 - NegativeUnsuppliedEnergy::area::hour<68> FictiveLoads::area::hour<68> 1 - PositiveUnsuppliedEnergy::area::hour<68> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<68> AreaBalance::area::hour<68> -1 - NegativeUnsuppliedEnergy::area::hour<68> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<68> AreaBalance::area::hour<68> 1 - NegativeUnsuppliedEnergy::area::hour<68> FictiveLoads::area::hour<68> 1 - NTCDirect::link::hour<69> AreaBalance::area::hour<69> 1 - NTCDirect::link::hour<69> AreaBalance::area::hour<69> -1 - NTCDirect::link::hour<69> R811 1 - NTCDirect::link::hour<69> R812 1 - PositiveUnsuppliedEnergy::area::hour<69> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<69> AreaBalance::area::hour<69> -1 - NegativeUnsuppliedEnergy::area::hour<69> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<69> AreaBalance::area::hour<69> 1 - NegativeUnsuppliedEnergy::area::hour<69> FictiveLoads::area::hour<69> 1 - PositiveUnsuppliedEnergy::area::hour<69> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<69> AreaBalance::area::hour<69> -1 - NegativeUnsuppliedEnergy::area::hour<69> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<69> AreaBalance::area::hour<69> 1 - NegativeUnsuppliedEnergy::area::hour<69> FictiveLoads::area::hour<69> 1 - NTCDirect::link::hour<70> AreaBalance::area::hour<70> 1 - NTCDirect::link::hour<70> AreaBalance::area::hour<70> -1 - NTCDirect::link::hour<70> R813 1 - NTCDirect::link::hour<70> R814 1 - PositiveUnsuppliedEnergy::area::hour<70> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<70> AreaBalance::area::hour<70> -1 - NegativeUnsuppliedEnergy::area::hour<70> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<70> AreaBalance::area::hour<70> 1 - NegativeUnsuppliedEnergy::area::hour<70> FictiveLoads::area::hour<70> 1 - PositiveUnsuppliedEnergy::area::hour<70> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<70> AreaBalance::area::hour<70> -1 - NegativeUnsuppliedEnergy::area::hour<70> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<70> AreaBalance::area::hour<70> 1 - NegativeUnsuppliedEnergy::area::hour<70> FictiveLoads::area::hour<70> 1 - NTCDirect::link::hour<71> AreaBalance::area::hour<71> 1 - NTCDirect::link::hour<71> AreaBalance::area::hour<71> -1 - NTCDirect::link::hour<71> R815 1 - NTCDirect::link::hour<71> R816 1 - PositiveUnsuppliedEnergy::area::hour<71> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<71> AreaBalance::area::hour<71> -1 - NegativeUnsuppliedEnergy::area::hour<71> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<71> AreaBalance::area::hour<71> 1 - NegativeUnsuppliedEnergy::area::hour<71> FictiveLoads::area::hour<71> 1 - PositiveUnsuppliedEnergy::area::hour<71> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<71> AreaBalance::area::hour<71> -1 - NegativeUnsuppliedEnergy::area::hour<71> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<71> AreaBalance::area::hour<71> 1 - NegativeUnsuppliedEnergy::area::hour<71> FictiveLoads::area::hour<71> 1 - NTCDirect::link::hour<72> AreaBalance::area::hour<72> 1 - NTCDirect::link::hour<72> AreaBalance::area::hour<72> -1 - NTCDirect::link::hour<72> R817 1 - NTCDirect::link::hour<72> R818 1 - PositiveUnsuppliedEnergy::area::hour<72> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<72> AreaBalance::area::hour<72> -1 - NegativeUnsuppliedEnergy::area::hour<72> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<72> AreaBalance::area::hour<72> 1 - NegativeUnsuppliedEnergy::area::hour<72> FictiveLoads::area::hour<72> 1 - PositiveUnsuppliedEnergy::area::hour<72> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<72> AreaBalance::area::hour<72> -1 - NegativeUnsuppliedEnergy::area::hour<72> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<72> AreaBalance::area::hour<72> 1 - NegativeUnsuppliedEnergy::area::hour<72> FictiveLoads::area::hour<72> 1 - NTCDirect::link::hour<73> AreaBalance::area::hour<73> 1 - NTCDirect::link::hour<73> AreaBalance::area::hour<73> -1 - NTCDirect::link::hour<73> R819 1 - NTCDirect::link::hour<73> R820 1 - PositiveUnsuppliedEnergy::area::hour<73> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<73> AreaBalance::area::hour<73> -1 - NegativeUnsuppliedEnergy::area::hour<73> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<73> AreaBalance::area::hour<73> 1 - NegativeUnsuppliedEnergy::area::hour<73> FictiveLoads::area::hour<73> 1 - PositiveUnsuppliedEnergy::area::hour<73> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<73> AreaBalance::area::hour<73> -1 - NegativeUnsuppliedEnergy::area::hour<73> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<73> AreaBalance::area::hour<73> 1 - NegativeUnsuppliedEnergy::area::hour<73> FictiveLoads::area::hour<73> 1 - NTCDirect::link::hour<74> AreaBalance::area::hour<74> 1 - NTCDirect::link::hour<74> AreaBalance::area::hour<74> -1 - NTCDirect::link::hour<74> R821 1 - NTCDirect::link::hour<74> R822 1 - PositiveUnsuppliedEnergy::area::hour<74> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<74> AreaBalance::area::hour<74> -1 - NegativeUnsuppliedEnergy::area::hour<74> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<74> AreaBalance::area::hour<74> 1 - NegativeUnsuppliedEnergy::area::hour<74> FictiveLoads::area::hour<74> 1 - PositiveUnsuppliedEnergy::area::hour<74> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<74> AreaBalance::area::hour<74> -1 - NegativeUnsuppliedEnergy::area::hour<74> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<74> AreaBalance::area::hour<74> 1 - NegativeUnsuppliedEnergy::area::hour<74> FictiveLoads::area::hour<74> 1 - NTCDirect::link::hour<75> AreaBalance::area::hour<75> 1 - NTCDirect::link::hour<75> AreaBalance::area::hour<75> -1 - NTCDirect::link::hour<75> R823 1 - NTCDirect::link::hour<75> R824 1 - PositiveUnsuppliedEnergy::area::hour<75> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<75> AreaBalance::area::hour<75> -1 - NegativeUnsuppliedEnergy::area::hour<75> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<75> AreaBalance::area::hour<75> 1 - NegativeUnsuppliedEnergy::area::hour<75> FictiveLoads::area::hour<75> 1 - PositiveUnsuppliedEnergy::area::hour<75> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<75> AreaBalance::area::hour<75> -1 - NegativeUnsuppliedEnergy::area::hour<75> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<75> AreaBalance::area::hour<75> 1 - NegativeUnsuppliedEnergy::area::hour<75> FictiveLoads::area::hour<75> 1 - NTCDirect::link::hour<76> AreaBalance::area::hour<76> 1 - NTCDirect::link::hour<76> AreaBalance::area::hour<76> -1 - NTCDirect::link::hour<76> R825 1 - NTCDirect::link::hour<76> R826 1 - PositiveUnsuppliedEnergy::area::hour<76> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<76> AreaBalance::area::hour<76> -1 - NegativeUnsuppliedEnergy::area::hour<76> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<76> AreaBalance::area::hour<76> 1 - NegativeUnsuppliedEnergy::area::hour<76> FictiveLoads::area::hour<76> 1 - PositiveUnsuppliedEnergy::area::hour<76> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<76> AreaBalance::area::hour<76> -1 - NegativeUnsuppliedEnergy::area::hour<76> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<76> AreaBalance::area::hour<76> 1 - NegativeUnsuppliedEnergy::area::hour<76> FictiveLoads::area::hour<76> 1 - NTCDirect::link::hour<77> AreaBalance::area::hour<77> 1 - NTCDirect::link::hour<77> AreaBalance::area::hour<77> -1 - NTCDirect::link::hour<77> R827 1 - NTCDirect::link::hour<77> R828 1 - PositiveUnsuppliedEnergy::area::hour<77> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<77> AreaBalance::area::hour<77> -1 - NegativeUnsuppliedEnergy::area::hour<77> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<77> AreaBalance::area::hour<77> 1 - NegativeUnsuppliedEnergy::area::hour<77> FictiveLoads::area::hour<77> 1 - PositiveUnsuppliedEnergy::area::hour<77> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<77> AreaBalance::area::hour<77> -1 - NegativeUnsuppliedEnergy::area::hour<77> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<77> AreaBalance::area::hour<77> 1 - NegativeUnsuppliedEnergy::area::hour<77> FictiveLoads::area::hour<77> 1 - NTCDirect::link::hour<78> AreaBalance::area::hour<78> 1 - NTCDirect::link::hour<78> AreaBalance::area::hour<78> -1 - NTCDirect::link::hour<78> R829 1 - NTCDirect::link::hour<78> R830 1 - PositiveUnsuppliedEnergy::area::hour<78> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<78> AreaBalance::area::hour<78> -1 - NegativeUnsuppliedEnergy::area::hour<78> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<78> AreaBalance::area::hour<78> 1 - NegativeUnsuppliedEnergy::area::hour<78> FictiveLoads::area::hour<78> 1 - PositiveUnsuppliedEnergy::area::hour<78> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<78> AreaBalance::area::hour<78> -1 - NegativeUnsuppliedEnergy::area::hour<78> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<78> AreaBalance::area::hour<78> 1 - NegativeUnsuppliedEnergy::area::hour<78> FictiveLoads::area::hour<78> 1 - NTCDirect::link::hour<79> AreaBalance::area::hour<79> 1 - NTCDirect::link::hour<79> AreaBalance::area::hour<79> -1 - NTCDirect::link::hour<79> R831 1 - NTCDirect::link::hour<79> R832 1 - PositiveUnsuppliedEnergy::area::hour<79> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<79> AreaBalance::area::hour<79> -1 - NegativeUnsuppliedEnergy::area::hour<79> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<79> AreaBalance::area::hour<79> 1 - NegativeUnsuppliedEnergy::area::hour<79> FictiveLoads::area::hour<79> 1 - PositiveUnsuppliedEnergy::area::hour<79> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<79> AreaBalance::area::hour<79> -1 - NegativeUnsuppliedEnergy::area::hour<79> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<79> AreaBalance::area::hour<79> 1 - NegativeUnsuppliedEnergy::area::hour<79> FictiveLoads::area::hour<79> 1 - NTCDirect::link::hour<80> AreaBalance::area::hour<80> 1 - NTCDirect::link::hour<80> AreaBalance::area::hour<80> -1 - NTCDirect::link::hour<80> R833 1 - NTCDirect::link::hour<80> R834 1 - PositiveUnsuppliedEnergy::area::hour<80> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<80> AreaBalance::area::hour<80> -1 - NegativeUnsuppliedEnergy::area::hour<80> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<80> AreaBalance::area::hour<80> 1 - NegativeUnsuppliedEnergy::area::hour<80> FictiveLoads::area::hour<80> 1 - PositiveUnsuppliedEnergy::area::hour<80> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<80> AreaBalance::area::hour<80> -1 - NegativeUnsuppliedEnergy::area::hour<80> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<80> AreaBalance::area::hour<80> 1 - NegativeUnsuppliedEnergy::area::hour<80> FictiveLoads::area::hour<80> 1 - NTCDirect::link::hour<81> AreaBalance::area::hour<81> 1 - NTCDirect::link::hour<81> AreaBalance::area::hour<81> -1 - NTCDirect::link::hour<81> R835 1 - NTCDirect::link::hour<81> R836 1 - PositiveUnsuppliedEnergy::area::hour<81> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<81> AreaBalance::area::hour<81> -1 - NegativeUnsuppliedEnergy::area::hour<81> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<81> AreaBalance::area::hour<81> 1 - NegativeUnsuppliedEnergy::area::hour<81> FictiveLoads::area::hour<81> 1 - PositiveUnsuppliedEnergy::area::hour<81> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<81> AreaBalance::area::hour<81> -1 - NegativeUnsuppliedEnergy::area::hour<81> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<81> AreaBalance::area::hour<81> 1 - NegativeUnsuppliedEnergy::area::hour<81> FictiveLoads::area::hour<81> 1 - NTCDirect::link::hour<82> AreaBalance::area::hour<82> 1 - NTCDirect::link::hour<82> AreaBalance::area::hour<82> -1 - NTCDirect::link::hour<82> R837 1 - NTCDirect::link::hour<82> R838 1 - PositiveUnsuppliedEnergy::area::hour<82> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<82> AreaBalance::area::hour<82> -1 - NegativeUnsuppliedEnergy::area::hour<82> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<82> AreaBalance::area::hour<82> 1 - NegativeUnsuppliedEnergy::area::hour<82> FictiveLoads::area::hour<82> 1 - PositiveUnsuppliedEnergy::area::hour<82> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<82> AreaBalance::area::hour<82> -1 - NegativeUnsuppliedEnergy::area::hour<82> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<82> AreaBalance::area::hour<82> 1 - NegativeUnsuppliedEnergy::area::hour<82> FictiveLoads::area::hour<82> 1 - NTCDirect::link::hour<83> AreaBalance::area::hour<83> 1 - NTCDirect::link::hour<83> AreaBalance::area::hour<83> -1 - NTCDirect::link::hour<83> R839 1 - NTCDirect::link::hour<83> R840 1 - PositiveUnsuppliedEnergy::area::hour<83> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<83> AreaBalance::area::hour<83> -1 - NegativeUnsuppliedEnergy::area::hour<83> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<83> AreaBalance::area::hour<83> 1 - NegativeUnsuppliedEnergy::area::hour<83> FictiveLoads::area::hour<83> 1 - PositiveUnsuppliedEnergy::area::hour<83> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<83> AreaBalance::area::hour<83> -1 - NegativeUnsuppliedEnergy::area::hour<83> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<83> AreaBalance::area::hour<83> 1 - NegativeUnsuppliedEnergy::area::hour<83> FictiveLoads::area::hour<83> 1 - NTCDirect::link::hour<84> AreaBalance::area::hour<84> 1 - NTCDirect::link::hour<84> AreaBalance::area::hour<84> -1 - NTCDirect::link::hour<84> R841 1 - NTCDirect::link::hour<84> R842 1 - PositiveUnsuppliedEnergy::area::hour<84> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<84> AreaBalance::area::hour<84> -1 - NegativeUnsuppliedEnergy::area::hour<84> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<84> AreaBalance::area::hour<84> 1 - NegativeUnsuppliedEnergy::area::hour<84> FictiveLoads::area::hour<84> 1 - PositiveUnsuppliedEnergy::area::hour<84> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<84> AreaBalance::area::hour<84> -1 - NegativeUnsuppliedEnergy::area::hour<84> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<84> AreaBalance::area::hour<84> 1 - NegativeUnsuppliedEnergy::area::hour<84> FictiveLoads::area::hour<84> 1 - NTCDirect::link::hour<85> AreaBalance::area::hour<85> 1 - NTCDirect::link::hour<85> AreaBalance::area::hour<85> -1 - NTCDirect::link::hour<85> R843 1 - NTCDirect::link::hour<85> R844 1 - PositiveUnsuppliedEnergy::area::hour<85> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<85> AreaBalance::area::hour<85> -1 - NegativeUnsuppliedEnergy::area::hour<85> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<85> AreaBalance::area::hour<85> 1 - NegativeUnsuppliedEnergy::area::hour<85> FictiveLoads::area::hour<85> 1 - PositiveUnsuppliedEnergy::area::hour<85> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<85> AreaBalance::area::hour<85> -1 - NegativeUnsuppliedEnergy::area::hour<85> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<85> AreaBalance::area::hour<85> 1 - NegativeUnsuppliedEnergy::area::hour<85> FictiveLoads::area::hour<85> 1 - NTCDirect::link::hour<86> AreaBalance::area::hour<86> 1 - NTCDirect::link::hour<86> AreaBalance::area::hour<86> -1 - NTCDirect::link::hour<86> R845 1 - NTCDirect::link::hour<86> R846 1 - PositiveUnsuppliedEnergy::area::hour<86> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<86> AreaBalance::area::hour<86> -1 - NegativeUnsuppliedEnergy::area::hour<86> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<86> AreaBalance::area::hour<86> 1 - NegativeUnsuppliedEnergy::area::hour<86> FictiveLoads::area::hour<86> 1 - PositiveUnsuppliedEnergy::area::hour<86> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<86> AreaBalance::area::hour<86> -1 - NegativeUnsuppliedEnergy::area::hour<86> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<86> AreaBalance::area::hour<86> 1 - NegativeUnsuppliedEnergy::area::hour<86> FictiveLoads::area::hour<86> 1 - NTCDirect::link::hour<87> AreaBalance::area::hour<87> 1 - NTCDirect::link::hour<87> AreaBalance::area::hour<87> -1 - NTCDirect::link::hour<87> R847 1 - NTCDirect::link::hour<87> R848 1 - PositiveUnsuppliedEnergy::area::hour<87> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<87> AreaBalance::area::hour<87> -1 - NegativeUnsuppliedEnergy::area::hour<87> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<87> AreaBalance::area::hour<87> 1 - NegativeUnsuppliedEnergy::area::hour<87> FictiveLoads::area::hour<87> 1 - PositiveUnsuppliedEnergy::area::hour<87> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<87> AreaBalance::area::hour<87> -1 - NegativeUnsuppliedEnergy::area::hour<87> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<87> AreaBalance::area::hour<87> 1 - NegativeUnsuppliedEnergy::area::hour<87> FictiveLoads::area::hour<87> 1 - NTCDirect::link::hour<88> AreaBalance::area::hour<88> 1 - NTCDirect::link::hour<88> AreaBalance::area::hour<88> -1 - NTCDirect::link::hour<88> R849 1 - NTCDirect::link::hour<88> R850 1 - PositiveUnsuppliedEnergy::area::hour<88> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<88> AreaBalance::area::hour<88> -1 - NegativeUnsuppliedEnergy::area::hour<88> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<88> AreaBalance::area::hour<88> 1 - NegativeUnsuppliedEnergy::area::hour<88> FictiveLoads::area::hour<88> 1 - PositiveUnsuppliedEnergy::area::hour<88> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<88> AreaBalance::area::hour<88> -1 - NegativeUnsuppliedEnergy::area::hour<88> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<88> AreaBalance::area::hour<88> 1 - NegativeUnsuppliedEnergy::area::hour<88> FictiveLoads::area::hour<88> 1 - NTCDirect::link::hour<89> AreaBalance::area::hour<89> 1 - NTCDirect::link::hour<89> AreaBalance::area::hour<89> -1 - NTCDirect::link::hour<89> R851 1 - NTCDirect::link::hour<89> R852 1 - PositiveUnsuppliedEnergy::area::hour<89> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<89> AreaBalance::area::hour<89> -1 - NegativeUnsuppliedEnergy::area::hour<89> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<89> AreaBalance::area::hour<89> 1 - NegativeUnsuppliedEnergy::area::hour<89> FictiveLoads::area::hour<89> 1 - PositiveUnsuppliedEnergy::area::hour<89> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<89> AreaBalance::area::hour<89> -1 - NegativeUnsuppliedEnergy::area::hour<89> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<89> AreaBalance::area::hour<89> 1 - NegativeUnsuppliedEnergy::area::hour<89> FictiveLoads::area::hour<89> 1 - NTCDirect::link::hour<90> AreaBalance::area::hour<90> 1 - NTCDirect::link::hour<90> AreaBalance::area::hour<90> -1 - NTCDirect::link::hour<90> R853 1 - NTCDirect::link::hour<90> R854 1 - PositiveUnsuppliedEnergy::area::hour<90> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<90> AreaBalance::area::hour<90> -1 - NegativeUnsuppliedEnergy::area::hour<90> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<90> AreaBalance::area::hour<90> 1 - NegativeUnsuppliedEnergy::area::hour<90> FictiveLoads::area::hour<90> 1 - PositiveUnsuppliedEnergy::area::hour<90> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<90> AreaBalance::area::hour<90> -1 - NegativeUnsuppliedEnergy::area::hour<90> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<90> AreaBalance::area::hour<90> 1 - NegativeUnsuppliedEnergy::area::hour<90> FictiveLoads::area::hour<90> 1 - NTCDirect::link::hour<91> AreaBalance::area::hour<91> 1 - NTCDirect::link::hour<91> AreaBalance::area::hour<91> -1 - NTCDirect::link::hour<91> R855 1 - NTCDirect::link::hour<91> R856 1 - PositiveUnsuppliedEnergy::area::hour<91> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<91> AreaBalance::area::hour<91> -1 - NegativeUnsuppliedEnergy::area::hour<91> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<91> AreaBalance::area::hour<91> 1 - NegativeUnsuppliedEnergy::area::hour<91> FictiveLoads::area::hour<91> 1 - PositiveUnsuppliedEnergy::area::hour<91> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<91> AreaBalance::area::hour<91> -1 - NegativeUnsuppliedEnergy::area::hour<91> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<91> AreaBalance::area::hour<91> 1 - NegativeUnsuppliedEnergy::area::hour<91> FictiveLoads::area::hour<91> 1 - NTCDirect::link::hour<92> AreaBalance::area::hour<92> 1 - NTCDirect::link::hour<92> AreaBalance::area::hour<92> -1 - NTCDirect::link::hour<92> R857 1 - NTCDirect::link::hour<92> R858 1 - PositiveUnsuppliedEnergy::area::hour<92> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<92> AreaBalance::area::hour<92> -1 - NegativeUnsuppliedEnergy::area::hour<92> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<92> AreaBalance::area::hour<92> 1 - NegativeUnsuppliedEnergy::area::hour<92> FictiveLoads::area::hour<92> 1 - PositiveUnsuppliedEnergy::area::hour<92> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<92> AreaBalance::area::hour<92> -1 - NegativeUnsuppliedEnergy::area::hour<92> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<92> AreaBalance::area::hour<92> 1 - NegativeUnsuppliedEnergy::area::hour<92> FictiveLoads::area::hour<92> 1 - NTCDirect::link::hour<93> AreaBalance::area::hour<93> 1 - NTCDirect::link::hour<93> AreaBalance::area::hour<93> -1 - NTCDirect::link::hour<93> R859 1 - NTCDirect::link::hour<93> R860 1 - PositiveUnsuppliedEnergy::area::hour<93> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<93> AreaBalance::area::hour<93> -1 - NegativeUnsuppliedEnergy::area::hour<93> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<93> AreaBalance::area::hour<93> 1 - NegativeUnsuppliedEnergy::area::hour<93> FictiveLoads::area::hour<93> 1 - PositiveUnsuppliedEnergy::area::hour<93> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<93> AreaBalance::area::hour<93> -1 - NegativeUnsuppliedEnergy::area::hour<93> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<93> AreaBalance::area::hour<93> 1 - NegativeUnsuppliedEnergy::area::hour<93> FictiveLoads::area::hour<93> 1 - NTCDirect::link::hour<94> AreaBalance::area::hour<94> 1 - NTCDirect::link::hour<94> AreaBalance::area::hour<94> -1 - NTCDirect::link::hour<94> R861 1 - NTCDirect::link::hour<94> R862 1 - PositiveUnsuppliedEnergy::area::hour<94> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<94> AreaBalance::area::hour<94> -1 - NegativeUnsuppliedEnergy::area::hour<94> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<94> AreaBalance::area::hour<94> 1 - NegativeUnsuppliedEnergy::area::hour<94> FictiveLoads::area::hour<94> 1 - PositiveUnsuppliedEnergy::area::hour<94> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<94> AreaBalance::area::hour<94> -1 - NegativeUnsuppliedEnergy::area::hour<94> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<94> AreaBalance::area::hour<94> 1 - NegativeUnsuppliedEnergy::area::hour<94> FictiveLoads::area::hour<94> 1 - NTCDirect::link::hour<95> AreaBalance::area::hour<95> 1 - NTCDirect::link::hour<95> AreaBalance::area::hour<95> -1 - NTCDirect::link::hour<95> R863 1 - NTCDirect::link::hour<95> R864 1 - PositiveUnsuppliedEnergy::area::hour<95> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<95> AreaBalance::area::hour<95> -1 - NegativeUnsuppliedEnergy::area::hour<95> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<95> AreaBalance::area::hour<95> 1 - NegativeUnsuppliedEnergy::area::hour<95> FictiveLoads::area::hour<95> 1 - PositiveUnsuppliedEnergy::area::hour<95> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<95> AreaBalance::area::hour<95> -1 - NegativeUnsuppliedEnergy::area::hour<95> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<95> AreaBalance::area::hour<95> 1 - NegativeUnsuppliedEnergy::area::hour<95> FictiveLoads::area::hour<95> 1 - NTCDirect::link::hour<96> AreaBalance::area::hour<96> 1 - NTCDirect::link::hour<96> AreaBalance::area::hour<96> -1 - NTCDirect::link::hour<96> R865 1 - NTCDirect::link::hour<96> R866 1 - PositiveUnsuppliedEnergy::area::hour<96> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<96> AreaBalance::area::hour<96> -1 - NegativeUnsuppliedEnergy::area::hour<96> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<96> AreaBalance::area::hour<96> 1 - NegativeUnsuppliedEnergy::area::hour<96> FictiveLoads::area::hour<96> 1 - PositiveUnsuppliedEnergy::area::hour<96> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<96> AreaBalance::area::hour<96> -1 - NegativeUnsuppliedEnergy::area::hour<96> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<96> AreaBalance::area::hour<96> 1 - NegativeUnsuppliedEnergy::area::hour<96> FictiveLoads::area::hour<96> 1 - NTCDirect::link::hour<97> AreaBalance::area::hour<97> 1 - NTCDirect::link::hour<97> AreaBalance::area::hour<97> -1 - NTCDirect::link::hour<97> R867 1 - NTCDirect::link::hour<97> R868 1 - PositiveUnsuppliedEnergy::area::hour<97> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<97> AreaBalance::area::hour<97> -1 - NegativeUnsuppliedEnergy::area::hour<97> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<97> AreaBalance::area::hour<97> 1 - NegativeUnsuppliedEnergy::area::hour<97> FictiveLoads::area::hour<97> 1 - PositiveUnsuppliedEnergy::area::hour<97> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<97> AreaBalance::area::hour<97> -1 - NegativeUnsuppliedEnergy::area::hour<97> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<97> AreaBalance::area::hour<97> 1 - NegativeUnsuppliedEnergy::area::hour<97> FictiveLoads::area::hour<97> 1 - NTCDirect::link::hour<98> AreaBalance::area::hour<98> 1 - NTCDirect::link::hour<98> AreaBalance::area::hour<98> -1 - NTCDirect::link::hour<98> R869 1 - NTCDirect::link::hour<98> R870 1 - PositiveUnsuppliedEnergy::area::hour<98> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<98> AreaBalance::area::hour<98> -1 - NegativeUnsuppliedEnergy::area::hour<98> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<98> AreaBalance::area::hour<98> 1 - NegativeUnsuppliedEnergy::area::hour<98> FictiveLoads::area::hour<98> 1 - PositiveUnsuppliedEnergy::area::hour<98> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<98> AreaBalance::area::hour<98> -1 - NegativeUnsuppliedEnergy::area::hour<98> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<98> AreaBalance::area::hour<98> 1 - NegativeUnsuppliedEnergy::area::hour<98> FictiveLoads::area::hour<98> 1 - NTCDirect::link::hour<99> AreaBalance::area::hour<99> 1 - NTCDirect::link::hour<99> AreaBalance::area::hour<99> -1 - NTCDirect::link::hour<99> R871 1 - NTCDirect::link::hour<99> R872 1 - PositiveUnsuppliedEnergy::area::hour<99> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<99> AreaBalance::area::hour<99> -1 - NegativeUnsuppliedEnergy::area::hour<99> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<99> AreaBalance::area::hour<99> 1 - NegativeUnsuppliedEnergy::area::hour<99> FictiveLoads::area::hour<99> 1 - PositiveUnsuppliedEnergy::area::hour<99> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<99> AreaBalance::area::hour<99> -1 - NegativeUnsuppliedEnergy::area::hour<99> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<99> AreaBalance::area::hour<99> 1 - NegativeUnsuppliedEnergy::area::hour<99> FictiveLoads::area::hour<99> 1 - NTCDirect::link::hour<100> AreaBalance::area::hour<100> 1 - NTCDirect::link::hour<100> AreaBalance::area::hour<100> -1 - NTCDirect::link::hour<100> R873 1 - NTCDirect::link::hour<100> R874 1 - PositiveUnsuppliedEnergy::area::hour<100> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<100> AreaBalance::area::hour<100> -1 - NegativeUnsuppliedEnergy::area::hour<100> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<100> AreaBalance::area::hour<100> 1 - NegativeUnsuppliedEnergy::area::hour<100> FictiveLoads::area::hour<100> 1 - PositiveUnsuppliedEnergy::area::hour<100> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<100> AreaBalance::area::hour<100> -1 - NegativeUnsuppliedEnergy::area::hour<100> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<100> AreaBalance::area::hour<100> 1 - NegativeUnsuppliedEnergy::area::hour<100> FictiveLoads::area::hour<100> 1 - NTCDirect::link::hour<101> AreaBalance::area::hour<101> 1 - NTCDirect::link::hour<101> AreaBalance::area::hour<101> -1 - NTCDirect::link::hour<101> R875 1 - NTCDirect::link::hour<101> R876 1 - PositiveUnsuppliedEnergy::area::hour<101> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<101> AreaBalance::area::hour<101> -1 - NegativeUnsuppliedEnergy::area::hour<101> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<101> AreaBalance::area::hour<101> 1 - NegativeUnsuppliedEnergy::area::hour<101> FictiveLoads::area::hour<101> 1 - PositiveUnsuppliedEnergy::area::hour<101> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<101> AreaBalance::area::hour<101> -1 - NegativeUnsuppliedEnergy::area::hour<101> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<101> AreaBalance::area::hour<101> 1 - NegativeUnsuppliedEnergy::area::hour<101> FictiveLoads::area::hour<101> 1 - NTCDirect::link::hour<102> AreaBalance::area::hour<102> 1 - NTCDirect::link::hour<102> AreaBalance::area::hour<102> -1 - NTCDirect::link::hour<102> R877 1 - NTCDirect::link::hour<102> R878 1 - PositiveUnsuppliedEnergy::area::hour<102> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<102> AreaBalance::area::hour<102> -1 - NegativeUnsuppliedEnergy::area::hour<102> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<102> AreaBalance::area::hour<102> 1 - NegativeUnsuppliedEnergy::area::hour<102> FictiveLoads::area::hour<102> 1 - PositiveUnsuppliedEnergy::area::hour<102> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<102> AreaBalance::area::hour<102> -1 - NegativeUnsuppliedEnergy::area::hour<102> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<102> AreaBalance::area::hour<102> 1 - NegativeUnsuppliedEnergy::area::hour<102> FictiveLoads::area::hour<102> 1 - NTCDirect::link::hour<103> AreaBalance::area::hour<103> 1 - NTCDirect::link::hour<103> AreaBalance::area::hour<103> -1 - NTCDirect::link::hour<103> R879 1 - NTCDirect::link::hour<103> R880 1 - PositiveUnsuppliedEnergy::area::hour<103> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<103> AreaBalance::area::hour<103> -1 - NegativeUnsuppliedEnergy::area::hour<103> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<103> AreaBalance::area::hour<103> 1 - NegativeUnsuppliedEnergy::area::hour<103> FictiveLoads::area::hour<103> 1 - PositiveUnsuppliedEnergy::area::hour<103> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<103> AreaBalance::area::hour<103> -1 - NegativeUnsuppliedEnergy::area::hour<103> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<103> AreaBalance::area::hour<103> 1 - NegativeUnsuppliedEnergy::area::hour<103> FictiveLoads::area::hour<103> 1 - NTCDirect::link::hour<104> AreaBalance::area::hour<104> 1 - NTCDirect::link::hour<104> AreaBalance::area::hour<104> -1 - NTCDirect::link::hour<104> R881 1 - NTCDirect::link::hour<104> R882 1 - PositiveUnsuppliedEnergy::area::hour<104> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<104> AreaBalance::area::hour<104> -1 - NegativeUnsuppliedEnergy::area::hour<104> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<104> AreaBalance::area::hour<104> 1 - NegativeUnsuppliedEnergy::area::hour<104> FictiveLoads::area::hour<104> 1 - PositiveUnsuppliedEnergy::area::hour<104> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<104> AreaBalance::area::hour<104> -1 - NegativeUnsuppliedEnergy::area::hour<104> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<104> AreaBalance::area::hour<104> 1 - NegativeUnsuppliedEnergy::area::hour<104> FictiveLoads::area::hour<104> 1 - NTCDirect::link::hour<105> AreaBalance::area::hour<105> 1 - NTCDirect::link::hour<105> AreaBalance::area::hour<105> -1 - NTCDirect::link::hour<105> R883 1 - NTCDirect::link::hour<105> R884 1 - PositiveUnsuppliedEnergy::area::hour<105> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<105> AreaBalance::area::hour<105> -1 - NegativeUnsuppliedEnergy::area::hour<105> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<105> AreaBalance::area::hour<105> 1 - NegativeUnsuppliedEnergy::area::hour<105> FictiveLoads::area::hour<105> 1 - PositiveUnsuppliedEnergy::area::hour<105> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<105> AreaBalance::area::hour<105> -1 - NegativeUnsuppliedEnergy::area::hour<105> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<105> AreaBalance::area::hour<105> 1 - NegativeUnsuppliedEnergy::area::hour<105> FictiveLoads::area::hour<105> 1 - NTCDirect::link::hour<106> AreaBalance::area::hour<106> 1 - NTCDirect::link::hour<106> AreaBalance::area::hour<106> -1 - NTCDirect::link::hour<106> R885 1 - NTCDirect::link::hour<106> R886 1 - PositiveUnsuppliedEnergy::area::hour<106> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<106> AreaBalance::area::hour<106> -1 - NegativeUnsuppliedEnergy::area::hour<106> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<106> AreaBalance::area::hour<106> 1 - NegativeUnsuppliedEnergy::area::hour<106> FictiveLoads::area::hour<106> 1 - PositiveUnsuppliedEnergy::area::hour<106> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<106> AreaBalance::area::hour<106> -1 - NegativeUnsuppliedEnergy::area::hour<106> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<106> AreaBalance::area::hour<106> 1 - NegativeUnsuppliedEnergy::area::hour<106> FictiveLoads::area::hour<106> 1 - NTCDirect::link::hour<107> AreaBalance::area::hour<107> 1 - NTCDirect::link::hour<107> AreaBalance::area::hour<107> -1 - NTCDirect::link::hour<107> R887 1 - NTCDirect::link::hour<107> R888 1 - PositiveUnsuppliedEnergy::area::hour<107> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<107> AreaBalance::area::hour<107> -1 - NegativeUnsuppliedEnergy::area::hour<107> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<107> AreaBalance::area::hour<107> 1 - NegativeUnsuppliedEnergy::area::hour<107> FictiveLoads::area::hour<107> 1 - PositiveUnsuppliedEnergy::area::hour<107> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<107> AreaBalance::area::hour<107> -1 - NegativeUnsuppliedEnergy::area::hour<107> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<107> AreaBalance::area::hour<107> 1 - NegativeUnsuppliedEnergy::area::hour<107> FictiveLoads::area::hour<107> 1 - NTCDirect::link::hour<108> AreaBalance::area::hour<108> 1 - NTCDirect::link::hour<108> AreaBalance::area::hour<108> -1 - NTCDirect::link::hour<108> R889 1 - NTCDirect::link::hour<108> R890 1 - PositiveUnsuppliedEnergy::area::hour<108> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<108> AreaBalance::area::hour<108> -1 - NegativeUnsuppliedEnergy::area::hour<108> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<108> AreaBalance::area::hour<108> 1 - NegativeUnsuppliedEnergy::area::hour<108> FictiveLoads::area::hour<108> 1 - PositiveUnsuppliedEnergy::area::hour<108> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<108> AreaBalance::area::hour<108> -1 - NegativeUnsuppliedEnergy::area::hour<108> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<108> AreaBalance::area::hour<108> 1 - NegativeUnsuppliedEnergy::area::hour<108> FictiveLoads::area::hour<108> 1 - NTCDirect::link::hour<109> AreaBalance::area::hour<109> 1 - NTCDirect::link::hour<109> AreaBalance::area::hour<109> -1 - NTCDirect::link::hour<109> R891 1 - NTCDirect::link::hour<109> R892 1 - PositiveUnsuppliedEnergy::area::hour<109> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<109> AreaBalance::area::hour<109> -1 - NegativeUnsuppliedEnergy::area::hour<109> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<109> AreaBalance::area::hour<109> 1 - NegativeUnsuppliedEnergy::area::hour<109> FictiveLoads::area::hour<109> 1 - PositiveUnsuppliedEnergy::area::hour<109> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<109> AreaBalance::area::hour<109> -1 - NegativeUnsuppliedEnergy::area::hour<109> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<109> AreaBalance::area::hour<109> 1 - NegativeUnsuppliedEnergy::area::hour<109> FictiveLoads::area::hour<109> 1 - NTCDirect::link::hour<110> AreaBalance::area::hour<110> 1 - NTCDirect::link::hour<110> AreaBalance::area::hour<110> -1 - NTCDirect::link::hour<110> R893 1 - NTCDirect::link::hour<110> R894 1 - PositiveUnsuppliedEnergy::area::hour<110> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<110> AreaBalance::area::hour<110> -1 - NegativeUnsuppliedEnergy::area::hour<110> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<110> AreaBalance::area::hour<110> 1 - NegativeUnsuppliedEnergy::area::hour<110> FictiveLoads::area::hour<110> 1 - PositiveUnsuppliedEnergy::area::hour<110> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<110> AreaBalance::area::hour<110> -1 - NegativeUnsuppliedEnergy::area::hour<110> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<110> AreaBalance::area::hour<110> 1 - NegativeUnsuppliedEnergy::area::hour<110> FictiveLoads::area::hour<110> 1 - NTCDirect::link::hour<111> AreaBalance::area::hour<111> 1 - NTCDirect::link::hour<111> AreaBalance::area::hour<111> -1 - NTCDirect::link::hour<111> R895 1 - NTCDirect::link::hour<111> R896 1 - PositiveUnsuppliedEnergy::area::hour<111> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<111> AreaBalance::area::hour<111> -1 - NegativeUnsuppliedEnergy::area::hour<111> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<111> AreaBalance::area::hour<111> 1 - NegativeUnsuppliedEnergy::area::hour<111> FictiveLoads::area::hour<111> 1 - PositiveUnsuppliedEnergy::area::hour<111> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<111> AreaBalance::area::hour<111> -1 - NegativeUnsuppliedEnergy::area::hour<111> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<111> AreaBalance::area::hour<111> 1 - NegativeUnsuppliedEnergy::area::hour<111> FictiveLoads::area::hour<111> 1 - NTCDirect::link::hour<112> AreaBalance::area::hour<112> 1 - NTCDirect::link::hour<112> AreaBalance::area::hour<112> -1 - NTCDirect::link::hour<112> R897 1 - NTCDirect::link::hour<112> R898 1 - PositiveUnsuppliedEnergy::area::hour<112> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<112> AreaBalance::area::hour<112> -1 - NegativeUnsuppliedEnergy::area::hour<112> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<112> AreaBalance::area::hour<112> 1 - NegativeUnsuppliedEnergy::area::hour<112> FictiveLoads::area::hour<112> 1 - PositiveUnsuppliedEnergy::area::hour<112> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<112> AreaBalance::area::hour<112> -1 - NegativeUnsuppliedEnergy::area::hour<112> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<112> AreaBalance::area::hour<112> 1 - NegativeUnsuppliedEnergy::area::hour<112> FictiveLoads::area::hour<112> 1 - NTCDirect::link::hour<113> AreaBalance::area::hour<113> 1 - NTCDirect::link::hour<113> AreaBalance::area::hour<113> -1 - NTCDirect::link::hour<113> R899 1 - NTCDirect::link::hour<113> R900 1 - PositiveUnsuppliedEnergy::area::hour<113> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<113> AreaBalance::area::hour<113> -1 - NegativeUnsuppliedEnergy::area::hour<113> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<113> AreaBalance::area::hour<113> 1 - NegativeUnsuppliedEnergy::area::hour<113> FictiveLoads::area::hour<113> 1 - PositiveUnsuppliedEnergy::area::hour<113> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<113> AreaBalance::area::hour<113> -1 - NegativeUnsuppliedEnergy::area::hour<113> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<113> AreaBalance::area::hour<113> 1 - NegativeUnsuppliedEnergy::area::hour<113> FictiveLoads::area::hour<113> 1 - NTCDirect::link::hour<114> AreaBalance::area::hour<114> 1 - NTCDirect::link::hour<114> AreaBalance::area::hour<114> -1 - NTCDirect::link::hour<114> R901 1 - NTCDirect::link::hour<114> R902 1 - PositiveUnsuppliedEnergy::area::hour<114> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<114> AreaBalance::area::hour<114> -1 - NegativeUnsuppliedEnergy::area::hour<114> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<114> AreaBalance::area::hour<114> 1 - NegativeUnsuppliedEnergy::area::hour<114> FictiveLoads::area::hour<114> 1 - PositiveUnsuppliedEnergy::area::hour<114> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<114> AreaBalance::area::hour<114> -1 - NegativeUnsuppliedEnergy::area::hour<114> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<114> AreaBalance::area::hour<114> 1 - NegativeUnsuppliedEnergy::area::hour<114> FictiveLoads::area::hour<114> 1 - NTCDirect::link::hour<115> AreaBalance::area::hour<115> 1 - NTCDirect::link::hour<115> AreaBalance::area::hour<115> -1 - NTCDirect::link::hour<115> R903 1 - NTCDirect::link::hour<115> R904 1 - PositiveUnsuppliedEnergy::area::hour<115> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<115> AreaBalance::area::hour<115> -1 - NegativeUnsuppliedEnergy::area::hour<115> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<115> AreaBalance::area::hour<115> 1 - NegativeUnsuppliedEnergy::area::hour<115> FictiveLoads::area::hour<115> 1 - PositiveUnsuppliedEnergy::area::hour<115> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<115> AreaBalance::area::hour<115> -1 - NegativeUnsuppliedEnergy::area::hour<115> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<115> AreaBalance::area::hour<115> 1 - NegativeUnsuppliedEnergy::area::hour<115> FictiveLoads::area::hour<115> 1 - NTCDirect::link::hour<116> AreaBalance::area::hour<116> 1 - NTCDirect::link::hour<116> AreaBalance::area::hour<116> -1 - NTCDirect::link::hour<116> R905 1 - NTCDirect::link::hour<116> R906 1 - PositiveUnsuppliedEnergy::area::hour<116> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<116> AreaBalance::area::hour<116> -1 - NegativeUnsuppliedEnergy::area::hour<116> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<116> AreaBalance::area::hour<116> 1 - NegativeUnsuppliedEnergy::area::hour<116> FictiveLoads::area::hour<116> 1 - PositiveUnsuppliedEnergy::area::hour<116> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<116> AreaBalance::area::hour<116> -1 - NegativeUnsuppliedEnergy::area::hour<116> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<116> AreaBalance::area::hour<116> 1 - NegativeUnsuppliedEnergy::area::hour<116> FictiveLoads::area::hour<116> 1 - NTCDirect::link::hour<117> AreaBalance::area::hour<117> 1 - NTCDirect::link::hour<117> AreaBalance::area::hour<117> -1 - NTCDirect::link::hour<117> R907 1 - NTCDirect::link::hour<117> R908 1 - PositiveUnsuppliedEnergy::area::hour<117> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<117> AreaBalance::area::hour<117> -1 - NegativeUnsuppliedEnergy::area::hour<117> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<117> AreaBalance::area::hour<117> 1 - NegativeUnsuppliedEnergy::area::hour<117> FictiveLoads::area::hour<117> 1 - PositiveUnsuppliedEnergy::area::hour<117> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<117> AreaBalance::area::hour<117> -1 - NegativeUnsuppliedEnergy::area::hour<117> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<117> AreaBalance::area::hour<117> 1 - NegativeUnsuppliedEnergy::area::hour<117> FictiveLoads::area::hour<117> 1 - NTCDirect::link::hour<118> AreaBalance::area::hour<118> 1 - NTCDirect::link::hour<118> AreaBalance::area::hour<118> -1 - NTCDirect::link::hour<118> R909 1 - NTCDirect::link::hour<118> R910 1 - PositiveUnsuppliedEnergy::area::hour<118> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<118> AreaBalance::area::hour<118> -1 - NegativeUnsuppliedEnergy::area::hour<118> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<118> AreaBalance::area::hour<118> 1 - NegativeUnsuppliedEnergy::area::hour<118> FictiveLoads::area::hour<118> 1 - PositiveUnsuppliedEnergy::area::hour<118> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<118> AreaBalance::area::hour<118> -1 - NegativeUnsuppliedEnergy::area::hour<118> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<118> AreaBalance::area::hour<118> 1 - NegativeUnsuppliedEnergy::area::hour<118> FictiveLoads::area::hour<118> 1 - NTCDirect::link::hour<119> AreaBalance::area::hour<119> 1 - NTCDirect::link::hour<119> AreaBalance::area::hour<119> -1 - NTCDirect::link::hour<119> R911 1 - NTCDirect::link::hour<119> R912 1 - PositiveUnsuppliedEnergy::area::hour<119> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<119> AreaBalance::area::hour<119> -1 - NegativeUnsuppliedEnergy::area::hour<119> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<119> AreaBalance::area::hour<119> 1 - NegativeUnsuppliedEnergy::area::hour<119> FictiveLoads::area::hour<119> 1 - PositiveUnsuppliedEnergy::area::hour<119> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<119> AreaBalance::area::hour<119> -1 - NegativeUnsuppliedEnergy::area::hour<119> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<119> AreaBalance::area::hour<119> 1 - NegativeUnsuppliedEnergy::area::hour<119> FictiveLoads::area::hour<119> 1 - NTCDirect::link::hour<120> AreaBalance::area::hour<120> 1 - NTCDirect::link::hour<120> AreaBalance::area::hour<120> -1 - NTCDirect::link::hour<120> R913 1 - NTCDirect::link::hour<120> R914 1 - PositiveUnsuppliedEnergy::area::hour<120> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<120> AreaBalance::area::hour<120> -1 - NegativeUnsuppliedEnergy::area::hour<120> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<120> AreaBalance::area::hour<120> 1 - NegativeUnsuppliedEnergy::area::hour<120> FictiveLoads::area::hour<120> 1 - PositiveUnsuppliedEnergy::area::hour<120> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<120> AreaBalance::area::hour<120> -1 - NegativeUnsuppliedEnergy::area::hour<120> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<120> AreaBalance::area::hour<120> 1 - NegativeUnsuppliedEnergy::area::hour<120> FictiveLoads::area::hour<120> 1 - NTCDirect::link::hour<121> AreaBalance::area::hour<121> 1 - NTCDirect::link::hour<121> AreaBalance::area::hour<121> -1 - NTCDirect::link::hour<121> R915 1 - NTCDirect::link::hour<121> R916 1 - PositiveUnsuppliedEnergy::area::hour<121> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<121> AreaBalance::area::hour<121> -1 - NegativeUnsuppliedEnergy::area::hour<121> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<121> AreaBalance::area::hour<121> 1 - NegativeUnsuppliedEnergy::area::hour<121> FictiveLoads::area::hour<121> 1 - PositiveUnsuppliedEnergy::area::hour<121> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<121> AreaBalance::area::hour<121> -1 - NegativeUnsuppliedEnergy::area::hour<121> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<121> AreaBalance::area::hour<121> 1 - NegativeUnsuppliedEnergy::area::hour<121> FictiveLoads::area::hour<121> 1 - NTCDirect::link::hour<122> AreaBalance::area::hour<122> 1 - NTCDirect::link::hour<122> AreaBalance::area::hour<122> -1 - NTCDirect::link::hour<122> R917 1 - NTCDirect::link::hour<122> R918 1 - PositiveUnsuppliedEnergy::area::hour<122> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<122> AreaBalance::area::hour<122> -1 - NegativeUnsuppliedEnergy::area::hour<122> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<122> AreaBalance::area::hour<122> 1 - NegativeUnsuppliedEnergy::area::hour<122> FictiveLoads::area::hour<122> 1 - PositiveUnsuppliedEnergy::area::hour<122> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<122> AreaBalance::area::hour<122> -1 - NegativeUnsuppliedEnergy::area::hour<122> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<122> AreaBalance::area::hour<122> 1 - NegativeUnsuppliedEnergy::area::hour<122> FictiveLoads::area::hour<122> 1 - NTCDirect::link::hour<123> AreaBalance::area::hour<123> 1 - NTCDirect::link::hour<123> AreaBalance::area::hour<123> -1 - NTCDirect::link::hour<123> R919 1 - NTCDirect::link::hour<123> R920 1 - PositiveUnsuppliedEnergy::area::hour<123> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<123> AreaBalance::area::hour<123> -1 - NegativeUnsuppliedEnergy::area::hour<123> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<123> AreaBalance::area::hour<123> 1 - NegativeUnsuppliedEnergy::area::hour<123> FictiveLoads::area::hour<123> 1 - PositiveUnsuppliedEnergy::area::hour<123> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<123> AreaBalance::area::hour<123> -1 - NegativeUnsuppliedEnergy::area::hour<123> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<123> AreaBalance::area::hour<123> 1 - NegativeUnsuppliedEnergy::area::hour<123> FictiveLoads::area::hour<123> 1 - NTCDirect::link::hour<124> AreaBalance::area::hour<124> 1 - NTCDirect::link::hour<124> AreaBalance::area::hour<124> -1 - NTCDirect::link::hour<124> R921 1 - NTCDirect::link::hour<124> R922 1 - PositiveUnsuppliedEnergy::area::hour<124> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<124> AreaBalance::area::hour<124> -1 - NegativeUnsuppliedEnergy::area::hour<124> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<124> AreaBalance::area::hour<124> 1 - NegativeUnsuppliedEnergy::area::hour<124> FictiveLoads::area::hour<124> 1 - PositiveUnsuppliedEnergy::area::hour<124> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<124> AreaBalance::area::hour<124> -1 - NegativeUnsuppliedEnergy::area::hour<124> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<124> AreaBalance::area::hour<124> 1 - NegativeUnsuppliedEnergy::area::hour<124> FictiveLoads::area::hour<124> 1 - NTCDirect::link::hour<125> AreaBalance::area::hour<125> 1 - NTCDirect::link::hour<125> AreaBalance::area::hour<125> -1 - NTCDirect::link::hour<125> R923 1 - NTCDirect::link::hour<125> R924 1 - PositiveUnsuppliedEnergy::area::hour<125> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<125> AreaBalance::area::hour<125> -1 - NegativeUnsuppliedEnergy::area::hour<125> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<125> AreaBalance::area::hour<125> 1 - NegativeUnsuppliedEnergy::area::hour<125> FictiveLoads::area::hour<125> 1 - PositiveUnsuppliedEnergy::area::hour<125> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<125> AreaBalance::area::hour<125> -1 - NegativeUnsuppliedEnergy::area::hour<125> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<125> AreaBalance::area::hour<125> 1 - NegativeUnsuppliedEnergy::area::hour<125> FictiveLoads::area::hour<125> 1 - NTCDirect::link::hour<126> AreaBalance::area::hour<126> 1 - NTCDirect::link::hour<126> AreaBalance::area::hour<126> -1 - NTCDirect::link::hour<126> R925 1 - NTCDirect::link::hour<126> R926 1 - PositiveUnsuppliedEnergy::area::hour<126> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<126> AreaBalance::area::hour<126> -1 - NegativeUnsuppliedEnergy::area::hour<126> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<126> AreaBalance::area::hour<126> 1 - NegativeUnsuppliedEnergy::area::hour<126> FictiveLoads::area::hour<126> 1 - PositiveUnsuppliedEnergy::area::hour<126> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<126> AreaBalance::area::hour<126> -1 - NegativeUnsuppliedEnergy::area::hour<126> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<126> AreaBalance::area::hour<126> 1 - NegativeUnsuppliedEnergy::area::hour<126> FictiveLoads::area::hour<126> 1 - NTCDirect::link::hour<127> AreaBalance::area::hour<127> 1 - NTCDirect::link::hour<127> AreaBalance::area::hour<127> -1 - NTCDirect::link::hour<127> R927 1 - NTCDirect::link::hour<127> R928 1 - PositiveUnsuppliedEnergy::area::hour<127> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<127> AreaBalance::area::hour<127> -1 - NegativeUnsuppliedEnergy::area::hour<127> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<127> AreaBalance::area::hour<127> 1 - NegativeUnsuppliedEnergy::area::hour<127> FictiveLoads::area::hour<127> 1 - PositiveUnsuppliedEnergy::area::hour<127> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<127> AreaBalance::area::hour<127> -1 - NegativeUnsuppliedEnergy::area::hour<127> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<127> AreaBalance::area::hour<127> 1 - NegativeUnsuppliedEnergy::area::hour<127> FictiveLoads::area::hour<127> 1 - NTCDirect::link::hour<128> AreaBalance::area::hour<128> 1 - NTCDirect::link::hour<128> AreaBalance::area::hour<128> -1 - NTCDirect::link::hour<128> R929 1 - NTCDirect::link::hour<128> R930 1 - PositiveUnsuppliedEnergy::area::hour<128> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<128> AreaBalance::area::hour<128> -1 - NegativeUnsuppliedEnergy::area::hour<128> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<128> AreaBalance::area::hour<128> 1 - NegativeUnsuppliedEnergy::area::hour<128> FictiveLoads::area::hour<128> 1 - PositiveUnsuppliedEnergy::area::hour<128> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<128> AreaBalance::area::hour<128> -1 - NegativeUnsuppliedEnergy::area::hour<128> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<128> AreaBalance::area::hour<128> 1 - NegativeUnsuppliedEnergy::area::hour<128> FictiveLoads::area::hour<128> 1 - NTCDirect::link::hour<129> AreaBalance::area::hour<129> 1 - NTCDirect::link::hour<129> AreaBalance::area::hour<129> -1 - NTCDirect::link::hour<129> R931 1 - NTCDirect::link::hour<129> R932 1 - PositiveUnsuppliedEnergy::area::hour<129> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<129> AreaBalance::area::hour<129> -1 - NegativeUnsuppliedEnergy::area::hour<129> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<129> AreaBalance::area::hour<129> 1 - NegativeUnsuppliedEnergy::area::hour<129> FictiveLoads::area::hour<129> 1 - PositiveUnsuppliedEnergy::area::hour<129> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<129> AreaBalance::area::hour<129> -1 - NegativeUnsuppliedEnergy::area::hour<129> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<129> AreaBalance::area::hour<129> 1 - NegativeUnsuppliedEnergy::area::hour<129> FictiveLoads::area::hour<129> 1 - NTCDirect::link::hour<130> AreaBalance::area::hour<130> 1 - NTCDirect::link::hour<130> AreaBalance::area::hour<130> -1 - NTCDirect::link::hour<130> R933 1 - NTCDirect::link::hour<130> R934 1 - PositiveUnsuppliedEnergy::area::hour<130> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<130> AreaBalance::area::hour<130> -1 - NegativeUnsuppliedEnergy::area::hour<130> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<130> AreaBalance::area::hour<130> 1 - NegativeUnsuppliedEnergy::area::hour<130> FictiveLoads::area::hour<130> 1 - PositiveUnsuppliedEnergy::area::hour<130> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<130> AreaBalance::area::hour<130> -1 - NegativeUnsuppliedEnergy::area::hour<130> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<130> AreaBalance::area::hour<130> 1 - NegativeUnsuppliedEnergy::area::hour<130> FictiveLoads::area::hour<130> 1 - NTCDirect::link::hour<131> AreaBalance::area::hour<131> 1 - NTCDirect::link::hour<131> AreaBalance::area::hour<131> -1 - NTCDirect::link::hour<131> R935 1 - NTCDirect::link::hour<131> R936 1 - PositiveUnsuppliedEnergy::area::hour<131> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<131> AreaBalance::area::hour<131> -1 - NegativeUnsuppliedEnergy::area::hour<131> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<131> AreaBalance::area::hour<131> 1 - NegativeUnsuppliedEnergy::area::hour<131> FictiveLoads::area::hour<131> 1 - PositiveUnsuppliedEnergy::area::hour<131> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<131> AreaBalance::area::hour<131> -1 - NegativeUnsuppliedEnergy::area::hour<131> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<131> AreaBalance::area::hour<131> 1 - NegativeUnsuppliedEnergy::area::hour<131> FictiveLoads::area::hour<131> 1 - NTCDirect::link::hour<132> AreaBalance::area::hour<132> 1 - NTCDirect::link::hour<132> AreaBalance::area::hour<132> -1 - NTCDirect::link::hour<132> R937 1 - NTCDirect::link::hour<132> R938 1 - PositiveUnsuppliedEnergy::area::hour<132> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<132> AreaBalance::area::hour<132> -1 - NegativeUnsuppliedEnergy::area::hour<132> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<132> AreaBalance::area::hour<132> 1 - NegativeUnsuppliedEnergy::area::hour<132> FictiveLoads::area::hour<132> 1 - PositiveUnsuppliedEnergy::area::hour<132> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<132> AreaBalance::area::hour<132> -1 - NegativeUnsuppliedEnergy::area::hour<132> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<132> AreaBalance::area::hour<132> 1 - NegativeUnsuppliedEnergy::area::hour<132> FictiveLoads::area::hour<132> 1 - NTCDirect::link::hour<133> AreaBalance::area::hour<133> 1 - NTCDirect::link::hour<133> AreaBalance::area::hour<133> -1 - NTCDirect::link::hour<133> R939 1 - NTCDirect::link::hour<133> R940 1 - PositiveUnsuppliedEnergy::area::hour<133> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<133> AreaBalance::area::hour<133> -1 - NegativeUnsuppliedEnergy::area::hour<133> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<133> AreaBalance::area::hour<133> 1 - NegativeUnsuppliedEnergy::area::hour<133> FictiveLoads::area::hour<133> 1 - PositiveUnsuppliedEnergy::area::hour<133> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<133> AreaBalance::area::hour<133> -1 - NegativeUnsuppliedEnergy::area::hour<133> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<133> AreaBalance::area::hour<133> 1 - NegativeUnsuppliedEnergy::area::hour<133> FictiveLoads::area::hour<133> 1 - NTCDirect::link::hour<134> AreaBalance::area::hour<134> 1 - NTCDirect::link::hour<134> AreaBalance::area::hour<134> -1 - NTCDirect::link::hour<134> R941 1 - NTCDirect::link::hour<134> R942 1 - PositiveUnsuppliedEnergy::area::hour<134> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<134> AreaBalance::area::hour<134> -1 - NegativeUnsuppliedEnergy::area::hour<134> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<134> AreaBalance::area::hour<134> 1 - NegativeUnsuppliedEnergy::area::hour<134> FictiveLoads::area::hour<134> 1 - PositiveUnsuppliedEnergy::area::hour<134> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<134> AreaBalance::area::hour<134> -1 - NegativeUnsuppliedEnergy::area::hour<134> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<134> AreaBalance::area::hour<134> 1 - NegativeUnsuppliedEnergy::area::hour<134> FictiveLoads::area::hour<134> 1 - NTCDirect::link::hour<135> AreaBalance::area::hour<135> 1 - NTCDirect::link::hour<135> AreaBalance::area::hour<135> -1 - NTCDirect::link::hour<135> R943 1 - NTCDirect::link::hour<135> R944 1 - PositiveUnsuppliedEnergy::area::hour<135> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<135> AreaBalance::area::hour<135> -1 - NegativeUnsuppliedEnergy::area::hour<135> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<135> AreaBalance::area::hour<135> 1 - NegativeUnsuppliedEnergy::area::hour<135> FictiveLoads::area::hour<135> 1 - PositiveUnsuppliedEnergy::area::hour<135> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<135> AreaBalance::area::hour<135> -1 - NegativeUnsuppliedEnergy::area::hour<135> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<135> AreaBalance::area::hour<135> 1 - NegativeUnsuppliedEnergy::area::hour<135> FictiveLoads::area::hour<135> 1 - NTCDirect::link::hour<136> AreaBalance::area::hour<136> 1 - NTCDirect::link::hour<136> AreaBalance::area::hour<136> -1 - NTCDirect::link::hour<136> R945 1 - NTCDirect::link::hour<136> R946 1 - PositiveUnsuppliedEnergy::area::hour<136> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<136> AreaBalance::area::hour<136> -1 - NegativeUnsuppliedEnergy::area::hour<136> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<136> AreaBalance::area::hour<136> 1 - NegativeUnsuppliedEnergy::area::hour<136> FictiveLoads::area::hour<136> 1 - PositiveUnsuppliedEnergy::area::hour<136> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<136> AreaBalance::area::hour<136> -1 - NegativeUnsuppliedEnergy::area::hour<136> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<136> AreaBalance::area::hour<136> 1 - NegativeUnsuppliedEnergy::area::hour<136> FictiveLoads::area::hour<136> 1 - NTCDirect::link::hour<137> AreaBalance::area::hour<137> 1 - NTCDirect::link::hour<137> AreaBalance::area::hour<137> -1 - NTCDirect::link::hour<137> R947 1 - NTCDirect::link::hour<137> R948 1 - PositiveUnsuppliedEnergy::area::hour<137> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<137> AreaBalance::area::hour<137> -1 - NegativeUnsuppliedEnergy::area::hour<137> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<137> AreaBalance::area::hour<137> 1 - NegativeUnsuppliedEnergy::area::hour<137> FictiveLoads::area::hour<137> 1 - PositiveUnsuppliedEnergy::area::hour<137> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<137> AreaBalance::area::hour<137> -1 - NegativeUnsuppliedEnergy::area::hour<137> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<137> AreaBalance::area::hour<137> 1 - NegativeUnsuppliedEnergy::area::hour<137> FictiveLoads::area::hour<137> 1 - NTCDirect::link::hour<138> AreaBalance::area::hour<138> 1 - NTCDirect::link::hour<138> AreaBalance::area::hour<138> -1 - NTCDirect::link::hour<138> R949 1 - NTCDirect::link::hour<138> R950 1 - PositiveUnsuppliedEnergy::area::hour<138> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<138> AreaBalance::area::hour<138> -1 - NegativeUnsuppliedEnergy::area::hour<138> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<138> AreaBalance::area::hour<138> 1 - NegativeUnsuppliedEnergy::area::hour<138> FictiveLoads::area::hour<138> 1 - PositiveUnsuppliedEnergy::area::hour<138> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<138> AreaBalance::area::hour<138> -1 - NegativeUnsuppliedEnergy::area::hour<138> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<138> AreaBalance::area::hour<138> 1 - NegativeUnsuppliedEnergy::area::hour<138> FictiveLoads::area::hour<138> 1 - NTCDirect::link::hour<139> AreaBalance::area::hour<139> 1 - NTCDirect::link::hour<139> AreaBalance::area::hour<139> -1 - NTCDirect::link::hour<139> R951 1 - NTCDirect::link::hour<139> R952 1 - PositiveUnsuppliedEnergy::area::hour<139> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<139> AreaBalance::area::hour<139> -1 - NegativeUnsuppliedEnergy::area::hour<139> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<139> AreaBalance::area::hour<139> 1 - NegativeUnsuppliedEnergy::area::hour<139> FictiveLoads::area::hour<139> 1 - PositiveUnsuppliedEnergy::area::hour<139> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<139> AreaBalance::area::hour<139> -1 - NegativeUnsuppliedEnergy::area::hour<139> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<139> AreaBalance::area::hour<139> 1 - NegativeUnsuppliedEnergy::area::hour<139> FictiveLoads::area::hour<139> 1 - NTCDirect::link::hour<140> AreaBalance::area::hour<140> 1 - NTCDirect::link::hour<140> AreaBalance::area::hour<140> -1 - NTCDirect::link::hour<140> R953 1 - NTCDirect::link::hour<140> R954 1 - PositiveUnsuppliedEnergy::area::hour<140> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<140> AreaBalance::area::hour<140> -1 - NegativeUnsuppliedEnergy::area::hour<140> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<140> AreaBalance::area::hour<140> 1 - NegativeUnsuppliedEnergy::area::hour<140> FictiveLoads::area::hour<140> 1 - PositiveUnsuppliedEnergy::area::hour<140> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<140> AreaBalance::area::hour<140> -1 - NegativeUnsuppliedEnergy::area::hour<140> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<140> AreaBalance::area::hour<140> 1 - NegativeUnsuppliedEnergy::area::hour<140> FictiveLoads::area::hour<140> 1 - NTCDirect::link::hour<141> AreaBalance::area::hour<141> 1 - NTCDirect::link::hour<141> AreaBalance::area::hour<141> -1 - NTCDirect::link::hour<141> R955 1 - NTCDirect::link::hour<141> R956 1 - PositiveUnsuppliedEnergy::area::hour<141> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<141> AreaBalance::area::hour<141> -1 - NegativeUnsuppliedEnergy::area::hour<141> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<141> AreaBalance::area::hour<141> 1 - NegativeUnsuppliedEnergy::area::hour<141> FictiveLoads::area::hour<141> 1 - PositiveUnsuppliedEnergy::area::hour<141> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<141> AreaBalance::area::hour<141> -1 - NegativeUnsuppliedEnergy::area::hour<141> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<141> AreaBalance::area::hour<141> 1 - NegativeUnsuppliedEnergy::area::hour<141> FictiveLoads::area::hour<141> 1 - NTCDirect::link::hour<142> AreaBalance::area::hour<142> 1 - NTCDirect::link::hour<142> AreaBalance::area::hour<142> -1 - NTCDirect::link::hour<142> R957 1 - NTCDirect::link::hour<142> R958 1 - PositiveUnsuppliedEnergy::area::hour<142> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<142> AreaBalance::area::hour<142> -1 - NegativeUnsuppliedEnergy::area::hour<142> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<142> AreaBalance::area::hour<142> 1 - NegativeUnsuppliedEnergy::area::hour<142> FictiveLoads::area::hour<142> 1 - PositiveUnsuppliedEnergy::area::hour<142> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<142> AreaBalance::area::hour<142> -1 - NegativeUnsuppliedEnergy::area::hour<142> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<142> AreaBalance::area::hour<142> 1 - NegativeUnsuppliedEnergy::area::hour<142> FictiveLoads::area::hour<142> 1 - NTCDirect::link::hour<143> AreaBalance::area::hour<143> 1 - NTCDirect::link::hour<143> AreaBalance::area::hour<143> -1 - NTCDirect::link::hour<143> R959 1 - NTCDirect::link::hour<143> R960 1 - PositiveUnsuppliedEnergy::area::hour<143> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<143> AreaBalance::area::hour<143> -1 - NegativeUnsuppliedEnergy::area::hour<143> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<143> AreaBalance::area::hour<143> 1 - NegativeUnsuppliedEnergy::area::hour<143> FictiveLoads::area::hour<143> 1 - PositiveUnsuppliedEnergy::area::hour<143> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<143> AreaBalance::area::hour<143> -1 - NegativeUnsuppliedEnergy::area::hour<143> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<143> AreaBalance::area::hour<143> 1 - NegativeUnsuppliedEnergy::area::hour<143> FictiveLoads::area::hour<143> 1 - NTCDirect::link::hour<144> AreaBalance::area::hour<144> 1 - NTCDirect::link::hour<144> AreaBalance::area::hour<144> -1 - NTCDirect::link::hour<144> R961 1 - NTCDirect::link::hour<144> R962 1 - PositiveUnsuppliedEnergy::area::hour<144> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<144> AreaBalance::area::hour<144> -1 - NegativeUnsuppliedEnergy::area::hour<144> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<144> AreaBalance::area::hour<144> 1 - NegativeUnsuppliedEnergy::area::hour<144> FictiveLoads::area::hour<144> 1 - PositiveUnsuppliedEnergy::area::hour<144> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<144> AreaBalance::area::hour<144> -1 - NegativeUnsuppliedEnergy::area::hour<144> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<144> AreaBalance::area::hour<144> 1 - NegativeUnsuppliedEnergy::area::hour<144> FictiveLoads::area::hour<144> 1 - NTCDirect::link::hour<145> AreaBalance::area::hour<145> 1 - NTCDirect::link::hour<145> AreaBalance::area::hour<145> -1 - NTCDirect::link::hour<145> R963 1 - NTCDirect::link::hour<145> R964 1 - PositiveUnsuppliedEnergy::area::hour<145> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<145> AreaBalance::area::hour<145> -1 - NegativeUnsuppliedEnergy::area::hour<145> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<145> AreaBalance::area::hour<145> 1 - NegativeUnsuppliedEnergy::area::hour<145> FictiveLoads::area::hour<145> 1 - PositiveUnsuppliedEnergy::area::hour<145> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<145> AreaBalance::area::hour<145> -1 - NegativeUnsuppliedEnergy::area::hour<145> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<145> AreaBalance::area::hour<145> 1 - NegativeUnsuppliedEnergy::area::hour<145> FictiveLoads::area::hour<145> 1 - NTCDirect::link::hour<146> AreaBalance::area::hour<146> 1 - NTCDirect::link::hour<146> AreaBalance::area::hour<146> -1 - NTCDirect::link::hour<146> R965 1 - NTCDirect::link::hour<146> R966 1 - PositiveUnsuppliedEnergy::area::hour<146> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<146> AreaBalance::area::hour<146> -1 - NegativeUnsuppliedEnergy::area::hour<146> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<146> AreaBalance::area::hour<146> 1 - NegativeUnsuppliedEnergy::area::hour<146> FictiveLoads::area::hour<146> 1 - PositiveUnsuppliedEnergy::area::hour<146> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<146> AreaBalance::area::hour<146> -1 - NegativeUnsuppliedEnergy::area::hour<146> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<146> AreaBalance::area::hour<146> 1 - NegativeUnsuppliedEnergy::area::hour<146> FictiveLoads::area::hour<146> 1 - NTCDirect::link::hour<147> AreaBalance::area::hour<147> 1 - NTCDirect::link::hour<147> AreaBalance::area::hour<147> -1 - NTCDirect::link::hour<147> R967 1 - NTCDirect::link::hour<147> R968 1 - PositiveUnsuppliedEnergy::area::hour<147> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<147> AreaBalance::area::hour<147> -1 - NegativeUnsuppliedEnergy::area::hour<147> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<147> AreaBalance::area::hour<147> 1 - NegativeUnsuppliedEnergy::area::hour<147> FictiveLoads::area::hour<147> 1 - PositiveUnsuppliedEnergy::area::hour<147> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<147> AreaBalance::area::hour<147> -1 - NegativeUnsuppliedEnergy::area::hour<147> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<147> AreaBalance::area::hour<147> 1 - NegativeUnsuppliedEnergy::area::hour<147> FictiveLoads::area::hour<147> 1 - NTCDirect::link::hour<148> AreaBalance::area::hour<148> 1 - NTCDirect::link::hour<148> AreaBalance::area::hour<148> -1 - NTCDirect::link::hour<148> R969 1 - NTCDirect::link::hour<148> R970 1 - PositiveUnsuppliedEnergy::area::hour<148> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<148> AreaBalance::area::hour<148> -1 - NegativeUnsuppliedEnergy::area::hour<148> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<148> AreaBalance::area::hour<148> 1 - NegativeUnsuppliedEnergy::area::hour<148> FictiveLoads::area::hour<148> 1 - PositiveUnsuppliedEnergy::area::hour<148> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<148> AreaBalance::area::hour<148> -1 - NegativeUnsuppliedEnergy::area::hour<148> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<148> AreaBalance::area::hour<148> 1 - NegativeUnsuppliedEnergy::area::hour<148> FictiveLoads::area::hour<148> 1 - NTCDirect::link::hour<149> AreaBalance::area::hour<149> 1 - NTCDirect::link::hour<149> AreaBalance::area::hour<149> -1 - NTCDirect::link::hour<149> R971 1 - NTCDirect::link::hour<149> R972 1 - PositiveUnsuppliedEnergy::area::hour<149> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<149> AreaBalance::area::hour<149> -1 - NegativeUnsuppliedEnergy::area::hour<149> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<149> AreaBalance::area::hour<149> 1 - NegativeUnsuppliedEnergy::area::hour<149> FictiveLoads::area::hour<149> 1 - PositiveUnsuppliedEnergy::area::hour<149> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<149> AreaBalance::area::hour<149> -1 - NegativeUnsuppliedEnergy::area::hour<149> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<149> AreaBalance::area::hour<149> 1 - NegativeUnsuppliedEnergy::area::hour<149> FictiveLoads::area::hour<149> 1 - NTCDirect::link::hour<150> AreaBalance::area::hour<150> 1 - NTCDirect::link::hour<150> AreaBalance::area::hour<150> -1 - NTCDirect::link::hour<150> R973 1 - NTCDirect::link::hour<150> R974 1 - PositiveUnsuppliedEnergy::area::hour<150> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<150> AreaBalance::area::hour<150> -1 - NegativeUnsuppliedEnergy::area::hour<150> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<150> AreaBalance::area::hour<150> 1 - NegativeUnsuppliedEnergy::area::hour<150> FictiveLoads::area::hour<150> 1 - PositiveUnsuppliedEnergy::area::hour<150> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<150> AreaBalance::area::hour<150> -1 - NegativeUnsuppliedEnergy::area::hour<150> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<150> AreaBalance::area::hour<150> 1 - NegativeUnsuppliedEnergy::area::hour<150> FictiveLoads::area::hour<150> 1 - NTCDirect::link::hour<151> AreaBalance::area::hour<151> 1 - NTCDirect::link::hour<151> AreaBalance::area::hour<151> -1 - NTCDirect::link::hour<151> R975 1 - NTCDirect::link::hour<151> R976 1 - PositiveUnsuppliedEnergy::area::hour<151> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<151> AreaBalance::area::hour<151> -1 - NegativeUnsuppliedEnergy::area::hour<151> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<151> AreaBalance::area::hour<151> 1 - NegativeUnsuppliedEnergy::area::hour<151> FictiveLoads::area::hour<151> 1 - PositiveUnsuppliedEnergy::area::hour<151> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<151> AreaBalance::area::hour<151> -1 - NegativeUnsuppliedEnergy::area::hour<151> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<151> AreaBalance::area::hour<151> 1 - NegativeUnsuppliedEnergy::area::hour<151> FictiveLoads::area::hour<151> 1 - NTCDirect::link::hour<152> AreaBalance::area::hour<152> 1 - NTCDirect::link::hour<152> AreaBalance::area::hour<152> -1 - NTCDirect::link::hour<152> R977 1 - NTCDirect::link::hour<152> R978 1 - PositiveUnsuppliedEnergy::area::hour<152> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<152> AreaBalance::area::hour<152> -1 - NegativeUnsuppliedEnergy::area::hour<152> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<152> AreaBalance::area::hour<152> 1 - NegativeUnsuppliedEnergy::area::hour<152> FictiveLoads::area::hour<152> 1 - PositiveUnsuppliedEnergy::area::hour<152> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<152> AreaBalance::area::hour<152> -1 - NegativeUnsuppliedEnergy::area::hour<152> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<152> AreaBalance::area::hour<152> 1 - NegativeUnsuppliedEnergy::area::hour<152> FictiveLoads::area::hour<152> 1 - NTCDirect::link::hour<153> AreaBalance::area::hour<153> 1 - NTCDirect::link::hour<153> AreaBalance::area::hour<153> -1 - NTCDirect::link::hour<153> R979 1 - NTCDirect::link::hour<153> R980 1 - PositiveUnsuppliedEnergy::area::hour<153> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<153> AreaBalance::area::hour<153> -1 - NegativeUnsuppliedEnergy::area::hour<153> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<153> AreaBalance::area::hour<153> 1 - NegativeUnsuppliedEnergy::area::hour<153> FictiveLoads::area::hour<153> 1 - PositiveUnsuppliedEnergy::area::hour<153> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<153> AreaBalance::area::hour<153> -1 - NegativeUnsuppliedEnergy::area::hour<153> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<153> AreaBalance::area::hour<153> 1 - NegativeUnsuppliedEnergy::area::hour<153> FictiveLoads::area::hour<153> 1 - NTCDirect::link::hour<154> AreaBalance::area::hour<154> 1 - NTCDirect::link::hour<154> AreaBalance::area::hour<154> -1 - NTCDirect::link::hour<154> R981 1 - NTCDirect::link::hour<154> R982 1 - PositiveUnsuppliedEnergy::area::hour<154> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<154> AreaBalance::area::hour<154> -1 - NegativeUnsuppliedEnergy::area::hour<154> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<154> AreaBalance::area::hour<154> 1 - NegativeUnsuppliedEnergy::area::hour<154> FictiveLoads::area::hour<154> 1 - PositiveUnsuppliedEnergy::area::hour<154> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<154> AreaBalance::area::hour<154> -1 - NegativeUnsuppliedEnergy::area::hour<154> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<154> AreaBalance::area::hour<154> 1 - NegativeUnsuppliedEnergy::area::hour<154> FictiveLoads::area::hour<154> 1 - NTCDirect::link::hour<155> AreaBalance::area::hour<155> 1 - NTCDirect::link::hour<155> AreaBalance::area::hour<155> -1 - NTCDirect::link::hour<155> R983 1 - NTCDirect::link::hour<155> R984 1 - PositiveUnsuppliedEnergy::area::hour<155> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<155> AreaBalance::area::hour<155> -1 - NegativeUnsuppliedEnergy::area::hour<155> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<155> AreaBalance::area::hour<155> 1 - NegativeUnsuppliedEnergy::area::hour<155> FictiveLoads::area::hour<155> 1 - PositiveUnsuppliedEnergy::area::hour<155> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<155> AreaBalance::area::hour<155> -1 - NegativeUnsuppliedEnergy::area::hour<155> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<155> AreaBalance::area::hour<155> 1 - NegativeUnsuppliedEnergy::area::hour<155> FictiveLoads::area::hour<155> 1 - NTCDirect::link::hour<156> AreaBalance::area::hour<156> 1 - NTCDirect::link::hour<156> AreaBalance::area::hour<156> -1 - NTCDirect::link::hour<156> R985 1 - NTCDirect::link::hour<156> R986 1 - PositiveUnsuppliedEnergy::area::hour<156> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<156> AreaBalance::area::hour<156> -1 - NegativeUnsuppliedEnergy::area::hour<156> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<156> AreaBalance::area::hour<156> 1 - NegativeUnsuppliedEnergy::area::hour<156> FictiveLoads::area::hour<156> 1 - PositiveUnsuppliedEnergy::area::hour<156> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<156> AreaBalance::area::hour<156> -1 - NegativeUnsuppliedEnergy::area::hour<156> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<156> AreaBalance::area::hour<156> 1 - NegativeUnsuppliedEnergy::area::hour<156> FictiveLoads::area::hour<156> 1 - NTCDirect::link::hour<157> AreaBalance::area::hour<157> 1 - NTCDirect::link::hour<157> AreaBalance::area::hour<157> -1 - NTCDirect::link::hour<157> R987 1 - NTCDirect::link::hour<157> R988 1 - PositiveUnsuppliedEnergy::area::hour<157> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<157> AreaBalance::area::hour<157> -1 - NegativeUnsuppliedEnergy::area::hour<157> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<157> AreaBalance::area::hour<157> 1 - NegativeUnsuppliedEnergy::area::hour<157> FictiveLoads::area::hour<157> 1 - PositiveUnsuppliedEnergy::area::hour<157> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<157> AreaBalance::area::hour<157> -1 - NegativeUnsuppliedEnergy::area::hour<157> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<157> AreaBalance::area::hour<157> 1 - NegativeUnsuppliedEnergy::area::hour<157> FictiveLoads::area::hour<157> 1 - NTCDirect::link::hour<158> AreaBalance::area::hour<158> 1 - NTCDirect::link::hour<158> AreaBalance::area::hour<158> -1 - NTCDirect::link::hour<158> R989 1 - NTCDirect::link::hour<158> R990 1 - PositiveUnsuppliedEnergy::area::hour<158> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<158> AreaBalance::area::hour<158> -1 - NegativeUnsuppliedEnergy::area::hour<158> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<158> AreaBalance::area::hour<158> 1 - NegativeUnsuppliedEnergy::area::hour<158> FictiveLoads::area::hour<158> 1 - PositiveUnsuppliedEnergy::area::hour<158> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<158> AreaBalance::area::hour<158> -1 - NegativeUnsuppliedEnergy::area::hour<158> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<158> AreaBalance::area::hour<158> 1 - NegativeUnsuppliedEnergy::area::hour<158> FictiveLoads::area::hour<158> 1 - NTCDirect::link::hour<159> AreaBalance::area::hour<159> 1 - NTCDirect::link::hour<159> AreaBalance::area::hour<159> -1 - NTCDirect::link::hour<159> R991 1 - NTCDirect::link::hour<159> R992 1 - PositiveUnsuppliedEnergy::area::hour<159> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<159> AreaBalance::area::hour<159> -1 - NegativeUnsuppliedEnergy::area::hour<159> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<159> AreaBalance::area::hour<159> 1 - NegativeUnsuppliedEnergy::area::hour<159> FictiveLoads::area::hour<159> 1 - PositiveUnsuppliedEnergy::area::hour<159> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<159> AreaBalance::area::hour<159> -1 - NegativeUnsuppliedEnergy::area::hour<159> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<159> AreaBalance::area::hour<159> 1 - NegativeUnsuppliedEnergy::area::hour<159> FictiveLoads::area::hour<159> 1 - NTCDirect::link::hour<160> AreaBalance::area::hour<160> 1 - NTCDirect::link::hour<160> AreaBalance::area::hour<160> -1 - NTCDirect::link::hour<160> R993 1 - NTCDirect::link::hour<160> R994 1 - PositiveUnsuppliedEnergy::area::hour<160> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<160> AreaBalance::area::hour<160> -1 - NegativeUnsuppliedEnergy::area::hour<160> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<160> AreaBalance::area::hour<160> 1 - NegativeUnsuppliedEnergy::area::hour<160> FictiveLoads::area::hour<160> 1 - PositiveUnsuppliedEnergy::area::hour<160> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<160> AreaBalance::area::hour<160> -1 - NegativeUnsuppliedEnergy::area::hour<160> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<160> AreaBalance::area::hour<160> 1 - NegativeUnsuppliedEnergy::area::hour<160> FictiveLoads::area::hour<160> 1 - NTCDirect::link::hour<161> AreaBalance::area::hour<161> 1 - NTCDirect::link::hour<161> AreaBalance::area::hour<161> -1 - NTCDirect::link::hour<161> R995 1 - NTCDirect::link::hour<161> R996 1 - PositiveUnsuppliedEnergy::area::hour<161> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<161> AreaBalance::area::hour<161> -1 - NegativeUnsuppliedEnergy::area::hour<161> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<161> AreaBalance::area::hour<161> 1 - NegativeUnsuppliedEnergy::area::hour<161> FictiveLoads::area::hour<161> 1 - PositiveUnsuppliedEnergy::area::hour<161> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<161> AreaBalance::area::hour<161> -1 - NegativeUnsuppliedEnergy::area::hour<161> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<161> AreaBalance::area::hour<161> 1 - NegativeUnsuppliedEnergy::area::hour<161> FictiveLoads::area::hour<161> 1 - NTCDirect::link::hour<162> AreaBalance::area::hour<162> 1 - NTCDirect::link::hour<162> AreaBalance::area::hour<162> -1 - NTCDirect::link::hour<162> R997 1 - NTCDirect::link::hour<162> R998 1 - PositiveUnsuppliedEnergy::area::hour<162> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<162> AreaBalance::area::hour<162> -1 - NegativeUnsuppliedEnergy::area::hour<162> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<162> AreaBalance::area::hour<162> 1 - NegativeUnsuppliedEnergy::area::hour<162> FictiveLoads::area::hour<162> 1 - PositiveUnsuppliedEnergy::area::hour<162> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<162> AreaBalance::area::hour<162> -1 - NegativeUnsuppliedEnergy::area::hour<162> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<162> AreaBalance::area::hour<162> 1 - NegativeUnsuppliedEnergy::area::hour<162> FictiveLoads::area::hour<162> 1 - NTCDirect::link::hour<163> AreaBalance::area::hour<163> 1 - NTCDirect::link::hour<163> AreaBalance::area::hour<163> -1 - NTCDirect::link::hour<163> R999 1 - NTCDirect::link::hour<163> R1000 1 - PositiveUnsuppliedEnergy::area::hour<163> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<163> AreaBalance::area::hour<163> -1 - NegativeUnsuppliedEnergy::area::hour<163> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<163> AreaBalance::area::hour<163> 1 - NegativeUnsuppliedEnergy::area::hour<163> FictiveLoads::area::hour<163> 1 - PositiveUnsuppliedEnergy::area::hour<163> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<163> AreaBalance::area::hour<163> -1 - NegativeUnsuppliedEnergy::area::hour<163> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<163> AreaBalance::area::hour<163> 1 - NegativeUnsuppliedEnergy::area::hour<163> FictiveLoads::area::hour<163> 1 - NTCDirect::link::hour<164> AreaBalance::area::hour<164> 1 - NTCDirect::link::hour<164> AreaBalance::area::hour<164> -1 - NTCDirect::link::hour<164> R1001 1 - NTCDirect::link::hour<164> R1002 1 - PositiveUnsuppliedEnergy::area::hour<164> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<164> AreaBalance::area::hour<164> -1 - NegativeUnsuppliedEnergy::area::hour<164> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<164> AreaBalance::area::hour<164> 1 - NegativeUnsuppliedEnergy::area::hour<164> FictiveLoads::area::hour<164> 1 - PositiveUnsuppliedEnergy::area::hour<164> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<164> AreaBalance::area::hour<164> -1 - NegativeUnsuppliedEnergy::area::hour<164> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<164> AreaBalance::area::hour<164> 1 - NegativeUnsuppliedEnergy::area::hour<164> FictiveLoads::area::hour<164> 1 - NTCDirect::link::hour<165> AreaBalance::area::hour<165> 1 - NTCDirect::link::hour<165> AreaBalance::area::hour<165> -1 - NTCDirect::link::hour<165> R1003 1 - NTCDirect::link::hour<165> R1004 1 - PositiveUnsuppliedEnergy::area::hour<165> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<165> AreaBalance::area::hour<165> -1 - NegativeUnsuppliedEnergy::area::hour<165> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<165> AreaBalance::area::hour<165> 1 - NegativeUnsuppliedEnergy::area::hour<165> FictiveLoads::area::hour<165> 1 - PositiveUnsuppliedEnergy::area::hour<165> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<165> AreaBalance::area::hour<165> -1 - NegativeUnsuppliedEnergy::area::hour<165> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<165> AreaBalance::area::hour<165> 1 - NegativeUnsuppliedEnergy::area::hour<165> FictiveLoads::area::hour<165> 1 - NTCDirect::link::hour<166> AreaBalance::area::hour<166> 1 - NTCDirect::link::hour<166> AreaBalance::area::hour<166> -1 - NTCDirect::link::hour<166> R1005 1 - NTCDirect::link::hour<166> R1006 1 - PositiveUnsuppliedEnergy::area::hour<166> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<166> AreaBalance::area::hour<166> -1 - NegativeUnsuppliedEnergy::area::hour<166> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<166> AreaBalance::area::hour<166> 1 - NegativeUnsuppliedEnergy::area::hour<166> FictiveLoads::area::hour<166> 1 - PositiveUnsuppliedEnergy::area::hour<166> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<166> AreaBalance::area::hour<166> -1 - NegativeUnsuppliedEnergy::area::hour<166> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<166> AreaBalance::area::hour<166> 1 - NegativeUnsuppliedEnergy::area::hour<166> FictiveLoads::area::hour<166> 1 - NTCDirect::link::hour<167> AreaBalance::area::hour<167> 1 - NTCDirect::link::hour<167> AreaBalance::area::hour<167> -1 - NTCDirect::link::hour<167> R1007 1 - NTCDirect::link::hour<167> R1008 1 - PositiveUnsuppliedEnergy::area::hour<167> OBJECTIF -0.0005875622 - PositiveUnsuppliedEnergy::area::hour<167> AreaBalance::area::hour<167> -1 - NegativeUnsuppliedEnergy::area::hour<167> OBJECTIF -0.0005875622 - NegativeUnsuppliedEnergy::area::hour<167> AreaBalance::area::hour<167> 1 - NegativeUnsuppliedEnergy::area::hour<167> FictiveLoads::area::hour<167> 1 - PositiveUnsuppliedEnergy::area::hour<167> OBJECTIF 0.0005669392 - PositiveUnsuppliedEnergy::area::hour<167> AreaBalance::area::hour<167> -1 - NegativeUnsuppliedEnergy::area::hour<167> OBJECTIF 0.0005669392 - NegativeUnsuppliedEnergy::area::hour<167> AreaBalance::area::hour<167> 1 - NegativeUnsuppliedEnergy::area::hour<167> FictiveLoads::area::hour<167> 1 - transmission_line R673 -0.95 - transmission_line R674 0.93 - transmission_line R675 -0.95 - transmission_line R676 0.93 - transmission_line R677 -0.95 - transmission_line R678 0.93 - transmission_line R679 -0.95 - transmission_line R680 0.93 - transmission_line R681 -0.95 - transmission_line R682 0.93 - transmission_line R683 -0.95 - transmission_line R684 0.93 - transmission_line R685 -0.95 - transmission_line R686 0.93 - transmission_line R687 -0.95 - transmission_line R688 0.94 - transmission_line R689 -0.95 - transmission_line R690 0.94 - transmission_line R691 -0.95 - transmission_line R692 0.94 - transmission_line R693 -0.95 - transmission_line R694 0.94 - transmission_line R695 -0.95 - transmission_line R696 0.94 - transmission_line R697 -0.95 - transmission_line R698 0.94 - transmission_line R699 -0.95 - transmission_line R700 0.94 - transmission_line R701 -0.95 - transmission_line R702 0.94 - transmission_line R703 -0.95 - transmission_line R704 0.94 - transmission_line R705 -0.95 - transmission_line R706 0.94 - transmission_line R707 -0.95 - transmission_line R708 0.94 - transmission_line R709 -0.95 - transmission_line R710 0.94 - transmission_line R711 -0.95 - transmission_line R712 0.94 - transmission_line R713 -0.95 - transmission_line R714 0.93 - transmission_line R715 -0.95 - transmission_line R716 0.93 - transmission_line R717 -0.95 - transmission_line R718 0.93 - transmission_line R719 -0.95 - transmission_line R720 0.93 - transmission_line R721 -0.95 - transmission_line R722 0.93 - transmission_line R723 -0.95 - transmission_line R724 0.93 - transmission_line R725 -0.95 - transmission_line R726 0.93 - transmission_line R727 -0.95 - transmission_line R728 0.93 - transmission_line R729 -0.95 - transmission_line R730 0.93 - transmission_line R731 -0.95 - transmission_line R732 0.93 - transmission_line R733 -0.95 - transmission_line R734 0.93 - transmission_line R735 -0.95 - transmission_line R736 0.94 - transmission_line R737 -0.95 - transmission_line R738 0.94 - transmission_line R739 -0.95 - transmission_line R740 0.94 - transmission_line R741 -0.95 - transmission_line R742 0.94 - transmission_line R743 -0.95 - transmission_line R744 0.94 - transmission_line R745 -0.95 - transmission_line R746 0.94 - transmission_line R747 -0.95 - transmission_line R748 0.94 - transmission_line R749 -0.95 - transmission_line R750 0.94 - transmission_line R751 -0.95 - transmission_line R752 0.94 - transmission_line R753 -0.95 - transmission_line R754 0.94 - transmission_line R755 -0.95 - transmission_line R756 0.94 - transmission_line R757 -0.95 - transmission_line R758 0.94 - transmission_line R759 -0.95 - transmission_line R760 0.94 - transmission_line R761 -0.95 - transmission_line R762 0.93 - transmission_line R763 -0.95 - transmission_line R764 0.93 - transmission_line R765 -0.95 - transmission_line R766 0.93 - transmission_line R767 -0.95 - transmission_line R768 0.93 - transmission_line R769 -0.95 - transmission_line R770 0.93 - transmission_line R771 -0.95 - transmission_line R772 0.93 - transmission_line R773 -0.95 - transmission_line R774 0.93 - transmission_line R775 -0.95 - transmission_line R776 0.93 - transmission_line R777 -0.95 - transmission_line R778 0.93 - transmission_line R779 -0.95 - transmission_line R780 0.93 - transmission_line R781 -0.95 - transmission_line R782 0.93 - transmission_line R783 -0.95 - transmission_line R784 0.94 - transmission_line R785 -0.95 - transmission_line R786 0.94 - transmission_line R787 -0.95 - transmission_line R788 0.94 - transmission_line R789 -0.95 - transmission_line R790 0.94 - transmission_line R791 -0.95 - transmission_line R792 0.94 - transmission_line R793 -0.95 - transmission_line R794 0.94 - transmission_line R795 -0.95 - transmission_line R796 0.94 - transmission_line R797 -0.95 - transmission_line R798 0.94 - transmission_line R799 -0.95 - transmission_line R800 0.94 - transmission_line R801 -0.95 - transmission_line R802 0.94 - transmission_line R803 -0.95 - transmission_line R804 0.94 - transmission_line R805 -0.95 - transmission_line R806 0.94 - transmission_line R807 -0.95 - transmission_line R808 0.94 - transmission_line R809 -0.95 - transmission_line R810 0.93 - transmission_line R811 -0.95 - transmission_line R812 0.93 - transmission_line R813 -0.95 - transmission_line R814 0.93 - transmission_line R815 -0.95 - transmission_line R816 0.93 - transmission_line R817 -0.95 - transmission_line R818 0.93 - transmission_line R819 -0.95 - transmission_line R820 0.93 - transmission_line R821 -0.95 - transmission_line R822 0.93 - transmission_line R823 -0.95 - transmission_line R824 0.93 - transmission_line R825 -0.95 - transmission_line R826 0.93 - transmission_line R827 -0.95 - transmission_line R828 0.93 - transmission_line R829 -0.95 - transmission_line R830 0.93 - transmission_line R831 -0.95 - transmission_line R832 0.94 - transmission_line R833 -0.95 - transmission_line R834 0.94 - transmission_line R835 -0.95 - transmission_line R836 0.94 - transmission_line R837 -0.95 - transmission_line R838 0.94 - transmission_line R839 -0.95 - transmission_line R840 0.94 - transmission_line R841 -0.95 - transmission_line R842 0.94 - transmission_line R843 -0.95 - transmission_line R844 0.94 - transmission_line R845 -0.95 - transmission_line R846 0.94 - transmission_line R847 -0.95 - transmission_line R848 0.94 - transmission_line R849 -0.95 - transmission_line R850 0.94 - transmission_line R851 -0.95 - transmission_line R852 0.94 - transmission_line R853 -0.95 - transmission_line R854 0.94 - transmission_line R855 -0.95 - transmission_line R856 0.94 - transmission_line R857 -0.95 - transmission_line R858 0.93 - transmission_line R859 -0.95 - transmission_line R860 0.93 - transmission_line R861 -0.95 - transmission_line R862 0.93 - transmission_line R863 -0.95 - transmission_line R864 0.93 - transmission_line R865 -0.95 - transmission_line R866 0.93 - transmission_line R867 -0.95 - transmission_line R868 0.93 - transmission_line R869 -0.95 - transmission_line R870 0.93 - transmission_line R871 -0.95 - transmission_line R872 0.93 - transmission_line R873 -0.95 - transmission_line R874 0.93 - transmission_line R875 -0.95 - transmission_line R876 0.93 - transmission_line R877 -0.95 - transmission_line R878 0.93 - transmission_line R879 -0.95 - transmission_line R880 0.94 - transmission_line R881 -0.95 - transmission_line R882 0.94 - transmission_line R883 -0.95 - transmission_line R884 0.94 - transmission_line R885 -0.95 - transmission_line R886 0.94 - transmission_line R887 -0.95 - transmission_line R888 0.94 - transmission_line R889 -0.95 - transmission_line R890 0.94 - transmission_line R891 -0.95 - transmission_line R892 0.94 - transmission_line R893 -0.95 - transmission_line R894 0.94 - transmission_line R895 -0.95 - transmission_line R896 0.94 - transmission_line R897 -0.95 - transmission_line R898 0.94 - transmission_line R899 -0.95 - transmission_line R900 0.94 - transmission_line R901 -0.95 - transmission_line R902 0.94 - transmission_line R903 -0.95 - transmission_line R904 0.94 - transmission_line R905 -0.95 - transmission_line R906 0.93 - transmission_line R907 -0.95 - transmission_line R908 0.93 - transmission_line R909 -0.95 - transmission_line R910 0.93 - transmission_line R911 -0.95 - transmission_line R912 0.93 - transmission_line R913 -0.95 - transmission_line R914 0.93 - transmission_line R915 -0.95 - transmission_line R916 0.93 - transmission_line R917 -0.95 - transmission_line R918 0.93 - transmission_line R919 -0.95 - transmission_line R920 0.93 - transmission_line R921 -0.95 - transmission_line R922 0.93 - transmission_line R923 -0.95 - transmission_line R924 0.93 - transmission_line R925 -0.95 - transmission_line R926 0.93 - transmission_line R927 -0.95 - transmission_line R928 0.94 - transmission_line R929 -0.95 - transmission_line R930 0.94 - transmission_line R931 -0.95 - transmission_line R932 0.94 - transmission_line R933 -0.95 - transmission_line R934 0.94 - transmission_line R935 -0.95 - transmission_line R936 0.94 - transmission_line R937 -0.95 - transmission_line R938 0.94 - transmission_line R939 -0.95 - transmission_line R940 0.94 - transmission_line R941 -0.95 - transmission_line R942 0.94 - transmission_line R943 -0.95 - transmission_line R944 0.94 - transmission_line R945 -0.95 - transmission_line R946 0.94 - transmission_line R947 -0.95 - transmission_line R948 0.94 - transmission_line R949 -0.95 - transmission_line R950 0.94 - transmission_line R951 -0.95 - transmission_line R952 0.94 - transmission_line R953 -0.95 - transmission_line R954 0.93 - transmission_line R955 -0.95 - transmission_line R956 0.93 - transmission_line R957 -0.95 - transmission_line R958 0.93 - transmission_line R959 -0.95 - transmission_line R960 0.93 - transmission_line R961 -0.95 - transmission_line R962 0.93 - transmission_line R963 -0.95 - transmission_line R964 0.93 - transmission_line R965 -0.95 - transmission_line R966 0.93 - transmission_line R967 -0.95 - transmission_line R968 0.93 - transmission_line R969 -0.95 - transmission_line R970 0.93 - transmission_line R971 -0.95 - transmission_line R972 0.93 - transmission_line R973 -0.95 - transmission_line R974 0.93 - transmission_line R975 -0.95 - transmission_line R976 0.94 - transmission_line R977 -0.95 - transmission_line R978 0.94 - transmission_line R979 -0.95 - transmission_line R980 0.94 - transmission_line R981 -0.95 - transmission_line R982 0.94 - transmission_line R983 -0.95 - transmission_line R984 0.94 - transmission_line R985 -0.95 - transmission_line R986 0.94 - transmission_line R987 -0.95 - transmission_line R988 0.94 - transmission_line R989 -0.95 - transmission_line R990 0.94 - transmission_line R991 -0.95 - transmission_line R992 0.94 - transmission_line R993 -0.95 - transmission_line R994 0.94 - transmission_line R995 -0.95 - transmission_line R996 0.94 - transmission_line R997 -0.95 - transmission_line R998 0.94 - transmission_line R999 -0.95 - transmission_line R1000 0.94 - transmission_line R1001 -0.95 - transmission_line R1002 0.93 - transmission_line R1003 -0.95 - transmission_line R1004 0.93 - transmission_line R1005 -0.95 - transmission_line R1006 0.93 - transmission_line R1007 -0.95 - transmission_line R1008 0.93 -BOUNDS - FR BNDVALUE NTCDirect::link::hour<0> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<0> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<0> 1e-05 - FR BNDVALUE NTCDirect::link::hour<1> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<1> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<1> 1e-05 - FR BNDVALUE NTCDirect::link::hour<2> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<2> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<2> 1e-05 - FR BNDVALUE NTCDirect::link::hour<3> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<3> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<3> 1e-05 - FR BNDVALUE NTCDirect::link::hour<4> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<4> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<4> 1e-05 - FR BNDVALUE NTCDirect::link::hour<5> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<5> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<5> 1e-05 - FR BNDVALUE NTCDirect::link::hour<6> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<6> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<6> 1e-05 - FR BNDVALUE NTCDirect::link::hour<7> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<7> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<7> 1e-05 - FR BNDVALUE NTCDirect::link::hour<8> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<8> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<8> 1e-05 - FR BNDVALUE NTCDirect::link::hour<9> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<9> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<9> 1e-05 - FR BNDVALUE NTCDirect::link::hour<10> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<10> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<10> 1e-05 - FR BNDVALUE NTCDirect::link::hour<11> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<11> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<11> 1e-05 - FR BNDVALUE NTCDirect::link::hour<12> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<12> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<12> 1e-05 - FR BNDVALUE NTCDirect::link::hour<13> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<13> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<13> 1e-05 - FR BNDVALUE NTCDirect::link::hour<14> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<14> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<14> 1e-05 - FR BNDVALUE NTCDirect::link::hour<15> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<15> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<15> 1e-05 - FR BNDVALUE NTCDirect::link::hour<16> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<16> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<16> 1e-05 - FR BNDVALUE NTCDirect::link::hour<17> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<17> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<17> 1e-05 - FR BNDVALUE NTCDirect::link::hour<18> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<18> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<18> 1e-05 - FR BNDVALUE NTCDirect::link::hour<19> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<19> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<19> 1e-05 - FR BNDVALUE NTCDirect::link::hour<20> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<20> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<20> 1e-05 - FR BNDVALUE NTCDirect::link::hour<21> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<21> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<21> 1e-05 - FR BNDVALUE NTCDirect::link::hour<22> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<22> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<22> 1e-05 - FR BNDVALUE NTCDirect::link::hour<23> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<23> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<23> 1e-05 - FR BNDVALUE NTCDirect::link::hour<24> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<24> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<24> 1e-05 - FR BNDVALUE NTCDirect::link::hour<25> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<25> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<25> 1e-05 - FR BNDVALUE NTCDirect::link::hour<26> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<26> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<26> 1e-05 - FR BNDVALUE NTCDirect::link::hour<27> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<27> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<27> 1e-05 - FR BNDVALUE NTCDirect::link::hour<28> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<28> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<28> 1e-05 - FR BNDVALUE NTCDirect::link::hour<29> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<29> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<29> 1e-05 - FR BNDVALUE NTCDirect::link::hour<30> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<30> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<30> 1e-05 - FR BNDVALUE NTCDirect::link::hour<31> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<31> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<31> 1e-05 - FR BNDVALUE NTCDirect::link::hour<32> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<32> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<32> 1e-05 - FR BNDVALUE NTCDirect::link::hour<33> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<33> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<33> 1e-05 - FR BNDVALUE NTCDirect::link::hour<34> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<34> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<34> 1e-05 - FR BNDVALUE NTCDirect::link::hour<35> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<35> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<35> 1e-05 - FR BNDVALUE NTCDirect::link::hour<36> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<36> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<36> 1e-05 - FR BNDVALUE NTCDirect::link::hour<37> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<37> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<37> 1e-05 - FR BNDVALUE NTCDirect::link::hour<38> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<38> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<38> 1e-05 - FR BNDVALUE NTCDirect::link::hour<39> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<39> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<39> 1e-05 - FR BNDVALUE NTCDirect::link::hour<40> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<40> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<40> 1e-05 - FR BNDVALUE NTCDirect::link::hour<41> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<41> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<41> 1e-05 - FR BNDVALUE NTCDirect::link::hour<42> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<42> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<42> 1e-05 - FR BNDVALUE NTCDirect::link::hour<43> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<43> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<43> 1e-05 - FR BNDVALUE NTCDirect::link::hour<44> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<44> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<44> 1e-05 - FR BNDVALUE NTCDirect::link::hour<45> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<45> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<45> 1e-05 - FR BNDVALUE NTCDirect::link::hour<46> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<46> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<46> 1e-05 - FR BNDVALUE NTCDirect::link::hour<47> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<47> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<47> 1e-05 - FR BNDVALUE NTCDirect::link::hour<48> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<48> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<48> 1e-05 - FR BNDVALUE NTCDirect::link::hour<49> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<49> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<49> 1e-05 - FR BNDVALUE NTCDirect::link::hour<50> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<50> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<50> 1e-05 - FR BNDVALUE NTCDirect::link::hour<51> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<51> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<51> 1e-05 - FR BNDVALUE NTCDirect::link::hour<52> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<52> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<52> 1e-05 - FR BNDVALUE NTCDirect::link::hour<53> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<53> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<53> 1e-05 - FR BNDVALUE NTCDirect::link::hour<54> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<54> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<54> 1e-05 - FR BNDVALUE NTCDirect::link::hour<55> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<55> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<55> 1e-05 - FR BNDVALUE NTCDirect::link::hour<56> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<56> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<56> 1e-05 - FR BNDVALUE NTCDirect::link::hour<57> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<57> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<57> 1e-05 - FR BNDVALUE NTCDirect::link::hour<58> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<58> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<58> 1e-05 - FR BNDVALUE NTCDirect::link::hour<59> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<59> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<59> 1e-05 - FR BNDVALUE NTCDirect::link::hour<60> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<60> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<60> 1e-05 - FR BNDVALUE NTCDirect::link::hour<61> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<61> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<61> 1e-05 - FR BNDVALUE NTCDirect::link::hour<62> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<62> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<62> 1e-05 - FR BNDVALUE NTCDirect::link::hour<63> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<63> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<63> 1e-05 - FR BNDVALUE NTCDirect::link::hour<64> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<64> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<64> 1e-05 - FR BNDVALUE NTCDirect::link::hour<65> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<65> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<65> 1e-05 - FR BNDVALUE NTCDirect::link::hour<66> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<66> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<66> 1e-05 - FR BNDVALUE NTCDirect::link::hour<67> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<67> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<67> 1e-05 - FR BNDVALUE NTCDirect::link::hour<68> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<68> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<68> 1e-05 - FR BNDVALUE NTCDirect::link::hour<69> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<69> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<69> 1e-05 - FR BNDVALUE NTCDirect::link::hour<70> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<70> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<70> 1e-05 - FR BNDVALUE NTCDirect::link::hour<71> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<71> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<71> 1e-05 - FR BNDVALUE NTCDirect::link::hour<72> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<72> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<72> 1e-05 - FR BNDVALUE NTCDirect::link::hour<73> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<73> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<73> 1e-05 - FR BNDVALUE NTCDirect::link::hour<74> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<74> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<74> 1e-05 - FR BNDVALUE NTCDirect::link::hour<75> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<75> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<75> 1e-05 - FR BNDVALUE NTCDirect::link::hour<76> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<76> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<76> 1e-05 - FR BNDVALUE NTCDirect::link::hour<77> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<77> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<77> 1e-05 - FR BNDVALUE NTCDirect::link::hour<78> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<78> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<78> 1e-05 - FR BNDVALUE NTCDirect::link::hour<79> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<79> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<79> 1e-05 - FR BNDVALUE NTCDirect::link::hour<80> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<80> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<80> 1e-05 - FR BNDVALUE NTCDirect::link::hour<81> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<81> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<81> 1e-05 - FR BNDVALUE NTCDirect::link::hour<82> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<82> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<82> 1e-05 - FR BNDVALUE NTCDirect::link::hour<83> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<83> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<83> 1e-05 - FR BNDVALUE NTCDirect::link::hour<84> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<84> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<84> 1e-05 - FR BNDVALUE NTCDirect::link::hour<85> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<85> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<85> 1e-05 - FR BNDVALUE NTCDirect::link::hour<86> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<86> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<86> 1e-05 - FR BNDVALUE NTCDirect::link::hour<87> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<87> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<87> 1e-05 - FR BNDVALUE NTCDirect::link::hour<88> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<88> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<88> 1e-05 - FR BNDVALUE NTCDirect::link::hour<89> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<89> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<89> 1e-05 - FR BNDVALUE NTCDirect::link::hour<90> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<90> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<90> 1e-05 - FR BNDVALUE NTCDirect::link::hour<91> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<91> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<91> 1e-05 - FR BNDVALUE NTCDirect::link::hour<92> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<92> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<92> 1e-05 - FR BNDVALUE NTCDirect::link::hour<93> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<93> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<93> 1e-05 - FR BNDVALUE NTCDirect::link::hour<94> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<94> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<94> 1e-05 - FR BNDVALUE NTCDirect::link::hour<95> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<95> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<95> 1e-05 - FR BNDVALUE NTCDirect::link::hour<96> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<96> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<96> 1e-05 - FR BNDVALUE NTCDirect::link::hour<97> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<97> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<97> 1e-05 - FR BNDVALUE NTCDirect::link::hour<98> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<98> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<98> 1e-05 - FR BNDVALUE NTCDirect::link::hour<99> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<99> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<99> 1e-05 - FR BNDVALUE NTCDirect::link::hour<100> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<100> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<100> 1e-05 - FR BNDVALUE NTCDirect::link::hour<101> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<101> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<101> 1e-05 - FR BNDVALUE NTCDirect::link::hour<102> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<102> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<102> 1e-05 - FR BNDVALUE NTCDirect::link::hour<103> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<103> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<103> 1e-05 - FR BNDVALUE NTCDirect::link::hour<104> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<104> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<104> 1e-05 - FR BNDVALUE NTCDirect::link::hour<105> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<105> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<105> 1e-05 - FR BNDVALUE NTCDirect::link::hour<106> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<106> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<106> 1e-05 - FR BNDVALUE NTCDirect::link::hour<107> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<107> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<107> 1e-05 - FR BNDVALUE NTCDirect::link::hour<108> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<108> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<108> 1e-05 - FR BNDVALUE NTCDirect::link::hour<109> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<109> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<109> 1e-05 - FR BNDVALUE NTCDirect::link::hour<110> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<110> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<110> 1e-05 - FR BNDVALUE NTCDirect::link::hour<111> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<111> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<111> 1e-05 - FR BNDVALUE NTCDirect::link::hour<112> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<112> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<112> 1e-05 - FR BNDVALUE NTCDirect::link::hour<113> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<113> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<113> 1e-05 - FR BNDVALUE NTCDirect::link::hour<114> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<114> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<114> 1e-05 - FR BNDVALUE NTCDirect::link::hour<115> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<115> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<115> 1e-05 - FR BNDVALUE NTCDirect::link::hour<116> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<116> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<116> 1e-05 - FR BNDVALUE NTCDirect::link::hour<117> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<117> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<117> 1e-05 - FR BNDVALUE NTCDirect::link::hour<118> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<118> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<118> 1e-05 - FR BNDVALUE NTCDirect::link::hour<119> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<119> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<119> 1e-05 - FR BNDVALUE NTCDirect::link::hour<120> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<120> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<120> 1e-05 - FR BNDVALUE NTCDirect::link::hour<121> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<121> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<121> 1e-05 - FR BNDVALUE NTCDirect::link::hour<122> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<122> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<122> 1e-05 - FR BNDVALUE NTCDirect::link::hour<123> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<123> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<123> 1e-05 - FR BNDVALUE NTCDirect::link::hour<124> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<124> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<124> 1e-05 - FR BNDVALUE NTCDirect::link::hour<125> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<125> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<125> 1e-05 - FR BNDVALUE NTCDirect::link::hour<126> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<126> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<126> 1e-05 - FR BNDVALUE NTCDirect::link::hour<127> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<127> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<127> 1e-05 - FR BNDVALUE NTCDirect::link::hour<128> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<128> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<128> 1e-05 - FR BNDVALUE NTCDirect::link::hour<129> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<129> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<129> 1e-05 - FR BNDVALUE NTCDirect::link::hour<130> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<130> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<130> 1e-05 - FR BNDVALUE NTCDirect::link::hour<131> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<131> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<131> 1e-05 - FR BNDVALUE NTCDirect::link::hour<132> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<132> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<132> 1e-05 - FR BNDVALUE NTCDirect::link::hour<133> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<133> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<133> 1e-05 - FR BNDVALUE NTCDirect::link::hour<134> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<134> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<134> 1e-05 - FR BNDVALUE NTCDirect::link::hour<135> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<135> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<135> 1e-05 - FR BNDVALUE NTCDirect::link::hour<136> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<136> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<136> 1e-05 - FR BNDVALUE NTCDirect::link::hour<137> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<137> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<137> 1e-05 - FR BNDVALUE NTCDirect::link::hour<138> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<138> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<138> 1e-05 - FR BNDVALUE NTCDirect::link::hour<139> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<139> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<139> 1e-05 - FR BNDVALUE NTCDirect::link::hour<140> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<140> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<140> 1e-05 - FR BNDVALUE NTCDirect::link::hour<141> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<141> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<141> 1e-05 - FR BNDVALUE NTCDirect::link::hour<142> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<142> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<142> 1e-05 - FR BNDVALUE NTCDirect::link::hour<143> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<143> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<143> 1e-05 - FR BNDVALUE NTCDirect::link::hour<144> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<144> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<144> 1e-05 - FR BNDVALUE NTCDirect::link::hour<145> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<145> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<145> 1e-05 - FR BNDVALUE NTCDirect::link::hour<146> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<146> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<146> 1e-05 - FR BNDVALUE NTCDirect::link::hour<147> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<147> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<147> 1e-05 - FR BNDVALUE NTCDirect::link::hour<148> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<148> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<148> 1e-05 - FR BNDVALUE NTCDirect::link::hour<149> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<149> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<149> 1e-05 - FR BNDVALUE NTCDirect::link::hour<150> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<150> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<150> 1e-05 - FR BNDVALUE NTCDirect::link::hour<151> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<151> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<151> 1e-05 - FR BNDVALUE NTCDirect::link::hour<152> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<152> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<152> 1e-05 - FR BNDVALUE NTCDirect::link::hour<153> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<153> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<153> 1e-05 - FR BNDVALUE NTCDirect::link::hour<154> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<154> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<154> 1e-05 - FR BNDVALUE NTCDirect::link::hour<155> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<155> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<155> 1e-05 - FR BNDVALUE NTCDirect::link::hour<156> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<156> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<156> 1e-05 - FR BNDVALUE NTCDirect::link::hour<157> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<157> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<157> 1e-05 - FR BNDVALUE NTCDirect::link::hour<158> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<158> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<158> 1e-05 - FR BNDVALUE NTCDirect::link::hour<159> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<159> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<159> 1e-05 - FR BNDVALUE NTCDirect::link::hour<160> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<160> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<160> 1e-05 - FR BNDVALUE NTCDirect::link::hour<161> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<161> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<161> 1e-05 - FR BNDVALUE NTCDirect::link::hour<162> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<162> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<162> 1e-05 - FR BNDVALUE NTCDirect::link::hour<163> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<163> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<163> 1e-05 - FR BNDVALUE NTCDirect::link::hour<164> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<164> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<164> 1e-05 - FR BNDVALUE NTCDirect::link::hour<165> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<165> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<165> 1e-05 - FR BNDVALUE NTCDirect::link::hour<166> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<166> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<166> 1e-05 - FR BNDVALUE NTCDirect::link::hour<167> - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<167> 1e-05 - UP BNDVALUE PositiveUnsuppliedEnergy::area::hour<167> 1e-05 - FR BNDVALUE transmission_line -ENDATA diff --git a/data_test/tests_lpnamer/tests_integer/test_lpnamer_Xpress/output/economy/reference_lp/problem-1-1--optim-nb-1.svf b/data_test/tests_lpnamer/tests_integer/test_lpnamer_Xpress/output/economy/reference_lp/problem-1-1--optim-nb-1.svf new file mode 100644 index 0000000000000000000000000000000000000000..e0e5fc3cad617f0a19af020622735b9794bcbead GIT binary patch literal 16860 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 b_R3Ww+}ofXJGQrX?eKePMCOL>+3|k>p>qHe literal 0 HcmV?d00001 diff --git a/data_test/tests_lpnamer/tests_integer/test_lpnamer_Xpress/output/economy/reference_lp/structure.txt b/data_test/tests_lpnamer/tests_integer/test_lpnamer_Xpress/output/economy/reference_lp/structure.txt index 3c651267e..bfd9517f5 100644 --- a/data_test/tests_lpnamer/tests_integer/test_lpnamer_Xpress/output/economy/reference_lp/structure.txt +++ b/data_test/tests_lpnamer/tests_integer/test_lpnamer_Xpress/output/economy/reference_lp/structure.txt @@ -1,2 +1,2 @@ master transmission_line 0 - problem-1-1--optim-nb-1.mps transmission_line 840 + problem-1-1--optim-nb-1.svf transmission_line 840 diff --git a/docs/changelog/CHANGELOG.md b/docs/changelog/CHANGELOG.md index 1d170917a..482a25583 100644 --- a/docs/changelog/CHANGELOG.md +++ b/docs/changelog/CHANGELOG.md @@ -4,12 +4,13 @@ Antares-Xpansion changelog v1.4.0 (12/2024) -------------------------------------------------------- ### Features -* Update Antares Simulator to 9.2-RC7 +* Update Antares Simulator to 9.2 * Output file **criterions.txt** is renamed **LOLD.txt** as it gathers the loss of load for each area at each iteration of the algorithm * End to end coherence of solvers : if Xpress is selected, it is also used for Antares step (does not work yet with memory mode), if coin is selected, sirius is used in Antares * Support for in memory problems between Antares and problem generation * Remove local UI support [#972](https://github.com/AntaresSimulatorTeam/antares-xpansion/pull/972) * Properly handle Antares Simulator errors. Especially error -9 occurring when running out of memory where Xpansion tried to continue in an improper state. +* When using xpress, problems generated by problem_generation are in a binary format to save space. ### For developers * Various improvement on dependency management through vcpkg. diff --git a/docs/developer-guide/xpansion_steps/0-overview.md b/docs/developer-guide/xpansion_steps/0-overview.md index e4de36783..b76e727af 100644 --- a/docs/developer-guide/xpansion_steps/0-overview.md +++ b/docs/developer-guide/xpansion_steps/0-overview.md @@ -20,8 +20,7 @@ This stage is responsible for building the investment optimization problem, usin Using the data on investment candidates specified in the `user/expansion/candidates.ini` file, Antares-Xpansion modifies the `.mps` problems provided by -Antares-Simulator in the previous step to add information on the candidates. These modified problems, still written - as `.mps` files, are the so-called _satellite problems_. They correspond to the supply-demand problem to be solved once the investment has been fixed to a given value (that changes during the Antares-Xpansion optimization). +Antares-Simulator in the previous step to add information on the candidates. These modified problems are the so-called _satellite problems_. They correspond to the supply-demand problem to be solved once the investment has been fixed to a given value (that changes during the Antares-Xpansion optimization) This stage is also responsible for building the initial _master problem_ used for Benders decomposition. If there are additional constraints linking the investment candidates (defined in the `additional-constraints` field of the `user/expansion/settings.ini` file), then they are added to the _master problem_. diff --git a/docs/developer-guide/xpansion_steps/2-problem-modification.md b/docs/developer-guide/xpansion_steps/2-problem-modification.md index 422d59d08..59d25f565 100644 --- a/docs/developer-guide/xpansion_steps/2-problem-modification.md +++ b/docs/developer-guide/xpansion_steps/2-problem-modification.md @@ -154,26 +154,26 @@ The _master problem_ is created from the list of candidates in the following way ### 5- Creation of a variable / column ID mapping file -A file (`structure.txt`) is created, containing for each `.mps` file, the associated column ID for the candidates. +A file (`structure.txt`) is created, containing for each satellite problem and the master, the associated column ID for the candidates. !!! Example ``` - master battery 0 - master peak 1 - master pv 2 - master semibase 3 - master transmission_line 4 - problem-1-1-20210713-163528 battery 5547 - problem-1-1-20210713-163528 peak 5545 - problem-1-1-20210713-163528 pv 5548 - problem-1-1-20210713-163528 semibase 5546 - problem-1-1-20210713-163528 transmission_line 5544 + master battery 0 + master peak 1 + master pv 2 + master semibase 3 + master transmission_line 4 + problem-1-1-20210713-163528.mps battery 5547 + problem-1-1-20210713-163528.mps peak 5545 + problem-1-1-20210713-163528.mps pv 5548 + problem-1-1-20210713-163528.mps semibase 5546 + problem-1-1-20210713-163528.mps transmission_line 5544 ``` Here: - In `master.mps`, the candidate `battery` has column ID `0`, - - In `problem-1-1-20210713-163528`, the candidate `peak` has column ID `5545`. + - In `problem-1-1-20210713-163528` corresponding file `problem-1-1-20210713-163528.mps`, the candidate `peak` has column ID `5545`. !!! Note The column ID is no longer used by `benders`. This file must still be created so that `benders` knows the list of candidate for each problem. diff --git a/src/cpp/benders/benders_core/BendersBase.cpp b/src/cpp/benders/benders_core/BendersBase.cpp index 7b476d94f..09d16300f 100644 --- a/src/cpp/benders/benders_core/BendersBase.cpp +++ b/src/cpp/benders/benders_core/BendersBase.cpp @@ -686,8 +686,13 @@ double BendersBase::SubproblemWeight(int subproblem_count, * \brief Get path to master problem mps file from options */ std::filesystem::path BendersBase::get_master_path() const { - return std::filesystem::path(_options.INPUTROOT) / - (_options.MASTER_NAME + MPS_SUFFIX); + if (_options.PROBLEMS_FORMAT == ProblemsFormat::SAVED_FILE && _options.SOLVER_NAME == "XPRESS") { + return std::filesystem::path(_options.INPUTROOT) / + (_options.MASTER_NAME + SAVE_SUFFIX); + } else { + return std::filesystem::path(_options.INPUTROOT) / + (_options.MASTER_NAME + MPS_SUFFIX); + } } /*! * \brief Get path to last mps file of master problem diff --git a/src/cpp/benders/benders_core/CMakeLists.txt b/src/cpp/benders/benders_core/CMakeLists.txt index bb5e7744d..8659c22e4 100644 --- a/src/cpp/benders/benders_core/CMakeLists.txt +++ b/src/cpp/benders/benders_core/CMakeLists.txt @@ -31,22 +31,22 @@ target_sources(benders_core PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include/antares-xpansion/benders/benders_core/BendersBase.h ${CMAKE_CURRENT_SOURCE_DIR}/include/antares-xpansion/benders/benders_core/BendersMathLogger.h ${CMAKE_CURRENT_SOURCE_DIR}/include/antares-xpansion/benders/benders_core/BendersStructsDatas.h + ${CMAKE_CURRENT_SOURCE_DIR}/include/antares-xpansion/benders/benders_core/CriterionComputation.h + ${CMAKE_CURRENT_SOURCE_DIR}/include/antares-xpansion/benders/benders_core/CriterionInputDataReader.h ${CMAKE_CURRENT_SOURCE_DIR}/include/antares-xpansion/benders/benders_core/CustomVector.h ${CMAKE_CURRENT_SOURCE_DIR}/include/antares-xpansion/benders/benders_core/CutsManagement.h ${CMAKE_CURRENT_SOURCE_DIR}/include/antares-xpansion/benders/benders_core/LastIterationPrinter.h ${CMAKE_CURRENT_SOURCE_DIR}/include/antares-xpansion/benders/benders_core/LastIterationReader.h ${CMAKE_CURRENT_SOURCE_DIR}/include/antares-xpansion/benders/benders_core/LastIterationWriter.h ${CMAKE_CURRENT_SOURCE_DIR}/include/antares-xpansion/benders/benders_core/MasterUpdate.h + ${CMAKE_CURRENT_SOURCE_DIR}/include/antares-xpansion/benders/benders_core/ProblemFormat.h ${CMAKE_CURRENT_SOURCE_DIR}/include/antares-xpansion/benders/benders_core/SimulationOptions.h ${CMAKE_CURRENT_SOURCE_DIR}/include/antares-xpansion/benders/benders_core/StartUp.h ${CMAKE_CURRENT_SOURCE_DIR}/include/antares-xpansion/benders/benders_core/SubproblemWorker.h + ${CMAKE_CURRENT_SOURCE_DIR}/include/antares-xpansion/benders/benders_core/VariablesGroup.h ${CMAKE_CURRENT_SOURCE_DIR}/include/antares-xpansion/benders/benders_core/Worker.h ${CMAKE_CURRENT_SOURCE_DIR}/include/antares-xpansion/benders/benders_core/WorkerMaster.h ${CMAKE_CURRENT_SOURCE_DIR}/include/antares-xpansion/benders/benders_core/common.h - ${CMAKE_CURRENT_SOURCE_DIR}/include/antares-xpansion/benders/benders_core/CriterionComputation.h - ${CMAKE_CURRENT_SOURCE_DIR}/include/antares-xpansion/benders/benders_core/CriterionInputDataReader.h - ${CMAKE_CURRENT_SOURCE_DIR}/include/antares-xpansion/benders/benders_core/VariablesGroup.h - ${CMAKE_CURRENT_SOURCE_DIR}/include/antares-xpansion/benders/benders_core/CouplingMapGenerator.h ) add_library(antaresXpansion::benders_core ALIAS benders_core) diff --git a/src/cpp/benders/benders_core/SimulationOptions.cpp b/src/cpp/benders/benders_core/SimulationOptions.cpp index addbea32f..1a7288a1c 100644 --- a/src/cpp/benders/benders_core/SimulationOptions.cpp +++ b/src/cpp/benders/benders_core/SimulationOptions.cpp @@ -19,6 +19,9 @@ Json::Value SimulationOptions::get_value_from_json( } return _input; } + +template <> inline ProblemsFormat Json::Value::as() const { return problemsFormatFromString(asString()); } + /*! * \brief Constructor of Benders Options * @@ -133,6 +136,7 @@ BaseOptions SimulationOptions::get_base_options() const { result.SLAVE_WEIGHT = SLAVE_WEIGHT; result.MASTER_NAME = MASTER_NAME; result.STRUCTURE_FILE = STRUCTURE_FILE; + result.PROBLEMS_FORMAT = PROBLEMS_FORMAT; result.INPUTROOT = INPUTROOT; result.SOLVER_NAME = SOLVER_NAME; result.weights = _weights; diff --git a/src/cpp/benders/benders_core/Worker.cpp b/src/cpp/benders/benders_core/Worker.cpp index fff3ee543..02440893b 100644 --- a/src/cpp/benders/benders_core/Worker.cpp +++ b/src/cpp/benders/benders_core/Worker.cpp @@ -51,7 +51,7 @@ void Worker::init(VariableMap const &variable_map, _solver->set_threads(1); _solver->set_output_log_level(log_level); - _solver->read_prob_mps(path_to_mps); + read_prob(_solver.get(), path_to_mps); _name_to_id = variable_map; @@ -142,3 +142,21 @@ void Worker::AddRows(std::vector const &qrtype_p, int Worker::Getnrows() const { return _solver->get_nrows(); } int Worker::Getncols() const { return _solver->get_ncols(); } + +/** + * Have `problem` read the problem problem data from `path` + * + * Used to hold logic to select between mps/save/etc. + * @param problem + * @param path + */ +void Worker::read_prob(SolverAbstract * problem, + const std::filesystem::path &path) const { + if (path.extension() == ".mps") { + problem->read_prob_mps(path); + } else if (path.extension() == ".svf") {//Brittle + problem->restore_prob(path); + } else { + throw LogUtils::XpansionError("Unknown file extension for problem file: " + path.string(), LOGLOCATION); + } +} diff --git a/src/cpp/benders/benders_core/include/antares-xpansion/benders/benders_core/BendersStructsDatas.h b/src/cpp/benders/benders_core/include/antares-xpansion/benders/benders_core/BendersStructsDatas.h index c193252ac..b458228d6 100644 --- a/src/cpp/benders/benders_core/include/antares-xpansion/benders/benders_core/BendersStructsDatas.h +++ b/src/cpp/benders/benders_core/include/antares-xpansion/benders/benders_core/BendersStructsDatas.h @@ -22,34 +22,33 @@ struct CriteriaCurrentIterationData { * struct that hold current Benders iteration */ struct CurrentIterationData { - double subproblems_walltime; - double subproblems_cputime; - double subproblems_cumulative_cputime; - double timer_master; - double lb; - double ub; - double best_ub; - int deletedcut; - int it; - double iteration_time; - bool stop; - double overall_subpb_cost_under_approx; + double subproblems_walltime = 0; + double subproblems_cputime = 0; + double subproblems_cumulative_cputime = 0; + double timer_master = 0; + double lb = -1e20; + double ub = +1e20; + double best_ub = +1e20; + int it = 0; + double iteration_time = 0; + bool stop = false; + double overall_subpb_cost_under_approx = 0; std::vector single_subpb_costs_under_approx; double subproblem_cost; double invest_cost; - int best_it; + int best_it = 0; Point x_in; Point x_out; Point x_cut; Point min_invest; Point max_invest; - int nsubproblem; - int master_status; - double benders_time; - StoppingCriterion stopping_criterion; - bool is_in_initial_relaxation; - int number_of_subproblem_solved; - int cumulative_number_of_subproblem_solved; + int nsubproblem = 0; + int master_status = SOLVER_STATUS::UNKNOWN; + double benders_time = 0; + StoppingCriterion stopping_criterion = StoppingCriterion::empty; + bool is_in_initial_relaxation = false; + int number_of_subproblem_solved = 0; + int cumulative_number_of_subproblem_solved = 0; int min_simplexiter; int max_simplexiter; // ugly diff --git a/src/cpp/benders/benders_core/include/antares-xpansion/benders/benders_core/ProblemFormat.h b/src/cpp/benders/benders_core/include/antares-xpansion/benders/benders_core/ProblemFormat.h new file mode 100644 index 000000000..c71164d74 --- /dev/null +++ b/src/cpp/benders/benders_core/include/antares-xpansion/benders/benders_core/ProblemFormat.h @@ -0,0 +1,29 @@ +#pragma once + +#include +#include +enum class ProblemsFormat { MPS_FILE, SAVED_FILE }; + +inline ProblemsFormat problemsFormatFromString(const std::string &str) { + if (str == "MPS") { + return ProblemsFormat::MPS_FILE; + } else if (str == "SAVED") { + return ProblemsFormat::SAVED_FILE; + } else { + throw std::runtime_error("Unknown ProblemsFormat: " + str); + } +} + +inline std::ostream &operator<<(std::ostream &stream, ProblemsFormat const &rhs) { + switch (rhs) { + case ProblemsFormat::MPS_FILE: + stream << "MPS_FILE"; + break; + case ProblemsFormat::SAVED_FILE: + stream << "SAVED_FILE"; + break; + default: + stream << "Unknown"; + } + return stream; +} \ No newline at end of file diff --git a/src/cpp/benders/benders_core/include/antares-xpansion/benders/benders_core/SimulationOptions.hxx b/src/cpp/benders/benders_core/include/antares-xpansion/benders/benders_core/SimulationOptions.hxx index 11adc7e87..f7ac7fd7b 100644 --- a/src/cpp/benders/benders_core/include/antares-xpansion/benders/benders_core/SimulationOptions.hxx +++ b/src/cpp/benders/benders_core/include/antares-xpansion/benders/benders_core/SimulationOptions.hxx @@ -38,6 +38,9 @@ BENDERS_OPTIONS_MACRO(SLAVE_WEIGHT_VALUE, double, 1, asDouble()) // Name of the master problem file, if different from 'master' BENDERS_OPTIONS_MACRO(MASTER_NAME, std::string, "master", asString()) +//Format of the problems +BENDERS_OPTIONS_MACRO(PROBLEMS_FORMAT, ProblemsFormat, ProblemsFormat::MPS_FILE, as()) + // Number of slaves to use to solve the problem BENDERS_OPTIONS_MACRO(STRUCTURE_FILE, std::string, "structure.txt", asString()) diff --git a/src/cpp/benders/benders_core/include/antares-xpansion/benders/benders_core/Worker.h b/src/cpp/benders/benders_core/include/antares-xpansion/benders/benders_core/Worker.h index ee0471cbf..73ae873ee 100644 --- a/src/cpp/benders/benders_core/include/antares-xpansion/benders/benders_core/Worker.h +++ b/src/cpp/benders/benders_core/include/antares-xpansion/benders/benders_core/Worker.h @@ -70,4 +70,8 @@ class Worker { bool _is_master = false; Logger logger_; + + private: + void read_prob(SolverAbstract * problem, + const std::filesystem::path &path) const; }; diff --git a/src/cpp/benders/benders_core/include/antares-xpansion/benders/benders_core/common.h b/src/cpp/benders/benders_core/include/antares-xpansion/benders/benders_core/common.h index 795b4f15d..5a34b83eb 100644 --- a/src/cpp/benders/benders_core/include/antares-xpansion/benders/benders_core/common.h +++ b/src/cpp/benders/benders_core/include/antares-xpansion/benders/benders_core/common.h @@ -23,6 +23,8 @@ #include #include +#include "ProblemFormat.h" + enum class MasterFormulation { INTEGER, RELAXED }; enum class SOLVER { BENDERS, OUTER_LOOP, MERGE_MPS }; @@ -139,6 +141,7 @@ const std::string SUBPROBLEM_WEIGHT_CST_STR("CONSTANT"); const std::string SUBPROBLEM_WEIGHT_UNIFORM_CST_STR("UNIFORM"); const std::string WEIGHT_SUM_CST_STR("WEIGHT_SUM"); const std::string MPS_SUFFIX = ".mps"; +const std::string SAVE_SUFFIX = ".svf"; struct BaseOptions { std::string OUTPUTROOT; @@ -146,6 +149,7 @@ struct BaseOptions { std::string STRUCTURE_FILE; std::string LAST_ITERATION_JSON_FILE; std::string MASTER_NAME; + ProblemsFormat PROBLEMS_FORMAT = ProblemsFormat::MPS_FILE; std::string SOLVER_NAME; std::string SLAVE_WEIGHT; std::string AREA_FILE; diff --git a/src/cpp/lpnamer/helper/ProblemGenerationLogger.cpp b/src/cpp/lpnamer/helper/ProblemGenerationLogger.cpp index edf65603e..0d3da579d 100644 --- a/src/cpp/lpnamer/helper/ProblemGenerationLogger.cpp +++ b/src/cpp/lpnamer/helper/ProblemGenerationLogger.cpp @@ -121,7 +121,7 @@ const std::string& ProblemGenerationLogger::getContext() const { return context_; } -ProblemGenerationLoggerSharedPointer BuildLogger( +std::shared_ptr BuildLogger( const std::filesystem::path& log_file_path, std::ostream& stream, const std::string& context) { auto logFile = std::make_shared(log_file_path); diff --git a/src/cpp/lpnamer/helper/include/antares-xpansion/lpnamer/helper/ProblemGenerationLogger.h b/src/cpp/lpnamer/helper/include/antares-xpansion/lpnamer/helper/ProblemGenerationLogger.h index 3de18e30a..b721ca28a 100644 --- a/src/cpp/lpnamer/helper/include/antares-xpansion/lpnamer/helper/ProblemGenerationLogger.h +++ b/src/cpp/lpnamer/helper/include/antares-xpansion/lpnamer/helper/ProblemGenerationLogger.h @@ -70,10 +70,6 @@ class ProblemGenerationOstreamLogger : public ProblemGenerationILogger { std::ostream& GetOstreamObject() override; }; -class ProblemGenerationLogger; -using ProblemGenerationLoggerSharedPointer = - std::shared_ptr; - class ProblemGenerationLogger : public ILoggerXpansion { private: LogUtils::LOGLEVEL log_level_; @@ -103,7 +99,7 @@ class ProblemGenerationLogger : public ILoggerXpansion { ProblemGenerationLogger& operator<<(std::ostream& (*f)(std::ostream&)); ProblemGenerationLogger& operator<<( - const ProblemGenerationLoggerSharedPointer logger) { + const std::shared_ptr logger) { return (*logger); } ProblemGenerationLogger& operator<<(const LogUtils::LOGLEVEL log_level); @@ -125,7 +121,7 @@ ProblemGenerationLogger& ProblemGenerationLogger::operator<<(T const& t) { } return *this; } -ProblemGenerationLoggerSharedPointer BuildLogger( +std::shared_ptr BuildLogger( const std::filesystem::path& log_file_path, std::ostream& stream, const std::string& context); diff --git a/src/cpp/lpnamer/input_reader/AdditionalConstraintsReader.cpp b/src/cpp/lpnamer/input_reader/AdditionalConstraintsReader.cpp index 983696ec5..b130d5016 100644 --- a/src/cpp/lpnamer/input_reader/AdditionalConstraintsReader.cpp +++ b/src/cpp/lpnamer/input_reader/AdditionalConstraintsReader.cpp @@ -105,7 +105,7 @@ void AdditionalConstraintsReader::processEntryLine() { AdditionalConstraintsReader::AdditionalConstraintsReader( std::string const& constraints_file_path, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger) + std::shared_ptr logger) : logger_(logger) { std::ifstream file_l(constraints_file_path); diff --git a/src/cpp/lpnamer/input_reader/CandidatesINIReader.cpp b/src/cpp/lpnamer/input_reader/CandidatesINIReader.cpp index d7f07c1ab..3a9f9808d 100644 --- a/src/cpp/lpnamer/input_reader/CandidatesINIReader.cpp +++ b/src/cpp/lpnamer/input_reader/CandidatesINIReader.cpp @@ -12,7 +12,7 @@ CandidatesINIReader::CandidatesINIReader( const std::filesystem::path &antaresIntercoFile, const std::filesystem::path &areaFile, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger) + std::shared_ptr logger) : logger_(logger) { _intercoFileData = ReadAntaresIntercoFile(antaresIntercoFile); diff --git a/src/cpp/lpnamer/input_reader/GeneralDataReader.cpp b/src/cpp/lpnamer/input_reader/GeneralDataReader.cpp index ec01875d8..9e214e150 100644 --- a/src/cpp/lpnamer/input_reader/GeneralDataReader.cpp +++ b/src/cpp/lpnamer/input_reader/GeneralDataReader.cpp @@ -36,7 +36,7 @@ class IniReaderUtils { }; GeneralDataIniReader::GeneralDataIniReader( const std::filesystem::path& file_path, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger) + std::shared_ptr logger) : logger_(logger) { if (file_path.empty() || !std::filesystem::exists(file_path)) { std::ostringstream msg; diff --git a/src/cpp/lpnamer/input_reader/VariableFileReader.cpp b/src/cpp/lpnamer/input_reader/VariableFileReader.cpp index d71b0e99f..2de4ccb3f 100644 --- a/src/cpp/lpnamer/input_reader/VariableFileReader.cpp +++ b/src/cpp/lpnamer/input_reader/VariableFileReader.cpp @@ -20,7 +20,7 @@ void updateMapColumn(const std::vector& links, int link_id, VariableFileReader::VariableFileReader( const std::filesystem::path& fileName, const std::vector& links, const VariableFileReadNameConfiguration& variable_name_config, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger) + std::shared_ptr logger) : logger_(logger) { std::string line; std::ifstream file(fileName.c_str()); @@ -38,7 +38,7 @@ VariableFileReader::VariableFileReader( std::istringstream& fileInIStringStream, const std::vector& links, const VariableFileReadNameConfiguration& variable_name_config, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger) + std::shared_ptr logger) : logger_(logger) { ReadVarsFromStream(fileInIStringStream, links, variable_name_config); } diff --git a/src/cpp/lpnamer/input_reader/include/antares-xpansion/lpnamer/input_reader/AdditionalConstraintsReader.h b/src/cpp/lpnamer/input_reader/include/antares-xpansion/lpnamer/input_reader/AdditionalConstraintsReader.h index fd1a24bea..dc8b64ac4 100644 --- a/src/cpp/lpnamer/input_reader/include/antares-xpansion/lpnamer/input_reader/AdditionalConstraintsReader.h +++ b/src/cpp/lpnamer/input_reader/include/antares-xpansion/lpnamer/input_reader/AdditionalConstraintsReader.h @@ -30,14 +30,14 @@ struct AdditionalConstraintsReader { std::string _line = ""; //! number of the line that is being currently processed int _lineNb = 0; - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger_; + std::shared_ptr logger_; public: /*! * default constructor for struct AdditionalConstraintsReader */ AdditionalConstraintsReader( - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger) + std::shared_ptr logger) : logger_(logger) {} /*! @@ -48,7 +48,7 @@ struct AdditionalConstraintsReader { */ explicit AdditionalConstraintsReader( std::string const& constraints_file_path, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger); + std::shared_ptr logger); /*! * \brief return the section defining the binary variables to add diff --git a/src/cpp/lpnamer/input_reader/include/antares-xpansion/lpnamer/input_reader/CandidatesINIReader.h b/src/cpp/lpnamer/input_reader/include/antares-xpansion/lpnamer/input_reader/CandidatesINIReader.h index 79f60e44b..98a257273 100644 --- a/src/cpp/lpnamer/input_reader/include/antares-xpansion/lpnamer/input_reader/CandidatesINIReader.h +++ b/src/cpp/lpnamer/input_reader/include/antares-xpansion/lpnamer/input_reader/CandidatesINIReader.h @@ -23,9 +23,9 @@ class CandidatesINIReader { CandidatesINIReader( const std::filesystem::path& antaresIntercoFile, const std::filesystem::path& areaFile, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger); + std::shared_ptr logger); explicit CandidatesINIReader( - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger) + std::shared_ptr logger) : logger_(logger) {} std::vector ReadAntaresIntercoFile( const std::filesystem::path& antaresIntercoFile) const; @@ -52,7 +52,7 @@ class CandidatesINIReader { std::map _intercoIndexMap; std::vector _intercoFileData; std::vector _areaNames; - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger_; + std::shared_ptr logger_; void ProcessAreaFile(const std::filesystem::path& areaFile); }; diff --git a/src/cpp/lpnamer/input_reader/include/antares-xpansion/lpnamer/input_reader/GeneralDataReader.h b/src/cpp/lpnamer/input_reader/include/antares-xpansion/lpnamer/input_reader/GeneralDataReader.h index e9f116956..ac56c75f4 100644 --- a/src/cpp/lpnamer/input_reader/include/antares-xpansion/lpnamer/input_reader/GeneralDataReader.h +++ b/src/cpp/lpnamer/input_reader/include/antares-xpansion/lpnamer/input_reader/GeneralDataReader.h @@ -15,7 +15,7 @@ class GeneralDataIniReader { private: - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger_; + std::shared_ptr logger_; INIReader reader_; int mc_years_; bool user_playlist_; @@ -37,7 +37,7 @@ class GeneralDataIniReader { public: explicit GeneralDataIniReader( const std::filesystem::path& file_path, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger); + std::shared_ptr logger); int GetNbYears() const { return mc_years_; } diff --git a/src/cpp/lpnamer/input_reader/include/antares-xpansion/lpnamer/input_reader/LinkProfileReader.h b/src/cpp/lpnamer/input_reader/include/antares-xpansion/lpnamer/input_reader/LinkProfileReader.h index 7655782f3..fc538cd26 100644 --- a/src/cpp/lpnamer/input_reader/include/antares-xpansion/lpnamer/input_reader/LinkProfileReader.h +++ b/src/cpp/lpnamer/input_reader/include/antares-xpansion/lpnamer/input_reader/LinkProfileReader.h @@ -12,7 +12,7 @@ class LinkProfileReader { public: explicit LinkProfileReader( - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger) + std::shared_ptr logger) : logger_(std::move(logger)) {} std::vector ReadLinkProfile( @@ -39,7 +39,7 @@ class LinkProfileReader { void UpdateProfile(std::vector& result, bool directProfile, double value, int chronicle_id, size_t time_step)const; void EnsureFileIsGood(const std::filesystem::path& direct_filename) const; - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger_; + std::shared_ptr logger_; }; #endif // ANTARESXPANSION_LINKPROFILEREADER_H diff --git a/src/cpp/lpnamer/input_reader/include/antares-xpansion/lpnamer/input_reader/LpFilesExtractor.h b/src/cpp/lpnamer/input_reader/include/antares-xpansion/lpnamer/input_reader/LpFilesExtractor.h index 04625504a..60fbd6f3c 100644 --- a/src/cpp/lpnamer/input_reader/include/antares-xpansion/lpnamer/input_reader/LpFilesExtractor.h +++ b/src/cpp/lpnamer/input_reader/include/antares-xpansion/lpnamer/input_reader/LpFilesExtractor.h @@ -11,7 +11,7 @@ class LpFilesExtractor { private: const std::filesystem::path antares_archive_path_; const std::filesystem::path xpansion_output_dir_; - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger_; + std::shared_ptr logger_; const SimulationInputMode mode_; const std::filesystem::path& simulation_dir_; @@ -19,7 +19,7 @@ class LpFilesExtractor { explicit LpFilesExtractor( std::filesystem::path antares_archive_path, std::filesystem::path xpansion_output_dir, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger, + std::shared_ptr logger, SimulationInputMode mode, const std::filesystem::path& simulation_dir = {}) : antares_archive_path_(std::move(antares_archive_path)), diff --git a/src/cpp/lpnamer/input_reader/include/antares-xpansion/lpnamer/input_reader/VariableFileReader.h b/src/cpp/lpnamer/input_reader/include/antares-xpansion/lpnamer/input_reader/VariableFileReader.h index b99834115..ddb058ed1 100644 --- a/src/cpp/lpnamer/input_reader/include/antares-xpansion/lpnamer/input_reader/VariableFileReader.h +++ b/src/cpp/lpnamer/input_reader/include/antares-xpansion/lpnamer/input_reader/VariableFileReader.h @@ -29,12 +29,12 @@ class VariableFileReader { const std::filesystem::path& fileName, const std::vector& links, const VariableFileReadNameConfiguration& variable_name_config, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger); + std::shared_ptr logger); VariableFileReader( std::istringstream& fileInIStringStream, const std::vector& links, const VariableFileReadNameConfiguration& variable_name_config, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger); + std::shared_ptr logger); void ReadVarsFromStream( std::istream& stream, const std::vector& links, const VariableFileReadNameConfiguration& variable_name_config); @@ -54,7 +54,7 @@ class VariableFileReader { std::map _ntc_p_var_columns; std::map _indirect_cost_p_var_columns; std::map _direct_cost_p_var_columns; - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger_; + std::shared_ptr logger_; }; #endif // ANTARESXPANSION_VARIABLEFILEREADER_H diff --git a/src/cpp/lpnamer/input_reader/include/antares-xpansion/lpnamer/input_reader/WeightsFileReader.h b/src/cpp/lpnamer/input_reader/include/antares-xpansion/lpnamer/input_reader/WeightsFileReader.h index 0e5f86324..57e1e8ad6 100644 --- a/src/cpp/lpnamer/input_reader/include/antares-xpansion/lpnamer/input_reader/WeightsFileReader.h +++ b/src/cpp/lpnamer/input_reader/include/antares-xpansion/lpnamer/input_reader/WeightsFileReader.h @@ -11,7 +11,7 @@ class WeightsFileReader { private: std::filesystem::path weights_file_path_; size_t number_of_active_years_; - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger_; + std::shared_ptr logger_; bool null_weights = true; std::vector weights_list_; @@ -25,7 +25,7 @@ class WeightsFileReader { explicit WeightsFileReader( const std::filesystem::path& weights_file_path, const size_t number_of_active_years, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger) + std::shared_ptr logger) : weights_file_path_(weights_file_path), number_of_active_years_(number_of_active_years), logger_(logger) {} diff --git a/src/cpp/lpnamer/main/ProblemGeneration.cpp b/src/cpp/lpnamer/main/ProblemGeneration.cpp index 4408f1b98..3a93933f5 100644 --- a/src/cpp/lpnamer/main/ProblemGeneration.cpp +++ b/src/cpp/lpnamer/main/ProblemGeneration.cpp @@ -22,7 +22,7 @@ #include "antares-xpansion/lpnamer/problem_modifier/FileProblemsProviderAdapter.h" #include "antares-xpansion/lpnamer/problem_modifier/LauncherHelpers.h" #include "antares-xpansion/lpnamer/problem_modifier/LinkProblemsGenerator.h" -#include "antares-xpansion/lpnamer/problem_modifier/MPSFileWriter.h" +#include "antares-xpansion/lpnamer/problem_modifier/FileWriter.h" #include "antares-xpansion/lpnamer/problem_modifier/MasterGeneration.h" #include "antares-xpansion/lpnamer/problem_modifier/MasterProblemBuilder.h" #include "antares-xpansion/lpnamer/problem_modifier/ProblemVariablesFileAdapter.h" @@ -68,7 +68,7 @@ namespace { } static std::string solverXpansionToSimulator(const SolverConfig& in) { // in could be Cbc or CBC depending on whether it is defined or not in the - // settings file + // settings file // Use lowerCase in any case to be robust to these subtleties assert(islower(in.Name())); if (in.Name() == "xpress") return "xpress"; @@ -132,6 +132,9 @@ std::filesystem::path ProblemGeneration::updateProblems() { study_dir = std::filesystem::absolute(archive_path).parent_path().parent_path(); // Assume study/output/archive.zip + //If doesn't work + //study_dir = xpansion_output_dir.parent_path().parent_path(); //Assume study/output/archive.zip + } if (mode_ == SimulationInputMode::ANTARES_API) { @@ -183,7 +186,7 @@ std::shared_ptr InstantiateZipReader( void ProblemGeneration::ProcessWeights( const std::filesystem::path& xpansion_output_dir, const std::filesystem::path& weights_file, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger) { + std::shared_ptr logger) { const auto settings_dir = xpansion_output_dir / ".." / ".." / "settings"; const auto general_data_file = settings_dir / "generaldata.ini"; auto genera_data_reader = GeneralDataIniReader(general_data_file, logger); @@ -201,7 +204,7 @@ void ProblemGeneration::ProcessWeights( void ProblemGeneration::ExtractUtilsFiles( const std::filesystem::path& antares_archive_path, const std::filesystem::path& xpansion_output_dir, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger) { + std::shared_ptr logger) { auto utils_files_extractor = LpFilesExtractor(antares_archive_path, xpansion_output_dir, std::move(logger), mode_.value(), simulation_dir_); @@ -210,7 +213,7 @@ void ProblemGeneration::ExtractUtilsFiles( std::vector getLinks( const std::filesystem::path& xpansion_output_dir, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer& logger) { + std::shared_ptr& logger) { ActiveLinksBuilder linkBuilder = get_link_builders(xpansion_output_dir, logger); std::vector links = linkBuilder.getLinks(); @@ -224,7 +227,7 @@ std::vector getLinks( */ void validateMasterFormulation( const std::string& master_formulation, - const ProblemGenerationLog::ProblemGenerationLoggerSharedPointer& logger) { + const std::shared_ptr logger) { if ((master_formulation != "relaxed") && (master_formulation != "integer")) { (*logger)(LogUtils::LOGLEVEL::FATAL) << LOGLOCATION @@ -281,7 +284,7 @@ void ProblemGeneration::RunProblemGeneration( const std::string& master_formulation, const std::string& additionalConstraintFilename_l, const std::filesystem::path& antares_archive_path, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger, + std::shared_ptr logger, const std::filesystem::path& log_file_path, const std::filesystem::path& weights_file, bool unnamed_problems) { (*logger)(LogUtils::LOGLEVEL::INFO) @@ -320,8 +323,8 @@ void ProblemGeneration::RunProblemGeneration( LinkProblemsGenerator linkProblemsGenerator( lpDir_, links, solver_config_, logger, solver_log_manager, rename_problems); std::shared_ptr reader = - antares_archive_path.empty() ? std::make_shared() - : InstantiateZipReader(antares_archive_path); + mode_ == SimulationInputMode::ARCHIVE ? InstantiateZipReader(antares_archive_path) + : std::make_shared(); /* Main stuff */ std::vector> xpansion_problems = getXpansionProblems( @@ -338,7 +341,7 @@ void ProblemGeneration::RunProblemGeneration( problems_and_data.emplace_back(xpansion_problems.at(i), mpsList.at(i)); } } - auto mps_file_writer = std::make_shared(lpDir_); + auto mps_file_writer = std::make_shared(lpDir_); std::for_each( std::execution::par, problems_and_data.begin(), problems_and_data.end(), [&](const auto& problem_and_data) { diff --git a/src/cpp/lpnamer/main/include/antares-xpansion/lpnamer/main/ProblemGeneration.h b/src/cpp/lpnamer/main/include/antares-xpansion/lpnamer/main/ProblemGeneration.h index 98ec4146c..94a049572 100644 --- a/src/cpp/lpnamer/main/include/antares-xpansion/lpnamer/main/ProblemGeneration.h +++ b/src/cpp/lpnamer/main/include/antares-xpansion/lpnamer/main/ProblemGeneration.h @@ -35,18 +35,18 @@ class ProblemGeneration { const std::string& master_formulation, const std::string& additionalConstraintFilename_l, const std::filesystem::path& archive_path, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger, + std::shared_ptr logger, const std::filesystem::path& log_file_path, const std::filesystem::path& weights_file, bool unnamed_problems); void ProcessWeights( const std::filesystem::path& xpansion_output_dir, const std::filesystem::path& weights_file, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger); + std::shared_ptr logger); void ExtractUtilsFiles( const std::filesystem::path& antares_archive_path, const std::filesystem::path& xpansion_output_dir, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger); + std::shared_ptr logger); std::vector> getXpansionProblems( SolverLogManager& solver_log_manager, SolverConfig solver_name, const std::vector& mpsList, std::filesystem::path& lpDir_, diff --git a/src/cpp/lpnamer/model/ActiveLinks.cpp b/src/cpp/lpnamer/model/ActiveLinks.cpp index 5da9c3ce5..d4e0664da 100644 --- a/src/cpp/lpnamer/model/ActiveLinks.cpp +++ b/src/cpp/lpnamer/model/ActiveLinks.cpp @@ -20,7 +20,7 @@ ActiveLinksBuilder::ActiveLinksBuilder( std::vector candidateList, std::map> profile_map, DirectAccessScenarioToChronicleProvider scenario_to_chronicle_provider, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger) + std::shared_ptr logger) : _candidateDatas(std::move(candidateList)), _profile_map(std::move(profile_map)), scenario_to_chronicle_provider_( @@ -33,7 +33,7 @@ ActiveLinksBuilder::ActiveLinksBuilder( ActiveLinksBuilder::ActiveLinksBuilder( const std::vector& candidateList, const std::map>& profile_map, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger) + std::shared_ptr logger) : ActiveLinksBuilder(candidateList, profile_map, DirectAccessScenarioToChronicleProvider("", logger), logger) {} @@ -174,7 +174,7 @@ ActiveLink::ActiveLink( int idLink, std::string linkName, std::string linkor, std::string linkex, const double& already_installed_capacity, std::map mc_year_to_chronicle, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger) + std::shared_ptr logger) : mc_year_to_chronicle_(std::move(mc_year_to_chronicle)), _idLink(idLink), _name(std::move(linkName)), @@ -188,7 +188,7 @@ ActiveLink::ActiveLink( ActiveLink::ActiveLink( int idLink, const std::string& linkName, const std::string& linkor, const std::string& linkex, const double& already_installed_capacity, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger) + std::shared_ptr logger) : ActiveLink(idLink, linkName, linkor, linkex, already_installed_capacity, {}, logger) {} diff --git a/src/cpp/lpnamer/model/Problem.cpp b/src/cpp/lpnamer/model/Problem.cpp index 5ea0d52a0..804aeef6b 100644 --- a/src/cpp/lpnamer/model/Problem.cpp +++ b/src/cpp/lpnamer/model/Problem.cpp @@ -10,3 +10,10 @@ void Problem::read_prob_mps(const std::filesystem::path& filename) { std::tie(mc_year, week) = McYearAndWeek(filename); solver_abstract_->read_prob_mps(filename); } +void Problem::save_prob(const std::filesystem::path& filename) { + solver_abstract_->save_prob(filename); +} +void Problem::restore_prob(const std::filesystem::path& filename) { + std::tie(mc_year, week) = McYearAndWeek(filename); + solver_abstract_->restore_prob(filename); +} diff --git a/src/cpp/lpnamer/model/include/antares-xpansion/lpnamer/model/ActiveLinks.h b/src/cpp/lpnamer/model/include/antares-xpansion/lpnamer/model/ActiveLinks.h index a62f7eed5..9268604c5 100644 --- a/src/cpp/lpnamer/model/include/antares-xpansion/lpnamer/model/ActiveLinks.h +++ b/src/cpp/lpnamer/model/include/antares-xpansion/lpnamer/model/ActiveLinks.h @@ -17,11 +17,11 @@ class ActiveLink { ActiveLink(int idLink, const std::string& linkName, const std::string& linkor, const std::string& linkex, const double& already_installed_capacity, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger); + std::shared_ptr logger); ActiveLink(int idLink, std::string linkName, std::string linkor, std::string linkex, const double& already_installed_capacity, std::map mc_year_to_chronicle, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger); + std::shared_ptr logger); void setAlreadyInstalledLinkProfiles( const std::vector& linkProfile); @@ -63,7 +63,7 @@ class ActiveLink { // Profile de la capa std::vector _already_installed_profile = {}; std::vector _candidates = {}; - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger_; + std::shared_ptr logger_; }; class ActiveLinksBuilder { @@ -72,12 +72,12 @@ class ActiveLinksBuilder { std::vector candidateList, std::map> profile_map, DirectAccessScenarioToChronicleProvider scenario_to_chronicle_provider, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger); + std::shared_ptr logger); ActiveLinksBuilder( const std::vector& candidateList, const std::map>& profile_map, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger); + std::shared_ptr logger); class MultipleAlreadyInstalledCapacityDetectedForLink : public LogUtils::XpansionError { @@ -135,7 +135,7 @@ class ActiveLinksBuilder { const std::map> _profile_map; std::vector _links; DirectAccessScenarioToChronicleProvider scenario_to_chronicle_provider_; - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger_; + std::shared_ptr logger_; }; #endif // ANTARESXPANSION_ACTIVELINKS_H diff --git a/src/cpp/lpnamer/model/include/antares-xpansion/lpnamer/model/ChronicleMapProvider.h b/src/cpp/lpnamer/model/include/antares-xpansion/lpnamer/model/ChronicleMapProvider.h index 2f519ee4d..a52adbfdd 100644 --- a/src/cpp/lpnamer/model/include/antares-xpansion/lpnamer/model/ChronicleMapProvider.h +++ b/src/cpp/lpnamer/model/include/antares-xpansion/lpnamer/model/ChronicleMapProvider.h @@ -17,7 +17,7 @@ class DirectAccessScenarioToChronicleProvider { public: explicit DirectAccessScenarioToChronicleProvider( std::filesystem::path ts_info_root, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger) + std::shared_ptr logger) : ts_info_root_(std::move(ts_info_root)), logger_(logger) {} [[nodiscard]] std::map GetMap( @@ -28,7 +28,7 @@ class DirectAccessScenarioToChronicleProvider { const std::string& link_to) const; std::filesystem::path ts_info_root_; ScenarioToChronicleReader chronicle_map_reader_; - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger_; + std::shared_ptr logger_; }; #endif // ANTARESXPANSION_TESTS_CPP_LP_NAMER_CHRONICLEMAPPROVIDERTEST_CPP_CHRONICLEMAPPROVIDER_H_ diff --git a/src/cpp/lpnamer/model/include/antares-xpansion/lpnamer/model/LinkProfile.h b/src/cpp/lpnamer/model/include/antares-xpansion/lpnamer/model/LinkProfile.h index b77f60711..0c693f23d 100644 --- a/src/cpp/lpnamer/model/include/antares-xpansion/lpnamer/model/LinkProfile.h +++ b/src/cpp/lpnamer/model/include/antares-xpansion/lpnamer/model/LinkProfile.h @@ -22,7 +22,7 @@ class LinkProfile { * */ explicit LinkProfile( - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger) + std::shared_ptr logger) : logger_(logger) {} /*! @@ -60,7 +60,7 @@ class LinkProfile { }; private: - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger_; + std::shared_ptr logger_; }; #endif // ANTARESXPANSION_LINKPROFILE_H diff --git a/src/cpp/lpnamer/model/include/antares-xpansion/lpnamer/model/Problem.h b/src/cpp/lpnamer/model/include/antares-xpansion/lpnamer/model/Problem.h index 553a5f4f8..e26ff41df 100644 --- a/src/cpp/lpnamer/model/include/antares-xpansion/lpnamer/model/Problem.h +++ b/src/cpp/lpnamer/model/include/antares-xpansion/lpnamer/model/Problem.h @@ -203,6 +203,8 @@ class Problem : public SolverAbstract { void read_basis(const std::filesystem::path &filename) override { solver_abstract_->read_basis(filename); } + void save_prob(const std::filesystem::path &filename) override; + void restore_prob(const std::filesystem::path &filename) override; }; #endif // ANTARESXPANSION_SRC_CPP_LPNAMER_MODEL_PROBLEM_H_ diff --git a/src/cpp/lpnamer/problem_modifier/AdditionalConstraints.cpp b/src/cpp/lpnamer/problem_modifier/AdditionalConstraints.cpp index 71117b4ef..3cd46f254 100644 --- a/src/cpp/lpnamer/problem_modifier/AdditionalConstraints.cpp +++ b/src/cpp/lpnamer/problem_modifier/AdditionalConstraints.cpp @@ -9,7 +9,7 @@ AdditionalConstraints::AdditionalConstraints( std::string constraints_file_path, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger) + std::shared_ptr logger) : constraintsFilePath_(std::move(constraints_file_path)), logger_(std::move(logger)) { ReadConstraintsFile(); diff --git a/src/cpp/lpnamer/problem_modifier/CMakeLists.txt b/src/cpp/lpnamer/problem_modifier/CMakeLists.txt index 758241edc..509983265 100644 --- a/src/cpp/lpnamer/problem_modifier/CMakeLists.txt +++ b/src/cpp/lpnamer/problem_modifier/CMakeLists.txt @@ -16,7 +16,7 @@ target_sources(lp_namer_problem_modifier PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/LinkProblemsGenerator.cpp ${CMAKE_CURRENT_SOURCE_DIR}/LinkdataRecord.cpp ${CMAKE_CURRENT_SOURCE_DIR}/MPSFileProblemProviderAdapter.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/MPSFileWriter.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/FileWriter.cpp ${CMAKE_CURRENT_SOURCE_DIR}/MasterGeneration.cpp ${CMAKE_CURRENT_SOURCE_DIR}/MasterProblemBuilder.cpp ${CMAKE_CURRENT_SOURCE_DIR}/ProblemModifier.cpp @@ -38,7 +38,7 @@ target_sources(lp_namer_problem_modifier PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include/antares-xpansion/lpnamer/problem_modifier/LinkProblemsGenerator.h ${CMAKE_CURRENT_SOURCE_DIR}/include/antares-xpansion/lpnamer/problem_modifier/LinkdataRecord.h ${CMAKE_CURRENT_SOURCE_DIR}/include/antares-xpansion/lpnamer/problem_modifier/MPSFileProblemProviderAdapter.h - ${CMAKE_CURRENT_SOURCE_DIR}/include/antares-xpansion/lpnamer/problem_modifier/MPSFileWriter.h + ${CMAKE_CURRENT_SOURCE_DIR}/include/antares-xpansion/lpnamer/problem_modifier/FileWriter.h ${CMAKE_CURRENT_SOURCE_DIR}/include/antares-xpansion/lpnamer/problem_modifier/MasterGeneration.h ${CMAKE_CURRENT_SOURCE_DIR}/include/antares-xpansion/lpnamer/problem_modifier/MasterProblemBuilder.h ${CMAKE_CURRENT_SOURCE_DIR}/include/antares-xpansion/lpnamer/problem_modifier/ProblemModifier.h diff --git a/src/cpp/lpnamer/problem_modifier/FileWriter.cpp b/src/cpp/lpnamer/problem_modifier/FileWriter.cpp new file mode 100644 index 000000000..e94b7c1f1 --- /dev/null +++ b/src/cpp/lpnamer/problem_modifier/FileWriter.cpp @@ -0,0 +1,13 @@ + +#include + +#include "antares-xpansion/lpnamer/problem_modifier/FileWriter.h" +#include "antares-xpansion/lpnamer/problem_modifier/IProblemWriter.h" +#include "antares-xpansion/lpnamer/problem_modifier/LinkProblemsGenerator.h" + +void FileWriter::Write_problem(Problem *in_prblm, const std::filesystem::path &output_file) { + in_prblm->save_prob(output_file); +} + +FileWriter::FileWriter(std::filesystem::path lp_dir) + : lp_dir_(std::move(lp_dir)) {} diff --git a/src/cpp/lpnamer/problem_modifier/LauncherHelpers.cpp b/src/cpp/lpnamer/problem_modifier/LauncherHelpers.cpp index fd3d6240a..a4b43ffda 100644 --- a/src/cpp/lpnamer/problem_modifier/LauncherHelpers.cpp +++ b/src/cpp/lpnamer/problem_modifier/LauncherHelpers.cpp @@ -13,7 +13,7 @@ void treatAdditionalConstraints( SolverAbstract::Ptr master_p, const AdditionalConstraints &additionalConstraints_p, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger) { + std::shared_ptr logger) { // add requested binary variables addBinaryVariables(master_p, additionalConstraints_p.getVariablesToBinarise(), logger); @@ -26,7 +26,7 @@ void treatAdditionalConstraints( char getConstraintSenseSymbol( const AdditionalConstraint &additionalConstraint_p, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger) { + std::shared_ptr logger) { char rtype; if (std::string sign_l = additionalConstraint_p.getSign(); sign_l == "less_or_equal") { @@ -47,7 +47,7 @@ char getConstraintSenseSymbol( void addAdditionalConstraint( SolverAbstract::Ptr master_p, const AdditionalConstraint &additionalConstraint_p, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger) { + std::shared_ptr logger) { auto newnz = (int)additionalConstraint_p.size(); int newrows = 1; std::vector rtype(newrows); @@ -81,7 +81,7 @@ void addAdditionalConstraint( void addBinaryVariables( SolverAbstract::Ptr master_p, const std::map &variablesToBinarise_p, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger) { + std::shared_ptr logger) { for (const auto &pairOldNewVarnames : variablesToBinarise_p) { int col_index = master_p->get_col_index(pairOldNewVarnames.first); @@ -139,7 +139,7 @@ void addBinaryVariables( ActiveLinksBuilder get_link_builders( const std::filesystem::path &xpansion_output_dir, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger) { + std::shared_ptr logger) { const auto area_file_name = xpansion_output_dir / "area.txt"; const auto interco_file_name = xpansion_output_dir / "interco.txt"; diff --git a/src/cpp/lpnamer/problem_modifier/MPSFileWriter.cpp b/src/cpp/lpnamer/problem_modifier/MPSFileWriter.cpp deleted file mode 100644 index 6aae3821c..000000000 --- a/src/cpp/lpnamer/problem_modifier/MPSFileWriter.cpp +++ /dev/null @@ -1,14 +0,0 @@ - -#include "antares-xpansion/lpnamer/problem_modifier/MPSFileWriter.h" - -#include - -#include "antares-xpansion/lpnamer/problem_modifier/IProblemWriter.h" -#include "antares-xpansion/lpnamer/problem_modifier/LinkProblemsGenerator.h" - -void MPSFileWriter::Write_problem(Problem *in_prblm, const std::filesystem::path &output_file) { - in_prblm->write_prob_mps(output_file); -} - -MPSFileWriter::MPSFileWriter(std::filesystem::path lp_dir) - : lp_dir_(std::move(lp_dir)) {} diff --git a/src/cpp/lpnamer/problem_modifier/MasterGeneration.cpp b/src/cpp/lpnamer/problem_modifier/MasterGeneration.cpp index 064025476..fea329994 100644 --- a/src/cpp/lpnamer/problem_modifier/MasterGeneration.cpp +++ b/src/cpp/lpnamer/problem_modifier/MasterGeneration.cpp @@ -2,18 +2,27 @@ #include #include +#include +#include "antares-xpansion/lpnamer/problem_modifier/FileWriter.h" #include "antares-xpansion/lpnamer/problem_modifier/LauncherHelpers.h" #include "antares-xpansion/lpnamer/problem_modifier/MasterProblemBuilder.h" #include "antares-xpansion/multisolver_interface/SolverAbstract.h" +namespace { + using ProblemName = std::string; + using CandidateName = std::string; + using Structure = std::map>; +} MasterGeneration::MasterGeneration( const std::filesystem::path &rootPath, const std::vector &links, const AdditionalConstraints &additionalConstraints_p, Couplings &couplings, - std::string const &master_formulation, std::string const &solver_name, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger, - SolverLogManager&solver_log_manager) - : logger_(logger) { + const std::string &master_formulation, const std::string &solver_name, + std::shared_ptr logger, + SolverLogManager &solver_log_manager) + : logger_(std::move(logger)) + , solver_name_(solver_name) +{ add_candidates(links); write_master_mps(rootPath, master_formulation, solver_name, additionalConstraints_p, solver_log_manager); @@ -36,32 +45,38 @@ void MasterGeneration::write_master_mps( const std::filesystem::path &rootPath, std::string const &master_formulation, std::string const &solver_name, const AdditionalConstraints &additionalConstraints_p, - SolverLogManager&solver_log_manager) const { + SolverLogManager &solver_log_manager) const { auto master_l = MasterProblemBuilder(master_formulation) - .build(solver_name, candidates, solver_log_manager); + .build(solver_name, candidates, solver_log_manager); treatAdditionalConstraints(master_l, additionalConstraints_p, logger_); + Problem master_problem(master_l); + master_problem._name = "master"; + master_problem.save_prob(rootPath / "lp" / "master"); +} - std::string const &lp_name = "master"; - master_l->write_prob_mps(rootPath / "lp" / (lp_name + ".mps")); +std::filesystem::path FileNameForStructureFile(const std::string& problemName, + std::string solverName) { + if (problemName == "master") return {"master"}; + return SolverConfig::FileName(problemName, SolverConfig(std::move(solverName))); } void MasterGeneration::write_structure_file( const std::filesystem::path &rootPath, const Couplings &couplings) const { - std::map> output; + Structure structure; for (const auto &[candidate_name_and_mps_filePath, colId] : couplings) { - output[candidate_name_and_mps_filePath.second] + structure[candidate_name_and_mps_filePath.second] [candidate_name_and_mps_filePath.first] = colId; } unsigned int i = 0; for (auto const &candidate : candidates) { - output["master"][candidate.get_name()] = i; + structure["master"][candidate.get_name()] = i; ++i; } std::ofstream coupling_file(rootPath / "lp" / STRUCTURE_FILE); - for (auto const &[mps_file_path, candidates_name_and_colId] : output) { + for (auto const &[mps_file_path, candidates_name_and_colId] : structure) { for (auto const &[candidate_name, colId] : candidates_name_and_colId) { - coupling_file << std::setw(50) << mps_file_path; + coupling_file << std::setw(50) << FileNameForStructureFile(mps_file_path, solver_name_).string(); coupling_file << std::setw(50) << candidate_name; coupling_file << std::setw(10) << colId; coupling_file << std::endl; diff --git a/src/cpp/lpnamer/problem_modifier/XpansionProblemsFromAntaresProvider.cpp b/src/cpp/lpnamer/problem_modifier/XpansionProblemsFromAntaresProvider.cpp index da5c7ac49..53757ff32 100644 --- a/src/cpp/lpnamer/problem_modifier/XpansionProblemsFromAntaresProvider.cpp +++ b/src/cpp/lpnamer/problem_modifier/XpansionProblemsFromAntaresProvider.cpp @@ -16,17 +16,16 @@ XpansionProblemsFromAntaresProvider::XpansionProblemsFromAntaresProvider( std::vector> XpansionProblemsFromAntaresProvider::provideProblems( const std::string& solver_name, - SolverLogManager& solver_log_manager) const -{ + SolverLogManager& solver_log_manager) const { std::vector> xpansion_problems; - xpansion_problems.reserve( - antares_hebdo_problems.weekCount()); + xpansion_problems.reserve(antares_hebdo_problems.weekCount()); for (const auto& [problem_id, hebdo_data] : antares_hebdo_problems.weeklyProblems) { - xpansion_problems.push_back( + auto&& problem = AntaresProblemToXpansionProblemTranslator::translateToXpansionProblem( - antares_hebdo_problems, - problem_id.year, problem_id.week, solver_name, solver_log_manager)); + antares_hebdo_problems, problem_id.year, problem_id.week, + solver_name, solver_log_manager); + xpansion_problems.push_back(problem); } return xpansion_problems; } \ No newline at end of file diff --git a/src/cpp/lpnamer/problem_modifier/include/antares-xpansion/lpnamer/problem_modifier/AdditionalConstraints.h b/src/cpp/lpnamer/problem_modifier/include/antares-xpansion/lpnamer/problem_modifier/AdditionalConstraints.h index fd0bd0f34..ccc0060c4 100644 --- a/src/cpp/lpnamer/problem_modifier/include/antares-xpansion/lpnamer/problem_modifier/AdditionalConstraints.h +++ b/src/cpp/lpnamer/problem_modifier/include/antares-xpansion/lpnamer/problem_modifier/AdditionalConstraints.h @@ -96,14 +96,14 @@ class AdditionalConstraints std::map _variablesToBinarise; std::set _binaryVariables; std::string constraintsFilePath_; - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger_; + std::shared_ptr logger_; public: /*! * \brief default constructor for struct AdditionalConstraints */ explicit AdditionalConstraints( - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger) + std::shared_ptr logger) : logger_(std::move(logger)) {} /*! @@ -114,7 +114,7 @@ class AdditionalConstraints */ explicit AdditionalConstraints( std::string constraints_file_path, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger); + std::shared_ptr logger); void SetConstraintsFile(std::string const& constraints_file_path) { constraintsFilePath_ = constraints_file_path; diff --git a/src/cpp/lpnamer/problem_modifier/include/antares-xpansion/lpnamer/problem_modifier/MPSFileWriter.h b/src/cpp/lpnamer/problem_modifier/include/antares-xpansion/lpnamer/problem_modifier/FileWriter.h similarity index 76% rename from src/cpp/lpnamer/problem_modifier/include/antares-xpansion/lpnamer/problem_modifier/MPSFileWriter.h rename to src/cpp/lpnamer/problem_modifier/include/antares-xpansion/lpnamer/problem_modifier/FileWriter.h index f51b8e47d..4b6635c34 100644 --- a/src/cpp/lpnamer/problem_modifier/include/antares-xpansion/lpnamer/problem_modifier/MPSFileWriter.h +++ b/src/cpp/lpnamer/problem_modifier/include/antares-xpansion/lpnamer/problem_modifier/FileWriter.h @@ -3,10 +3,10 @@ #include "antares-xpansion/lpnamer/problem_modifier/IProblemWriter.h" #include "antares-xpansion/lpnamer/problem_modifier/LinkProblemsGenerator.h" -class MPSFileWriter : public IProblemWriter { - void Write_problem(Problem *in_prblm, const std::filesystem::path &output_file) override; - +class FileWriter : public IProblemWriter { public: - MPSFileWriter(std::filesystem::path lp_dir); + + void Write_problem(Problem *in_prblm, const std::filesystem::path &output_file) override; + FileWriter(std::filesystem::path lp_dir); std::filesystem::path lp_dir_; }; diff --git a/src/cpp/lpnamer/problem_modifier/include/antares-xpansion/lpnamer/problem_modifier/LauncherHelpers.h b/src/cpp/lpnamer/problem_modifier/include/antares-xpansion/lpnamer/problem_modifier/LauncherHelpers.h index 3eb86c9c1..44d526f18 100644 --- a/src/cpp/lpnamer/problem_modifier/include/antares-xpansion/lpnamer/problem_modifier/LauncherHelpers.h +++ b/src/cpp/lpnamer/problem_modifier/include/antares-xpansion/lpnamer/problem_modifier/LauncherHelpers.h @@ -16,11 +16,11 @@ void treatAdditionalConstraints( SolverAbstract::Ptr master_p, const AdditionalConstraints& additionalConstraints_p, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger); + std::shared_ptr logger); char getConstraintSenseSymbol( const AdditionalConstraint& additionalConstraint_p, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger); + std::shared_ptr logger); /** * \brief adds an additional constraint to an existent solver @@ -30,7 +30,7 @@ char getConstraintSenseSymbol( */ void addAdditionalConstraint( SolverAbstract::Ptr master_p, const AdditionalConstraint& additionalConstraint_p, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger); + std::shared_ptr logger); /** * \brief creates a binary variable and its corresponding linking constraint @@ -47,7 +47,7 @@ void addAdditionalConstraint( void addBinaryVariables( SolverAbstract::Ptr master_p, std::map const& variablesToBinarise_p, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger); + std::shared_ptr logger); /** * \brief return Active Links Builder @@ -56,4 +56,4 @@ void addBinaryVariables( */ ActiveLinksBuilder get_link_builders( const std::filesystem::path& xpansion_output_dir, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger); \ No newline at end of file + std::shared_ptr logger); \ No newline at end of file diff --git a/src/cpp/lpnamer/problem_modifier/include/antares-xpansion/lpnamer/problem_modifier/LinkProblemsGenerator.h b/src/cpp/lpnamer/problem_modifier/include/antares-xpansion/lpnamer/problem_modifier/LinkProblemsGenerator.h index e037d3dc5..a50c06ee7 100644 --- a/src/cpp/lpnamer/problem_modifier/include/antares-xpansion/lpnamer/problem_modifier/LinkProblemsGenerator.h +++ b/src/cpp/lpnamer/problem_modifier/include/antares-xpansion/lpnamer/problem_modifier/LinkProblemsGenerator.h @@ -31,7 +31,7 @@ class LinkProblemsGenerator { LinkProblemsGenerator( std::filesystem::path& lpDir, const std::vector& links, SolverConfig solver_config, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger, + std::shared_ptr logger, SolverLogManager& solver_log_manager, bool rename_problems) : _links(links), solver_config_(std::move(solver_config)), @@ -55,7 +55,7 @@ class LinkProblemsGenerator { const std::vector& _links; SolverConfig solver_config_; std::filesystem::path lpDir_ = ""; - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger_; + std::shared_ptr logger_; mutable std::mutex coupling_mutex_; bool rename_problems_ = false; SolverLogManager& solver_log_manager_; diff --git a/src/cpp/lpnamer/problem_modifier/include/antares-xpansion/lpnamer/problem_modifier/MasterGeneration.h b/src/cpp/lpnamer/problem_modifier/include/antares-xpansion/lpnamer/problem_modifier/MasterGeneration.h index 5304b4d87..cdd10ba57 100644 --- a/src/cpp/lpnamer/problem_modifier/include/antares-xpansion/lpnamer/problem_modifier/MasterGeneration.h +++ b/src/cpp/lpnamer/problem_modifier/include/antares-xpansion/lpnamer/problem_modifier/MasterGeneration.h @@ -19,13 +19,13 @@ class MasterGeneration { * between optim variable and antares variable */ explicit MasterGeneration( - const std::filesystem::path &rootPath, - const std::vector &links, - const AdditionalConstraints &additionalConstraints_p, - Couplings &couplings, std::string const &master_formulation, - std::string const &solver_name, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger, - SolverLogManager&solver_log_manager); + const std::filesystem::path& rootPath, + const std::vector& links, + const AdditionalConstraints& additionalConstraints_p, + Couplings& couplings, const std::string& master_formulation, + const std::string& solver_name, + std::shared_ptr logger, + SolverLogManager& solver_log_manager); private: /*methods*/ void add_candidates(const std::vector &links); @@ -39,6 +39,7 @@ class MasterGeneration { private: /*members*/ std::vector candidates; - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger_; + std::shared_ptr logger_; + const std::string solver_name_; }; #endif //__MASTER_GENERATION__ \ No newline at end of file diff --git a/src/cpp/lpnamer/problem_modifier/include/antares-xpansion/lpnamer/problem_modifier/ProblemModifier.h b/src/cpp/lpnamer/problem_modifier/include/antares-xpansion/lpnamer/problem_modifier/ProblemModifier.h index ac72b52d1..1530b903e 100644 --- a/src/cpp/lpnamer/problem_modifier/include/antares-xpansion/lpnamer/problem_modifier/ProblemModifier.h +++ b/src/cpp/lpnamer/problem_modifier/include/antares-xpansion/lpnamer/problem_modifier/ProblemModifier.h @@ -17,7 +17,7 @@ class ProblemModifier { public: ProblemModifier( - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger) + std::shared_ptr logger) : logger_(logger) {} void changeProblem( @@ -97,7 +97,7 @@ class ProblemModifier { bool candidateContributionIndirectIsNotNull(const ColumnToChange &column, unsigned int chronicle_to_use, const Candidate &candidate) const; - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger_; + std::shared_ptr logger_; }; #endif // ANTARESXPANSION_PROBLEMMODIFIER_H diff --git a/src/cpp/multisolver_interface/SolverCbc.cpp b/src/cpp/multisolver_interface/SolverCbc.cpp index 4bfc0b754..f4cef4048 100644 --- a/src/cpp/multisolver_interface/SolverCbc.cpp +++ b/src/cpp/multisolver_interface/SolverCbc.cpp @@ -139,8 +139,12 @@ void SolverCbc::write_prob_mps(const std::filesystem::path &filename) { _clp_inner_solver.getDblParam(OsiObjOffset, objOffset); writer.setObjectiveOffset(objOffset); - writer.writeMps(filename.string().c_str(), 0 /*gzip it*/, 1, 1, nullptr, 0, - nullptr); + auto filename_to_use = filename; + if (filename_to_use.extension() != ".mps") { + filename_to_use.replace_extension(".mps"); + } + writer.writeMps(filename_to_use.string().c_str(), 0 /*gzip it*/, 1, 1, + nullptr, 0, nullptr); } void SolverCbc::write_prob_lp(const std::filesystem::path &filename) { @@ -182,8 +186,14 @@ void SolverCbc::setClpSimplexRowNamesFromInnerSolver(ClpSimplex *clps) const { } void SolverCbc::read_prob_mps(const std::filesystem::path &prob_name) { - int status = _clp_inner_solver.readMps(prob_name.string().c_str()); - zero_status_check(status, " read problem "s + prob_name.string(), + auto filename_to_use = prob_name; + if (filename_to_use.extension() != ".mps") { + filename_to_use.replace_extension(".mps"); + } + int status = _clp_inner_solver.readMps(filename_to_use.string().c_str()); + zero_status_check(status, + " read problem "s + prob_name.string() + " , filename : "s + + filename_to_use.string(), LOGLOCATION); defineCbcModelFromInnerSolver(); } @@ -688,3 +698,19 @@ void SolverCbc::set_simplex_iter(int iter) { throw InvalidSolverOptionException( "set_simplex_iter : " + std::to_string(iter), LOGLOCATION); } + +/** + * CBC default to write_prob_mps implementation + * @param filename + */ +void SolverCbc::save_prob(const std::filesystem::path &filename) { + write_prob_mps(filename); +} + +/** + * CBC default to read_prob_mps implementation + * @param filename + */ +void SolverCbc::restore_prob(const std::filesystem::path &filename) { + read_prob_mps(filename); +} diff --git a/src/cpp/multisolver_interface/SolverClp.cpp b/src/cpp/multisolver_interface/SolverClp.cpp index b4c0c16f9..0f84f0c04 100644 --- a/src/cpp/multisolver_interface/SolverClp.cpp +++ b/src/cpp/multisolver_interface/SolverClp.cpp @@ -63,7 +63,11 @@ void SolverClp::free() { ------------------------------- *************************************************************************************************/ void SolverClp::write_prob_mps(const std::filesystem::path &filename) { - _clp.writeMps(filename.string().c_str(), 1); + auto filename_to_use = filename; + if (filename_to_use.extension() != ".mps") { + filename_to_use.replace_extension(".mps"); + } + _clp.writeMps(filename_to_use.string().c_str(), 1); } void SolverClp::write_prob_lp(const std::filesystem::path &filename) { @@ -84,8 +88,12 @@ void SolverClp::write_basis(const std::filesystem::path &filename) { } void SolverClp::read_prob_mps(const std::filesystem::path &filename) { - int status = _clp.readMps(filename.string().c_str(), true, false); - zero_status_check(status, " Clp readMps "s + filename.string(), LOGLOCATION); + auto filename_to_use = filename; + if (filename_to_use.extension() != ".mps") { + filename_to_use.replace_extension(".mps"); + } + int status = _clp.readMps(filename_to_use.string().c_str(), true, false); + zero_status_check(status, " Clp readMps "s + filename_to_use.string(), LOGLOCATION); } void SolverClp::read_prob_lp(const std::filesystem::path &filename) { @@ -542,3 +550,19 @@ void SolverClp::set_optimality_gap(double gap) { } void SolverClp::set_simplex_iter(int iter) { _clp.setMaximumIterations(iter); } + +/** + * CLP default to write_prob_mps implementation + * @param filename + */ +void SolverClp::save_prob(const std::filesystem::path &filename) { + write_prob_mps(filename); +} + +/** + * CLP default to read_prob_mps implementation + * @param filename + */ +void SolverClp::restore_prob(const std::filesystem::path &filename) { + read_prob_mps(filename); +} diff --git a/src/cpp/multisolver_interface/SolverConfig.cpp b/src/cpp/multisolver_interface/SolverConfig.cpp index cffdf9791..9c7bd794e 100644 --- a/src/cpp/multisolver_interface/SolverConfig.cpp +++ b/src/cpp/multisolver_interface/SolverConfig.cpp @@ -2,6 +2,7 @@ #include #include +#include "antares-xpansion/xpansion_interfaces/LogUtils.h" #include "antares-xpansion/xpansion_interfaces/LogUtils.h" @@ -29,3 +30,16 @@ void SolverConfig::init(std::string solver_name) { save_restore_supported = save_restore_support.at(name); use_save_restore = save_restore_supported; } + +std::filesystem::path SolverConfig::FileName(const std::string& problemName, + const SolverConfig& solverName) { + const std::string save_ext = ".svf"; + const std::string default_ext = ".mps"; + std::filesystem::path path{problemName}; + if (solverName.use_save_restore) { + path.replace_extension(save_ext); + } else { + path.replace_extension(default_ext); + } + return path; +} diff --git a/src/cpp/multisolver_interface/SolverFactory.cpp b/src/cpp/multisolver_interface/SolverFactory.cpp index 8024e5d2c..7ea62a5a5 100644 --- a/src/cpp/multisolver_interface/SolverFactory.cpp +++ b/src/cpp/multisolver_interface/SolverFactory.cpp @@ -1,4 +1,6 @@ +#include + #include "SolverXpress.h" #include "antares-xpansion/multisolver_interface/environment.h" @@ -9,23 +11,55 @@ #include "antares-xpansion/multisolver_interface/SolverConfig.h" #include "antares-xpansion/multisolver_interface/SolverFactory.h" #include "antares-xpansion/xpansion_interfaces/LogUtils.h" -std::vector available_solvers; -std::vector SolverLoader::GetAvailableSolvers( - std::shared_ptr logger) { +namespace { +// not std::string, static initialization fiasco with tests static +// initialization +const char *COIN_STR("COIN"); +const char *CBC_STR("CBC"); +const char *CLP_STR("CLP"); +const char *XPRESS_STR("XPRESS"); + +#include "antares-xpansion/xpansion_interfaces/LogUtils.h" +std::vector available_solvers; +std::once_flag solver_flag; +void GetAvailableSolversInternal(std::shared_ptr logger) { if (available_solvers.empty()) { - LoadXpress::XpressLoader xpress_loader(logger); + LoadXpress::XpressLoader xpress_loader(std::move(logger)); if (xpress_loader.XpressIsCorrectlyInstalled(true)) { - available_solvers.push_back(XPRESS_STR); + available_solvers.emplace_back(XPRESS_STR); } #ifdef COIN_OR - available_solvers.push_back(CLP_STR); - available_solvers.push_back(CBC_STR); + available_solvers.emplace_back(CLP_STR); + available_solvers.emplace_back(CBC_STR); #endif } +} +} // namespace + +std::vector SolverLoader::GetAvailableSolvers( + std::shared_ptr logger) { + std::call_once(solver_flag, GetAvailableSolversInternal, logger); return available_solvers; } +/** + * @brief Returns a list of supported solvers + * Supported doesn't mean available, for exemple if licence are not available + * @return + */ +std::vector SolverLoader::GetSupportedSolvers() { + static std::vector supported_solvers; + if (supported_solvers.empty()) { + supported_solvers.emplace_back(XPRESS_STR); +#ifdef COIN_OR + supported_solvers.emplace_back(CLP_STR); + supported_solvers.emplace_back(CBC_STR); +#endif + } + return supported_solvers; +} + SolverFactory::SolverFactory(std::shared_ptr logger) : _available_solvers(SolverLoader::GetAvailableSolvers(logger)), logger_(std::move(logger)) { diff --git a/src/cpp/multisolver_interface/SolverXpress.cpp b/src/cpp/multisolver_interface/SolverXpress.cpp index f657e2c7b..87c9bdf82 100644 --- a/src/cpp/multisolver_interface/SolverXpress.cpp +++ b/src/cpp/multisolver_interface/SolverXpress.cpp @@ -603,6 +603,20 @@ void SolverXpress::set_simplex_iter(int iter) { zero_status_check(status, "set simplex max iter", LOGLOCATION); } +void SolverXpress::save_prob(const std::filesystem::path &filename) { + std::filesystem::path filename_to_use{filename}; + filename_to_use.replace_extension(".svf"); + int status = XPRSsaveas(_xprs, filename_to_use.string().c_str()); + char errmsg[512]; + XPRSgetlasterror(_xprs,errmsg); + std::cerr << errmsg << std::endl; + zero_status_check(status, "save problem", LOGLOCATION); +} +void SolverXpress::restore_prob(const std::filesystem::path &filename) { + int status = XPRSrestore(_xprs, filename.string().c_str(), ""); + zero_status_check(status, "restore problem", LOGLOCATION); +} + void XPRS_CC optimizermsg(XPRSprob prob, void *strPtr, const char *sMsg, int nLen, int nMsglvl) { std::list *ptr = NULL; diff --git a/src/cpp/multisolver_interface/environment.cc b/src/cpp/multisolver_interface/environment.cc index 3801e24d4..6b0ddcf68 100644 --- a/src/cpp/multisolver_interface/environment.cc +++ b/src/cpp/multisolver_interface/environment.cc @@ -45,6 +45,15 @@ std::function XPRSwritebasis = nullptr; std::function XPRSreadprob = nullptr; +std::function + XPRSloadsecurevecs = nullptr; +std::function + XPRSgetlasterror = nullptr; +std::function + XPRSsaveas = nullptr; +std::function + XPRSrestore = nullptr; std::function XPRSreadbasis = nullptr; std::functionGetFunction(&XPRScopyprob, "XPRScopyprob"); xpress_dynamic_library->GetFunction(&XPRSwritebasis, "XPRSwritebasis"); xpress_dynamic_library->GetFunction(&XPRSreadprob, "XPRSreadprob"); + xpress_dynamic_library->GetFunction(&XPRSgetlasterror, "XPRSgetlasterror"); + xpress_dynamic_library->GetFunction(&XPRSsaveas, "XPRSsaveas"); + xpress_dynamic_library->GetFunction(&XPRSrestore, "XPRSrestore"); xpress_dynamic_library->GetFunction(&XPRSreadbasis, "XPRSreadbasis"); + xpress_dynamic_library->GetFunction(&XPRSloadsecurevecs, + "XPRSloadsecurevecs"); xpress_dynamic_library->GetFunction(&XPRSgetrows, "XPRSgetrows"); xpress_dynamic_library->GetFunction(&XPRSgetindex, "XPRSgetindex"); xpress_dynamic_library->GetFunction(&XPRSgetnames, "XPRSgetnames"); @@ -424,7 +438,7 @@ bool XpressLoader::initXpressEnv(bool verbose, int xpress_oem_license_key) { msg.str(""); msg << "Warning: " << "Optimizer version: " << version - << " (Antares-Xpansion was compiled with version " << XPVERSION + << " (Antares-Xpansion use Xpress interface version " << XPVERSION << ").\n"; logger_->display_message(msg); } diff --git a/src/cpp/multisolver_interface/include/antares-xpansion/multisolver_interface/SolverAbstract.h b/src/cpp/multisolver_interface/include/antares-xpansion/multisolver_interface/SolverAbstract.h index 9740d6510..7852b5570 100644 --- a/src/cpp/multisolver_interface/include/antares-xpansion/multisolver_interface/SolverAbstract.h +++ b/src/cpp/multisolver_interface/include/antares-xpansion/multisolver_interface/SolverAbstract.h @@ -284,6 +284,15 @@ class SolverAbstract { */ virtual void write_prob_lp(const std::filesystem::path &filename) = 0; + /** + * @brief write an optimisation problem in a file + * + * File format is not garanteed and depend on implementation + * + * @param name : name of the file to read + */ + virtual void save_prob(const std::filesystem::path &filename) = 0; + /** * @brief Writes the current basis to a file for later input into the * optimizer @@ -306,6 +315,15 @@ class SolverAbstract { */ virtual void read_prob_lp(const std::filesystem::path &filename) = 0; + /** + * @brief read an optimisation problem from a file + * + * File format supposed to be the same used by save_prob + * + * @param name : name of the file to read + */ + virtual void restore_prob(const std::filesystem::path &filename) = 0; + /** * @brief Instructs the optimizer to read in a previously saved basis from a * file diff --git a/src/cpp/multisolver_interface/include/antares-xpansion/multisolver_interface/SolverConfig.h b/src/cpp/multisolver_interface/include/antares-xpansion/multisolver_interface/SolverConfig.h index 6794e1f34..c72b4ae64 100644 --- a/src/cpp/multisolver_interface/include/antares-xpansion/multisolver_interface/SolverConfig.h +++ b/src/cpp/multisolver_interface/include/antares-xpansion/multisolver_interface/SolverConfig.h @@ -25,4 +25,6 @@ class SolverConfig { ~SolverConfig() = default; bool operator==(const std::string& rhs) const; SolverConfig& operator=(const std::string& rhs); + static std::filesystem::path FileName(const std::string& problemName, + const SolverConfig& solverName); }; \ No newline at end of file diff --git a/src/cpp/multisolver_interface/include/antares-xpansion/multisolver_interface/SolverFactory.h b/src/cpp/multisolver_interface/include/antares-xpansion/multisolver_interface/SolverFactory.h index 38cb0f5fe..3293df8bd 100644 --- a/src/cpp/multisolver_interface/include/antares-xpansion/multisolver_interface/SolverFactory.h +++ b/src/cpp/multisolver_interface/include/antares-xpansion/multisolver_interface/SolverFactory.h @@ -11,8 +11,6 @@ * \brief algo type */ enum class SOLVER_TYPE { INTEGER, CONTINUOUS }; -const std::string UNKNOWN_STR("UNKNOWN"), COIN_STR("COIN"), CBC_STR("CBC"), - CLP_STR("CLP"), XPRESS_STR("XPRESS"); /*! * \class class SolverLoader @@ -22,6 +20,12 @@ class SolverLoader { public: static std::vector GetAvailableSolvers( std::shared_ptr logger); + + /** + * @brief Returns a list of supported solvers + * Supported doesn't mean available, for exemple if licence are not available + */ + static std::vector GetSupportedSolvers(); }; /*! diff --git a/src/cpp/multisolver_interface/include/antares-xpansion/multisolver_interface/environment.h b/src/cpp/multisolver_interface/include/antares-xpansion/multisolver_interface/environment.h index c2c5bf45e..f0d714f4b 100644 --- a/src/cpp/multisolver_interface/include/antares-xpansion/multisolver_interface/environment.h +++ b/src/cpp/multisolver_interface/include/antares-xpansion/multisolver_interface/environment.h @@ -438,6 +438,10 @@ extern std::function XPRScreateprob; extern std::function XPRScopyprob; extern std::function XPRSwritebasis; extern std::function XPRSreadprob; +extern std::function XPRSloadsecurevecs; +extern std::function XPRSgetlasterror; +extern std::function XPRSsaveas; +extern std::function XPRSrestore; extern std::function XPRSreadbasis; extern std::function XPRSgetrows; extern std::function XPRSgetindex; diff --git a/src/cpp/multisolver_interface/private/SolverCbc.h b/src/cpp/multisolver_interface/private/SolverCbc.h index 06d303a43..c3277a589 100644 --- a/src/cpp/multisolver_interface/private/SolverCbc.h +++ b/src/cpp/multisolver_interface/private/SolverCbc.h @@ -83,10 +83,12 @@ class SolverCbc : public SolverAbstract { public: virtual void write_prob_mps(const std::filesystem::path &filename) override; virtual void write_prob_lp(const std::filesystem::path &filename) override; + void save_prob(const std::filesystem::path &filename) override; virtual void write_basis(const std::filesystem::path &filename) override; virtual void read_prob_mps(const std::filesystem::path &filename) override; virtual void read_prob_lp(const std::filesystem::path &filename) override; + void restore_prob(const std::filesystem::path &filename) override; virtual void read_basis(const std::filesystem::path &filename) override; virtual void copy_prob(const SolverAbstract::Ptr fictif_solv) override; diff --git a/src/cpp/multisolver_interface/private/SolverClp.h b/src/cpp/multisolver_interface/private/SolverClp.h index d008cccfe..d24059ab2 100644 --- a/src/cpp/multisolver_interface/private/SolverClp.h +++ b/src/cpp/multisolver_interface/private/SolverClp.h @@ -80,10 +80,12 @@ class SolverClp : public SolverAbstract { public: virtual void write_prob_mps(const std::filesystem::path &filename) override; virtual void write_prob_lp(const std::filesystem::path &filename) override; + void save_prob(const std::filesystem::path &filename) override; virtual void write_basis(const std::filesystem::path &filename) override; virtual void read_prob_mps(const std::filesystem::path &filename) override; virtual void read_prob_lp(const std::filesystem::path &filename) override; + void restore_prob(const std::filesystem::path &filename) override; virtual void read_basis(const std::filesystem::path &filename) override; virtual void copy_prob(const SolverAbstract::Ptr fictif_solv) override; diff --git a/src/cpp/multisolver_interface/private/SolverXpress.h b/src/cpp/multisolver_interface/private/SolverXpress.h index d104cab9f..c0c54cda3 100644 --- a/src/cpp/multisolver_interface/private/SolverXpress.h +++ b/src/cpp/multisolver_interface/private/SolverXpress.h @@ -74,10 +74,12 @@ class SolverXpress : public SolverAbstract { public: virtual void write_prob_mps(const std::filesystem::path &filename) override; virtual void write_prob_lp(const std::filesystem::path &filename) override; + void save_prob(const std::filesystem::path &filename) override; virtual void write_basis(const std::filesystem::path &filename) override; virtual void read_prob_mps(const std::filesystem::path &filename) override; virtual void read_prob_lp(const std::filesystem::path &filename) override; + void restore_prob(const std::filesystem::path &filename) override; virtual void read_basis(const std::filesystem::path &filename) override; virtual void copy_prob(const SolverAbstract::Ptr fictif_solv) override; diff --git a/src/cpp/study-updater/StudyUpdateLinkCapacitiesStrategy.cpp b/src/cpp/study-updater/StudyUpdateLinkCapacitiesStrategy.cpp index 67b04c3bb..cf83456ab 100644 --- a/src/cpp/study-updater/StudyUpdateLinkCapacitiesStrategy.cpp +++ b/src/cpp/study-updater/StudyUpdateLinkCapacitiesStrategy.cpp @@ -59,5 +59,5 @@ StudyUpdateLinkCapacitiesStrategy::computeNewCapacitiesAllChronicles( } StudyUpdateLinkCapacitiesStrategy::StudyUpdateLinkCapacitiesStrategy( const std::filesystem::path& link_path, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger) + std::shared_ptr logger) : StudyUpdateStrategy(link_path, logger) {} diff --git a/src/cpp/study-updater/StudyUpdateLinkParameterStrategy.cpp b/src/cpp/study-updater/StudyUpdateLinkParameterStrategy.cpp index 35d8638c0..0c930cc50 100644 --- a/src/cpp/study-updater/StudyUpdateLinkParameterStrategy.cpp +++ b/src/cpp/study-updater/StudyUpdateLinkParameterStrategy.cpp @@ -12,7 +12,7 @@ int StudyUpdateLinkParameterStrategy::Update( StudyUpdateLinkParameterStrategy::StudyUpdateLinkParameterStrategy( const std::filesystem::path& link_path, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger) + std::shared_ptr logger) : StudyUpdateStrategy(link_path, logger) {} std::filesystem::path StudyUpdateLinkParameterStrategy::getLinkdataFilepath( diff --git a/src/cpp/study-updater/StudyUpdateRunner.cpp b/src/cpp/study-updater/StudyUpdateRunner.cpp index 1d26d23fe..5ed0691b9 100644 --- a/src/cpp/study-updater/StudyUpdateRunner.cpp +++ b/src/cpp/study-updater/StudyUpdateRunner.cpp @@ -22,7 +22,7 @@ void updateStudy( const std::filesystem::path &rootPath_p, const std::vector &links_p, const std::filesystem::path &jsonPath_l, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger) { + std::shared_ptr logger) { auto linksPath_l = rootPath_p / ".." / ".."; StudyUpdater studyUpdater(linksPath_l, AntaresVersionProvider(), logger); diff --git a/src/cpp/study-updater/StudyUpdateStrategy.cpp b/src/cpp/study-updater/StudyUpdateStrategy.cpp index 1c408a147..20fc68486 100644 --- a/src/cpp/study-updater/StudyUpdateStrategy.cpp +++ b/src/cpp/study-updater/StudyUpdateStrategy.cpp @@ -23,6 +23,6 @@ void StudyUpdateStrategy::EnsureCandidateInvestmentFound( } StudyUpdateStrategy::StudyUpdateStrategy( const std::filesystem::path& study_path, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger) + std::shared_ptr logger) : antares_link_folder_path{study_path / ANTARES_LINK_FOLDER}, logger_(logger) {} diff --git a/src/cpp/study-updater/StudyUpdater.cpp b/src/cpp/study-updater/StudyUpdater.cpp index dc9ea9180..cd6c1b226 100644 --- a/src/cpp/study-updater/StudyUpdater.cpp +++ b/src/cpp/study-updater/StudyUpdater.cpp @@ -12,7 +12,7 @@ constexpr int ANTARES_VERSION_CAPACITIES_IN_INDIVIDUAL_FILES = 820; StudyUpdater::StudyUpdater( std::filesystem::path studyPath_p, const AntaresVersionProvider& antares_version_provider, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger) + std::shared_ptr logger) : studyPath_(std::move(studyPath_p)), logger_(logger) { antaresVersion_ = antares_version_provider.getAntaresVersion(studyPath_); } diff --git a/src/cpp/study-updater/include/antares-xpansion/study-updater/LinkParametersCSVOverwriter.h b/src/cpp/study-updater/include/antares-xpansion/study-updater/LinkParametersCSVOverwriter.h index c5d7bc8a0..b1fe46f7c 100644 --- a/src/cpp/study-updater/include/antares-xpansion/study-updater/LinkParametersCSVOverwriter.h +++ b/src/cpp/study-updater/include/antares-xpansion/study-updater/LinkParametersCSVOverwriter.h @@ -11,7 +11,7 @@ class LinkParametersCSVOverWriter { public: LinkParametersCSVOverWriter( - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger) + std::shared_ptr logger) : logger_(logger) {} bool open(const std::filesystem::path& linkdataFilename_l); @@ -28,5 +28,5 @@ class LinkParametersCSVOverWriter { std::ifstream inputCsv_l_; std::ofstream tempOutCsvFile; bool already_warned_ = false; - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger_; + std::shared_ptr logger_; }; diff --git a/src/cpp/study-updater/include/antares-xpansion/study-updater/StudyUpdateLinkCapacitiesStrategy.h b/src/cpp/study-updater/include/antares-xpansion/study-updater/StudyUpdateLinkCapacitiesStrategy.h index cdc9d2bac..136c9a258 100644 --- a/src/cpp/study-updater/include/antares-xpansion/study-updater/StudyUpdateLinkCapacitiesStrategy.h +++ b/src/cpp/study-updater/include/antares-xpansion/study-updater/StudyUpdateLinkCapacitiesStrategy.h @@ -10,7 +10,7 @@ class StudyUpdateLinkCapacitiesStrategy : public StudyUpdateStrategy { public: explicit StudyUpdateLinkCapacitiesStrategy( const std::filesystem::path& link_path, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger); + std::shared_ptr logger); int Update(const ActiveLink& link, const std::map& map) override; diff --git a/src/cpp/study-updater/include/antares-xpansion/study-updater/StudyUpdateLinkParameterStrategy.h b/src/cpp/study-updater/include/antares-xpansion/study-updater/StudyUpdateLinkParameterStrategy.h index 78cec4644..7e8bb848a 100644 --- a/src/cpp/study-updater/include/antares-xpansion/study-updater/StudyUpdateLinkParameterStrategy.h +++ b/src/cpp/study-updater/include/antares-xpansion/study-updater/StudyUpdateLinkParameterStrategy.h @@ -10,7 +10,7 @@ class StudyUpdateLinkParameterStrategy : public StudyUpdateStrategy { public: explicit StudyUpdateLinkParameterStrategy( const std::filesystem::path& link_path, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger); + std::shared_ptr logger); int Update(const ActiveLink& link, const std::map& map) override; diff --git a/src/cpp/study-updater/include/antares-xpansion/study-updater/StudyUpdateRunner.h b/src/cpp/study-updater/include/antares-xpansion/study-updater/StudyUpdateRunner.h index fa299c602..1215b7a35 100644 --- a/src/cpp/study-updater/include/antares-xpansion/study-updater/StudyUpdateRunner.h +++ b/src/cpp/study-updater/include/antares-xpansion/study-updater/StudyUpdateRunner.h @@ -27,5 +27,5 @@ void updateStudy( const std::filesystem::path &rootPath_p, const std::vector &links_p, const std::filesystem::path &jsonPath_l, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger); + std::shared_ptr logger); #endif // ANTARES_XPANSION_SRC_CPP_STUDY_UPDATER_STUDYUPDATERUNNER_H diff --git a/src/cpp/study-updater/include/antares-xpansion/study-updater/StudyUpdateStrategy.h b/src/cpp/study-updater/include/antares-xpansion/study-updater/StudyUpdateStrategy.h index 12a67138b..3006bd3de 100644 --- a/src/cpp/study-updater/include/antares-xpansion/study-updater/StudyUpdateStrategy.h +++ b/src/cpp/study-updater/include/antares-xpansion/study-updater/StudyUpdateStrategy.h @@ -14,7 +14,7 @@ class StudyUpdateStrategy { const ActiveLink& link, const std::map& map) = 0; explicit StudyUpdateStrategy( const std::filesystem::path& study_path, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger); + std::shared_ptr logger); virtual ~StudyUpdateStrategy() = default; class NoInvestmentComputedForTheCandidate : public LogUtils::XpansionError { @@ -29,5 +29,5 @@ class StudyUpdateStrategy { const std::filesystem::path antares_link_folder_path; - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger_; + std::shared_ptr logger_; }; diff --git a/src/cpp/study-updater/include/antares-xpansion/study-updater/StudyUpdater.h b/src/cpp/study-updater/include/antares-xpansion/study-updater/StudyUpdater.h index 052cd2dd9..f9021f86e 100644 --- a/src/cpp/study-updater/include/antares-xpansion/study-updater/StudyUpdater.h +++ b/src/cpp/study-updater/include/antares-xpansion/study-updater/StudyUpdater.h @@ -18,7 +18,7 @@ class StudyUpdater { std::filesystem::path studyPath_; // antares version int antaresVersion_; - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger_; + std::shared_ptr logger_; public: /*! @@ -29,7 +29,7 @@ class StudyUpdater { explicit StudyUpdater( std::filesystem::path studyPath_p, const AntaresVersionProvider& antares_version_provider, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger); + std::shared_ptr logger); /*! * \brief default destructor of calass StudyUpdater diff --git a/src/python/antares_xpansion/full_run_driver.py b/src/python/antares_xpansion/full_run_driver.py index b91a27bd3..2731ee328 100644 --- a/src/python/antares_xpansion/full_run_driver.py +++ b/src/python/antares_xpansion/full_run_driver.py @@ -66,7 +66,7 @@ def run(self): os.chdir(lp_path) self.logger.info(f"Current directory is now: {os.getcwd()}") - self.logger.info(f"Command is {self.full_command()}") + self.logger.info(f"Command is {' '.join(self.full_command())}") ret = subprocess.run( self.full_command(), shell=False, stdout=sys.stdout, stderr=sys.stderr, encoding='utf-8') diff --git a/src/python/antares_xpansion/optimisation_keys.py b/src/python/antares_xpansion/optimisation_keys.py index c299254de..1bb4e597d 100644 --- a/src/python/antares_xpansion/optimisation_keys.py +++ b/src/python/antares_xpansion/optimisation_keys.py @@ -59,6 +59,10 @@ def structure_file_key(): def master_name_key(): return "MASTER_NAME" + @staticmethod + def problems_format_key(): + return "PROBLEMS_FORMAT" + @staticmethod def last_mps_master_name_key(): return "LAST_MASTER_MPS" diff --git a/src/python/antares_xpansion/study_output_cleaner.py b/src/python/antares_xpansion/study_output_cleaner.py index cc469e1a3..07921c93d 100644 --- a/src/python/antares_xpansion/study_output_cleaner.py +++ b/src/python/antares_xpansion/study_output_cleaner.py @@ -52,6 +52,7 @@ def clean_benders_step(study_output: Path): rename_master(last_master_path, tmp_last_master_path) rename_master(master_path, tmp_master_path) remove_files_containing_str_from_dir('.mps', lp_dir) + remove_files_containing_str_from_dir('.svf', lp_dir) rename_master(tmp_master_path, master_path) rename_master(tmp_last_master_path, last_master_path) diff --git a/src/python/antares_xpansion/xpansionConfig.py b/src/python/antares_xpansion/xpansionConfig.py index 6999d136a..f010756d1 100644 --- a/src/python/antares_xpansion/xpansionConfig.py +++ b/src/python/antares_xpansion/xpansionConfig.py @@ -167,6 +167,7 @@ def _set_default_settings(self): "log_level": "0", "separation_parameter": "0.5", "batch_size": "0", + "problems_format": "SAVED", } def _set_default_options(self): @@ -181,6 +182,7 @@ def _set_default_options(self): OptimisationKeys.slave_weight_key(): self.slave_weight_default_value(), OptimisationKeys.slave_weight_value_key(): self.slave_weight_value_default_value(), OptimisationKeys.master_name_key(): self.master_name_default_value(), + OptimisationKeys.problems_format_key(): self.problems_format_default_value(), OptimisationKeys.structure_file_key(): self.structure_file_default_value(), OptimisationKeys.input_root_key(): self.input_root_default_value(), OptimisationKeys.csv_name_key(): self.csv_name_default_value(), @@ -204,6 +206,9 @@ def structure_file_default_value(self): def master_name_default_value(self): return "master" + def problems_format_default_value(self): + return "SAVED" + def slave_weight_value_default_value(self): return "1" diff --git a/tests/cpp/benders/benders_sequential_test.cpp b/tests/cpp/benders/benders_sequential_test.cpp index 5dff276eb..a2a6addad 100644 --- a/tests/cpp/benders/benders_sequential_test.cpp +++ b/tests/cpp/benders/benders_sequential_test.cpp @@ -1,10 +1,12 @@ #include -#include "antares-xpansion/helpers/ArchiveWriter.h" -#include "antares-xpansion/benders/benders_sequential/BendersSequential.h" -#include "antares-xpansion/benders/output/JsonWriter.h" #include "LoggerStub.h" #include "RandomDirGenerator.h" +#include "antares-xpansion/benders/benders_core/CouplingMapGenerator.h" +#include "antares-xpansion/benders/benders_sequential/BendersSequential.h" +#include "antares-xpansion/benders/output/JsonWriter.h" +#include "antares-xpansion/helpers/ArchiveWriter.h" +#include "antares-xpansion/multisolver_interface/environment.h" #include "gtest/gtest.h" class BendersSequentialDouble : public BendersSequential { @@ -39,32 +41,18 @@ class BendersSequentialDouble : public BendersSequential { return BendersSequential::get_master(); }; - void get_master_value() override{}; - void BuildCut() override{}; + void get_master_value() override {}; + void BuildCut() override {}; void compute_ub() override { _data.ub = parametrized_ub; }; CurrentIterationData get_data() const { return _data; } - void write_basis() const override{}; - void EndWritingInOutputFile() const override{}; - void UpdateTrace() override{}; - void post_run_actions() const override{}; - void SaveCurrentBendersData() override{}; - void free() override{}; - void InitializeProblems() override { - MatchProblemToId(); - - auto solver_log_manager = SolverLogManager(solver_log_file()); - reset_master(master_variable_map_, get_master_path(), - get_solver_name(), get_log_level(), - _data.nsubproblem, solver_log_manager, - IsResumeMode(), _logger); - for (const auto &problem : coupling_map_) { - const auto subProblemFilePath = GetSubproblemPath(problem.first); - AddSubproblem(problem); - AddSubproblemName(problem.first); - std::filesystem::remove(subProblemFilePath); - } - } - // No override as the base class function is const + void write_basis() const override {}; + void EndWritingInOutputFile() const override {}; + void UpdateTrace() override {}; + void post_run_actions() const override {}; + void SaveCurrentBendersData() override {}; + void free() override {}; + SubproblemsMapPtr problems() const { return GetSubProblemMap(); } + void DeactivateIntegrityConstraints() const override { _deactivateIntConstraintCall = true; BendersBase::DeactivateIntegrityConstraints(); @@ -116,14 +104,28 @@ class BendersSequentialTest : public ::testing::Test { logger = std::make_shared(); writer = std::make_shared(std::make_shared(), std::tmpnam(nullptr)); + original_dir = std::filesystem::current_path(); } + + void TearDown() override { std::filesystem::current_path(original_dir); } + void copyMasterMps() { tmpDir = CreateRandomSubDir(std::filesystem::temp_directory_path()); std::filesystem::copy(mps_dir / "mip_toy_prob.mps", tmpDir, std::filesystem::copy_options::update_existing); } - BaseOptions init_base_options() const { + + void copyData() { + std::filesystem::path data_test_dir = "data_test"; + std::filesystem::path data_dir = data_test_dir / "mini_network"; + tmpDir = CreateRandomSubDir(std::filesystem::temp_directory_path()); + + std::filesystem::copy(data_dir, tmpDir, + std::filesystem::copy_options::recursive); + } + + BaseOptions init_base_options(const std::string &solver = "COIN") const { BaseOptions base_options; base_options.LOG_LEVEL = 0; @@ -133,17 +135,17 @@ class BendersSequentialTest : public ::testing::Test { base_options.MASTER_NAME = "mip_toy_prob"; base_options.STRUCTURE_FILE = "my_structure.txt"; base_options.INPUTROOT = tmpDir.string(); - base_options.SOLVER_NAME = "COIN"; + base_options.SOLVER_NAME = solver; base_options.weights = {}; base_options.RESUME = false; return base_options; } - BendersBaseOptions init_benders_options(MasterFormulation master_formulation, - int max_iter, double relaxed_gap, - double sep_param) const { - BaseOptions base_options(init_base_options()); + BendersBaseOptions init_benders_options( + MasterFormulation master_formulation, int max_iter, double relaxed_gap, + double sep_param, const std::string &solver = "COIN") const { + BaseOptions base_options(init_base_options(solver)); BendersBaseOptions options(base_options); options.MAX_ITERATIONS = max_iter; @@ -168,9 +170,11 @@ class BendersSequentialTest : public ::testing::Test { BendersSequentialDouble init_benders_sequential( MasterFormulation master_formulation, int max_iter, double relaxed_gap, - double sep_param) { + double sep_param, const std::string &solver = "COIN", + ProblemsFormat format = ProblemsFormat::MPS_FILE) { BendersBaseOptions options = init_benders_options( - master_formulation, max_iter, relaxed_gap, sep_param); + master_formulation, max_iter, relaxed_gap, sep_param, solver); + options.PROBLEMS_FORMAT = format; return BendersSequentialDouble(options, logger, writer, mathLoggerDriver); } @@ -184,6 +188,7 @@ class BendersSequentialTest : public ::testing::Test { } return nb_units_col_types; } + std::filesystem::path original_dir; }; TEST_F(BendersSequentialTest, MasterNotRelaxedWhenSepSetToOne) { @@ -382,3 +387,132 @@ TEST_F(BendersSequentialTest, CheckInOutDataWhenImprovement) { EXPECT_EQ(benders.get_data().best_ub, current_ub); EXPECT_EQ(benders.get_data().best_it, current_it + 1); } + +auto solvers() { + std::vector solvers_name; + solvers_name.push_back("COIN"); + if (LoadXpress::XpressLoader xpressLoader; + xpressLoader.XpressIsCorrectlyInstalled()) { + solvers_name.push_back("XPRESS"); + } + return solvers_name; +} + +class BendersSequentialTestBySolver + : public BendersSequentialTest, + public ::testing::WithParamInterface {}; + +TEST_P(BendersSequentialTestBySolver, CreateMasterProblemProperly) { + copyMasterMps(); + BendersSequentialDouble benders = init_benders_sequential( + MasterFormulation::RELAXED, 100, 1e-4, 1e-6, GetParam()); + benders.InitializeProblems(); + + // Assert that the master problem has been created properly + EXPECT_TRUE(benders.get_master()); +} + +// Problems +TEST_P(BendersSequentialTestBySolver, CreateProblemsProperly) { + copyData(); + std::filesystem::current_path(tmpDir); + + SimulationOptions options; + options.read(tmpDir / "options_default.json"); + options.SOLVER_NAME = GetParam(); + BendersSequentialDouble benders(options.get_benders_options(), logger, writer, + mathLoggerDriver); + auto coupling_map = + CouplingMapGenerator::BuildInput( + options.STRUCTURE_FILE, logger, "Benders"); + benders.set_input_map(coupling_map); + benders.InitializeProblems(); + auto &&problems = benders.problems(); + + // Assert that the master problem has been created properly + EXPECT_TRUE(problems.size() == 2); +} + +class BendersSequentialTestSolverAndFormat + : public BendersSequentialTest, + public ::testing::WithParamInterface< + std::tuple> {}; + +// Master svf +TEST_P(BendersSequentialTestBySolver, CreateMasterProblemProperlyWhenRestore) { + copyMasterMps(); + + SolverFactory factory; + auto &&solver = + factory.create_solver(GetParam() == "COIN" ? "CBC" : GetParam()); + solver->read_prob_mps(tmpDir / "mip_toy_prob.mps"); + std::filesystem::remove(tmpDir / "mip_toy_prob.mps"); + solver->save_prob(tmpDir / "mip_toy_prob"); + + BendersSequentialDouble benders = + init_benders_sequential(MasterFormulation::RELAXED, 100, 1e-4, 1e-6, + GetParam(), ProblemsFormat::SAVED_FILE); + benders.InitializeProblems(); + + // Assert that the master problem has been created properly + EXPECT_TRUE(benders.get_master()); +} + +void updateStructureFile(const std::string &structure_file_path, + const std::string &solver) { + if (solver == "XPRESS") { + auto struct_file = std::ifstream(structure_file_path); + auto replaced_text = std::ostringstream(); + std::regex mps_ext(".mps"); + std::string line; + while (std::getline(struct_file, line)) { + replaced_text << std::regex_replace(line, mps_ext, ".svf") << "\n"; + } + struct_file.close(); + auto new_struct_file = std::ofstream(structure_file_path); + new_struct_file << replaced_text.str(); + new_struct_file.close(); + } +} + +TEST_P(BendersSequentialTestBySolver, CreateProblemsProperlyWhenRestore) { + copyData(); + std::filesystem::current_path(tmpDir); + + SimulationOptions options; + options.read(tmpDir / "options_default.json"); + + SolverFactory factory; + auto &&solver = + factory.create_solver(GetParam() == "COIN" ? "CBC" : GetParam()); + for (std::string problem: {"SP1", "SP2"}) { + solver->read_prob_mps(tmpDir / (problem + ".mps")); + std::filesystem::remove(tmpDir / (problem + ".mps")); + solver->save_prob(tmpDir / problem); + } + updateStructureFile(options.STRUCTURE_FILE, GetParam()); + + options.SOLVER_NAME = GetParam(); + BendersSequentialDouble benders(options.get_benders_options(), logger, writer, + mathLoggerDriver); + auto coupling_map = CouplingMapGenerator::BuildInput( + options.STRUCTURE_FILE, logger, "Benders"); + benders.set_input_map(coupling_map); + benders.InitializeProblems(); + auto &&problems = benders.problems(); + + // Assert that the master problem has been created properly + EXPECT_TRUE(problems.size() == 2); + if (GetParam() == "COIN") { + EXPECT_TRUE(problems["SP1.mps"]); + EXPECT_TRUE(problems["SP2.mps"]); + } else { + EXPECT_TRUE(problems["SP1.svf"]); + EXPECT_TRUE(problems["SP2.svf"]); + } +} + +INSTANTIATE_TEST_SUITE_P(Solvers, BendersSequentialTestBySolver, + ::testing::ValuesIn(solvers())); + +// Problems svf \ No newline at end of file diff --git a/tests/cpp/full_run/CMakeLists.txt b/tests/cpp/full_run/CMakeLists.txt index c0f6d416d..2fd46865c 100644 --- a/tests/cpp/full_run/CMakeLists.txt +++ b/tests/cpp/full_run/CMakeLists.txt @@ -1,5 +1,5 @@ add_executable (full_run_tests - FullRunTest.cpp) + FullRunOptionsTest.cpp) target_link_libraries (full_run_tests PRIVATE diff --git a/tests/cpp/full_run/FullRunTest.cpp b/tests/cpp/full_run/FullRunOptionsTest.cpp similarity index 100% rename from tests/cpp/full_run/FullRunTest.cpp rename to tests/cpp/full_run/FullRunOptionsTest.cpp diff --git a/tests/cpp/lp_namer/ActiveLinkTest.cpp b/tests/cpp/lp_namer/ActiveLinkTest.cpp index 6d45323cc..2cbe8302d 100644 --- a/tests/cpp/lp_namer/ActiveLinkTest.cpp +++ b/tests/cpp/lp_namer/ActiveLinkTest.cpp @@ -4,7 +4,7 @@ const double DEFAULT_CAPACITY = 0; const double DEFAULT_PROFILE_VALUE = 1; -static ProblemGenerationLog::ProblemGenerationLoggerSharedPointer +static std::shared_ptr emptyLogger() { return std::make_shared( LogUtils::LOGLEVEL::NONE); diff --git a/tests/cpp/lp_namer/CMakeLists.txt b/tests/cpp/lp_namer/CMakeLists.txt index f4cde6195..485a9036a 100644 --- a/tests/cpp/lp_namer/CMakeLists.txt +++ b/tests/cpp/lp_namer/CMakeLists.txt @@ -28,6 +28,7 @@ add_executable (lp_namer_tests LoggerBuilder.cpp LoggerBuilder.h LpFilesExtractorTest.cpp + MasterGenerationTest.cpp MasterProblemBuilderTest.cpp MpsTxtWriterTest.cpp NOOPSolver.h @@ -53,6 +54,7 @@ target_link_libraries (lp_namer_tests PRIVATE antaresXpansion::xpansion_study_updater_lib antaresXpansion::problem_generation_main antaresXpansion::tests_utils + antaresXpansion::solvers ) diff --git a/tests/cpp/lp_namer/CandidatesINIReaderTest.cpp b/tests/cpp/lp_namer/CandidatesINIReaderTest.cpp index 60f462387..dcf10886f 100644 --- a/tests/cpp/lp_namer/CandidatesINIReaderTest.cpp +++ b/tests/cpp/lp_namer/CandidatesINIReaderTest.cpp @@ -90,7 +90,7 @@ class CandidatesINIReaderTest : public ::testing::Test { } public: - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer emptyLogger_ = + std::shared_ptr emptyLogger_ = emptyLogger(); }; diff --git a/tests/cpp/lp_namer/ChronicleMapProviderTest.cpp b/tests/cpp/lp_namer/ChronicleMapProviderTest.cpp index aa06e8391..bacc5c5e0 100644 --- a/tests/cpp/lp_namer/ChronicleMapProviderTest.cpp +++ b/tests/cpp/lp_namer/ChronicleMapProviderTest.cpp @@ -15,7 +15,7 @@ class ChronicleProviderTest : public ::testing::Test { public: std::filesystem::path ts_info_root_ = std::filesystem::temp_directory_path(); - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger_ = + std::shared_ptr logger_ = emptyLogger(); protected: diff --git a/tests/cpp/lp_namer/LinkProfileReaderTest.cpp b/tests/cpp/lp_namer/LinkProfileReaderTest.cpp index 4abfef5a3..72bbb3ee7 100644 --- a/tests/cpp/lp_namer/LinkProfileReaderTest.cpp +++ b/tests/cpp/lp_namer/LinkProfileReaderTest.cpp @@ -11,7 +11,7 @@ const std::string INVALID_DIRECT_PROFILE("temp_invalid_direct_profile.txt"); class LinkProfileReaderTest : public ::testing::Test { protected: - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger_ = + std::shared_ptr logger_ = emptyLogger(); static void createMergedProfileFile( const std::string& temp_profile_name, diff --git a/tests/cpp/lp_namer/LoggerBuilder.cpp b/tests/cpp/lp_namer/LoggerBuilder.cpp index 5ad62efe5..be89ddb14 100644 --- a/tests/cpp/lp_namer/LoggerBuilder.cpp +++ b/tests/cpp/lp_namer/LoggerBuilder.cpp @@ -1,6 +1,6 @@ #include "LoggerBuilder.h" -ProblemGenerationLog::ProblemGenerationLoggerSharedPointer emptyLogger() { +std::shared_ptr emptyLogger() { return std::make_shared( LogUtils::LOGLEVEL::NONE); } @@ -14,7 +14,7 @@ ProblemGenerationLog::ProblemGenerationILoggerSharedPointer StreamLogger( return std::make_shared( stream); } -ProblemGenerationLog::ProblemGenerationLoggerSharedPointer +std::shared_ptr BuildLoggerWithParams(const LogUtils::LOGLEVEL& loglevel, const std::filesystem::path& FilePath, std::ostream& stream) { @@ -25,7 +25,7 @@ BuildLoggerWithParams(const LogUtils::LOGLEVEL& loglevel, return logger; } -ProblemGenerationLog::ProblemGenerationLoggerSharedPointer +std::shared_ptr BuildLoggerWithParams(const LogUtils::LOGLEVEL& loglevel, const std::filesystem::path& FilePath) { auto fileLogger = FileLogger(FilePath); @@ -35,7 +35,7 @@ BuildLoggerWithParams(const LogUtils::LOGLEVEL& loglevel, return logger; } -ProblemGenerationLog::ProblemGenerationLoggerSharedPointer +std::shared_ptr BuildLoggerWithParams(const LogUtils::LOGLEVEL& loglevel, std::ostream& stream) { auto StdOutLogger = StreamLogger(stream); diff --git a/tests/cpp/lp_namer/LoggerBuilder.h b/tests/cpp/lp_namer/LoggerBuilder.h index 95228ab1d..7fb8bed3b 100644 --- a/tests/cpp/lp_namer/LoggerBuilder.h +++ b/tests/cpp/lp_namer/LoggerBuilder.h @@ -3,14 +3,14 @@ #include "antares-xpansion/lpnamer/helper/ProblemGenerationLogger.h" -ProblemGenerationLog::ProblemGenerationLoggerSharedPointer emptyLogger(); -ProblemGenerationLog::ProblemGenerationLoggerSharedPointer +std::shared_ptr emptyLogger(); +std::shared_ptr BuildLoggerWithParams(const LogUtils::LOGLEVEL& logLevel, const std::filesystem::path& FilePath); -ProblemGenerationLog::ProblemGenerationLoggerSharedPointer +std::shared_ptr BuildLoggerWithParams(const LogUtils::LOGLEVEL& logLevel, const std::filesystem::path& FilePath, std::ostream& stream); -ProblemGenerationLog::ProblemGenerationLoggerSharedPointer +std::shared_ptr BuildLoggerWithParams(const LogUtils::LOGLEVEL& logLevel, std::ostream& stream); #endif //__TESTS_LOGGER_UTILS_h__ diff --git a/tests/cpp/lp_namer/LpFilesExtractorTest.cpp b/tests/cpp/lp_namer/LpFilesExtractorTest.cpp index 5f7081682..97113fc04 100644 --- a/tests/cpp/lp_namer/LpFilesExtractorTest.cpp +++ b/tests/cpp/lp_namer/LpFilesExtractorTest.cpp @@ -16,7 +16,7 @@ const std::filesystem::path ONE_AREA_0_INTERCO = class LpFilesExtractorTest : public ::testing::Test { protected: - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger_ = + std::shared_ptr logger_ = emptyLogger(); }; diff --git a/tests/cpp/lp_namer/MasterGenerationTest.cpp b/tests/cpp/lp_namer/MasterGenerationTest.cpp new file mode 100644 index 000000000..75ae3e35f --- /dev/null +++ b/tests/cpp/lp_namer/MasterGenerationTest.cpp @@ -0,0 +1,178 @@ +#include + +#include "antares-xpansion/lpnamer/problem_modifier/MasterGeneration.h" +#include "antares-xpansion/multisolver_interface/Solver.h" + +// Noop ProblemGenerationLogger +class NoopProblemGenerationLogger + : public ProblemGenerationLog::ProblemGenerationLogger { + public: + using ProblemGenerationLogger::ProblemGenerationLogger; + void display_message(const std::string &message) override {} + void display_message(const std::string &message, + const LogUtils::LOGLEVEL log_level, + const std::string &context) override {} + void PrintIterationSeparatorBegin() override {} + void PrintIterationSeparatorEnd() override {} +}; + +// Fixture +class MasterGenerationTest : public ::testing::Test { + protected: + void SetUp() override { + // Create a temporary directory + temp_test_dir = + std::filesystem::temp_directory_path() / std::tmpnam(nullptr); + std::filesystem::create_directories(temp_test_dir / "lp"); + } + + void AddCandidate(std::string name) { + CandidateData candidate_data; + candidate_data.name = name; + + ActiveLinksBuilder active_link_builder( + {candidate_data}, {}, + std::make_shared(LogUtils::LOGLEVEL::INFO)); + + auto links = active_link_builder.getLinks(); + active_links_.insert(active_links_.end(), links.begin(), + links.end()); + } + + std::filesystem::path temp_test_dir; + AdditionalConstraints additionalConstraints_{nullptr}; + Couplings couplings_; + SolverLogManager solver_log_manager_; + std::vector active_links_; +}; + +using SolverName = std::string; +using SolverAndExpectation = std::pair; + +class TestForSolverAndMode : public MasterGenerationTest, + public ::testing::WithParamInterface {}; + +class TestForSolverAndExpectation : public MasterGenerationTest, + public ::testing::WithParamInterface {}; + +auto solverNamesGenerator = ::testing::ValuesIn(SolverLoader::GetSupportedSolvers()); + +#define SKIP_UNAVAILABLE_SOLVER(solver_name) \ + auto available_solvers = SolverLoader::GetAvailableSolvers(std::make_shared(LogUtils::LOGLEVEL::INFO)); \ + if (std::ranges::find(available_solvers, solver_name) == available_solvers.end()) { \ + GTEST_SKIP() << "Solver " << (solver_name) << " is not available"; \ + } + +TEST_P(TestForSolverAndExpectation, master_file_is_generated) { + auto&& [solver_name, expectation] = GetParam(); + SKIP_UNAVAILABLE_SOLVER(solver_name) + AddCandidate("dummy_candidate"); + MasterGeneration master_generation(temp_test_dir, active_links_, + additionalConstraints_, couplings_, + "master_formulation", solver_name, nullptr, + solver_log_manager_); + auto master_file = temp_test_dir / "lp" / "master"; + master_file.replace_extension(expectation); + ASSERT_TRUE(std::filesystem::exists(master_file)); +} + +// Structure file is written +TEST_P(TestForSolverAndMode, structure_file_is_written) { + auto&& solver_name = GetParam(); + SKIP_UNAVAILABLE_SOLVER(solver_name) + AddCandidate("dummy_candidate"); + MasterGeneration master_generation( + temp_test_dir, active_links_, additionalConstraints_, + couplings_, "master_formulation", solver_name, nullptr, solver_log_manager_); + ASSERT_TRUE(std::filesystem::exists(temp_test_dir / "lp" / "structure.txt")); +} + +// Structure file contains master name +TEST_P(TestForSolverAndMode, structure_file_contains_master_name) { + auto&& solver_name = GetParam(); + AddCandidate("dummy_candidate"); + SKIP_UNAVAILABLE_SOLVER(solver_name) + MasterGeneration master_generation( + temp_test_dir, active_links_, additionalConstraints_, + couplings_, "master_formulation", solver_name, nullptr, solver_log_manager_); + std::ifstream structure_file(temp_test_dir / "lp" / "structure.txt"); + std::string line; + bool found = false; + while (std::getline(structure_file, line)) { + if (line.find("master") != std::string::npos) { + found = true; + break; + } + } + ASSERT_TRUE(found); +} +INSTANTIATE_TEST_SUITE_P( + _, TestForSolverAndMode, + solverNamesGenerator); + +////Structure file contains master name without file extension +TEST_P(TestForSolverAndExpectation, + structure_file_contains_master_name_without_extension) { + AddCandidate("dummy_candidate"); + auto&& [solver_name, expectation] = GetParam(); + SKIP_UNAVAILABLE_SOLVER(solver_name) + MasterGeneration master_generation( + temp_test_dir, active_links_, additionalConstraints_, + couplings_, "master_formulation", solver_name, nullptr, solver_log_manager_); + std::ifstream structure_file(temp_test_dir / "lp" / "structure.txt"); + std::string line; + bool found = false; + while (std::getline(structure_file, line)) { + auto pos = line.find("master"); + if (pos != std::string::npos) { + auto with_ext_pos = line.find("master." + expectation); + if (with_ext_pos == pos) { + continue; // We want to find the name without the extension, so skip + } + found = true; + break; + } + } + ASSERT_TRUE(found); +} +INSTANTIATE_TEST_SUITE_P( + _, TestForSolverAndExpectation, + ::testing::Values( + SolverAndExpectation{"XPRESS", "svf"}, + SolverAndExpectation{"CBC", "mps"}, + SolverAndExpectation{"CLP", "mps"} + )); + +/** + * Test that the structure file contains the problem file with the file extension + */ +TEST_P(TestForSolverAndExpectation, + structure_file_contains_problem_name_with_extension) { + /** + * This test isn't quiet good. It doesn't really test that a structures file + * contains the problem name but it tests that the structure file contains + * what is in the coupligs map. + */ + auto&& [solver_name, expectation] = GetParam(); + SKIP_UNAVAILABLE_SOLVER(solver_name) + + AddCandidate("dummy_candidate"); + couplings_.insert({{"dummy_candidate", "dummy_problem." + expectation}, 0}); + MasterGeneration master_generation( + temp_test_dir, active_links_, additionalConstraints_, + couplings_, "master_formulation", solver_name, nullptr, solver_log_manager_); + std::ifstream structure_file(temp_test_dir / "lp" / "structure.txt"); + std::string line; + bool found = false; + while (std::getline(structure_file, line)) { + auto pos = line.find("dummy_problem"); + if (pos != std::string::npos) { + auto with_ext_pos = line.find("dummy_problem." + expectation); + if (with_ext_pos == pos) { + found = true; + break; + } + } + } + ASSERT_TRUE(found); +} \ No newline at end of file diff --git a/tests/cpp/lp_namer/NOOPSolver.h b/tests/cpp/lp_namer/NOOPSolver.h index c773e43e3..4a217cc9b 100644 --- a/tests/cpp/lp_namer/NOOPSolver.h +++ b/tests/cpp/lp_namer/NOOPSolver.h @@ -90,6 +90,8 @@ class NOOPSolver: public SolverAbstract { virtual void set_simplex_iter(int iter) override {} virtual void write_basis(const std::filesystem::path &filename) override {} virtual void read_basis(const std::filesystem::path &filename) override {} + void save_prob(const std::filesystem::path &filename) override {} + void restore_prob(const std::filesystem::path &filename) override {} }; #endif // ANTARESXPANSION_TESTS_CPP_LP_NAMER_NOOPSOLVER_H_ diff --git a/tests/cpp/lp_namer/ProblemGenerationExeOptionsTest.cpp b/tests/cpp/lp_namer/ProblemGenerationExeOptionsTest.cpp index 713c08a43..ae0dd7462 100644 --- a/tests/cpp/lp_namer/ProblemGenerationExeOptionsTest.cpp +++ b/tests/cpp/lp_namer/ProblemGenerationExeOptionsTest.cpp @@ -36,7 +36,7 @@ class ProblemGenerationSpyAndMock : public ProblemGeneration { const std::string& master_formulation, const std::string& additionalConstraintFilename_l, const std::filesystem::path& archive_path, - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger, + std::shared_ptr logger, const std::filesystem::path& log_file_path, const std::filesystem::path& weights_file, bool unnamed_problems) override { diff --git a/tests/cpp/lp_namer/ProblemGenerationLoggerTest.cpp b/tests/cpp/lp_namer/ProblemGenerationLoggerTest.cpp index 30cf17416..77b873fed 100644 --- a/tests/cpp/lp_namer/ProblemGenerationLoggerTest.cpp +++ b/tests/cpp/lp_namer/ProblemGenerationLoggerTest.cpp @@ -6,7 +6,7 @@ using namespace ProblemGenerationLog; class ProblemGenerationLoggerTest : public ::testing::Test { public: std::filesystem::path temp_file_; - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger_; + std::shared_ptr logger_; }; diff --git a/tests/cpp/lp_namer/ProblemModifierTest.cpp b/tests/cpp/lp_namer/ProblemModifierTest.cpp index 2009bfcdd..4d40c1caf 100644 --- a/tests/cpp/lp_namer/ProblemModifierTest.cpp +++ b/tests/cpp/lp_namer/ProblemModifierTest.cpp @@ -33,7 +33,7 @@ class ProblemModifierTest : public ::testing::Test { std::vector col_indexes; std::vector start_indexes; std::vector> col_names; - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger = + std::shared_ptr logger = emptyLogger(); protected: diff --git a/tests/cpp/lp_namer/StudyUpdateTest.cc b/tests/cpp/lp_namer/StudyUpdateTest.cc index 03869565e..2ede1ce40 100644 --- a/tests/cpp/lp_namer/StudyUpdateTest.cc +++ b/tests/cpp/lp_namer/StudyUpdateTest.cc @@ -347,7 +347,7 @@ class AntaresVersionProviderStub : public AntaresVersionProvider { int version_; }; using namespace ProblemGenerationLog; -ProblemGenerationLoggerSharedPointer Getlog( +std::shared_ptr Getlog( const fs::path& tmp_directory_path_) { /**/ auto logFile = std::make_shared( @@ -376,7 +376,7 @@ class UpdateCapacitiesTest : public ::testing::Test { fs::path tmp_directory_path_; fs::path ntc_path_; - ProblemGenerationLog::ProblemGenerationLoggerSharedPointer logger; + std::shared_ptr logger; StudyUpdater study_updater_{fs::path("."), AntaresVersionProviderStub(800), logger}; AntaresLinkDataReader antares_link_data_reader_; diff --git a/tests/cpp/lp_namer/WeightsFileReaderTest.cpp b/tests/cpp/lp_namer/WeightsFileReaderTest.cpp index 7387b4813..597b0503d 100644 --- a/tests/cpp/lp_namer/WeightsFileReaderTest.cpp +++ b/tests/cpp/lp_namer/WeightsFileReaderTest.cpp @@ -5,7 +5,7 @@ using namespace ProblemGenerationLog; class WeightsFileReaderTest : public ::testing::Test { protected: - ProblemGenerationLoggerSharedPointer logger_; + std::shared_ptr logger_; void SetUp() { logger_ = std::make_shared(LogUtils::LOGLEVEL::NONE); diff --git a/tests/end_to_end/cucumber/features/outer_loop_tests.feature b/tests/end_to_end/cucumber/features/outer_loop_tests.feature index 3161061af..c86c300ff 100644 --- a/tests/end_to_end/cucumber/features/outer_loop_tests.feature +++ b/tests/end_to_end/cucumber/features/outer_loop_tests.feature @@ -15,6 +15,6 @@ Feature: outer loop tests Scenario: a non outer loop study e.g with non-consistent adequacy_criterion file and with un-formatted mps (unnamed mps) Given the study path is "data_test/mini_instance_MIP" When I run outer loop with 1 proc(s) and "options_default.json" as option file - Then the simulation takes less than 5 seconds - And the simulation succeeds + Then the simulation succeeds + And the simulation takes less than 5 seconds And LOLD.txt and PositiveUnsuppliedEnergy.txt files are full of zeros diff --git a/tests/end_to_end/cucumber/features/steps/steps.py b/tests/end_to_end/cucumber/features/steps/steps.py index 96b701a9d..4aa2c1b8e 100644 --- a/tests/end_to_end/cucumber/features/steps/steps.py +++ b/tests/end_to_end/cucumber/features/steps/steps.py @@ -114,11 +114,11 @@ def run_command(study_path, memory, method, n_mpi, allow_run_as_root=False): print(f"Process finished with code: {process.returncode}") if process.returncode != 0: print("*********************** Begin stdout ***********************") - print(out) + print(out.replace(b'\r\n', b'\n').decode('utf-8')) print("*********************** End stdout ***********************") print("*********************** Begin stderr ***********************") - print(err) + print(err.replace(b'\r\n', b'\n').decode('utf-8')) print("*********************** End stderr ***********************") return process.returncode diff --git a/tests/end_to_end/examples/example_test.py b/tests/end_to_end/examples/example_test.py index 7ff314504..07e7b4cca 100644 --- a/tests/end_to_end/examples/example_test.py +++ b/tests/end_to_end/examples/example_test.py @@ -44,7 +44,7 @@ def launch_xpansion(install_dir, study_path, allow_run_as_root=False, nproc: int process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=None) output = process.communicate() if process.returncode != 0: - print(output) + [print(k.decode("utf-8")) for k in output if k is not None] # Check return value assert process.returncode == 0 @@ -74,11 +74,11 @@ def launch_xpansion_memory(install_dir, study_path, method: BendersMethod, allow ] if allow_run_as_root == "True": command.append("--allow-run-as-root") - print(command) + print(f"Running Xpansion with command line : {' '.join(command)}") process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=None) output = process.communicate() if process.returncode != 0: - print(output) + [print(k.decode("utf-8")) for k in output if k is not None] # Check return value assert process.returncode == 0 diff --git a/tests/end_to_end/lpnamer/test_lpnamerEndToEnd.py b/tests/end_to_end/lpnamer/test_lpnamerEndToEnd.py index 5af564458..0e3cbddd8 100644 --- a/tests/end_to_end/lpnamer/test_lpnamerEndToEnd.py +++ b/tests/end_to_end/lpnamer/test_lpnamerEndToEnd.py @@ -113,8 +113,13 @@ def test_lp_directory_files(install_dir, test_dir, master_mode, option_mode, set @pytest.mark.parametrize("test_dir, master_mode", test_data_xpress) -def test_lp_directory_files(install_dir, test_dir, master_mode, setup_lp_directory, tmp_path): - launch_and_compare_lp_with_reference_archive(install_dir, master_mode, setup_lp_directory, False) +def test_xpress(install_dir, test_dir, master_mode, setup_lp_directory, tmp_path): + launch_command, lp_dir, old_path, reference_lp_dir = given(install_dir, master_mode, setup_lp_directory, False) + returned_l = subprocess.run(launch_command, shell=False) + os.chdir(old_path) + files_to_find = os.listdir(reference_lp_dir) + files_to_compare = os.listdir(lp_dir) + assert set(files_to_find) <= set(files_to_compare) @pytest.mark.parametrize("test_dir", test_data_multiple_candidates) @@ -151,21 +156,26 @@ def launch_and_compare_lp_with_reference_output(install_dir, master_mode, test_d def launch_and_compare_lp_with_reference_archive(install_dir, master_mode, test_dir, unnamed_problems=True): + launch_command, lp_dir, old_path, reference_lp_dir = given(install_dir, master_mode, test_dir, unnamed_problems) + print(f"launch_command: '{' '.join(launch_command)}'") + # when + returned_l = subprocess.run(launch_command, shell=False) + # then + then(lp_dir, old_path, reference_lp_dir, returned_l) + + +def given(install_dir, master_mode, test_dir, unnamed_problems): old_path = os.getcwd() reference_lp_dir = test_dir / "reference_lp" lp_dir = test_dir.parent / (test_dir.stem + "-Xpansion") / "lp" lp_namer_exe = Path(install_dir) / "lp_namer" zip_path = (test_dir.parent / MPS_ZIP).resolve() os.chdir(test_dir.parent.parent) - launch_command = [str(lp_namer_exe), "-a", str(zip_path), "-e", "contraintes.txt", "-f", master_mode] if unnamed_problems: launch_command.append("--unnamed-problems") - # when - returned_l = subprocess.run(launch_command, shell=False) - # then - then(lp_dir, old_path, reference_lp_dir, returned_l) + return launch_command, lp_dir, old_path, reference_lp_dir def get_lp_dir(study_dir):