public List <ForecastDayStationData> SelectForecastDayStationData(int StationID, DateTime TargetDate, int Forecast)
        {
            connect();
            DateTime TimeStart = TargetDate.Date;
            DateTime TimeEnd   = TimeStart + TimeSpan.FromDays(1) - TimeSpan.FromSeconds(1);
            List <ForecastDayStationData> DataList = new List <ForecastDayStationData>();
            string sql = String.Format("SELECT * FROM `forecast_day_station_data` WHERE `StationID`={0} AND `ForecastType`={1} AND `Time` BETWEEN '{2}' AND '{3}';",
                                       StationID, Forecast, TimeStart.ToString("yyyy-MM-dd HH:mm:ss"), TimeEnd.ToString("yyyy-MM-dd HH:mm:ss"));
            MySqlCommand    cmd = new MySqlCommand(sql, conn);
            MySqlDataReader rdr = cmd.ExecuteReader();

            while (rdr.Read())
            {
                ForecastDayStationData Record = new ForecastDayStationData()
                {
                    ID            = (int)rdr["ID"],
                    StationID     = (int)rdr["StationID"],
                    ForecastType  = (int)rdr["ForecastType"],
                    ActivePower   = double.Parse((string)rdr["ActivePower"]),
                    ReactivePower = double.Parse((string)rdr["ReactivePower"]),
                    Time          = (DateTime)rdr["Time"]
                };
                DataList.Add(Record);
            }
            rdr.Close();
            return(DataList);
        }
 public int AddForecastDayStationData(ForecastDayStationData Record)
 {
     connect();
     string sql = String.Format("INSERT INTO `forecast_day_station_data` (`StationID`,`ForecastType`,`ActivePower`,`ReactivePower`,`Time`) VALUE ('{0}','{1}','{2}','{3}','{4}');",
         Record.StationID,Record.ForecastType, Record.ActivePower, Record.ReactivePower, Record.Time.ToString("yyyy-MM-dd HH:mm:ss"));
     MySqlCommand cmd = new MySqlCommand(sql, conn);
     int result = cmd.ExecuteNonQuery();
     return result;
 }
        public int AddForecastDayStationData(ForecastDayStationData Record)
        {
            connect();
            string sql = String.Format("INSERT INTO `forecast_day_station_data` (`StationID`,`ForecastType`,`ActivePower`,`ReactivePower`,`Time`) VALUE ('{0}','{1}','{2}','{3}','{4}');",
                                       Record.StationID, Record.ForecastType, Record.ActivePower, Record.ReactivePower, Record.Time.ToString("yyyy-MM-dd HH:mm:ss"));
            MySqlCommand cmd    = new MySqlCommand(sql, conn);
            int          result = cmd.ExecuteNonQuery();

            return(result);
        }
        public int AddForecastDayStationData(ForecastDayStationData Record)
        {
            DatabaseConnector dc = new DatabaseConnector();

            return(dc.AddForecastDayStationData(Record));
        }
 public List<ForecastDayStationData> SelectForecastDayStationData(int StationID, DateTime TargetDate,int Forecast)
 {
     connect();
     DateTime TimeStart = TargetDate.Date;
     DateTime TimeEnd = TimeStart + TimeSpan.FromDays(1) - TimeSpan.FromSeconds(1);
     List<ForecastDayStationData> DataList = new List<ForecastDayStationData>();
     string sql = String.Format("SELECT * FROM `forecast_day_station_data` WHERE `StationID`={0} AND `ForecastType`={1} AND `Time` BETWEEN '{2}' AND '{3}';",
         StationID,Forecast, TimeStart.ToString("yyyy-MM-dd HH:mm:ss"), TimeEnd.ToString("yyyy-MM-dd HH:mm:ss"));
     MySqlCommand cmd = new MySqlCommand(sql, conn);
     MySqlDataReader rdr = cmd.ExecuteReader();
     while (rdr.Read())
     {
         ForecastDayStationData Record = new ForecastDayStationData()
         {
             ID = (int)rdr["ID"],
             StationID = (int)rdr["StationID"],
             ForecastType = (int)rdr["ForecastType"],
             ActivePower = double.Parse((string)rdr["ActivePower"]),
             ReactivePower = double.Parse((string)rdr["ReactivePower"]),
             Time = (DateTime)rdr["Time"]
         };
         DataList.Add(Record);
     }
     rdr.Close();
     return DataList;
 }
        List <ForecastDayStationData> dayforecastslot(List <List <RuntimeStationData> > HistoryData)//进行预测
        {
            double[][] lp = new double[14][];
            for (int day = 0; day < 14; day++)//读入数据
            {
                lp[day] = new double[96];
                bool[] hasvalue = new bool[96];
                for (int ii = 0; ii < 96; ii++)
                {
                    lp[day][ii]  = 0;
                    hasvalue[ii] = false;
                }
                for (int i = 0; i < HistoryData[day].Count; i++)
                {
                    int ii = (int)((HistoryData[day][i].Time.Subtract(HistoryData[day][i].Time.Date).TotalMinutes) / (TimeSpan.FromMinutes(15).TotalMinutes));
                    lp[day][ii]  = HistoryData[day][i].ActivePower;
                    hasvalue[ii] = true;
                }
                for (int ii = 1; ii < 96; ii++)
                {
                    if (!hasvalue[ii])
                    {
                        lp[day][ii] = lp[day][ii - 1];
                    }
                }
            }
            double[][] germane = new double[14][];//相关负荷集合,将负荷重新排序
            for (int i = 0; i < 14; i++)
            {
                germane[i] = new double[96];
            }
            for (int i = 0; i < 96; i++)
            {
                germane[0][i] = lp[6][i];
                germane[1][i] = lp[13][i];
                for (int j = 2; j < 8; j++)
                {
                    germane[j][i] = lp[j - 2][i];
                }
                for (int j = 8; j < 14; j++)
                {
                    germane[j][i] = lp[j - 1][i];
                }
            }
            double[] pf1 = new double[96];//正常日点对点倍比法预测结果
            for (int t = 0; t < 96; t++)
            {
                pf1[t] = pointtopointradio(germane, t);
            }

            double[] pf2 = new double[96];//正常日倍比平滑法预测结果
            for (int t = 0; t < 96; t++)
            {
                pf2[t] = smooth(germane, t);
            }

            double[] pf3 = new double[96];//灰色预测
            for (int t = 0; t < 96; t++)
            {
                pf3[t] = daygrey(germane, t);
            }

            double[] pf4 = new double[96];
            for (int t = 0; t < 96; t++)
            {
                pf4[t] = variationcoefficient(lp, t);//简单直观的变化系数法
            }
            List <ForecastDayStationData> DataList = new List <ForecastDayStationData>();
            ForecastDayStationData        Record;

            for (int ii = 0; ii < 96; ii++)
            {
                Record = new ForecastDayStationData()
                {
                    ID           = ii,
                    ForecastType = 1,
                    ActivePower  = pf1[ii],
                };
                DataList.Add(Record);
                Record = new ForecastDayStationData()
                {
                    ID           = ii,
                    ForecastType = 2,
                    ActivePower  = pf2[ii]
                };
                DataList.Add(Record);
                Record = new ForecastDayStationData()
                {
                    ID           = ii,
                    ForecastType = 3,
                    ActivePower  = pf3[ii]
                };
                DataList.Add(Record);
                Record = new ForecastDayStationData()
                {
                    ID           = ii,
                    ForecastType = 4,
                    ActivePower  = pf4[ii]
                };
                DataList.Add(Record);
            }
            return(DataList);
        }
        //进行预测
        List<ForecastDayStationData> dayforecastslot(List<List<RuntimeStationData>> HistoryData)
        {
            double[][] lp = new double[14][];
            for (int day = 0; day < 14; day++)//读入数据
            {
                lp[day] = new double[96];
                bool[] hasvalue = new bool[96];
                for (int ii = 0; ii < 96; ii++)
                {
                    lp[day][ii] = 0;
                    hasvalue[ii] = false;
                }
                for (int i = 0; i < HistoryData[day].Count; i++)
                {
                    int ii = (int)((HistoryData[day][i].Time.Subtract(HistoryData[day][i].Time.Date).TotalMinutes) / (TimeSpan.FromMinutes(15).TotalMinutes));
                    lp[day][ii] = HistoryData[day][i].ActivePower;
                    hasvalue[ii] = true;
                }
                for (int ii = 1; ii < 96; ii++)
                    if (!hasvalue[ii])
                        lp[day][ii] = lp[day][ii - 1];
            }
            double[][] germane = new double[14][];//相关负荷集合,将负荷重新排序
            for (int i = 0; i < 14; i++)
                germane[i] = new double[96];
            for (int i = 0; i < 96; i++)
            {
                germane[0][i] = lp[6][i];
                germane[1][i] = lp[13][i];
                for (int j = 2; j < 8; j++)
                {
                    germane[j][i] = lp[j - 2][i];
                }
                for (int j = 8; j < 14; j++)
                {
                    germane[j][i] = lp[j - 1][i];
                }
            }
            double[] pf1 = new double[96];//正常日点对点倍比法预测结果
            for (int t = 0; t < 96; t++)
            {
                pf1[t] = pointtopointradio(germane, t);
            }

            double[] pf2 = new double[96];//正常日倍比平滑法预测结果
            for (int t = 0; t < 96; t++)
            {
                pf2[t] = smooth(germane, t);
            }

            double[] pf3 = new double[96];//灰色预测
            for (int t = 0; t < 96; t++)
            {
                pf3[t] = daygrey(germane, t);
            }

            double[] pf4 = new double[96];
            for (int t = 0; t < 96; t++)
            {
                pf4[t] = variationcoefficient(lp, t);//简单直观的变化系数法
            }
            List<ForecastDayStationData> DataList = new List<ForecastDayStationData>();
            ForecastDayStationData Record;
            for (int ii = 0; ii < 96; ii++)
            {
                Record = new ForecastDayStationData()
                {
                    ID=ii,
                    ForecastType = 1,
                    ActivePower = pf1[ii],
                };
                DataList.Add(Record);
                Record = new ForecastDayStationData()
                {
                    ID = ii,
                    ForecastType = 2,
                    ActivePower = pf2[ii]
                };
                DataList.Add(Record);
                Record = new ForecastDayStationData()
                {
                    ID = ii,
                    ForecastType = 3,
                    ActivePower = pf3[ii]
                };
                DataList.Add(Record);
                Record = new ForecastDayStationData()
                {
                    ID = ii,
                    ForecastType = 4,
                    ActivePower = pf4[ii]
                };
                DataList.Add(Record);
            }
            return DataList;
        }
 public int AddForecastDayStationData(ForecastDayStationData Record)
 {
     DatabaseConnector dc = new DatabaseConnector();
     return dc.AddForecastDayStationData(Record);
 }