/// <summary> /// 対戦は1回ずつやる必要は実はなく,複数対戦をまとめて実行することが出来る.出力時間を節約して最終勝利するルートを求める. /// </summary> public void Execute(List <CargoAndRoutes> tournament_data) { //貨物 var cargo = tournament_data[0].MyCargo; //勝利ルート var final_win_route = new Route(); //乱数 var random = new System.Random(); //トーナメント開始 while (tournament_data.Count >= 1) { //複数対戦 var win_routes = Predict.PredictBranchs(tournament_data); tournament_data.Clear(); if (win_routes.Count == 1) { final_win_route = win_routes[0]; break; } //ダミーをwin_routesの中からランダムに選んだルートをコピーすることで作る if (win_routes.Count % 4 != 0) { int short_count = (4 - win_routes.Count % 4); while (short_count > 0) { var copy_route = new Route(win_routes[random.Next() % win_routes.Count]); win_routes.Add(copy_route); short_count--; } } int count = 0; for (int i = 0; i < win_routes.Count / 4; i++) { var cargo_and_route = new CargoAndRoutes(false); var routes = new List <Route>(); for (int j = 0; j < 4; j++) { routes.Add(win_routes[count]); count++; } cargo_and_route.Register(cargo, routes); tournament_data.Add(cargo_and_route); } Console.WriteLine($"{tournament_data.Count}"); } Console.WriteLine($"{final_win_route.PublicRouteID} です"); Console.WriteLine($"最終勝利ルートは {final_win_route.PublicRouteID} です"); Console.WriteLine($"最終勝利ルートの正解率 {final_win_route.PredictValue} です"); Console.ReadLine(); }
/// <summary> /// csvの学習データを読み込む /// </summary> /// <param name="csv_path">学習データのパス名</param> /// <returns>CargoAndRoutes型に変換されたデータを返す</returns> public static List <CargoAndRoutes> ReadRaw(string csv_path) { var row_str_list = new List <List <string> >(); var column_list = new List <string>(); for (int count = 0; count < 5; count++) { try { using (var sr = new StreamReader(csv_path, System.Text.Encoding.GetEncoding("utf-8"))) { column_list.AddRange(sr.ReadLine().Split(',')); while (sr.EndOfStream == false) { var str_list = new List <string>(); str_list.AddRange(sr.ReadLine().Split(',')); row_str_list.Add(str_list); } break; } } catch { System.Threading.Thread.Sleep(100); } return(null); } var all_data = new List <CargoAndRoutes>(); int line_num = 0; foreach (var row_str in row_str_list) { var one_row = new CargoAndRoutes(true); one_row.Register(row_str, column_list, line_num); all_data.Add(one_row); line_num++; } return(all_data); }
public void Execute() { //トーナメントに使うデータを読み込む var tournament_data = InOutput.ReadRaw(MySettings.GetInstance().InputTournamentCsvPath); //貨物 var cargo = tournament_data[0].MyCargo; //トーナメント1試合目 //経路4つ var route10 = tournament_data[0].MyRouteList[0]; var route11 = tournament_data[0].MyRouteList[1]; var route12 = tournament_data[0].MyRouteList[2]; var route13 = tournament_data[0].MyRouteList[3]; //経路をまとめる var route_list_1 = new List <Route>(); route_list_1.Add(route10); route_list_1.Add(route11); route_list_1.Add(route12); route_list_1.Add(route13); //貨物と経路をまとめる var cargo_and_route_1 = new CargoAndRoutes(false); cargo_and_route_1.Register(cargo, route_list_1); //試合をする var win_route_1 = Predict.PredictBranchs(cargo_and_route_1); //トーナメント2試合目 //経路4つ var route20 = tournament_data[1].MyRouteList[0]; var route21 = tournament_data[1].MyRouteList[1]; var route22 = tournament_data[1].MyRouteList[2]; var route23 = tournament_data[1].MyRouteList[3]; //経路をまとめる var route_list_2 = new List <Route>(); route_list_2.Add(route20); route_list_2.Add(route21); route_list_2.Add(route22); route_list_2.Add(route23); //貨物と経路をまとめる var cargo_and_route_2 = new CargoAndRoutes(false); cargo_and_route_2.Register(cargo, route_list_2); //試合をする var win_route_2 = Predict.PredictBranchs(cargo_and_route_2); //トーナメント3試合目 //経路4つ var route30 = tournament_data[2].MyRouteList[0]; var route31 = tournament_data[2].MyRouteList[1]; var route32 = tournament_data[2].MyRouteList[2]; var route33 = tournament_data[2].MyRouteList[3]; //経路をまとめる var route_list_3 = new List <Route>(); route_list_3.Add(route30); route_list_3.Add(route31); route_list_3.Add(route32); route_list_3.Add(route33); //貨物と経路をまとめる var cargo_and_route_3 = new CargoAndRoutes(false); cargo_and_route_3.Register(cargo, route_list_3); //試合をする var win_route_3 = Predict.PredictBranchs(cargo_and_route_3); //トーナメント4試合目 //経路4つ var route40 = tournament_data[3].MyRouteList[0]; var route41 = tournament_data[3].MyRouteList[1]; var route42 = tournament_data[3].MyRouteList[2]; var route43 = tournament_data[3].MyRouteList[3]; //経路をまとめる var route_list_4 = new List <Route>(); route_list_4.Add(route40); route_list_4.Add(route41); route_list_4.Add(route42); route_list_4.Add(route43); //貨物と経路をまとめる var cargo_and_route_4 = new CargoAndRoutes(false); cargo_and_route_4.Register(cargo, route_list_4); //試合をする var win_route_4 = Predict.PredictBranchs(cargo_and_route_4); //トーナメント最終試合 //4試合の勝利経路をまとめる List <Route> win_route_list = new List <Route>(); win_route_list.AddRange(win_route_1); win_route_list.AddRange(win_route_2); win_route_list.AddRange(win_route_3); win_route_list.AddRange(win_route_4); //貨物と上の勝利経路4つをまとめる CargoAndRoutes car = new CargoAndRoutes(false); car.Register(cargo, win_route_list); //試合をする var final_win_route = Predict.PredictBranchs(car); Console.WriteLine($"最終勝利ルートは {final_win_route[0].PublicRouteID} です"); Console.ReadLine(); }