private void wjwOperation_Click(object sender, RoutedEventArgs e) { TicketDB ticket = new TicketDB(); List <int> list = ticket.findListOfOneNum("2018"); if (list != null && list.Count > 0) { var result = new DiscreteMarkov(list, 33, 5); this.content.Text = "预测状态概率::" + result.PredictValue[0] + "\r\n" + "概率转移矩阵:" + result.ProbMatrix + "\r\n"; } }
public void DiscreMarkovTest() { //历史状态数据 var list = new List <int> { 8, 15, 2, 15, 16, 3, 7, 9, 12, 14, 1, 6, 10, 2, 3, 6, 8, 14, 12, 5, 8, 12, 16, 2, 4, 6, 7, 14, 12, 1, 13, 4, 6, 9, 8, 2, 12, 14, 5, 13, 16, 1, 7, 6, 4, 3, 6, 7, 14, 9, 2, 8, 10, 15, 10, 11, 12, 14, 14, 8, 16, 8, 2, 5, 14, 11, 7, 16, 9, 6, 10, 13, 16, 14, 11, 1, 10, 13, 1, 9, 8, 12, 6, 5, 15, 10, 15, 13, 8, 3, 14, 9, 15, 6, 1, 11, 4, 13, 12 }; var discrete = new DiscreteMarkov(list.ToList(), 16, 8); Console.WriteLine(discrete.PredictValue.ToJson()); var dict = new Dictionary <int, double>(); int value = 0; double max = 0; int index = 0; foreach (double v in discrete.PredictValue) { index++; dict.Add(index, v); if (!(v > max)) { continue; } max = v; value = index; } var preds = dict.OrderByDescending(t => t.Value).Select(t => new { num = t.Key, pred = t.Value }); Console.WriteLine(preds.Join("\r\n", "{num}:{pred}")); Console.WriteLine("预测:{0}[{1}]", value, max); //Console.WriteLine("实际:{0}", random.Next(1, 16)); }
private void Button2_Click(object sender, EventArgs e) { DataTable dt = getData().Tables[0]; #region create newTable DataTable resDt = new DataTable(); DataColumn taxColumn = new DataColumn(); taxColumn.DataType = System.Type.GetType("System.Decimal"); taxColumn.ColumnName = "tax"; taxColumn.Expression = "price * 0.0862"; resDt.Columns.Add("1", Type.GetType("System.String")); resDt.Columns.Add("2", Type.GetType("System.String")); resDt.Columns.Add("3", Type.GetType("System.String")); resDt.Columns.Add("4", Type.GetType("System.String")); resDt.Columns.Add("5", Type.GetType("System.String")); resDt.Columns.Add("6", Type.GetType("System.String")); resDt.Columns.Add("7", Type.GetType("System.String")); resDt.Columns.Add("8", Type.GetType("System.String")); resDt.Columns.Add("9", Type.GetType("System.String")); resDt.Columns.Add("0", Type.GetType("System.String")); #endregion data = new int[3][]; for (int i = 0; i < 3; i++) { data[i] = new int[dt.Rows.Count]; } for (int i = 0; i < dt.Rows.Count; i++) { data[0][i] = Convert.ToInt32(dt.Rows[i][0]); data[1][i] = Convert.ToInt32(dt.Rows[i][1]); data[2][i] = Convert.ToInt32(dt.Rows[i][2]); } string strRes = ""; for (int i = 0; i < data.Length; i++) { List <int> dataList = data[i].ToList <int>(); //TODO:算法有问题,待确认,目前灵敏度不高 var result = new DiscreteMarkov(dataList, 10, 5); double[] res = result.PredictValue; string str = ""; List <double> rates = new List <double>(); DataRow newRow; newRow = resDt.NewRow(); for (int j = 0; j < res.Length; j++) { newRow[j] = res[j].ToString("0.00"); rates.Add(res[j]); strRes += " " + res[j].ToString("0.00"); } resDt.Rows.Add(newRow); strRes += "\r\n"; PreResult.Add(rates); } dataGridView1.DataSource = resDt; //richTextBox1.AppendText(strRes); }
public void DiscreMarkovTest() { //历史状态数据 var list = new List<int> { 8,15,2,15,16,3,7,9,12,14,1,6,10,2,3,6,8, 14,12,5,8,12,16,2,4,6,7,14,12,1,13,4,6,9,8,2,12,14,5,13,16,1,7,6,4,3, 6,7,14,9,2,8,10,15,10,11,12,14,14,8,16,8,2,5,14,11,7,16,9, 6, 10, 13, 16, 14, 11, 1, 10, 13, 1, 9, 8, 12, 6, 5, 15, 10, 15, 13, 8, 3, 14, 9,15,6,1,11,4,13,12 }; var discrete = new DiscreteMarkov(list.ToList(), 16, 8); Console.WriteLine(discrete.PredictValue.ToJson()); var dict = new Dictionary<int, double>(); int value = 0; double max = 0; int index = 0; foreach (double v in discrete.PredictValue) { index++; dict.Add(index, v); if (!(v > max)) continue; max = v; value = index; } var preds = dict.OrderByDescending(t => t.Value).Select(t => new { num = t.Key, pred = t.Value }); Console.WriteLine(preds.Join("\r\n", "{num}:{pred}")); Console.WriteLine("预测:{0}[{1}]", value, max); //Console.WriteLine("实际:{0}", random.Next(1, 16)); }