架构
整个jMetal5架构依赖于四个接口
上面的框图展示了jMetal所提供的主要功能:算法( Algorithm
类)通过使用诸多操作符(Operators
类)来处理一组潜在的解决方案( Solution
类)来解决特定的问题(Problem
类)。解决方案( Solution
类)表示进化算法中的个体,以及粒子群优化算法中的粒子。问题(Problem
类)可以创建新的个体或粒子并对其进行评估。
与之前版本的jMetal相比,取消了定义人口或群体的类。在jMetal 5中改用一个解决方案列表(Java中的List<Solution>
)来代替
泛型
Java泛型也在jMetal5中进行了广泛的使用
使用泛型可以使Java编译器检查所有的组件是否匹配. 下面的代码以著名的NSGA-II算法为例,展示了算法的所有配置:
Problem<DoubleSolution> problem;
Algorithm<List<DoubleSolution>> algorithm;
CrossoverOperator<DoubleSolution> crossover;
MutationOperator<DoubleSolution> mutation;
SelectionOperator<List<DoubleSolution>, DoubleSolution> selection;
...
algorithm = new NSGAIIBuilder<DoubleSolution>(problem, crossover, mutation)
.setSelectionOperator(selection)
.setMaxEvaluations(25000)
.setPopulationSize(100)
.build() ;
算法 Algorithm
相关类的层次结构Hierarchy ofrelated classes
Algorithm
算法类接口十分简单,只包含了两个方法 run()
和 getResult()
, 如下所示
package org.uma.jmetal.algorithm;
/**
* Interface representing an algorithm
* @author Antonio J. Nebro
* @version 0.1
* @param <Result> Result
*/
public interface Algorithm<Result> extends Runnable, Serializable, DescribedEntity {
void run() ;
Result getResult() ;
}
jMetal 5包含了从Algorithm
继承的类的层次结构,如下图所示:
一方面,从图中可以看出一系列抽象类(如AbstractEvolutionaryAlgorithm
,AbstractParticleSwarmOptimization
),它们构成了模板,可以通过重用扩展已经提供的代码来促进不同算法的实现。另一方面,我们可以看到两个算法示例,MOEA/D和NSGAII45不遵循任何提供的模板。通过类似的几口实现方式,您可以自行实现新算法,也可以通过扩展某些现有类来实现。
我们可以观察到,NSGA-II
类继承了AbstractGeneticAlgorithm
,这是AbstractEvolutionaryAlgorithm
的一个子类,NSGA-II的稳态形式也可以通过扩展NSGAII
类来实现。