9#include "sleipnir/optimization/solver/exit_status.hpp"
10#include "sleipnir/util/function_ref.hpp"
11#include "sleipnir/util/small_vector.hpp"
21template <
typename DecisionVariables>
45template <
typename DecisionVariables>
48 const DecisionVariables& initial_guess)>
50 std::span<const DecisionVariables> initial_guesses) {
51 small_vector<std::future<MultistartResult<DecisionVariables>>> futures;
52 futures.reserve(initial_guesses.size());
54 for (
const auto& initial_guess : initial_guesses) {
55 futures.emplace_back(std::async(std::launch::async, solve, initial_guess));
58 small_vector<MultistartResult<DecisionVariables>> results;
59 results.reserve(futures.size());
61 for (
auto& future : futures) {
62 results.emplace_back(future.get());
65 return *std::ranges::min_element(results, [](
const auto& a,
const auto& b) {
67 if (a.status == ExitStatus::SUCCESS && b.status != ExitStatus::SUCCESS) {
72 return a.cost < b.cost;
Definition function_ref.hpp:13
Definition multistart.hpp:22
double cost
The solution's cost.
Definition multistart.hpp:26
ExitStatus status
The solver exit status.
Definition multistart.hpp:24
DecisionVariables variables
The decision variables.
Definition multistart.hpp:28