Skip to content
Snippets Groups Projects
Commit 687b653f authored by root's avatar root
Browse files

Ajout de l'algo de placement carbonne le moins coûteux et un exemple de...

Ajout de l'algo de placement carbonne le moins coûteux et un exemple de fichiers events , fait par : Karim /Adem
parent a9138219
No related branches found
No related tags found
No related merge requests found
Pipeline #8406 failed
{"type": "datacenter_announcement", "id": "dcA", "location": "France", "year": 2018, "carbon_intensity": 67, "timestamp": 0}
{"type": "datacenter_announcement", "id": "dcA", "location": "France", "year": 2019, "carbon_intensity": 69, "timestamp": 1}
{"type": "datacenter_announcement", "id": "dcA", "location": "France", "year": 2020, "carbon_intensity": 67, "timestamp": 2}
{"type": "datacenter_announcement", "id": "dcA", "location": "France", "year": 2021, "carbon_intensity": 67, "timestamp": 3}
{"type": "datacenter_announcement", "id": "dcC", "location": "United States", "year": 2021, "carbon_intensity": 379, "timestamp": 4}
{"type": "datacenter_announcement", "id": "dcC", "location": "United States", "year": 2020, "carbon_intensity": 369, "timestamp": 5}
{"type": "datacenter_announcement", "id": "dcC", "location": "United States", "year": 2019, "carbon_intensity": 393, "timestamp": 6}
{"type": "datacenter_announcement", "id": "dcC", "location": "United States", "year": 2018, "carbon_intensity": 412, "timestamp": 7}
{"type": "datacenter_announcement", "id": "dcB", "location": "Morocco", "year": 2021, "carbon_intensity": 631, "timestamp": 8}
{"type": "datacenter_announcement", "id": "dcB", "location": "Morocco", "year": 2020, "carbon_intensity": 642, "timestamp": 9}
{"type": "datacenter_announcement", "id": "dcB", "location": "Morocco", "year": 2019, "carbon_intensity": 627, "timestamp": 10}
{"type": "datacenter_announcement", "id": "dcB", "location": "Morocco", "year": 2018, "carbon_intensity": 627, "timestamp": 11}
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <limits>
#include <nlohmann/json.hpp>
//Author Karim/Adem
using json = nlohmann::json;
struct ProfileInfo {
std::string id;
std::string datacenter;
int year;
int carbon_emission;
};
std::string extractDatacenterFromId(const std::string& id) {
size_t pos = id.find_last_of('_');
return pos != std::string::npos ? id.substr(0, pos) : "";
}
int extractYearFromId(const std::string& id) {
size_t pos = id.find_last_of('_');
return pos != std::string::npos ? std::stoi(id.substr(pos + 1)) : -1;
}
ProfileInfo findOptimalEmissionByYear(const std::vector<ProfileInfo>& profiles, int year) {
ProfileInfo optimalProfile;
int minEmission = std::numeric_limits<int>::max();
for (const auto& profile : profiles) {
if (profile.year == year && profile.carbon_emission < minEmission) {
minEmission = profile.carbon_emission;
optimalProfile = profile;
}
}
return optimalProfile;
}
ProfileInfo findGlobalOptimalEmission(const std::vector<ProfileInfo>& profiles) {
ProfileInfo optimalProfile;
int minEmission = std::numeric_limits<int>::max();
for (const auto& profile : profiles) {
if (profile.carbon_emission < minEmission) {
minEmission = profile.carbon_emission;
optimalProfile = profile;
}
}
return optimalProfile;
}
int main() {
std::string filePath = "jsonInput.json";
std::ifstream inputFile(filePath);
if (!inputFile.is_open()) {
std::cerr << "Erreur lors de l'ouverture du fichier : " << filePath << std::endl;
return -1;
}
json jsonData;
inputFile >> jsonData;
std::vector<ProfileInfo> profiles;
for (auto& profile : jsonData["profiles"].items()) {
std::string emissionStr = profile.value()["carbon_emission"].get<std::string>();
int emission = std::stoi(emissionStr.substr(0, emissionStr.size() - 2)); // Enlever "kg" et convertir en entier
ProfileInfo pInfo;
pInfo.id = profile.key();
pInfo.datacenter = extractDatacenterFromId(pInfo.id);
pInfo.year = extractYearFromId(pInfo.id);
pInfo.carbon_emission = emission;
profiles.push_back(pInfo);
}
int choice;
std::cout << "Choisissez une option :\n1. Trouver l'empreinte carbone la plus faible pour une année spécifique\n2. Trouver l'empreinte carbone globale la plus faible\nVotre choix : ";
std::cin >> choice;
if (choice == 1) {
int year;
std::cout << "Entrez l'année : ";
std::cin >> year;
ProfileInfo optimalProfile = findOptimalEmissionByYear(profiles, year);
if (!optimalProfile.id.empty()) {
std::cout << "L'empreinte carbone la plus faible pour " << year << " est en " << optimalProfile.datacenter << " : " << optimalProfile.carbon_emission << "kg\n";
} else {
std::cout << "Aucune empreinte carbone trouvée pour l'année " << year << ".\n";
}
} else if (choice == 2) {
ProfileInfo globalOptimalProfile = findGlobalOptimalEmission(profiles);
if (!globalOptimalProfile.id.empty()) {
std::cout << "L'empreinte carbone globale la plus faible est :\n"
<< "Datacenter: " << globalOptimalProfile.datacenter << ", Année: " << globalOptimalProfile.year
<< ", Empreinte carbone: " << globalOptimalProfile.carbon_emission << "kg\n";
} else {
std::cout << "Aucune empreinte carbone globale optimale trouvée.\n";
}
} else {
std::cout << "Option invalide.\n";
}
return 0;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment