如何在 GALib 中定义 GA1DArrayGenome 的初始值设定项<float>?
How to define an Initializer for GA1DArrayGenome<float> in GALib?
我正在使用Galib2.4遗传文库中的Ga1darraygenome类。我的目的是优化6个浮点数的列表,因此染色体应该是[0.3 0.5 0.1 0.1 0.2 0.4 0.1],[0.03 0.04 0.1 0.1 0.2 0.2 0.05 0.8] ...
我很难初始化种群,因为在调用gasimplega :: evolve()之后,我发现我使用的任何随机种子,每个染色体的基因都是[0 0 0 0 0 0 0 0 0]。
我检查了该文档,发现对于Ga1DarrayGenome类,默认初始化器是gagenome :: Noinitializer,我认为这意味着我必须为此基因组类找到另一个初始化器?
void main() {
// ...
GARandomSeed(1);
GA1DArrayGenome<float> genome(6, &Objective);
genome.initializer(/* ?? */);
GASimpleGA ga(genome);
ga.populationSize(100);
ga.nGenerations(100);
ga.pMutation(0.001);
ga.pCrossover(0.6);
ga.evolve();
cout << ga.statistics().bestIndividual() << endl;
// ...
}
以上是我使用galib的过程。它模仿示例代码EX27.C和库中所做的工作。但是,样本正在做
之类的事情 // ...
GA1DArrayGenome<float> genome(2, Objective);
genome.initializer(::Initializer);
genome.mutator(::Mutator);
genome.comparator(::Comparator);
genome.crossover(::Crossover);
// ...
我没有在'::'。
有人可以帮我吗?谢谢。
名称空间
前面没有名称空间的::Foo
表示在全局名称空间中声明的Foo
(即未选择名称空间)。用它将当前名称空间"逃回"到全球空间。另一个示例是::std::string
,即std
名称空间中的string
类。
初始化
GA1DArrayGenome<T>
非常通用,对T
不了解。它不知道可接受的值或如何处理这些值。因此,您需要提供初始化器,突变器等。如果您只想"开箱即用" float
优化,请考虑使用带有良好默认值的派生类GARealGenome
。有关演示代码的Galib页面上的示例21。
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- System.InvalidCastException - SQL to C++ - safe_cast<float>
- 没有从阵列<float>到阵列<int>的可行转换
- 数组下标的类型"float*[float]"无效
- 没有合适的构造函数可以从"float"转换为"_D3DCOLORVALUE"
- 为什么我会收到此错误?无法将 {lb, ub} 从<大括号括起来的初始值设定项列表>转换为 float(**)(float*, int)
- 将 **float array 从 C++ Dll 传递给 python
- 错误:二进制'operator*' 'float'和'float[0]'类型的操作数无效
- float* 已在 Gameobject.obj 中定义
- 如何将 qml 的文本转换为 float 和 int
- 为什么将 1 添加到 numeric_limits<float>::min() 返回 1?
- 有没有比static_cast更优雅的从int到float的演员阵容<float>?
- 编译器给出错误:format 指定类型 'float *',但参数的类型'double' [-Wformat]
- OPENCL 警告:不兼容的指针类型将'float __global[16]'传递给类型为 '__global float4 的参数 *
- 错误:无法将"float*"转换为"float"
- 如何在函数中将字符串和分数存储为(Int 或 float)
- 缩小从double到float的转换