gpt4 book ai didi

c++ - 我可以在 nlopt 中表示染色体吗?

转载 作者:行者123 更新时间:2023-11-28 05:59:01 25 4
gpt4 key购买 nike

我想找到问题的最佳解决方案。但是,解决方案(染色体)表示为整数 vector (长度未知)。

据我所知,NLOPT接受double*作为输入。此外,属性的数量是 constant .那么是否有可能环绕并传递 std::vector<int>

编辑 - 问题的微小描述:

我有一组点。我想使用启发式对这一点进行排序。这种启发式有些复杂。如果我们在每个连续的点之间画线,它们之间交叉线的数量可能会更少。我在想一些接近 gentic 算法的东西,我可以在其中将解决方案表示为有序索引的染色体。

我选择 NLOPT 是因为我之前用它做过非常成功的实验。我知道它可以使用许多其他遗传或蜜蜂算法库来解决。但在这里我问的是 NLOPT it self。

最佳答案

你有一个 vector<int>作为输入,但您的图书馆需要 double*和一个恒定的大小。

你可以这样做:

#include <iostream>
#include <vector>
#include <algorithm>

int main()
{

std::vector<int> iVector = {1, 2, 3, 4};
std::vector<double> dVector;

dVector.resize(iVector.size());

std::transform(iVector.begin(), iVector.end(), dVector.begin(), [&] (auto i) -> double { return static_cast<double>(i); } );

for (auto d : dVector)
{
std::cout << d << std::endl;
}

std::cout << &dVector[0] << std::endl;

}

您可以使用 &dVector[0] 访问 vector 数据作为 double * . dVector.size() 的常量大小它一直有效,直到 vector 不修改其内部存储。

您肯定需要将数据转换回,您可以使用相同的原理来完成。

编辑

否则,有一个直接包装 C API 的 NLopt C++ 引用,因此您可以直接传递 vector<double> .

仅包括 #include <nlopt.hpp>以 C++ 方式调用 nlopt。

参见:http://ab-initio.mit.edu/wiki/index.php/NLopt_C-plus-plus_Reference

关于c++ - 我可以在 nlopt 中表示染色体吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33626775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com