Java遗传算法适应度函数能否是非静态的?

时间:2018-04-21 05:48:28

标签: java genetic-programming genetic

我想从代码中删除静态关键字。但在健身函数方法中,它给了我一个错误。静态关键词在适应度函数方法中是必不可少的吗?

这是给我一个错误的代码。

public void optimize()
{
    long l1 = System.currentTimeMillis();
    final Factory<Genotype<IntegerGene>> gtf = Genotype.of(IntegerChromosome.of(0, all.length - 1, LEN));
    final Engine<IntegerGene, Integer> engine = Engine.builder(eval, gtf).populationSize(1000).build();
    System.out.println("engine.getPopulationSize() = " + engine.getPopulationSize());
    final EvolutionResult<IntegerGene, Integer> result = engine.stream().limit(500).collect(EvolutionResult.toBestEvolutionResult());
    Genotype<IntegerGene> genotype = result.getBestPhenotype().getGenotype();
    System.out.println("result = " + genotype);
    System.out.println("result.getBestPhenotype().getFitness() = " + result.getBestPhenotype().getFitness());
    System.out.println("Time taken : " + (System.currentTimeMillis() - l1));
}

健身功能可以是非静态的还是应该始终是静态的?有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

我猜测EvolutionResult.toBestEvolutionResult()是健身功能。如果不是,请纠正我。

你调用它的方式,它必须是一个静态方法,因为EvolutionResult部分引用的是类,而不是类的实例。

你可以说:

EvolutionResult evolutionResult = new EvolutionResult();
...
    final EvolutionResult<IntegerGene, Integer> result = 
          engine.stream()
                .limit(500)
                .collect(evolutionResult.toBestEvolutionResult());

然后您已经创建了一个类的实例,并且可以在其上调用方法,因此toBestEvolutionResult()不再需要static