大创项目框架整理
这是一个关于多目标优化算法的框架,其中集合了多目标优化问题集,多目标优化算法,多目标优化算子。该框架参考了JMetal框架的思路,但是由于个人水平限制没有用到任何设计模式(u1s1,我虽然会一些设计模式,但是我真的不会用,hhhh),将代码分为solution解相关的类,problem问题相关类,algorithm算法相关类,operator算子相关类,下面我将会对每一个相关类进行详细的介绍。
solution解相关类
solution相关的类属于多目标优化算法中的解类,这个可以形象的理解为GA算法当中的个体,种群相关,SSA当中的松鼠个体与种群相关,以及其他的类似算法的个体与种群相关都会放在这里。
在这里我们认为,每一个多目标优化算法应该包含一个种群,即解的set的类,以及一个个体类。
solutionSet相关类
solutionSet类作为每一个具体解集类的父类,也就是个体类的集合,他的实现机制是使用ArrayList来实现的。
public ArrayList<solution> array;
并且在其内部,我们实现了

这些方法,但是请注意,这里的solutionSet类中的clone方法是使用的序列化文件流反序列化来实现的,这个方法在大量迭代之后,可能会引起段错误,因此我们一般会在后面的子类中重写这个方法,(ps:由于现在版本限制,也就是目前我还不是很会泛型的知识,因此每一个方法都需要重写一遍,但是对于其他方法,你只需要在重写时注意将solution替换为具体的solution子类就可以了)这个方法的具体替换方式一般为我们在solutionSet中将每一个solution的自变量值以及其他无法经计算得出的必要属性拷贝一遍返回,这里我们拿MaShOA算法举例:
public MaShOADoubleSolutionSet copy(Hyperproblem p){
MaShOADoubleSolutionSet ans=new MaShOADoubleSolutionSet(array.size());
for (MaShOADoubleSolution s:array){
ans.add(s.copy(s,p));
}
return ans;
}
public MaShOADoubleSolution copy(MaShOADoubleSolution s,Hyperproblem p){
MaShOADoubleSolution newS = new MaShOADoubleSolution(p);
for (int i=0;i<variables.length;i++){
newS.variables[i].doubleVariable=s.variables[i].doubleVariable;
}
return newS;
}
以上便是我们的solutionSet的copy方法在其子类中的继承写法,当然如果你不担心出现段错误的,那使用solutionSet.copy方法或许是您的最佳选择,因为他会更加的方便并且拷贝的更加的全面。
solution类
solution类是多目标优化算法中解的概念的总类,也就是我们常说的个体,在solution类中我们应该实现

这些属性和方法,对于当然对于方法copy类的注意事项应该是跟solutionSet类相同,fitness是一个double数组的形式,它代表着适应值大小,其中构造方法中的p.getNumberOfObjectives是指得到问题的维度,当然solution中最主要的问题可能是variables自变量数组,接下来我们将对自变量类进行介绍。
variable类
自变量类包含三个子类,BinaryVariable, DoubleVariable,RealVariable三个类,他们分别实现对应的两个方法,这三个类分别代表着多目标优化算法解的自变量的实现形式,分别是double浮点数类型,Binary二进制类型,Real实数类型这三个类型。
以上便是框架中有关解的相关内容,当然在你实现具体的算法解集,解时需要自定义自己的解集类,如图所示:

problem问题相关类
如名,problem类以及其相关产生的类是对多目标优化算法中问题进行的抽象与实现,我们在框架中认为problem类为所有问题类的超类,
problem类的主要属性如上图,其中在该类中主要是的方法便是对应的get与set方法,以及一个evalute方法,用于计算解的适应值。
problem类将会被三个类继承,它们分别为Singleproblem,Multiproblem,Hyperproblem即单目标问题,多目标问题,和超多目标问题,下面将会对这三个类进行详细介绍。
单目标问题类是指问题的适应值维度为1,也就是
多目标问题类是指问题的适应值维度为2,也就是
超多目标问题类是指问题的适应值维度为3,也就是
当然如果需要三维以上的问题维度,可以让问题类继承超多目标问题类之后重写numberOfObjectives属性。
algorithm算法相关类
algorithm算法相关类是算法部署的主体,与problem类类似,算法也是分为了algorithm类与其三个子类,单目标算法类,多目标算法类,超多目标算法类,从某种意义上来说,算法类是我们程序的入口也是测试函数,我们可以通过在具体的算法类中布置main函数,在main函数中初始化问题problem,以及算法类所需变量,通过调用run方法来实现问题的解决,而实际上,算法类并不参与具体的问题的解决,他的解决问题是通过部署大量的operator多目标优化算子来实现的,下面我们将会对operator进行介绍
operator算子相关类
operator算子相关类是对多目标优化算法的各种各样的算子进行的分类和实现,在这个包中我们主要实现了Crossover 交叉算子, Evalute评价算子,CalDistance计算距离算子,LocalSearch本地搜索算子,Mutation变异算子,Out输出算子,Randominit初始化算子,Selection选择算子,Sort排序算子,以及算法所需要的特殊算子,在具体的实现中我们可以通过灵活调用这些算子来实现具体的功能。
本文介绍了基于JMetal框架的多目标优化算法设计,包括solution解相关类、problem问题相关类、algorithm算法相关类和operator算子相关类。详细讲解了解类、解集类、问题类、算法类和算子类的实现与功能,为大创项目提供了一个清晰的框架结构。
1096

被折叠的 条评论
为什么被折叠?



