2016-03-01 22 views
1

我有3套的帕累託前沿的解決方案從MOEA算法收集情節帕累託前沿的解決方案

我想知道是否有一個Java庫,可以幫助從3組數據繪製在同積3分帕累託。

我有一個2目標的問題。所以我想我需要一個2D劇情。

你可以幫我舉一個例子。

回答

2

MOEA Framework附帶有許多分析MOEA輸出的工具。它包括一個診斷工具,可以生成多個帕累託前沿的二維圖。您可以使用內置工具導入數據,然後使用診斷工具輕鬆顯示它們。以下圖像是從診斷工具中捕獲的。我執行NSGA-II和SMPSO來解決10粒種子的LZ3測試問題。近似集合(例如已知的Pareto Front)顯示在右上角。

MOEA Diagnostic Tool

在MOEA Framework中的診斷工具使用JFreeChart構建其情節。如果您只對顯示數據的圖表感興趣(並且不執行任何其他分析),則可能只想使用JFreeChart。不過,我推薦使用診斷工具,因爲它帶有許多其他功能(例如,計算超容量,代間距離,添加劑Epsilon指示器的能力)

最後,您可以隨時使用JavaFX圖表。這是一個相當強大(雖然不成熟)的API,並且圖表實際上非常漂亮。在下面,您會看到我使用JavaFX構建的XY散點圖的屏幕截圖。生成此圖的代碼在下面提供。另外的例子/教程可在http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm

JavaFX Chart

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); 
    } 
} 
+0

我是新來MOEA:你能解釋一下如何使用內置的工具導入數據,然後使用診斷工具顯示它們?是否有學習/生成/處理.adf文件的參考(要求在診斷工具中加載的格式) –

+0

@ ale-6最新的用戶指南是$ 15,可從http://moeaframework.org/documentation.html獲取。但是,v2.5的用戶指南可以在http://moeaframework.sourceforge.net/documentation.html上免費獲取。 –