/// <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(); } } }