initialCommit 4 ans en retard
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
#include "InterfaceClassic.hpp"
|
||||
#include "../Solver/solverAPI.h"
|
||||
#include "../../General/Logs/IOHelper.h"
|
||||
#include "../../General/Model/STFInstanceUtils.hpp"
|
||||
|
||||
namespace interfacelib {
|
||||
void InterfaceClassic::directory(const std::filesystem::directory_entry &entry, const std::string &solver) {
|
||||
std::filesystem::directory_iterator iter(entry);
|
||||
std::filesystem::directory_iterator iterCount(entry);
|
||||
unsigned int nbFiles = std::count_if(iterCount, {}, [](const std::filesystem::directory_entry &entry) {
|
||||
return std::filesystem::is_regular_file(entry);
|
||||
});
|
||||
unsigned int count = 0;
|
||||
loggerlib::Logger::systemNotify(loggerlib::LOGGER_INFO, std::to_string(nbFiles) + " instances trouvees");
|
||||
//modellib::STFInstanceUtils::write_in_file("Comparaison_ISO_SWAP.csv", "\n Instance Name;Score;H1;H1;H2;H2;H3;H3;H4;H4;diag;sw;cp\n");
|
||||
for (auto &ientry: iter) {
|
||||
if (!ientry.is_directory()) {
|
||||
configlib::Configuration::init("configuration.json");
|
||||
file(ientry, solver);
|
||||
|
||||
count++;
|
||||
double per = ((double) count / (double) nbFiles) * 100.0;
|
||||
std::stringstream stream;
|
||||
stream << std::fixed << std::setprecision(2) << per;
|
||||
loggerlib::Logger::systemNotify(loggerlib::LOGGER_INFO, stream.str() + "%");
|
||||
}
|
||||
}
|
||||
loggerlib::Logger::systemNotify(loggerlib::LOGGER_INFO, std::string("Finished"));
|
||||
|
||||
}
|
||||
|
||||
void InterfaceClassic::file(const std::filesystem::directory_entry &entry, const std::string &solver) {
|
||||
std::ifstream file(entry.path());
|
||||
modellib::STFInstance instance = modellib::STFInstance::createSTF(file);
|
||||
file.close();
|
||||
std::string filename = entry.path().filename().string().substr(0, entry.path().filename().string().find_last_of('.'));
|
||||
if (instance.isValid() && configlib::Configuration::Global.SAVE_INPUT) {
|
||||
auto json = instance.to_json();
|
||||
auto jsonstr = json.dump(2);
|
||||
loggerlib::IOHelper::dump(configlib::Configuration::Global.INPUT_LOCATION, jsonstr, filename);
|
||||
}
|
||||
loggerlib::Logger::systemNotify(loggerlib::LOGGER_INFO, std::string("Trying to launch solver on : ") +
|
||||
entry.path().filename().string());
|
||||
|
||||
//modellib::STFInstanceUtils::write_in_file("Comparaison_ISO_SWAP.csv", entry.path().filename().string() + ";");
|
||||
|
||||
bool la = false;
|
||||
if(solverlib::SolverAPI::apiFunctions.find(solver) != solverlib::SolverAPI::apiFunctions.end())
|
||||
{
|
||||
if(solver == "-HEURISTIC")
|
||||
instance.init();
|
||||
la = true;
|
||||
solverlib::SolverAPI::apiFunctions[solver](instance, filename);
|
||||
}
|
||||
else
|
||||
loggerlib::Logger::systemNotify(loggerlib::LOGGER_ERRORS, std::string("Cannot find specified solver in the API : ") + solver);
|
||||
if (instance.isValid() && configlib::Configuration::Global.SAVE_OUTPUT) {
|
||||
auto todump = instance.to_json();
|
||||
todump = todump.at("planifications");
|
||||
auto todumpstr = todump.dump(2);
|
||||
if(configlib::Configuration::Global.OUTPUT_FILENAME)
|
||||
{
|
||||
loggerlib::IOHelper::dump(configlib::Configuration::Global.OUTPUT_LOCATION,
|
||||
todumpstr, filename+"_p.json");
|
||||
}
|
||||
else
|
||||
{
|
||||
loggerlib::IOHelper::dump(configlib::Configuration::Global.OUTPUT_LOCATION,
|
||||
todumpstr);
|
||||
}
|
||||
}
|
||||
if(la && (solver == "-HEURISTIC"))
|
||||
instance.clean();
|
||||
}
|
||||
|
||||
|
||||
void InterfaceClassic::redirect(const std::string &mode, const std::string &path, const std::string &solver) {
|
||||
std::filesystem::directory_entry entry(path);
|
||||
if (entry.exists()) {
|
||||
if (solver.empty() && (mode == "--solve"))
|
||||
loggerlib::FileLogger::systemNotify(loggerlib::LOGGER_INFO,
|
||||
"WARNING solver argument is not set");
|
||||
if (entry.is_directory()) {
|
||||
if (mode == "--solve")
|
||||
directory(entry, solver);
|
||||
} else {
|
||||
if (mode == "--solve")
|
||||
file(entry, solver);
|
||||
}
|
||||
} else {
|
||||
loggerlib::FileLogger::systemNotify(loggerlib::LOGGER_ERRORS, "Cannot find specified folder or instance:" + entry.path().string());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user