我正在使用 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
传递。我不能只复制and因为是. 如何有效地使用数据和实现虚拟功能?x
obj_value
m_x
m_obj_value
m_obj_value
m_x
m_x
m_obj_value