Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 12 additions & 1 deletion bindings/AMPL/uno_ampl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#include "AMPLUserCallbacks.hpp"
#include "Uno.hpp"
#include "model/ModelFactory.hpp"
#include "optimization/WarmstartInformation.hpp"
#include "options/DefaultOptions.hpp"
#include "options/Options.hpp"
#include "options/Presets.hpp"
Expand Down Expand Up @@ -55,7 +56,17 @@ namespace uno {
AMPLUserCallbacks user_callbacks{};

// solve the instance
Result result = uno.solve(*model, initial_iterate, options, user_callbacks);
WarmstartInformation warmstart_information{};
Result result = uno.solve(*model, initial_iterate, options, user_callbacks, warmstart_information);


auto modified_model = AMPLModel("/media/data/AMPL/CUTEst/hs015_different_bounds", options);
WarmstartInformation warmstart_information2{};
warmstart_information2.no_changes();
warmstart_information2.variable_bounds_changed = true;
result = uno.solve(modified_model, result.solution, options, user_callbacks, warmstart_information2);


if (result.optimization_status == OptimizationStatus::SUCCESS) {
// check result.solution.status
}
Expand Down
12 changes: 6 additions & 6 deletions uno/Uno.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,18 +33,17 @@ namespace uno {
Level Logger::level = INFO;

// solve without user callbacks
Result Uno::solve(const Model& model, Iterate& current_iterate, const Options& options) {
Result Uno::solve(const Model& model, Iterate& current_iterate, const Options& options, WarmstartInformation& warmstart_information) {
// pass user callbacks that do nothing
NoUserCallbacks user_callbacks{};
return this->solve(model, current_iterate, options, user_callbacks);
return this->solve(model, current_iterate, options, user_callbacks, warmstart_information);
}

// solve with user callbacks
Result Uno::solve(const Model& model, Iterate& current_iterate, const Options& options, UserCallbacks& user_callbacks) {
Result Uno::solve(const Model& model, Iterate& current_iterate, const Options& options, UserCallbacks& user_callbacks,
WarmstartInformation& warmstart_information) {
Timer timer{};
Statistics statistics = Uno::create_statistics(model, options);
WarmstartInformation warmstart_information{};
warmstart_information.whole_problem_changed();

size_t major_iterations = 0;
OptimizationStatus optimization_status = OptimizationStatus::SUCCESS;
Expand All @@ -64,14 +63,14 @@ namespace uno {
DEBUG << "### Outer iteration " << major_iterations << '\n';

// compute an acceptable iterate by solving a subproblem at the current point
warmstart_information.iterate_changed();
this->globalization_mechanism.compute_next_iterate(statistics, model, current_iterate, trial_iterate, warmstart_information, user_callbacks);
termination = this->termination_criteria(trial_iterate.status, major_iterations, timer.get_duration(), optimization_status);
user_callbacks.notify_new_primals(trial_iterate.primals);
user_callbacks.notify_new_multipliers(trial_iterate.multipliers);

// the trial iterate becomes the current iterate for the next iteration
std::swap(current_iterate, trial_iterate);
warmstart_information.new_iterate();
}
}
catch (std::exception& exception) {
Expand All @@ -98,6 +97,7 @@ namespace uno {
statistics.start_new_line();
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();
Expand Down
6 changes: 4 additions & 2 deletions uno/Uno.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,16 @@ namespace uno {
class Statistics;
class Timer;
class UserCallbacks;
class WarmstartInformation;

class Uno {
public:
Uno(GlobalizationMechanism& globalization_mechanism, const Options& options);

// solve with or without user callbacks
Result solve(const Model& model, Iterate& initial_iterate, const Options& options);
Result solve(const Model& model, Iterate& initial_iterate, const Options& options, UserCallbacks& user_callbacks);
Result solve(const Model& model, Iterate& initial_iterate, const Options& options, WarmstartInformation& warmstart_information);
Result solve(const Model& model, Iterate& initial_iterate, const Options& options, UserCallbacks& user_callbacks,
WarmstartInformation& warmstart_information);

static std::string current_version();
static void print_available_strategies();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ namespace uno {
statistics.add_column("TR iter", Statistics::int_width + 2, options.get_int("statistics_minor_column_order"));
statistics.add_column("TR radius", Statistics::double_width - 4, options.get_int("statistics_TR_radius_column_order"));
statistics.set("TR radius", this->radius);

this->constraint_relaxation_strategy.set_trust_region_radius(this->radius);
this->constraint_relaxation_strategy.initialize(statistics, initial_iterate, options);
}
Expand Down
1 change: 0 additions & 1 deletion uno/ingredients/subproblem_solvers/BQPD/BQPDSolver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
#include "BQPDSolver.hpp"
#include "ingredients/constraint_relaxation_strategies/OptimizationProblem.hpp"
#include "ingredients/hessian_models/HessianModel.hpp"
#include "linear_algebra/SymmetricMatrix.hpp"
#include "linear_algebra/Vector.hpp"
#include "optimization/Direction.hpp"
#include "optimization/Iterate.hpp"
Expand Down
2 changes: 1 addition & 1 deletion uno/optimization/WarmstartInformation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ namespace uno {
this->jacobian_sparsity_changed = false;
}

void WarmstartInformation::iterate_changed() {
void WarmstartInformation::new_iterate() {
this->objective_changed = true;
this->constraints_changed = true;
this->constraint_bounds_changed = true;
Expand Down
2 changes: 1 addition & 1 deletion uno/optimization/WarmstartInformation.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ namespace uno {

void display() const;
void no_changes();
void iterate_changed();
void new_iterate();
void whole_problem_changed();
void only_objective_changed();
};
Expand Down
Loading