1.使用jmetal实现算法的方法:
首先在Jmetal体系框架中在jmetal-algorithm文件中选择src文件,再从src文件中选择test文件,点开其中的java文件,再继续向下点击,找到multiobjective与singleobjective两个文件,这两个文件分别是多目标优化算法与单目标优化算法,从这两个文件中找到你需要的对应文件,例如我们需要的是NSGA2,那我们便打开nsgaii文件夹下面的NSGAIIBuilderTest测试类(顺序如下图:)
打开对应的测试类,我们会看到一堆方法(感觉NSGAII是方法最多的,而且看起来极为劝退),在这里我们只需要关注开始(startup方法)与其他的set方法,通过分析这些方法,我们可以知道NSGAII在Jmetal算法实现中需要的众多算子,譬如说 problem问题集,CrossoverOperator交叉算子运算符,MutationOperator变异算子运算符,SelectionOperator选择算子运算符(在setNewSelectionOperator中),还有相应的builder算法(builder的作用就是建立算法,所以我们可以直接使用algorithm算法类来代替),然后我们便可以构建我们自己的test类了(以下的代码由一个大佬的博客抄来的,但我忘了从哪抄的了,尴尬。。。)
public class test {
public static void main(String[] args) {
Problem<DoubleSolution> problem;//问题类
Algorithm<List<DoubleSolution>> algorithm;//算法类
CrossoverOperator<DoubleSolution> crossover;//交叉算子类
MutationOperator<DoubleSolution> mutation;//变异算子类
SelectionOperator<List<DoubleSolution>, DoubleSolution> selection;//选择算子类
// 这里是定义优化问题的过程
problem = new ZDT6();//声明问题,换成其他问题同理
String s="NSGA"+problem.getName();//这里构建了一个字符串,接下来文件中使用
//以下的参数设置都是根据test类中来构建的,但是在自己使用时可以调节参数使算法表现更好
// 种群规模
int popSize = 100;
// 配置SBX交叉算子
double crossoverProbability = 0.9;
double crossoverDistributionIndex = 20.0;
crossover = new SBXCrossover(