📄 psogui.java
字号:
// Decompiled by Jad v1.5.7f. Copyright 2000 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/SiliconValley/Bridge/8617/jad.html
// Decompiler options: packimports(3)
// Source File Name: PSOGUI.java
package ci.ec.pso.gui;
import ci.ec.FitnessCanvas;
import ci.ec.dialog.*;
import ci.ec.pso.real.PSOAlgorithm;
import ci.ec.pso.real.PSOParameters;
import ci.function.Function;
import java.awt.*;
import java.awt.event.*;
// Referenced classes of package ci.ec.pso.gui:
// GUIParameterDialog, PSOHelpFrame, PSOMovementCanvas
public class PSOGUI extends Frame
implements ActionListener, WindowListener, ItemListener, Runnable
{
public PSOGUI(String s)
{
super(s);
pauseFlag = false;
psoPara = new PSOParameters();
defaultVelocityMaximum = "100";
velocityMaximum = defaultVelocityMaximum;
defaultPositionMaximum = "100";
positionMaximum = defaultPositionMaximum;
defaultXIndex = "0";
xIndex = defaultXIndex;
defaultYIndex = "1";
yIndex = defaultYIndex;
defaultDisplayStepSize = "10";
displayStepSize = defaultDisplayStepSize;
defaultFunctionName = "Sphere";
functionName = defaultFunctionName;
defaultFunctionDimension = "10";
functionDimension = defaultFunctionDimension;
defaultLeftInitialRange = "-20";
leftInitialRange = defaultLeftInitialRange;
defaultRightInitialRange = "20";
rightInitialRange = defaultRightInitialRange;
setSize(550, 300);
setLayout(new GridBagLayout());
GridBagConstraints gridbagconstraints = new GridBagConstraints();
gridbagconstraints.fill = 0;
gridbagconstraints.weightx = 20D;
gridbagconstraints.weighty = 100D;
add(new Label("Initial W"), gridbagconstraints, 0, 0, 1, 1);
tfInitialWeight = new TextField("0.9", 10);
add(tfInitialWeight, gridbagconstraints, 1, 0, 1, 1);
add(new Label("Popu Size"), gridbagconstraints, 2, 0, 1, 1);
tfPopulationSize = new TextField("20", 10);
add(tfPopulationSize, gridbagconstraints, 3, 0, 1, 1);
cbRange = new Checkbox("Range");
cbRange.addItemListener(this);
add(cbRange, gridbagconstraints, 4, 0, 1, 1);
cbMaximumVelocity = new Checkbox("max Velocity");
cbMaximumVelocity.addItemListener(this);
add(cbMaximumVelocity, gridbagconstraints, 5, 0, 1, 1);
add(new Label("Iterations"), gridbagconstraints, 0, 1, 1, 1);
tfIterationMaximum = new TextField("1000", 10);
add(tfIterationMaximum, gridbagconstraints, 1, 1, 1, 1);
cbDisplay = new Checkbox("Display");
cbDisplay.addItemListener(this);
add(cbDisplay, gridbagconstraints, 2, 1, 1, 1);
add(new Label("Function choice"), gridbagconstraints, 3, 1, 1, 1);
cFunctionName = new Choice();
cFunctionName.add("Sphere");
cFunctionName.add("Rosenbrock");
cFunctionName.add("Rastrigrin");
cFunctionName.add("Griewank");
cFunctionName.add("DeJong F4");
cFunctionName.add("DeJong F4 with noise");
cFunctionName.add("Ackley");
cFunctionName.add("Koon F3");
cFunctionName.add("Bohachevsky");
cFunctionName.add("GoldsteinP");
cFunctionName.add("Easom");
cFunctionName.add("Floudas");
cFunctionName.add("Beale");
cFunctionName.add("Matyas");
cFunctionName.add("Zettl");
cFunctionName.addItemListener(this);
add(cFunctionName, gridbagconstraints, 4, 1, 1, 1);
bHelp = new Button("Help");
add(bHelp, gridbagconstraints, 5, 1, 1, 1);
bHelp.addActionListener(this);
bHelp.setEnabled(true);
bSetParameter = new Button("Set Para");
add(bSetParameter, gridbagconstraints, 0, 2, 1, 1);
bSetParameter.addActionListener(this);
bSetParameter.setEnabled(true);
bRun = new Button("Run");
add(bRun, gridbagconstraints, 1, 2, 1, 1);
bRun.addActionListener(this);
bRun.setEnabled(false);
bPause = new Button("Pause");
add(bPause, gridbagconstraints, 2, 2, 1, 1);
bPause.addActionListener(this);
bPause.setEnabled(false);
bStop = new Button("Stop");
add(bStop, gridbagconstraints, 3, 2, 1, 1);
bStop.addActionListener(this);
bStop.setEnabled(false);
bPrint = new Button("Print");
add(bPrint, gridbagconstraints, 4, 2, 1, 1);
bPrint.addActionListener(this);
bPrint.setEnabled(false);
bExit = new Button("Exit");
add(bExit, gridbagconstraints, 5, 2, 1, 1);
bExit.addActionListener(this);
Dimension dimension = getSize();
movementCanvas = new PSOMovementCanvas(Color.blue, dimension.width / 3, (dimension.height * 4) / 7);
add(movementCanvas, gridbagconstraints, 0, 3, 2, 4);
fitnessCanvas = new FitnessCanvas(Color.yellow, dimension.width / 3, (dimension.height * 4) / 7);
add(fitnessCanvas, gridbagconstraints, 2, 3, 2, 4);
add(new Label("Iteration"), gridbagconstraints, 4, 3, 1, 1);
tfIteration = new TextField(13);
add(tfIteration, gridbagconstraints, 5, 3, 1, 1);
Label label = new Label("Best Fitness");
label.setForeground(Color.red);
add(label, gridbagconstraints, 4, 4, 1, 1);
tfBestFitness = new TextField(13);
add(tfBestFitness, gridbagconstraints, 5, 4, 1, 1);
Label label1 = new Label("Average fitness");
label1.setForeground(Color.blue);
add(label1, gridbagconstraints, 4, 5, 1, 1);
tfAverageFitness = new TextField(13);
add(tfAverageFitness, gridbagconstraints, 5, 5, 1, 1);
setForeground(Color.black);
add(new Label("Variance"), gridbagconstraints, 4, 6, 1, 1);
tfVarianceFitness = new TextField(13);
add(tfVarianceFitness, gridbagconstraints, 5, 6, 1, 1);
addWindowListener(this);
}
public void add(Component component, GridBagConstraints gridbagconstraints, int i, int j, int k, int l)
{
gridbagconstraints.gridx = i;
gridbagconstraints.gridy = j;
gridbagconstraints.gridwidth = k;
gridbagconstraints.gridheight = l;
add(component, gridbagconstraints);
}
public void actionPerformed(ActionEvent actionevent)
{
String s = actionevent.getActionCommand();
if(s.equals("Set Para"))
{
setParameter();
return;
}
if(s.equals("Run"))
{
psoRun();
return;
}
if(s.equals("Pause"))
{
psoPause();
return;
}
if(s.equals("Stop"))
{
psoStop();
return;
}
if(s.equals("Print"))
{
psoPrint();
return;
}
if(s.equals("Exit"))
{
psoExit();
return;
}
if(s.equals("Help"))
psoHelp();
}
private void psoExit()
{
dispose();
}
private void psoHelp()
{
psoHelp = new PSOHelpFrame("PSO Help");
psoHelp.show();
}
private void setParameter()
{
initialWeight = tfInitialWeight.getText();
populationSize = tfPopulationSize.getText();
iterationMaximum = tfIterationMaximum.getText();
if(initialWeight.equals("") || positionMaximum.equals("") || populationSize.equals("") || iterationMaximum.equals("") || functionName.equals("") || functionDimension.equals(""))
{
return;
} else
{
bSetParameter.setEnabled(true);
bRun.setEnabled(true);
bPause.setEnabled(false);
bStop.setEnabled(false);
bPrint.setEnabled(false);
return;
}
}
private void psoRun()
{
pauseFlag = false;
runDoneFlag = false;
iterationCount = 0;
movementCanvas.setMaximumValue(Integer.valueOf(positionMaximum).intValue());
movementCanvas.setXIndex(Integer.valueOf(xIndex).intValue());
movementCanvas.setYIndex(Integer.valueOf(yIndex).intValue());
setPSOParameters();
psoPara.getPopulationSize();
psoPara.getFunctionDimension();
GUIParameterDialog guiparameterdialog = new GUIParameterDialog(this, psoPara);
guiparameterdialog.show();
if(guiparameterdialog.getActionFlag())
{
psoAl = new PSOAlgorithm(psoPara.getPopulationSize(), psoPara.getFunctionDimension(), psoPara);
bSetParameter.setEnabled(false);
bRun.setEnabled(false);
bPause.setEnabled(true);
bStop.setEnabled(true);
bPrint.setEnabled(false);
bExit.setEnabled(false);
runner = new Thread(this);
runner.start();
}
}
public void run()
{
while(iterationCount < psoPara.getMaximumGeneration())
{
psoAl.oneIteration();
int i = Integer.valueOf(displayStepSize).intValue();
if(iterationCount % i == 0 || iterationCount == psoPara.getMaximumGeneration() - 1)
{
double ad[] = psoAl.getFitness();
double d = Function.average(ad);
double d1 = psoAl.getGlobalBestFitness();
double d2 = Function.variance(ad);
tfIteration.setText(String.valueOf(iterationCount));
tfBestFitness.setText(String.valueOf((float)d1));
tfAverageFitness.setText(String.valueOf((float)d));
tfVarianceFitness.setText(String.valueOf((float)d2));
movementCanvas.setPopulation(psoAl.getPopulation());
movementCanvas.repaint();
if(iterationCount == 0)
{
fitnessCanvas.setMaximumValueX(psoPara.getMaximumGeneration() / i);
fitnessCanvas.setMaximumValueY(d);
}
if(iterationCount % i == 0)
fitnessCanvas.setCount(iterationCount / i + 1);
else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -