📄 annealinglayoutcontroller.java
字号:
package org.jgraph.layout;
import java.awt.Rectangle;
import java.util.ArrayList;
import java.util.Properties;
/**
* @author winkler
* @version 1.0
* Date of creation: 11.04.2003 - 12:40:48
*/
public class AnnealingLayoutController implements LayoutController {
public final static String KEY_TITLE = "Simulated Annealing";
public final static String KEY_CONFIG_NAME = "CONFIG_NAME";
public final static String KEY_INIT_TEMPERATURE = "Start Temperature";
public final static String KEY_MIN_TEMPERATURE = "min. Temperature";
public final static String KEY_MIN_DISTANCE = "min. Distance";
public final static String KEY_TEMP_SCALE_FACTOR = "Temperature Scalefactor";
public final static String KEY_COMPUTE_PERMUTATION = "should compute per Permutation";
public final static String KEY_IS_UPHILL_MOVE_ALLOWED = "are Uphill-Moves allowed";
public final static String KEY_MAX_ROUNDS = "max. Rounds";
public final static String KEY_TRIES_PER_CELL = "tries per cell";
public final static String KEY_COST_FUNCTION_CONFIG = "Costfunction Config";
public final static String KEY_LAMBDA = "Lambda";
public final static String KEY_BOUNDS = "Bounds of resulting graph";
public final static String KEY_LAYOUT_UPDATE_INIT_TEMPERATURE = "Layout Update Start Temperature";
public final static String KEY_LAYOUT_UPDATE_MIN_TEMPERATURE = "Layout Update min. Temperature";
public final static String KEY_LAYOUT_UPDATE_MIN_DISTANCE = "Layout Update min. Distance";
public final static String KEY_LAYOUT_UPDATE_TEMP_SCALE_FACTOR = "Layout Update Temperature Scalefactor";
public final static String KEY_LAYOUT_UPDATE_COMPUTE_PERMUTATION = "Layout Update should compute per Permutation";
public final static String KEY_LAYOUT_UPDATE_IS_UPHILL_MOVE_ALLOWED = "Layout Update are Uphill-Moves allowed";
public final static String KEY_LAYOUT_UPDATE_MAX_ROUNDS = "Layout Update max. Rounds";
public final static String KEY_LAYOUT_UPDATE_TRIES_PER_CELL = "Layout Update tries per cell";
public final static String KEY_LAYOUT_UPDATE_COST_FUNCTION_CONFIG = "Layout Update Costfunction Config";
public final static String KEY_LAYOUT_UPDATE_LAMBDA = "Layout Update Lambda";
public final static String KEY_LAYOUT_UPDATE_BOUNDS = "Layout Update Bounds of resulting graph";
public final static String KEY_LAYOUT_UPDATE_METHOD = "Layout Update Method";
public final static String KEY_LAYOUT_UPDATE_METHOD_NEIGHBORS_ONLY = "Layout Update Method Neighbors only";
public final static String KEY_LAYOUT_UPDATE_METHOD_PERIMETER = "Layout Update Method Perimeter";
public final static String KEY_LAYOUT_UPDATE_METHOD_NEIGHBORS_DEPTH = "Layout Update Method Neighbors depth";
public final static String KEY_LAYOUT_UPDATE_METHOD_PERIMETER_RADIUS= "Layout Update Method Perimeter radius";
public final static String KEY_LAYOUT_UPDATE_METHOD_PERIMETER_RADIUS_INCREASE = "Layout Update Method Perimeter radius increase";
public final static String KEY_LAYOUT_UPDATE_ENABLED = "Layout Update enabled";
public final static String KEY_LAYOUT_UPDATE_CLUSTERING_ENABLED = "Layout Update clustering enabled";
public final static String KEY_LAYOUT_UPDATE_CLUSTERING_FACTOR = "Layout Update clustering factor";
public final static String KEY_LAYOUT_UPDATE_CLUSTERING_MOVE_SCALE = "Layout Update clustering move scaling factor";
public final static int COUT_COSTFUNCTION = 6;
public final static int COSTFUNCTION_EDGE_DISTANCE = 1;
public final static int COSTFUNCTION_EDGE_CROSSING = 2;
public final static int COSTFUNCTION_EDGE_LENGTH = 4;
public final static int COSTFUNCTION_BORDERLINE = 8;
public final static int COSTFUNCTION_NODE_DISTRIBUTION = 16;
public final static int COSTFUNCTION_NODE_DISTANCE = 32;
protected Properties[] config;
protected AnnealingLayoutConfigurationDialog dialog;
private boolean isOptimizer = false;
/**
* Constructor for SimulatedAnnealingController.
*/
public AnnealingLayoutController() {
config = new Properties[2];
config[0] = new Properties();
config[0].put(KEY_CONFIG_NAME ,"Default Values");
config[0].put(KEY_INIT_TEMPERATURE , "300.0");
config[0].put(KEY_MIN_TEMPERATURE , "2.0");
config[0].put(KEY_MIN_DISTANCE , "50.0");
config[0].put(KEY_TEMP_SCALE_FACTOR , "0.95");
config[0].put(KEY_COMPUTE_PERMUTATION ,"true");
config[0].put(KEY_IS_UPHILL_MOVE_ALLOWED,"true");
config[0].put(KEY_MAX_ROUNDS , "10000");
config[0].put(KEY_TRIES_PER_CELL , "8");
config[0].put(KEY_COST_FUNCTION_CONFIG ,"111110");
config[0].put(KEY_BOUNDS , "0.0");
ArrayList lambda1 = new ArrayList();
lambda1.add(new Double(1000.0));
lambda1.add(new Double(100000.0));
lambda1.add(new Double(0.02));
lambda1.add(new Double(2000.0));
lambda1.add(new Double(150.0));
lambda1.add(new Double(1000000.0));
config[0].put(KEY_LAMBDA ,lambda1);
Rectangle bounds1 = new Rectangle(0,0,1000,700);
config[0].put(KEY_BOUNDS ,bounds1);
config[0].put(KEY_LAYOUT_UPDATE_ENABLED ,"true");
config[0].put(KEY_LAYOUT_UPDATE_INIT_TEMPERATURE , "40.0");
config[0].put(KEY_LAYOUT_UPDATE_MIN_TEMPERATURE , "2.0");
config[0].put(KEY_LAYOUT_UPDATE_MIN_DISTANCE , "50.0");
config[0].put(KEY_LAYOUT_UPDATE_TEMP_SCALE_FACTOR , "0.95");
config[0].put(KEY_LAYOUT_UPDATE_COMPUTE_PERMUTATION ,"true");
config[0].put(KEY_LAYOUT_UPDATE_IS_UPHILL_MOVE_ALLOWED,"true");
config[0].put(KEY_LAYOUT_UPDATE_MAX_ROUNDS , "10000");
config[0].put(KEY_LAYOUT_UPDATE_TRIES_PER_CELL , "8");
config[0].put(KEY_LAYOUT_UPDATE_COST_FUNCTION_CONFIG ,"111110");
config[0].put(KEY_LAYOUT_UPDATE_METHOD ,KEY_LAYOUT_UPDATE_METHOD_PERIMETER);
config[0].put(KEY_LAYOUT_UPDATE_METHOD_NEIGHBORS_DEPTH,"1");
config[0].put(KEY_LAYOUT_UPDATE_METHOD_PERIMETER_RADIUS,"100.0");
config[0].put(KEY_LAYOUT_UPDATE_METHOD_PERIMETER_RADIUS_INCREASE,"20.0");
ArrayList lambdaLU1 = new ArrayList();
lambdaLU1.add(new Double(1000.0));
lambdaLU1.add(new Double(100000.0));
lambdaLU1.add(new Double(0.02));
lambdaLU1.add(new Double(2000.0));
lambdaLU1.add(new Double(150.0));
lambdaLU1.add(new Double(1000000.0));
config[0].put(KEY_LAYOUT_UPDATE_LAMBDA ,lambdaLU1);
Rectangle boundsLU1 = new Rectangle(0,0,1000,700);
config[0].put(KEY_LAYOUT_UPDATE_BOUNDS ,boundsLU1);
config[0].put(KEY_LAYOUT_UPDATE_CLUSTERING_ENABLED,"true");
config[0].put(KEY_LAYOUT_UPDATE_CLUSTERING_FACTOR,"8.0");
config[0].put(KEY_LAYOUT_UPDATE_CLUSTERING_MOVE_SCALE,"0.1");
config[1] = new Properties();
config[1].put(KEY_CONFIG_NAME ,"Heavy Values");
config[1].put(KEY_INIT_TEMPERATURE , "500.0");
config[1].put(KEY_MIN_TEMPERATURE , "0.5");
config[1].put(KEY_MIN_DISTANCE , "50.0");
config[1].put(KEY_TEMP_SCALE_FACTOR , "0.97");
config[1].put(KEY_COMPUTE_PERMUTATION ,"true");
config[1].put(KEY_IS_UPHILL_MOVE_ALLOWED,"true");
config[1].put(KEY_MAX_ROUNDS , "10000");
config[1].put(KEY_TRIES_PER_CELL , "8");
config[1].put(KEY_COST_FUNCTION_CONFIG ,"111111");
config[1].put(KEY_BOUNDS , "0.0");
ArrayList lambda2 = new ArrayList();
lambda2.add(new Double(1000.0));
lambda2.add(new Double(100000.0));
lambda2.add(new Double(0.02));
lambda2.add(new Double(2000.0));
lambda2.add(new Double(150.0));
lambda2.add(new Double(1000000.0));
config[1].put(KEY_LAMBDA ,lambda2);
Rectangle bounds2 = new Rectangle(0,0,1000,700);
config[1].put(KEY_BOUNDS ,bounds2);
config[1].put(KEY_LAYOUT_UPDATE_ENABLED ,"true");
config[1].put(KEY_LAYOUT_UPDATE_INIT_TEMPERATURE , "40.0");
config[1].put(KEY_LAYOUT_UPDATE_MIN_TEMPERATURE , "2.0");
config[1].put(KEY_LAYOUT_UPDATE_MIN_DISTANCE , "50.0");
config[1].put(KEY_LAYOUT_UPDATE_TEMP_SCALE_FACTOR , "0.97");
config[1].put(KEY_LAYOUT_UPDATE_COMPUTE_PERMUTATION ,"true");
config[1].put(KEY_LAYOUT_UPDATE_IS_UPHILL_MOVE_ALLOWED,"true");
config[1].put(KEY_LAYOUT_UPDATE_MAX_ROUNDS , "10000");
config[1].put(KEY_LAYOUT_UPDATE_TRIES_PER_CELL , "8");
config[1].put(KEY_LAYOUT_UPDATE_COST_FUNCTION_CONFIG ,"111111");
config[1].put(KEY_LAYOUT_UPDATE_METHOD ,KEY_LAYOUT_UPDATE_METHOD_PERIMETER);
config[1].put(KEY_LAYOUT_UPDATE_METHOD_NEIGHBORS_DEPTH,"2");
config[1].put(KEY_LAYOUT_UPDATE_METHOD_PERIMETER_RADIUS,"200.0");
config[1].put(KEY_LAYOUT_UPDATE_METHOD_PERIMETER_RADIUS_INCREASE,"40.0");
ArrayList lambdaLU2 = new ArrayList();
lambdaLU2.add(new Double(1000.0));
lambdaLU2.add(new Double(100000.0));
lambdaLU2.add(new Double(0.02));
lambdaLU2.add(new Double(2000.0));
lambdaLU2.add(new Double(150.0));
lambdaLU2.add(new Double(1000000.0));
config[1].put(KEY_LAYOUT_UPDATE_LAMBDA ,lambdaLU2);
Rectangle boundsLU2 = new Rectangle(0,0,1000,700);
config[1].put(KEY_LAYOUT_UPDATE_BOUNDS ,boundsLU2);
config[1].put(KEY_LAYOUT_UPDATE_CLUSTERING_ENABLED,"true");
config[1].put(KEY_LAYOUT_UPDATE_CLUSTERING_FACTOR,"12.0");
config[1].put(KEY_LAYOUT_UPDATE_CLUSTERING_MOVE_SCALE,"0.2");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -