最近发现jMetal框架更新到了5.2,我也把以前写代码顺着框架重新改动一遍,正好整理出来供大家参考。
jMetal是Java实现的一套多目标优化框架,只需要很少量的改动就能定制自己的算法。关键是开源包里包括了几乎所有常用的算法,大大方便了懒人群体。
关于项目的其他信息,请移步:https://jmetal.github.io/jMetal/,github:https://github.com/jMetal/jMetal
下载使用
jMetal的5.0版本以后终于maven化了
maven依赖:
<!-- https://mvnrepository.com/artifact/org.uma.jmetal/jmetal-core -->
<dependency>
<groupId>org.uma.jmetal</groupId>
<artifactId>jmetal-core</artifactId>
<version>5.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.uma.jmetal/jmetal-algorithm -->
<dependency>
<groupId>org.uma.jmetal</groupId>
<artifactId>jmetal-algorithm</artifactId>
<version>5.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.uma.jmetal/jmetal-problem -->
<dependency>
<groupId>org.uma.jmetal</groupId>
<artifactId>jmetal-problem</artifactId>
<version>5.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.uma.jmetal/jmetal-exec -->
<dependency>
<groupId>org.uma.jmetal</groupId>
<artifactId>jmetal-exec</artifactId>
<version>5.2</version>
</dependency>
如果不使用maven,可以去官网下载对应的jar包添加到工程里面。
jmetal-core是核心包,jmetal-exec是算法配置包。jmetal-algorithm是各类算法的具体实现,而jmetal-problem是各类优化问题包。其中,jmetal-core是必须的,其余三个包视情况而定,建议都添加。
下面先对jMetal的基本框架和主要的类做一个介绍,下一节再贴出一个完整的Demo。
算法框架
jmetal-core框架
The Algorithm :
Algorithm是所有优化算法的模板,只定义了两个接口方法run()和getResult()。run()是算法的运行入口,getResult()用于返回结果集,一般就是算法得到的Pareto集。代码如下:
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 {
void run() ;
Result getResult() ;
}
你的自己的算法需要继承的是 AbstractGeneticAlgorithm这个类。作者的意图是写一个多目标优化的通用框架,遗传算法只是其中之一,而AbstractGeneticAlgorithm就是遗传算法的算法模板。
这个AbstractEvolutionaryAlgorithm的代码如下: