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

📄 psogui.java

📁 用Java实现的粒子群优化算法
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
// 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 + -