利用Jmetal解决多目标优化问题并使用python画图(算法:NSGA-II,问题:ZDT6)

本文介绍了如何利用Java库Jmetal实现NSGA-II算法解决多目标优化问题,特别是针对ZDT6问题。首先,详细讲解了在Jmetal框架下构建算法的步骤,包括选择合适的算子和构建测试类。接着,文章转向使用Python进行结果可视化,通过numpy和matplotlib库画出优化后的图形,并提供了设置图形属性的代码示例,如标题、字体、坐标轴范围等。最后,讨论了如何保存和显示图像。
摘要由CSDN通过智能技术生成

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(
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值