Ejemplo n.º 1
0
        /// <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();
        }
Ejemplo n.º 2
0
        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();
        }