graph2.java
来自「这是用遗传编程算法来拟合曲线的一个经典程序」· Java 代码 · 共 115 行
JAVA
115 行
/*作者:徐朝*/
/*keystonexu@yahoo.com.cn*/
package regression.gui;
import kernel.*;
import regression.function.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Observer;
import java.util.Observable;
import java.applet.*;
public class Graph2 extends Frame implements ActionListener,Observer
{
Graphs g;
Kernel kernel;
Evaluation e;
TextArea t;
Label mess;
Button start;
Thread thread;
MessageGp message;
double yold[] = new double[10];
double ynew[] = new double[10];
Graph2()
{
init();
}
public void init()
{
double[] y;
setBackground(Color.lightGray);
this.kernel = new Kernel(new Parameter(),new Sets(), new Evaluation());
kernel.addObserver(this);
e = (Evaluation)(kernel.evaluate);
setLayout(null);
t = new TextArea(40,20);
t.setText("");
y = e.getData();
System.out.println("被拟合数据");
for(int i = 0; i < y.length; i++)
{
yold[i] = Math.round(y[i] * 1000.0) / 1000.0;
System.out.print(" " + yold[i]);
}
System.out.println();
g = new Graphs(y,null,Graphs.SCATTER);
g.setBounds(220,20,500,300);
t.setBounds(20,20,200,500);
start = new Button("开始曲线拟合");
start.setBounds(250,350,100,30);
start.addActionListener(this);
Label pro = new Label("每代最优程序的语法树");
pro.setBounds(50,0,150,20);
add(g);
add(t);
add(start);
add(pro);
}
public void update(Observable ob, Object arg)
{
message = (MessageGp)arg;
double[] y = e.getData(message.individual);
//Evaluation e = new Evaluation();
System.out.println("第"+message.currentGeneration + "代");
for(int i = 0; i < y.length; i++)
{
ynew[i] = Math.round(y[i] * 1000.0) / 1000.0;
System.out.print(" " + ynew[i]);
}
System.out.println();
double raw_fitness = 0;
for (int i = 0; i < y.length; i++)
{
double difference = Math.sqrt((yold[i] - ynew[i]) * (yold[i] - ynew[i]));
raw_fitness = raw_fitness + difference;
System.out.print(" " + Math.round(difference * 1000.0) / 1000.0);
}
System.out.println();
System.out.println("raw_fitness=" + raw_fitness);
System.out.println("standardfitness=" + message.individual.standardizedFitness );
//e.Evaluate1(message.individual);
System.out.println("after: standardfitness=" + message.individual.standardizedFitness );
g.setData(y,message.individual.adjustedFitness,
message.currentGeneration);
t.setText("");
t.setFont(new Font("宋体",Font.PLAIN,10));
t.setText(message.individual.program.toString(false));
}
public void actionPerformed(ActionEvent e)
{
if(e.getActionCommand().equals("开始曲线拟合"))
{
start.setLabel("停止曲线拟合");
thread = new Thread(kernel);
thread.start();
}
if(e.getActionCommand().equals("停止曲线拟合"))
{
start.setLabel("开始曲线拟合");
thread.stop();
}
}
public static void main(String args[])
{
Graph2 g2 = new Graph2();
g2.setSize(800,800);
g2.show();
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?