Added logic surplus calculation intrabuilding wise

This commit is contained in:
StanislausCichocki
2025-03-10 17:22:25 +01:00
parent d3a0c73b36
commit a3c34ab6bc
9 changed files with 115 additions and 4 deletions

47
src/services/Surplus.cpp Normal file
View File

@ -0,0 +1,47 @@
//
// Created by StanislausCichocki on 10.03.2025.
//
#define VALUE_COUNT (4*24*365)
#include "Surplus.h"
#include "../model/Building.h"
#include <algorithm>
#include <execution>
#include <vector>
void Surplus::CalculateSurplus(std::vector<std::shared_ptr<Community>> &communities) {
std::vector<float> consumptionAvailable(VALUE_COUNT, 0.0);
std::vector<float> generationAvailable(VALUE_COUNT, 0.0);
Community::iterateCommunities(communities, [&](const std::shared_ptr<Community>& community) {
auto &buildings = community->buildings();
Building::Base::iterateBuildings(buildings, [&](Building::Base &building) {
CalculateBuildingSurplus(building);
});
});
}
void Surplus::CalculateBuildingSurplus(Building::Base& building) {
std::vector ownCoverage(VALUE_COUNT, 0.0f);
std::vector neededConsumption(VALUE_COUNT, 0.0f);
std::vector neededGeneration(VALUE_COUNT, 0.0f);
std::vector ownUsage(VALUE_COUNT, 0.0f);
const auto& consumption = building.metadata()->consumption_profile();
const auto& generation = building.metadata()->generation_profile();
std::transform(consumption.begin(), consumption.end(),
generation.begin(), ownCoverage.begin(),
[&](const std::unique_ptr<float>& c, const std::unique_ptr<float>& g) {
ownCoverage.push_back((c ? *c : 0.0f) - (g ? *g : 0.0f));
neededConsumption.push_back((c && *c> 0.0f?*c:0.0f));
neededGeneration.push_back((g && *g<0.0f?-*g:0.0f));
ownUsage.push_back((c ? *c : 0.0f) - (neededConsumption.back()));
return 0.0f;
});
}