Added logic surplus calculation intrabuilding wise
This commit is contained in:
47
src/services/Surplus.cpp
Normal file
47
src/services/Surplus.cpp
Normal 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;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user