Вот проблема.Я использую minpack для нелинейной оптимизации.Функция стоимости имеет следующую подпись:
void cost_function(const int* n, const int* m,const double *p, double *x, int* iflag)
n - размер начальной точки m - размер вектора функции p - начальная точка x - вектор функции
У меня есть цикл, гдеперебирать массив объектов.Каждый объект содержит входную информацию для функции оптимизации.
for(int counter = 0; i < num_of_objects; ++counter)
{
//get information from object
//call optimization function
lmdif1_(cost_function, m, n, initial_point, X, precision, info, iwa, wa, lwa);
}
, но в функции стоимости мне нужны определенные значения, связанные с текущим объектом.Если функция cost будет членом класса, указатель будет иметь неправильный тип, и будет невозможно передать этот указатель в lmdif1 _.
Так что теперь у меня есть временное решение с использованием глобального объекта.
for(int counter = 0; i < num_of_objects; ++counter)
{
//get information from object
//call optimization function
global_obj = object;
lmdif1_(cost_function, m, n, initial_point, X, precision, info, iwa, wa, lwa);
}
Затем функция cost_function использует этот глобальный объект для получения необходимой информации.Но это не хорошо.Каково правильное решение этой проблемы?Спасибо.