#include "beamformfinder.hpp" #include "csvfile.hpp" #include "edgemesh.hpp" #include "externvariables.hpp" #include "flatpattern.hpp" #include "polyscope/curve_network.h" #include "polyscope/point_cloud.h" #include "polyscope/polyscope.h" #include "reducedmodeloptimizer.hpp" #include "simulationhistoryplotter.hpp" #include "trianglepattterntopology.hpp" #include #include #include #include #include #include #include bool printDebugInfo; int main(int argc, char *argv[]) { if (argc < 5) { std::cerr << "Specify at least if D(ebug) or R(elease) and the pattern " "pair to be optimized." << std::endl; std::terminate(); } if (argv[1] == "D") { printDebugInfo = true; } else { printDebugInfo = false; } // Populate the pattern pair to be optimized ////Full pattern const std::string filepath_fullPattern = argv[2]; FlatPattern fullPattern(filepath_fullPattern); fullPattern.setLabel( std::filesystem::path(filepath_fullPattern).stem().string()); fullPattern.scale(0.03); ////Reduced pattern const std::string filepath_reducedPattern = argv[3]; FlatPattern reducedPattern(filepath_reducedPattern); reducedPattern.setLabel( std::filesystem::path(filepath_reducedPattern).stem().string()); reducedPattern.scale(0.03); // Set the optization settings ReducedModelOptimizer::xRange beamWidth{"B", 0.5, 1.5}; ReducedModelOptimizer::xRange beamDimensionsRatio{"bOverh", 0.7, 1.3}; ReducedModelOptimizer::xRange beamE{"E", 0.1, 1.9}; ReducedModelOptimizer::xRange innerHexagonSize{"HS", 0.1, 0.9}; ReducedModelOptimizer::Settings settings_optimization; settings_optimization.xRanges = {beamWidth, beamDimensionsRatio, beamE, innerHexagonSize}; const bool input_numberOfFunctionCallsDefined = argc >= 5; settings_optimization.numberOfFunctionCalls = input_numberOfFunctionCallsDefined ? std::atoi(argv[4]) : 100; // Optimize pair const std::string pairName = fullPattern.getLabel() + "@" + reducedPattern.getLabel(); if (printDebugInfo) { std::cout << "Optimizing " << pairName << std::endl; } const std::vector numberOfNodesPerSlot{1, 0, 0, 2, 1, 2, 1}; ReducedModelOptimizer optimizer(numberOfNodesPerSlot); optimizer.initializePatterns(fullPattern, reducedPattern, {}); ReducedModelOptimizer::Results optimizationResults = optimizer.optimize(settings_optimization); // Export results const bool input_resultDirectoryDefined = argc >= 6; std::string optimiziationResultsDirectory = input_resultDirectoryDefined ? argv[5] : "OptimizationResults"; std::filesystem::path dirPath_thisOptimization( std::filesystem::path(optimiziationResultsDirectory).append(pairName)); std::filesystem::create_directories(dirPath_thisOptimization); csvFile csv_results({}, false); // csvFile csv_results(std::filesystem::path(dirPath_thisOptimization) // .append("results.csv") // .string(), // false); settings_optimization.writeTo(csv_results); optimizationResults.writeTo(settings_optimization, csv_results); optimizationResults.save(dirPath_thisOptimization.string()); // optimizationResults.draw(); return 0; }