Skip to content
Snippets Groups Projects
Commit 6ea83fb9 authored by Jakub Janák's avatar Jakub Janák
Browse files

strategy implemented into controller

parent 5c5699ec
No related branches found
No related tags found
No related merge requests found
#include "controller.hpp" #include "controller.hpp"
#include "../helper/helper.hpp" #include "../helper/helper.hpp"
#include "../files/file_manager.hpp" #include "../files/file_manager.hpp"
#include "controller_strategy/controller_strategy.hpp"
#include <iostream> #include <iostream>
#include <random> #include <random>
...@@ -8,7 +9,7 @@ ...@@ -8,7 +9,7 @@
#include <fstream> #include <fstream>
#include <string> #include <string>
controller::controller() { controller::controller(): cont(this) {
desc.add_options() desc.add_options()
("help,h", "Print help message") ("help,h", "Print help message")
("load-instances,l", boost::program_options::value<std::string>(), "Specify load instances file") ("load-instances,l", boost::program_options::value<std::string>(), "Specify load instances file")
...@@ -35,7 +36,6 @@ void controller::print_header() { ...@@ -35,7 +36,6 @@ void controller::print_header() {
} }
int controller::run(const int argc, char *argv[]) { int controller::run(const int argc, char *argv[]) {
// print header every time
print_header(); print_header();
try { try {
...@@ -43,54 +43,26 @@ int controller::run(const int argc, char *argv[]) { ...@@ -43,54 +43,26 @@ int controller::run(const int argc, char *argv[]) {
store(parse_command_line(argc, argv, desc), vm); store(parse_command_line(argc, argv, desc), vm);
notify(vm); notify(vm);
// Print help message const auto parsed = boost::program_options::command_line_parser(argc, argv).options(desc).allow_unregistered().run();
if (argc == 1 || vm.contains("help")) {
std::cout << desc << std::endl;
return 0;
}
// load / create instances
if (vm.contains("load-instances")) {
const std::string path = vm["load-instances"].as<std::string>();
load_instance(path);
}
if (vm.contains("auto-load-instances")) {
auto_load_instances();
}
if (vm.contains("create-synthetic-instance")) {
const int num_of_nodes = vm["create-synthetic-instance"].as<int>();
create_synthetic_instance(num_of_nodes);
}
// solving store(parsed, vm);
if (vm.contains("solve")) { notify(vm);
solve();
}
if (vm.contains("solve-parallel")) { // Check for unrecognized commands
const int num_of_threads = vm["solve-parallel"].as<int>(); auto unrecognized = collect_unrecognized(parsed.options, boost::program_options::include_positional);
if (num_of_threads <= 0) { if (!unrecognized.empty()) {
std::cerr << "Number of threads must be an integer >= 1" << std::endl; throw std::runtime_error("Unrecognized command: " + unrecognized[0]);
return 1;
}
if (num_of_threads == 1) {
std::cerr << "For single threaded solving call --solve" << std::endl;
}
solve(num_of_threads);
} }
// approximation cont.run_strategy(argc, vm);
if (vm.contains("heuristic-combo")) { } catch (const std::runtime_error& error) {
heuristic_combo(); std::cerr << error.what() << std::endl;
} return 1;
return 0; }catch (const boost::program_options::error &ex) {
} catch (const boost::program_options::error &ex) {
std::cerr << "Error: " << ex.what() << "\n"; std::cerr << "Error: " << ex.what() << "\n";
std::cerr << desc << "\n";
return 1; return 1;
} }
return 0;
} }
void controller::load_instance(const std::string &file_name) { void controller::load_instance(const std::string &file_name) {
...@@ -155,3 +127,7 @@ void controller::heuristic_combo() { ...@@ -155,3 +127,7 @@ void controller::heuristic_combo() {
this->unsolvedInstances.pop_front(); this->unsolvedInstances.pop_front();
} }
} }
boost::program_options::options_description controller::get_desc() {
return desc;
}
...@@ -2,31 +2,34 @@ ...@@ -2,31 +2,34 @@
#define CONTROLLER_H #define CONTROLLER_H
#include "../graph/ts_instance.hpp" #include "../graph/ts_instance.hpp"
#include "controller_strategy/controller_strategy.hpp"
#include <boost/program_options.hpp> #include <boost/program_options.hpp>
class controller { class controller {
std::deque<std::unique_ptr<ts_instance>> unsolvedInstances; std::deque<std::unique_ptr<ts_instance> > unsolvedInstances;
boost::program_options::options_description desc = {"Arguments"}; boost::program_options::options_description desc = {"Arguments"};
strategy_context cont;
static void print_header(); static void print_header();
void load_instance(const std::string& file_name); public:
void load_instance(const std::string &file_name);
void auto_load_instances(); void auto_load_instances();
void create_synthetic_instance(int num_of_nodes); void create_synthetic_instance(int num_of_nodes);
void solve(int num_of_threads = 1); // not multithreaded by default // not multithreaded by default
void solve(int num_of_threads = 1);
void heuristic_combo(); void heuristic_combo();
public:
controller(); controller();
int run(int argc, char *argv[]); int run(int argc, char *argv[]);
boost::program_options::options_description get_desc();
}; };
#endif //CONTROLLER_H #endif
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment