Beispiel #1
0
        /// <summary>
        /// Randamas potimalesnis budas pastatyti sandelius
        /// </summary>
        /// <param name="distances">distances listas</param>
        /// <param name="flows">flows listas</param>
        /// <param name="newWarehouses">nauji sandeliai</param>
        /// <param name="Price">sandeliu kastu</param>
        private static void WarehouseOptimization(List <Distance> distances, List <Flow> flows, out string[] newWarehouses, out double Price)
        {
            //Visu skirtinu miestu listas
            List <String> cities = distances.GroupBy(x => x.getDestination())
                                   .Select(y => y.First().getDestination()).ToList();
            //Geriausiu miestu masyvas
            List <String> Best = new List <string>();
            Random        rnd  = new Random();

            Price         = Double.MaxValue;
            newWarehouses = new string[5];
            //Optimalesniu miestu ieskojimas
            for (int i = 0; i < 200; i++)
            {
                for (int j = 0; j < 5; j++)
                {
                    int randomNumber = rnd.Next(0, cities.Count);
                    newWarehouses[j] = cities[randomNumber];
                }
                //Skaiciuojami kastai su naujai atrinkaitais miestais
                double temp = CountPriceWithWarehouses(distances, flows, newWarehouses);
                //Tikrinama ar kaina yra mazesne
                if (temp < Price)
                {
                    Price = temp;
                    Best  = new List <string>();
                    for (int j = 0; j < 5; j++)
                    {
                        Best.Add(newWarehouses[j]);
                    }
                    Array.Clear(newWarehouses, 0, newWarehouses.Length);
                }
                Console.WriteLine(Price);
                for (int k = 0; k < Best.Count; k++)
                {
                    Console.WriteLine(Best[k]);
                }
                Best.Clear();
            }
        }
    static void Main(string[] args)
    {
        CardDataBase DataBase = new CardDataBase();
        GameDataBase GameBase = new GameDataBase();
        GameState    State;
        Best         BestPlays = new Best();

        Rate(DataBase);

        // GameLoop
        while (true)
        {
            State = new GameState(new PlayerStats(Console.ReadLine().Split(' ')),
                                  new PlayerStats(Console.ReadLine().Split(' ')));
            State.opponent.setHand(int.Parse(Console.ReadLine()));

            Globals.startTime = new Stopwatch();
            Globals.startTime.Start();

            int CardCount = int.Parse(Console.ReadLine());

            // Draft
            if (State.player.Mana == 0)
            {
                GameBase.DraftPicks.Add(new Pick(GameBase,
                                                 new Card(Console.ReadLine().Split(' ')),
                                                 new Card(Console.ReadLine().Split(' ')),
                                                 new Card(Console.ReadLine().Split(' '))));
            }
            // Battle
            else
            {
                for (int i = 0; i < CardCount; i++)
                {
                    Card card = new Card(Console.ReadLine().Split(' '));

                    switch (card.Location)
                    {
                    case -1:
                        State.EnemyBoard.Add(new Unit(card, true));
                        break;

                    case 0:
                        State.MyHand.Add(card);
                        break;

                    case 1:
                        State.MyBoard.Add(new Unit(card, true));
                        break;

                    default:
                        Console.Error.WriteLine("Data loading error ##########1");
                        break;
                    }
                }
                BestPlays.Clear();
                State.EvalState();

                SearchAll(State, BestPlays);

                BestPlays.GetBestState();
            }
        }
    }