2

我正在使用 Ipopt 第三方库。为了使用它,我必须从它的一个类中实现一些虚函数。下面给出两个虚函数以便理解。

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

这里x是变量数组,是变量obj_value的表达式xx将在每次迭代中更改值。

一个示例实现:

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

4

0 回答 0