Эффективный способ передачи выражений локальных переменных в стороннюю библиотеку (Ipopt)

Я использую стороннюю библиотеку Ipopt. Чтобы использовать его, я должен реализовать некоторые виртуальные функции из одного из его классов. Две виртуальные функции приведены ниже для понимания.

virtual bool get_starting_point   ( double* x);
virtual bool eval_f(const Number* x, Number& obj_value);

Вот x массив переменных и obj_value является выражением переменных в x, x будет менять значение в каждой итерации.

Пример реализации:

bool TNLP::get_starting_point   ( double* x)
{
x[0] =1.5;
x[1] =0.5;
return true;
}
bool TNLP::eval_f(const Number* x, Number& obj_value)
{
obj_value = x[0]*x[0] +x[1]*x[1];
return true;
}

Моя проблема:

У меня есть класс, который содержит данные и выражения, необходимые для моей проблемы.

class MyProblem: public TNLP
{
public:
MyProblem();
protected:
double* m_x= nullptr;   // initial values, i.e, x[0] =1.5; x[1] =0.5;
double m_obj_value;     // same as x[0]*x[0] +x[1]*x[1];
}

Теперь, наследуя от TNLP, я могу реализовывать виртуальные функции. Я должен пройти m_x а также m_obj_value в x а также obj_value в соответствующих виртуальных функциях. Я не могу просто скопировать m_x а также m_obj_value поскольку m_obj_value это выражение m_x, Как я могу эффективно реализовать виртуальные функции с данными m_x а также m_obj_value?

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]