参考书:尹朝庆等。人工智能与专家系统。北京:中国水利水电出版社,2001
P325。书上是归一化之后的,本文重新归一化。
先翻书看看,画出拓扑结构,才能轻松明白下文所说的内容。
1、 创建数据库
CREATE TABLE `test`.`table713` (
`ID` INTEGER ,
`sun` varchar(20) NOT NULL,
`temprature` varchar(20) NOT NULL,
`airpress` varchar(20) NOT NULL,
`PH` varchar(20) NOT NULL,
`humidity` varchar(20) NOT NULL,
`DO` varchar(20) NOT NULL
);
2、 导入数据
insert into table713 values(1,1399,1467,1567,1595,1588,1622);
insert into table713 values(2,1467,1567,1595,1588,1622,1611);
insert into table713 values(3,1567,1595,1588,1622,1611,1615);
insert into table713 values(4,1595,1588,1622,1611,1615,1685);
insert into table713 values(5,1588,1622,1611,1615,1685,1789);
insert into table713 values(6,1622,1611,1615,1685,1789,1790);
3、 检验数据库结构合理,数据准确可靠。
select * from table713;
4、 写个类
BP和连数据库在一个类中。
package pa;
import java.util.*;
import java.math.*;
import java.sql.*;
public class Table713 {
public static int M=6; //记录条数
public static int N=6; //字段个数
public static double Data[][]=new double[M][N]; //从数据库中读取的原始数据,并归一化
public static double Max[]=new double[N]; //各个字段的最大值,归一化和反归一化时要用到
public static double Min[]=new double[N]; //各个字段的最小值,归一化和反归一化时要用到
public static double Step=0.6; //学习次数
public static int TrainTimes=8000;
public static int L0=5; //输入层节点数
public static int L1=3; //隐层节点数
public static int L2=1; //输出层节点数
public static double Weight01[][]=new double[L0][L1];
public static double Weight12[][]=new double[L1][L2];
public static double Threshold1[]=new double[L1];
public static double Threshold2[]=new double[L2];
/*函数说明
* public static void getData()//准备数据
* public static void init()//初始化权值和阈值
* public static double transfer(double x)//传递函数
* public static double train(double i1 ,double i2,double i3, double