⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gaaparams.java

📁 Java实现的遗传算法工具集:GA Playground
💻 JAVA
📖 第 1 页 / 共 4 页
字号:

import java.awt.*;
import java.awt.event.*;
import java.text.*;
import java.io.*;
import java.util.*;
import java.net.*;
import com.magelang.tabsplitter.*;
import com.magelang.splitter.*;
import com.scs.awt.*;
import com.scs.util.*;



public class GaaParams extends Panel  
	implements ActionListener, MouseListener, ItemListener, com.scs.awt.CellListener {
	
	private Panel statusPanel;
	private Label statusLabel;
	
	private TabNamePanel intPanel;
	private TabNamePanel reaPanel;
	private TabNamePanel strPanel;
	private TabNamePanel alleleDefPanel;
	private TabNamePanel alleleMapPanel;
	private TabNamePanel optPanel;
	private TabNamePanel strategyPanel;
	public static TabNamePanel udfPanel;
	
	public static TabSplitter tab = null;
	
	ScsGrid defGrid;
	ScsGrid mapGrid;
	
	Button buttons[][];
	
	Button defButtons[];
	Button mapButtons[];
	Button udfButtons[];
	Button strategyButtons[];
	
	TextField textDefNumAlleles;
	TextArea txtExpression;
	TextField txtMin;
	TextField txtMax;
	TextField txtNumGenes;
	TextField txtNumVariables;
	TextField txtExitValue;
	Checkbox chkMin;
	Checkbox chkMax;
		
	TextField txtString1;
	TextField txtString2;
	TextField txtString3;
	TextField txtString4;
	TextField txtString5;
	Choice chcChoice1;
	Choice chcChoice2;
	Choice chcChoice3;
		
	Label labels[][];
	Choice choices[][];
	TextField texts[][];
	Checkbox checks[][];
	
	int numbers[][];
	String tips[][];
	String helps[][];
	int groupCount[];	
	
	DecimalFormat dFormat;
		
	GaaProblem problem;
	GaaPopulation pop;
	GaaFileInput fileData;	
		
	String strategies[] = {
			"All-C (Always Cooperate)",
			"All-D (Always Defect)",
			"TFT (Tit for Tat)",
			"TTFT (Two Tats for Tit)",
			"TFTT (Tit for Two Tats)"
	};
	
	String strategyStrings[] = {
		"BBBBBBBBBBBBBBBBBBBBB",
		"AAAAAAAAAAAAAAAAAAAAA",
		"ABABABABABABABABABABB",
		"AAAAABABAAAAABABABABB",
		"ABABBBBBABABBBBBBBBBB"
	};
		
	
	final int GROUPNUM = 7;
	final int FIELDNUM = 18;
	final int MAXROWS = 9;

	
	public GaaParams(GaaProblem pr, GaaPopulation pl) {
		
		super();
		
		problem = pr;
		pop = pl;
		fileData = problem.fileData;
		dFormat = new DecimalFormat("0.###");
		
		setLayout(new BorderLayout());
		setSize(730, 390);
		setBackground(Color.lightGray);
		makePanels();
		makeStatusPanel();
		
		initControls();
		initParameters(true);
		
		makeDefPanel();
		makeMapPanel();
		makeUdfPanel();
		makeStrategyPanel();
		initUdfPanel();
		//add("North", new Label());
		add("Center", tab);
		add("South", statusLabel);
		
	}
	
	private void initControls() {

		int i, j;

		groupCount = new int[GROUPNUM];
		
		labels = new Label[GROUPNUM][FIELDNUM];
		texts = new TextField[GROUPNUM][FIELDNUM];
		choices = new Choice[GROUPNUM][FIELDNUM];
		checks = new Checkbox[GROUPNUM][FIELDNUM];
		numbers = new int[GROUPNUM][FIELDNUM];
		tips = new String[GROUPNUM][FIELDNUM];
		helps = new String[GROUPNUM][FIELDNUM];
		buttons = new Button[GROUPNUM][5];
		
		Font f1 = new Font("TimesRoman",Font.BOLD,14);
		Font f2 = new Font("TimesRoman",Font.PLAIN,14);


		for (i=0;i<GROUPNUM;i++) {
			groupCount[i] = 0;
			for (j=0;j<FIELDNUM;j++) {
				labels[i][j] = new Label("");
				choices[i][j] = new Choice();
				texts[i][j] = new TextField("");
				checks[i][j] = new Checkbox();
				tips[i][j] = "";
				helps[i][j] = "";
				
				labels[i][j].setFont(f1);
				texts[i][j].setFont(f2);
				choices[i][j].setFont(f2);
				checks[i][j].setFont(f2);
				
				labels[i][j].addMouseListener( this );
				texts[i][j].addMouseListener( this );
				choices[i][j].addMouseListener( this );
				checks[i][j].addMouseListener( this );
				
				numbers[i][j] = 0;
			}
		}

	}

	void loadParams() {
		
		int ret;
		FileWriter fw;
		String dir;
		String fil;
		int i;
		String txt = "";
		URL url;
   int recordNumber;
   int ni = 0, nr = 0, ns = 0, nf=0;
   FileInput fileData;
   String dataFields[][];
   int dataTypes[];
		
		
		if (GaaApplet.gaaAppMode.equals("Applet"))
			ret = MsgDialog.msg("Sorry", "This option is not supported in an applet", MsgDialog.MB_OK, 0);
		else {		
			
			dir = System.getProperty("user.dir");
			
			Frame f = new Frame("Load Parameters");
			final FileDialog fd = new FileDialog(f,"Load parameters from file",FileDialog.LOAD);
			fd.setDirectory(dir);
			fd.setFile("*.par");
			fd.show();
			fil = fd.getFile();
			if (fil == null) {
				return;
			}
			
			try {
				url = new URL("file:////" + dir + File.separator);
			}
			catch (Exception e) {
				return;
			}

			try 
			{
				URL fileUrl = new URL(url,fil);
				fileData = new FileInput(fileUrl,"=");
				
				if (!fileData.success) {
					GaaAction.deb.debug("fileData error");
					return;
				}
			}
			catch(MalformedURLException e){
					GaaAction.deb.debug("fileData error : " + e.toString());
					return;
			}	
			catch (Exception e){
					GaaAction.deb.debug("fileData error : " + e.toString());
					return;
			}  

	   recordNumber = fileData.recordNumber;
	   dataFields = fileData.dataFields;
	   dataTypes = fileData.dataTypes;
	   
	   for (i=0;i<recordNumber;i++) {
	   		if (!(dataFields[i][0].charAt(0) == '[')) {
	   			String s = dataFields[i][1];
		   		if (dataTypes[i] == 0) {
		   			texts[0][ni].setText(" "+dataFields[i][1]);
		   			ni++;
		   		}
		   		else
		   		if (dataTypes[i] == 1) {
		   			texts[1][nr].setText(" "+dFormat.format(Double.valueOf(dataFields[i][1])));
		   			nr++;
		   		}
		   		else
		   		if (dataTypes[i] == 2) {
		   			texts[2][ns].setText(" "+dataFields[i][1]);
		   			ns++;
		   		}
		   		else
		   		if (dataTypes[i] == 3) {
		   			checks[3][nf].setState(GaaMisc.stringToBoolean(dataFields[i][1]));
		   			nf++;
		   		}
		   		
		   	}
	   	}
			
		}
		
	}
	
	
	public void initParameters(boolean create) {

   String dataFields[][];
   int dataTypes[];
   String dataTips[];
   String dataHelps[];
   int recordNumber;
   int ni = 0, nr = 0, ns = 0, nf=0;
   int i;
   
   fileData = problem.fileData;
   recordNumber = fileData.recordNumber;
   dataFields = fileData.dataFields;
   dataTypes = fileData.dataTypes;
   dataTips  = fileData.dataTips;
   dataHelps  = fileData.dataHelps;
   
   for (i=0;i<recordNumber;i++) {
   		if (!(dataFields[i][0].charAt(0) == '[')) {
   			String s = dataFields[i][1];
   			String s0 = dataFields[i][0];
   			int s1 = dataTypes[i];
	   		if (dataTypes[i] == 0) {
	   			labels[0][ni].setText(dataFields[i][0]);
	   			texts[0][ni].setText(" "+dataFields[i][1]);
	   			tips[0][ni] = dataTips[i];
	   			helps[0][ni] = dataHelps[i];
	   			numbers[0][ni] = i;
	   			ni++;
	   		}
	   		else
	   		if (dataTypes[i] == 1) {
	   			labels[1][nr].setText(dataFields[i][0]);
	   			//texts[1][nr].setText(" "+dataFields[i][1]);
	   			texts[1][nr].setText(" "+dFormat.format(Double.valueOf(dataFields[i][1])));
	   			tips[1][nr] = dataTips[i];
	   			helps[1][nr] = dataHelps[i];
	   			numbers[1][nr] = i;
	   			nr++;
	   		}
	   		else
	   		if (dataTypes[i] == 2) {
	   			labels[2][ns].setText(dataFields[i][0]);
	   			texts[2][ns].setText(" "+dataFields[i][1]);
	   			tips[2][ns] = dataTips[i];
	   			helps[2][ns] = dataHelps[i];
	   			numbers[2][ns] = i;
	   			ns++;
	   		}
	   		else
	   		if (dataTypes[i] == 3) {
	   			labels[3][nf].setText(dataFields[i][0]);
	   			checks[3][nf].setState(GaaMisc.stringToBoolean(dataFields[i][1]));
	   			tips[3][nf] = dataTips[i];
	   			helps[3][nf] = dataHelps[i];
	   			numbers[3][nf] = i;
	   			nf++;
	   		}
	   		
	   	}
   	}
   	
   	if (create) {
	  	groupCount[0] = ni;
	  	groupCount[1] = nr;
	  	groupCount[2] = ns;
	  	groupCount[3] = nf;
	  	
			initInputPanel(0, intPanel, labels[0], texts[0], ni, "Integer Parameters");
			initInputPanel(1, reaPanel, labels[1], texts[1], nr, "Real Parameters");
			initInputPanel(2, strPanel, labels[2], texts[2], ns, "String Parameters");
			initInputPanel(3, optPanel, labels[3], checks[3], nf, "Boolean Parameters (Flags)");

		}
   	
		
	}
	
	
	public void updateParameters(int group) {
		
		int i, j, k;
			
		fileData = problem.fileData;
			
		if (group == 0) {
			for (i=0;i<GROUPNUM;i++) {
			   for (j=0;j<groupCount[i];j++) {
			   		k = numbers[i][j];
			   		if (i == 3) {
			   			if (checks[i][j].getState()) 
			   				fileData.dataFields[k][1] = "True";
			   			else
			   				fileData.dataFields[k][1] = "False";
			   		}
			   		else
			   			fileData.dataFields[k][1] = texts[i][j].getText().trim();
			   }
			}
		}
		else {
		   for (j=0;j<groupCount[group];j++) {
		   		k = numbers[group][j];
		   		fileData.dataFields[k][1] = texts[group][j].getText().trim();;
		   }
	  }
		
		String t1 = fileData.dataFields[3][0];
		String t2 = fileData.dataFields[3][1];
		
		problem.dataFieldsToParams();
		pop.updateParams();
		
	}			
	
	
	void saveParams() {
		
		int ret;
		FileWriter fw;
		String dir;
		String fil;
		int i,j,k;
		String txt = "";
		Date date;
		String dateString;
		
		
		if (GaaApplet.gaaAppMode.equals("Applet"))
			ret = MsgDialog.msg("Sorry", "This option is not supported in an applet", MsgDialog.MB_OK, 0);
		else {		
			
			date = new Date();
			dateString = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG).format(date);
			
			dir = System.getProperty("user.dir");
			
			Frame f = new Frame("Save Parameters");
			final FileDialog fd = new FileDialog(f,"Save parameters to file",FileDialog.SAVE);
			fd.setDirectory(dir);
			fd.setFile("*.par");
			fd.show();
			fil = fd.getFile();
			if (fil == null) {
				return;
			}
			fil = dir + File.separator + fil;
			
			try {
				fw = new FileWriter(fil);
			} catch(IOException e) {
				return;
			}
			
			PrintWriter prw = new PrintWriter(fw, false);
		
			try {
				
				txt = "[File: " + fil + "]";
				prw.write(txt);
				prw.println();
				txt = "[" + problem.problemTitle + " parameters saved at: " + dateString + "]";
				prw.write(txt);
				prw.println();
				prw.println();
				
				fileData = problem.fileData;
					
				for (i=0;i<4;i++) {
					 switch (i) {
					 		case 0:
								txt = "[Integers]";
								break;
					 		case 1:
								txt = "[Reals]";
								break;
					 		case 2:
								txt = "[Strings]";
								break;
					 		case 3:
								txt = "[Flags]";
								break;
						}
						prw.println();
						prw.write(txt);
						prw.println();
					
				   for (j=0;j<groupCount[i];j++) {
				   		k = numbers[i][j];
				   		if (i == 3) {
				   			if (checks[i][j].getState()) 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -