1

所以我试图用nlopt库解决一个非线性方程。我创建了一个名为 Optimizer 的类。在这个类中,我试图构建我需要的所有函数(目标函数、约束)。我的目标函数定义如下:

double Optimizer::myvfunc(const std::vector<double> &x, const std::vector<double> &grad, void *func_data) {

    if (!grad.empty()){
        build_gradient(x,grad);  
    }

    double term=0;

    for (int i = 0; i < support_points; i++) {
       term += calc_distance_term(i,x);
    }

    return term;
}

现在我想调用一个方法 Optimizer::optimize(),然后设置 nlopt 算法启动的所有约束和要求。我在用着:

double Optimizer::optimize() {
    nlopt::opt optimizer(nlopt::LD_SLSQP, (u_int)3*support_points);
    optimizer.set_min_objective(myvfunc, NULL); // compile error

    return 0;
}

这是我得到一个编译错误的地方,我无法解释。

参数类型不匹配:函数类型中的参数数量不兼容

我尽量坚持使用教程,但为什么会出现这个错误?

4

0 回答 0