コード例 #1
0
        public void Calculate_Next_interation_grid()
        {
            var odbiorcy = new List <InputData>()
            {
                new InputData(0, InputType.Odbiorca, 10, 30),
                new InputData(1, InputType.Odbiorca, 28, 25),
                new InputData(2, InputType.Odbiorca, 27, 30),
                new InputData(3, InputType.Odbiorca, 50, null, true)
            };

            var dostawcy = new List <InputData>()
            {
                new InputData(0, InputType.Dostawca, 20, 10),
                new InputData(1, InputType.Dostawca, 30, 12),
                new InputData(2, InputType.Odbiorca, 65, null, true)
            };

            var datagrid = Utility.CreateEmptyCellGrid(dostawcy.Count, odbiorcy.Count);

            datagrid[0][0].KosztyJednostkowe = 8;
            datagrid[0][1].KosztyJednostkowe = 14;
            datagrid[0][2].KosztyJednostkowe = 17;

            datagrid[1][0].KosztyJednostkowe = 12;
            datagrid[1][1].KosztyJednostkowe = 9;
            datagrid[1][2].KosztyJednostkowe = 19;

            datagrid[0][3].IsVirtual = true;
            datagrid[1][3].IsVirtual = true;
            datagrid[2][3].IsVirtual = true;

            datagrid[2][0].IsVirtual = true;
            datagrid[2][1].IsVirtual = true;
            datagrid[2][2].IsVirtual = true;

            var iteracja = new IterationProfit(datagrid, JobType.Profit, 1);

            iteracja.CalculateZysk(dostawcy, odbiorcy);
            iteracja.CalculatePrzydzial(dostawcy, odbiorcy);
            iteracja.CalculateWspolczynnikiAlfaAndBeta();
            iteracja.CalculateDeltyNiebazowe();
            var newGrid = iteracja.CalculateNextIteration();

            Assert.AreEqual(10, newGrid[0][0].Przydzial);
            Assert.AreEqual(null, newGrid[0][1].Przydzial);
            Assert.AreEqual(10, newGrid[0][2].Przydzial);
            Assert.AreEqual(null, newGrid[0][3].Przydzial);

            Assert.AreEqual(null, newGrid[1][0].Przydzial);
            Assert.AreEqual(28, newGrid[1][1].Przydzial);
            Assert.AreEqual(null, newGrid[1][2].Przydzial);
            Assert.AreEqual(2, newGrid[1][3].Przydzial);

            Assert.AreEqual(null, newGrid[2][0].Przydzial);
            Assert.AreEqual(null, newGrid[2][1].Przydzial);
            Assert.AreEqual(17, newGrid[2][2].Przydzial);
            Assert.AreEqual(48, newGrid[2][3].Przydzial);
        }
コード例 #2
0
        public void Calculate_cykl()
        {
            var odbiorcy = new List <InputData>()
            {
                new InputData(0, InputType.Odbiorca, 10, 30),
                new InputData(1, InputType.Odbiorca, 28, 25),
                new InputData(2, InputType.Odbiorca, 27, 30),
                new InputData(3, InputType.Odbiorca, 50, null, true)
            };

            var dostawcy = new List <InputData>()
            {
                new InputData(0, InputType.Dostawca, 20, 10),
                new InputData(1, InputType.Dostawca, 30, 12),
                new InputData(2, InputType.Odbiorca, 65, null, true)
            };

            var datagrid = Utility.CreateEmptyCellGrid(dostawcy.Count, odbiorcy.Count);

            datagrid[0][0].KosztyJednostkowe = 8;
            datagrid[0][1].KosztyJednostkowe = 14;
            datagrid[0][2].KosztyJednostkowe = 17;

            datagrid[1][0].KosztyJednostkowe = 12;
            datagrid[1][1].KosztyJednostkowe = 9;
            datagrid[1][2].KosztyJednostkowe = 19;

            datagrid[0][3].IsVirtual = true;
            datagrid[1][3].IsVirtual = true;
            datagrid[2][3].IsVirtual = true;

            datagrid[2][0].IsVirtual = true;
            datagrid[2][1].IsVirtual = true;
            datagrid[2][2].IsVirtual = true;

            var iteracja = new IterationProfit(datagrid, JobType.Profit, 1);

            iteracja.CalculateZysk(dostawcy, odbiorcy);
            iteracja.CalculatePrzydzial(dostawcy, odbiorcy);
            iteracja.CalculateWspolczynnikiAlfaAndBeta();
            iteracja.CalculateDeltyNiebazowe();

            var cycleDetector = new CycleDetector(iteracja.DataGrid, CycleBaseType.Maximizing).Detect();
            var points = cycleDetector.WyznaczonyCykl.ToPointsList();
            var expectedPoints = new string[] { "13", "12", "22", "23" }.ToList();

            Assert.IsTrue(expectedPoints.Contains(points[0].Id));
            Assert.IsTrue(expectedPoints.Contains(points[1].Id));
            Assert.IsTrue(expectedPoints.Contains(points[2].Id));
            Assert.IsTrue(expectedPoints.Contains(points[3].Id));

            Assert.AreEqual(2, cycleDetector.FindPrzydzialDoOptymalizacji());
        }