具有未知参数向量类型的虚拟函数

问题描述 投票:0回答:1

我正在尝试使用C ++构建优化库以进行参数优化。

问题和参数类型可能会有所不同,例如如果问题是最小化Ackley Function,则我们有一个vector<double>,大小为2(x的索引为0,y的索引为1)。但是,当参数是整数甚至是字符串时,我们可能会遇到问题。

[存在许多用于这种类型优化的算法,例如遗传算法,差异进化算法等。在大多数算法中,一旦我们根据其优化策略修改了参数,就必须调用一个评估函数来接收参数,并给出一个目标函数,将返回一个值(适合度)。

我的问题是我如何在C ++中实现抽象类Problem,使其包含一个virtual double evaluate函数,在该函数中接收相关问题的通用类型的向量作为参考?例如,用户的问题应继承Problem,并且需要指定类型T,在这种情况下,评估函数应类似于virtual double evaluate(const vector<T> &parameters){}

如果我上面提到的策略对C ++不可行。请提出替代策略。

c++ algorithm oop
1个回答
0
投票

这样的事情会吗?

#include <memory>
#include <iostream>
#include <vector>

class Problem {
public:
    virtual double evaluate() = 0;
};

class MyProblem : public Problem {
public:
    MyProblem(const std::vector<float>& parameters) : mParameters(parameters) {}
    double evaluate() override {
        // Do evaluation based on mParameters
        return 47.11;
    }

private:
    const std::vector<float>& mParameters;
};


int main() {
    std::vector<float> v = {1.0f, 2.0f};

    std::unique_ptr<Problem> p{new MyProblem(v)};
    std::cout << p->evaluate() << '\n';  // Calls MyProblem::evaluate()

    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.