Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中绘制pareto前端解决方案_Java_Genetic Algorithm_Pareto Chart - Fatal编程技术网

在java中绘制pareto前端解决方案

在java中绘制pareto前端解决方案,java,genetic-algorithm,pareto-chart,Java,Genetic Algorithm,Pareto Chart,我从MOEA算法中收集了3组帕累托前沿解 我想知道是否有一个java库可以帮助从3组数据在同一个图中绘制3个pareto 我有一个2目标问题。所以我想我需要一个二维图 你能帮我举个例子吗。附带了许多分析经济部产出的工具。它包括一个诊断工具,可以生成多个帕累托前沿的二维图。您可以使用内置工具导入数据,然后使用诊断工具轻松显示数据。下图是从诊断工具中捕获的。我执行了NSGA-II和SMPSO,用10个种子解决了LZ3测试问题。近似集(例如,已知的帕累托前沿)显示在右上角 MOEA框架中的诊断工具使

我从MOEA算法中收集了3组帕累托前沿解

我想知道是否有一个java库可以帮助从3组数据在同一个图中绘制3个pareto

我有一个2目标问题。所以我想我需要一个二维图

你能帮我举个例子吗。

附带了许多分析经济部产出的工具。它包括一个诊断工具,可以生成多个帕累托前沿的二维图。您可以使用内置工具导入数据,然后使用诊断工具轻松显示数据。下图是从诊断工具中捕获的。我执行了NSGA-II和SMPSO,用10个种子解决了LZ3测试问题。近似集(例如,已知的帕累托前沿)显示在右上角

MOEA框架中的诊断工具使用。如果您只对显示数据的绘图感兴趣(而不执行任何其他分析),您可能只想使用JFreeChart。但是,我建议使用诊断工具,因为它还具有许多其他功能(例如,计算超容量、代际距离、相加ε指示器的能力)

最后,您可以始终使用JavaFX图表。这是一个相当健壮(尽管不成熟)的API,并且图表实际上相当漂亮。下面是我使用JavaFX构建的XY散点图的屏幕截图。下面提供了生成此绘图的代码。有关其他示例/教程,请访问

import java.util.ArrayList;
导入java.util.Random;
导入com.sun.javafx.collections.ObservableListWrapper;
导入javafx.application.application;
导入javafx.collections.ObservableList;
导入javafx.scene.scene;
导入javafx.scene.chart.NumberAxis;
导入javafx.scene.chart.ScatterChart;
导入javafx.scene.chart.XYChart.Data;
导入javafx.scene.chart.XYChart.Series;
导入javafx.stage.stage;
公共类ScatterChartSample扩展了应用程序{
最终双倍最大值=20;
最终双最小值=0;
@凌驾
公众假期开始(阶段){
阶段。集合标题(“散点图样本”);
最终数轴xAxis=新数轴(最小,最大,(最大-最小)/10);
最终数轴yAxis=新数轴(最小,最大,(最大-最小)/10);
最终散射图sc=新散射图(xAxis,
雅克西斯);
xAxis.setLabel(“f1”);
yAxis.setLabel(“f2”);
sc.setTitle(“三帕累托阵线”);
系列1=新系列();
序列1.集合名(“算法1”);
series1.setData(generateData());
系列2=新系列();
序列2.集合名(“算法2”);
series2.setData(generateData());
系列3=新系列();
序列3.集合名(“算法3”);
series3.setData(generateData());
sc.getData().addAll(系列1、系列2、系列3);
场景=新场景(sc,500400);
舞台场景;
stage.show();
}
/**
*@return生成类似帕累托前沿的随机数据
*/
公共观察列表生成数据(){
ObservalElist dataList=新的ObservalElistWrapper(
新的ArrayList());
Random rand=新的Random();
double x=min+rand.nextDouble();
双y=最大rand.nextDouble();
而(xmin){
x+=rand.nextDouble();
y-=rand.nextDouble();
添加(新数据(x,y));
}
返回数据列表;
}
公共静态void main(字符串[]args){
发射(args);
}
}

我是教育部的新手:您能解释一下如何使用内置工具导入数据,然后使用诊断工具显示数据吗?关于/generating/handling.adf文件(诊断工具中要求加载的格式)的学习是否有参考@ale-6最新的用户指南是$15,可在上获得。但是,v2.5版的用户指南是免费的,可在上获得
import java.util.ArrayList;
import java.util.Random;

import com.sun.javafx.collections.ObservableListWrapper;

import javafx.application.Application;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.ScatterChart;
import javafx.scene.chart.XYChart.Data;
import javafx.scene.chart.XYChart.Series;
import javafx.stage.Stage;

public class ScatterChartSample extends Application {

    final double max = 20;
    final double min = 0;

    @Override
    public void start(Stage stage) {
        stage.setTitle("Scatter Chart Sample");
        final NumberAxis xAxis = new NumberAxis(min, max, (max - min) / 10);
        final NumberAxis yAxis = new NumberAxis(min, max, (max - min) / 10);
        final ScatterChart<Number, Number> sc = new ScatterChart<>(xAxis,
                yAxis);
        xAxis.setLabel("f1");
        yAxis.setLabel("f2");
        sc.setTitle("Three Pareto Front");

        Series<Number, Number> series1 = new Series<>();
        series1.setName("Algorithm1");
        series1.setData(generateData());

        Series<Number, Number> series2 = new Series<>();
        series2.setName("Algorithm2");
        series2.setData(generateData());

        Series<Number, Number> series3 = new Series<>();
        series3.setName("Algorithm3");
        series3.setData(generateData());

        sc.getData().addAll(series1, series2, series3);
        Scene scene = new Scene(sc, 500, 400);
        stage.setScene(scene);
        stage.show();
    }

    /**
     * @return Generates random data resembling a Pareto front 
     */
    public ObservableList<Data<Number, Number>> generateData() {
        ObservableList<Data<Number, Number>> dataList = new ObservableListWrapper<>(
                new ArrayList<>());
        Random rand = new Random();

        double x = min+rand.nextDouble();
        double y = max-rand.nextDouble();

        while (x < max && y > min) {
            x += rand.nextDouble();
            y -= rand.nextDouble();
            dataList.add(new Data<Number, Number>(x, y));
        }
        return dataList;
    }

    public static void main(String[] args) {
        launch(args);
    }
}