finished intra calculation
This commit is contained in:
@ -2,7 +2,6 @@
|
|||||||
// Created by StanislausCichocki on 10.03.2025.
|
// Created by StanislausCichocki on 10.03.2025.
|
||||||
//
|
//
|
||||||
|
|
||||||
#define VALUE_COUNT (4*24*365)
|
|
||||||
#include "Surplus.h"
|
#include "Surplus.h"
|
||||||
#include "../model/Building.h"
|
#include "../model/Building.h"
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
@ -11,44 +10,61 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
|
||||||
void Surplus::CalculateSurplus(std::vector<std::unique_ptr<Community>>& communities)
|
void Surplus::CalculateSurplus()
|
||||||
{
|
{
|
||||||
std::vector<float> consumptionAvailable(VALUE_COUNT, 0.0);
|
|
||||||
std::vector<float> generationAvailable(VALUE_COUNT, 0.0);
|
|
||||||
auto iterateFunc = Community::iterateBuildings(communities);
|
auto iterateFunc = Community::iterateBuildings(communities);
|
||||||
auto modifyCommunity = [](Community& c)
|
auto modifyCommunity = [](Community& c)
|
||||||
{
|
{
|
||||||
std::cout << "Processing Community\n";
|
std::cout << "Processing Community\n";
|
||||||
};
|
};
|
||||||
auto modifyBuilding = [](Building::Base& building)
|
auto modifyBuilding = [this](Building::Base& building)
|
||||||
{
|
{
|
||||||
std::cout << "Processing Building\n";
|
std::cout << "Processing Building\n";
|
||||||
CalculateBuildingSurplus(building);
|
CalculateBuildingSurplus(building);
|
||||||
};
|
};
|
||||||
iterateFunc(modifyCommunity)(modifyBuilding);
|
iterateFunc(modifyCommunity)(modifyBuilding);
|
||||||
|
|
||||||
|
//TODO Calculate Relative Values
|
||||||
}
|
}
|
||||||
|
|
||||||
void Surplus::CalculateBuildingSurplus(Building::Base& building)
|
void Surplus::CalculateBuildingSurplus(Building::Base& building)
|
||||||
{
|
{
|
||||||
std::vector ownCoverage(VALUE_COUNT, 0.0f);
|
std::vector<std::unique_ptr<float>> ownCoverage;
|
||||||
std::vector neededConsumption(VALUE_COUNT, 0.0f);
|
std::vector<std::unique_ptr<float>> neededConsumption;
|
||||||
std::vector neededGeneration(VALUE_COUNT, 0.0f);
|
std::vector<std::unique_ptr<float>> neededGeneration;
|
||||||
std::vector ownUsage(VALUE_COUNT, 0.0f);
|
std::vector<std::unique_ptr<float>> ownUsage;
|
||||||
|
|
||||||
const auto& consumption = building.metadata()->consumption_profile();
|
const auto& consumption = building.metadata()->consumption_profile();
|
||||||
const auto& generation = building.metadata()->generation_profile();
|
const auto& generation = building.metadata()->generation_profile();
|
||||||
|
|
||||||
|
ownCoverage.reserve(consumption.size());
|
||||||
|
neededConsumption.reserve(consumption.size());
|
||||||
|
neededGeneration.reserve(consumption.size());
|
||||||
|
ownUsage.reserve(consumption.size());
|
||||||
|
|
||||||
std::transform(consumption.begin(), consumption.end(),
|
std::transform(consumption.begin(), consumption.end(),
|
||||||
generation.begin(), ownCoverage.begin(),
|
generation.begin(), std::back_inserter(ownCoverage),
|
||||||
[&](const std::unique_ptr<float>& c, const std::unique_ptr<float>& g)
|
[&](const std::unique_ptr<float>& c, const std::unique_ptr<float>& g)
|
||||||
{
|
{
|
||||||
ownCoverage.push_back((c ? *c : 0.0f) - (g ? *g : 0.0f));
|
auto own_cov = std::make_unique<float>((c ? *c : 0.0f) - (g ? *g : 0.0f));
|
||||||
neededConsumption.push_back((c && *c > 0.0f ? *c : 0.0f));
|
ownCoverage.push_back(std::make_unique<float>(*own_cov));
|
||||||
neededGeneration.push_back((g && *g < 0.0f ? -*g : 0.0f));
|
|
||||||
ownUsage.push_back((c ? *c : 0.0f) - (neededConsumption.back()));
|
neededConsumption.push_back(std::make_unique<float>(c && *c > 0.0f ? *c : 0.0f));
|
||||||
return 0.0f;
|
neededGeneration.push_back(std::make_unique<float>(g && *g < 0.0f ? -*g : 0.0f));
|
||||||
|
ownUsage.push_back(std::make_unique<float>((c ? *c : 0.0f) - *neededConsumption.back()));
|
||||||
|
|
||||||
|
return std::move(own_cov);
|
||||||
});
|
});
|
||||||
|
building.values()->set_community_coverage(std::move(ownCoverage));
|
||||||
|
building.values()->set_needed_con(std::move(neededGeneration));
|
||||||
|
building.values()->set_needed_gen(std::move(neededGeneration));
|
||||||
|
building.values()->set_own_usage(std::move(ownUsage));
|
||||||
|
|
||||||
|
|
||||||
|
std::transform(generationAvailable.begin(), generationAvailable.end(), consumptionAvailable.begin(),
|
||||||
|
isGenBigger.begin(), [&](const float a, const float b) { return a > b; });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
#ifndef SURPLUS_H
|
#ifndef SURPLUS_H
|
||||||
#define SURPLUS_H
|
#define SURPLUS_H
|
||||||
#include <functional>
|
#define VALUE_COUNT (4*24*365)
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include "../model/Community.h"
|
#include "../model/Community.h"
|
||||||
#include <vector>
|
#include <vector>
|
||||||
@ -16,15 +16,21 @@ class Surplus
|
|||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
std::vector<std::unique_ptr<Community>>& communities;
|
std::vector<std::unique_ptr<Community>>& communities;
|
||||||
|
std::vector<float> consumptionAvailable;
|
||||||
|
std::vector<float> generationAvailable;
|
||||||
|
std::vector<bool> isGenBigger;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Surplus(std::vector<std::unique_ptr<Community>>& communities) : communities(communities)
|
Surplus(std::vector<std::unique_ptr<Community>>& communities) : communities(communities),
|
||||||
|
consumptionAvailable(VALUE_COUNT, 0.0f),
|
||||||
|
generationAvailable(VALUE_COUNT, 0.0f),
|
||||||
|
isGenBigger((VALUE_COUNT, false))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void static CalculateSurplus(std::vector<std::unique_ptr<Community>>& communities);
|
void CalculateSurplus();
|
||||||
|
|
||||||
void static CalculateBuildingSurplus(Building::Base&);
|
void CalculateBuildingSurplus(Building::Base&);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -10,6 +10,7 @@ TEST_CASE("Testing add function")
|
|||||||
{
|
{
|
||||||
std::vector<std::unique_ptr<Community>> communities;
|
std::vector<std::unique_ptr<Community>> communities;
|
||||||
communities.push_back(Factory::create_test_community());
|
communities.push_back(Factory::create_test_community());
|
||||||
Surplus::CalculateSurplus(communities);
|
Surplus surplus(communities);
|
||||||
|
surplus.CalculateSurplus();
|
||||||
CHECK(true);
|
CHECK(true);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user