Skip to content

Commit

Permalink
Print only the used options that overwrite the default options
Browse files Browse the repository at this point in the history
  • Loading branch information
cvanaret committed Oct 20, 2024
1 parent 40420f0 commit 934f17b
Show file tree
Hide file tree
Showing 6 changed files with 44 additions and 25 deletions.
2 changes: 1 addition & 1 deletion bindings/AMPL/uno_ampl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ namespace uno {

// solve the instance
Result result = uno.solve(*model, initial_iterate, options);
Uno::print_optimization_summary(options, result);
uno.print_optimization_summary(result);
// std::cout << "memory_allocation_amount = " << memory_allocation_amount << '\n';
}
catch (std::exception& exception) {
Expand Down
19 changes: 10 additions & 9 deletions uno/Uno.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,9 @@ namespace uno {
Uno::Uno(GlobalizationMechanism& globalization_mechanism, const Options& options) :
globalization_mechanism(globalization_mechanism),
max_iterations(options.get_unsigned_int("max_iterations")),
time_limit(options.get_double("time_limit")) {
}
time_limit(options.get_double("time_limit")),
print_solution(options.get_bool("print_solution")),
strategy_combination(this->get_strategy_combination(options)) { }

Level Logger::level = INFO;

Expand Down Expand Up @@ -74,6 +75,7 @@ namespace uno {
statistics.set("iter", 0);
statistics.set("status", "initial point");
this->globalization_mechanism.initialize(statistics, current_iterate, options);
options.print_used();
if (Logger::level == INFO) statistics.print_current_line();
}
catch (const std::exception& e) {
Expand Down Expand Up @@ -137,17 +139,16 @@ namespace uno {
std::cout << "- Linear solvers: " << join(SymmetricIndefiniteLinearSolverFactory::available_solvers(), ", ") << '\n';
}

void Uno::print_strategy_combination(const Options& options) {
std::string combination = options.get_string("globalization_mechanism") + " " + options.get_string("constraint_relaxation_strategy") + " " +
std::string Uno::get_strategy_combination(const Options& options) {
return options.get_string("globalization_mechanism") + " " + options.get_string("constraint_relaxation_strategy") + " " +
options.get_string("globalization_strategy") + " " + options.get_string("subproblem");
std::cout << "\nUno 1.1.0 (" << combination << ")\n";

}

void Uno::print_optimization_summary(const Options& options, const Result& result) {
Uno::print_strategy_combination(options);
void Uno::print_optimization_summary(const Result& result) {
std::cout << "\nUno 1.1.0 (" << this->strategy_combination << ")\n";
std::cout << Timer::get_current_date();
std::cout << "────────────────────────────────────────\n";
const bool print_solution = options.get_bool("print_solution");
result.print(print_solution);
result.print(this->print_solution);
}
} // namespace
6 changes: 4 additions & 2 deletions uno/Uno.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,15 @@ namespace uno {
[[nodiscard]] Result solve(const Model& model, Iterate& initial_iterate, const Options& options);

static void print_available_strategies();
static void print_strategy_combination(const Options& options);
static void print_optimization_summary(const Options& options, const Result& result);
static std::string get_strategy_combination(const Options& options);
void print_optimization_summary(const Result& result);

private:
GlobalizationMechanism& globalization_mechanism; /*!< Globalization mechanism */
const size_t max_iterations; /*!< Maximum number of iterations */
const double time_limit; /*!< CPU time limit (can be inf) */
const bool print_solution;
const std::string strategy_combination;

void initialize(Statistics& statistics, Iterate& current_iterate, const Options& options);
[[nodiscard]] static Statistics create_statistics(const Model& model, const Options& options);
Expand Down
4 changes: 1 addition & 3 deletions uno/ingredients/hessian_models/ZeroHessian.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,7 @@

namespace uno {
ZeroHessian::ZeroHessian(size_t dimension, const Options& options) :
HessianModel(dimension, 0, options.get_string("sparse_format"), /* use_regularization = */false) {
std::cout << "Current zero Hessian:\n" << this->hessian << '\n';
}
HessianModel(dimension, 0, options.get_string("sparse_format"), /* use_regularization = */false) { }

void ZeroHessian::evaluate(Statistics& /*statistics*/, const OptimizationProblem& problem, const Vector<double>& /*primal_variables*/,
const Vector<double>& /*constraint_multipliers*/) {
Expand Down
28 changes: 21 additions & 7 deletions uno/tools/Options.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,23 @@
#include "Options.hpp"

namespace uno {
Options::Options(bool are_default_options): are_default_options(are_default_options) { }

size_t Options::size() const {
return this->options.size();
}

// setter
std::string& Options::operator[](const std::string& option_name) {
this->is_default[option_name] = this->are_default_options;
return this->options[option_name];
}

// getter
const std::string& Options::at(const std::string& option_name) const {
try {
const std::string& option_value = this->options.at(option_name);
this->used[option_name] = true;
return option_value;
}
catch(const std::out_of_range&) {
Expand Down Expand Up @@ -50,7 +56,7 @@ namespace uno {
}

Options Options::get_default() {
Options options{};
Options options(true);
/** termination **/
// (tight) tolerance
options["tolerance"] = "1e-8";
Expand Down Expand Up @@ -251,7 +257,7 @@ namespace uno {
// argv[i] for i = 3..argc-1 are overwriting options
Options Options::get_command_line_options(int argc, char* argv[]) {
static const std::string delimiter = "=";
Options overwriting_options{};
Options overwriting_options(false);

// build the (name, value) map
for (size_t i = 3; i < static_cast<size_t>(argc); i++) {
Expand Down Expand Up @@ -397,16 +403,24 @@ namespace uno {
}

void Options::overwrite_with(const Options& overwriting_options) {
std::string option_list{};

for (const auto& [option_name, option_value]: overwriting_options) {
(*this)[option_name] = option_value;
option_list.append("- ").append(option_name).append(" = ").append(option_value).append("\n");
this->is_default[option_name] = overwriting_options.is_default[option_name];
}
}

void Options::print_used() const {
size_t number_used_options = 0;
std::string option_list{};
for (const auto& [option_name, option_value]: this->options) {
if (not this->is_default[option_name] && this->used[option_name]) {
number_used_options++;
option_list.append("- ").append(option_name).append(" = ").append(option_value).append("\n");
}
}
// print the overwritten options
if (overwriting_options.size() > 0) {
std::cout << "Overwritten options:\n" << option_list << '\n';
if (number_used_options > 0) {
std::cout << "Used overwritten options:\n" << option_list << '\n';
}
}

Expand Down
10 changes: 7 additions & 3 deletions uno/tools/Options.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
namespace uno {
class Options {
public:
Options() = default;
explicit Options(bool are_default_options);

[[nodiscard]] size_t size() const;
std::string& operator[](const std::string& option_name);
Expand All @@ -26,12 +26,16 @@ namespace uno {
static void overwrite_with_option_file(Options& options, const std::string& file_name);
static void set_preset(Options& options, const std::string& preset_name);
void overwrite_with(const Options& overwriting_options);
void print_used() const;

std::map<std::string, std::string>::const_iterator begin() const;
std::map<std::string, std::string>::const_iterator end() const;
[[nodiscard]] std::map<std::string, std::string>::const_iterator begin() const;
[[nodiscard]] std::map<std::string, std::string>::const_iterator end() const;

private:
std::map<std::string, std::string> options{};
mutable std::map<std::string, bool> used{};
mutable std::map<std::string, bool> is_default{};
const bool are_default_options;

[[nodiscard]] const std::string& at(const std::string& option_name) const;
};
Expand Down

0 comments on commit 934f17b

Please sign in to comment.