const std::vector<dlib:: function_evaluation> erstellen
-
Hallo,
ich benutze dlib und dort möchte ich eine Funktion aufrufen (find_gobal_max)
Momentan rufe ich die Funktion wie folgt auf und es läuft:
auto result = dlib::find_min_global(opt_func,{ -20,-20,-20},{20,20,20},dlib::FOREVER,0.1);
Nun habe ich in der Doku gesehen, man kann der FUnktion auch einen "initial Vektor mitgeben
const std::vector<function_evaluation>& initial_function_evals = {}
function_evaluation ist wohl ein struct von dlib und sieht so aus:
struct function_evaluation { function_evaluation() = default; function_evaluation(const matrix<double,0,1>& x, double y) :x(x), y(y) {} matrix<double,0,1> x; double y = std::numeric_limits<double>::quiet_NaN(); };
Jetzt möchte ich meinen FUnktionsaufruf ergänzen (z.b. mit den Werten 10,10,10) , genau um dieses "function_evaluation".
Nur irgendwie bin ich zu dumm so eine Variable zu erstellen.Also ich möchte z.b. folgende Funktion aufrufen:
template < typename funct > function_evaluation find_min_global ( thread_pool& tp, funct f, const matrix<double,0,1>& bound1, const matrix<double,0,1>& bound2, const std::vector<bool>& is_integer_variable, const std::chrono::nanoseconds max_runtime, double solver_epsilon = 0, const std::vector<function_evaluation>& initial_function_evals = {} ) { return find_min_global(tp, std::move(f), bound1, bound2, is_integer_variable, max_function_calls(), max_runtime, solver_epsilon, initial_function_evals); }
Also mein Problem ist die Funktion mit der richtigen initial_function_evals aufzurufen. Wie lege ich einen const vector mit einem struct als Datentyp an ?
Gruß,
Robo
-
Warum sollte der vector const sein?
-
Der 'vector' muß nicht zwingend
const
sein (das ist nur die für die Parameterdeklaration, damit man sieht daß der als Referenz übergebenevector
dort nicht verändert wird).Und generell kannst du einfach den
vector
entweder mithilfe der Initialisierung{ ... }
oder aber dynamisch mittels.push_back(...)
(bzw..emplace_back(...)
) füllen.
Da in der Struktur alle Memberpublic
sind, also einfach per:std::vector evals = { { x1, y1 }, { x2, y2 } };
Es kommt jetzt nur darauf an, wie eine Variable vom Typ
matrix<double,0,1>
erzeugt wird, damit du diex
-Werte passend setzen kannst.