コード例 #1
0
ファイル: DataAnalysis.cs プロジェクト: lulzzz/UniTimetabling
        public void HeurusticRoomChoose(string filename)
        {
            var data = Data.ReadXml(dataPath + filename, "120", "4");

            Console.WriteLine($"Dataset: {data.Name}");
            Console.WriteLine($"Courses: {data.Courses.Count} Lectures: {data.Courses.Sum(c => c.Lectures)}");
            var formulation = ProblemFormulation.MinimizeRoomCost;

            var newrooms = CreateRoomsFixedSize(data, 25, 1);

            data.SetRoomList(newrooms);
            var solutions = new List <Dictionary <Room, int> >();

            for (var overcapacity = 0; overcapacity < 100; overcapacity += 10)
            {
                var model = new RoomChoose(data, formulation, overcapacity);
                model.Optimize();

                var usedrooms = model.GetUsedRooms();
                solutions.Add(usedrooms);
                DisplayRoomStats("testest", usedrooms, data);
            }

            var nsizes = newrooms.Select(r => r.Capacity).Distinct().ToList();

            nsizes.Add(0);
            nsizes.Sort();
            // nsizes.RemoveAt(nsizes.Count-1);

            Console.WriteLine("\nAccumulated Timeslots Free / #lecture (>n):");
            Console.WriteLine($"Cost;{string.Join(";", nsizes.Select(r => "n" + r))}");

            foreach (var sol in solutions)
            {
                var availRoomsHours = nsizes.ToDictionary(n => n, n => sol.Where(rkv => rkv.Key.Capacity > n).Sum(rt => rt.Value * data.TimeSlots.Count));
                var freeTimeslots   = nsizes.ToDictionary(n => n,
                                                          n => availRoomsHours[n] - data.Courses.Where(a => a.NumberOfStudents > n).Sum(c => c.Lectures));
                Console.WriteLine(
                    $"{sol.Sum(s => s.Value*s.Key.Cost)};{string.Join(";", nsizes.Select(r => $"{((double) availRoomsHours[r] / data.Courses.Where(a => a.NumberOfStudents > r).Sum(c => c.Lectures)) -1:0.00}")) }");
            }
        }
コード例 #2
0
ファイル: DataAnalysis.cs プロジェクト: lulzzz/UniTimetabling
        public void MaximizeRoomUtilizationSimplemodel(string filename)
        {
            var data = Data.ReadXml(dataPath + filename, "120", "4");

            Console.WriteLine($"Dataset: {data.Name}");
            Console.WriteLine($"Courses: {data.Courses.Count} Lectures: {data.Courses.Sum(c => c.Lectures)}");
            var formulation = ProblemFormulation.MinimizeRoomCost;

            var newrooms = CreateRooms(data);

            data.SetRoomList(newrooms);
            var model = new RoomChoose(data, formulation);

            model.Optimize();
            var usedrooms = model.GetUsedRooms();

            DisplayRoomStats("optimizedLowerBound", usedrooms, data);

            var roomcalc = new RoomCombinations(data);

            Assert.LessOrEqual(Math.Abs(roomcalc._minCost - usedrooms.Sum(r => r.Key.Cost * r.Value)), 1e-1, "something wrong");
        }