示例#1
0
        public void Test1()
        {
            string zipPath = @"..\..\..\Task2.zip";

            using (var archive = ZipFile.OpenRead(zipPath))
            {
                foreach (var entry in archive.Entries)
                {
                    if (!entry.FullName.EndsWith(".txt", StringComparison.OrdinalIgnoreCase))
                    {
                        continue;
                    }
                    using (var reader = new StreamReader(entry.Open()))
                    {
                        var countDileveries = int.Parse(reader.ReadLine());
                        var directiveTimes  = reader.ReadLine()
                                              .Split(' ')
                                              .Where(x => !string.IsNullOrEmpty(x))
                                              .Select(x => int.Parse(x))
                                              .ToList();

                        var timeToOtherDeliveries = new List <IList <int> >(countDileveries);
                        for (var i = 0; i <= countDileveries; i++)
                        {
                            var toOther = reader.ReadLine()
                                          .Split('\t')
                                          .Where(x => !string.IsNullOrEmpty(x))
                                          .Select(x => int.Parse(x))
                                          .ToList();
                            timeToOtherDeliveries.Add(toOther);
                        }

                        var deliveries = Delivery.Build(directiveTimes, timeToOtherDeliveries);

                        var startVertice = new DeiveryVerticeMody(deliveries.Where(x => x.Id == 0).ToList(), deliveries.Where(x => x.Id != 0).ToList());

                        //Func<List<IVertice<Delivery>>, IVertice<Delivery>> choiseStratagyBase = x => x.OrderBy(y => y.LowBound).First();

                        //var algorithm = new BranchAndBoundAlgorithm<DeiveryVerticeBase, Delivery>(choiseStratagyBase);
                        //var response = algorithm.Execute(startVertice);

                        Func <List <ITreeVertice <Delivery> >, ITreeVertice <Delivery> > myChoiseStratagy = x =>
                                                                                                            x.OrderBy(y => y.LowBound)
                                                                                                            .ThenByDescending(y => y.AvailableVertices.Average(z => z.TimeToOther.Values.Max()))
                                                                                                            .First();

                        var algorithm2 = new BranchAndBoundAlgorithm <DeiveryVerticeBase, Delivery>(myChoiseStratagy);
                        var response2  = algorithm2.Execute(startVertice);

                        Debug.WriteLine("");

                        //Equals(response.HighBound == response2.HighBound);
                    }
                }
            }
        }