示例#1
0
        public void PołączGrupy_UaktualniaMacierz_Krok3()
        {
            double[][] macierz = new double[10][];
            macierz[0] = new double[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
            macierz[1] = new double[] { 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
            macierz[2] = new double[] { 7, 4, 0, 0, 0, 0, 0, 0, 0, 0 };
            macierz[3] = new double[] { 13, 10, 6, 0, 0, 0, 0, 0, 0, 0 };
            macierz[4] = new double[] { 23, 20, 16, 7 };
            macierz[5] = new double[] { 31, 28, 24, 15, 8 };
            macierz[6] = new double[] { 43, 40, 36, 27, 20, 12 };

            var algorytm = new HierarchicznaAnalizaSkupień(dane, MetodaSkupień.PojedynczegoPołączenia);

            algorytm.PołączGrupy();
            algorytm.PołączGrupy();
            algorytm.PołączGrupy();

            PrivateObject accessor = new PrivateObject(algorytm);

            double[][] uzyskanaMacierz = (double[][])accessor.GetField("macierzOdległościMiędzyklastrowej");
            for (int i = 0; i < 7; ++i)
            {
                for (int j = 0; j < i; ++j)
                {
                    if (macierz[i][j] != uzyskanaMacierz[i][j])
                    {
                        Assert.Fail("i:{0}\tj:{1}\tA:{2}\tB:{3}", i, j, macierz[i][j].ToString(), uzyskanaMacierz[i][j].ToString());
                    }
                }
            }
        }
示例#2
0
        public void PołączGrupy_ZnajdujeKolejneGrupy_ZTegoSamegoPoziomuZagłębienia()
        {
            JednoPołączenie grupa2 = new JednoPołączenie()
            {
                IndeksOd          = 3,
                IndeksDo          = 4,
                PoziomZagłębienia = 1
            };
            JednoPołączenie grupa3 = new JednoPołączenie()
            {
                IndeksOd          = 3,
                IndeksDo          = 5,
                PoziomZagłębienia = 2
            };


            var algorytm = new HierarchicznaAnalizaSkupień(dane, MetodaSkupień.PojedynczegoPołączenia);

            algorytm.PołączGrupy();

            JednoPołączenie uzyskanaGrupa = algorytm.PołączGrupy();

            Assert.AreEqual(grupa2, uzyskanaGrupa);

            uzyskanaGrupa = algorytm.PołączGrupy();
            Assert.AreEqual(grupa3, uzyskanaGrupa);
        }
示例#3
0
        public void PołączGrupy_ZnajdujeKolejneGrupy_ZKolejnychPoziomów()
        {
            List <JednoPołączenie> grupyOd4Do9 = new List <JednoPołączenie>
            {
                new JednoPołączenie()
                {
                    IndeksOd = 0, IndeksDo = 2, PoziomZagłębienia = 2
                },
                new JednoPołączenie()
                {
                    IndeksOd = 0, IndeksDo = 5, PoziomZagłębienia = 5
                },
                new JednoPołączenie()
                {
                    IndeksOd = 0, IndeksDo = 6, PoziomZagłębienia = 6
                },
                new JednoPołączenie()
                {
                    IndeksOd = 0, IndeksDo = 8, PoziomZagłębienia = 8
                },
                new JednoPołączenie()
                {
                    IndeksOd = 0, IndeksDo = 9, PoziomZagłębienia = 9
                }
            };

            var algorytm = new HierarchicznaAnalizaSkupień(dane, MetodaSkupień.PojedynczegoPołączenia);

            for (int i = 1; i <= 3; ++i)
            {
                algorytm.PołączGrupy();
            }

            for (int i = 4; i <= 9; ++i)
            {
                JednoPołączenie uzyskanaGrupa = algorytm.PołączGrupy();
                //Assert.AreEqual(grupyOd4Do9[i], uzyskanaGrupa);
            }
        }
示例#4
0
        public void PołączGrupy_ZnajdujeWłaściwąGrupę_Krok1()
        {
            JednoPołączenie grupa = new JednoPołączenie()
            {
                IndeksOd          = 7,
                IndeksDo          = 8,
                PoziomZagłębienia = 1
            };

            var             algorytm      = new HierarchicznaAnalizaSkupień(dane, MetodaSkupień.PojedynczegoPołączenia);
            JednoPołączenie uzyskanaGrupa = algorytm.PołączGrupy();

            Assert.AreEqual(grupa, uzyskanaGrupa);
        }
示例#5
0
        public void PołączGrupy_UaktualniaMacierz_Krok4()
        {
            // tak ma wyglądać macierz po tym jak utworzyła się grupa
            // więc jakby rozmiar macierzy logicznie się zmienił
            // wiersz 9, kolumna 9 - mają stare wartości
            // wiersz 8 - ma wartości te co poprzednio w 9, bez odległości do 8
            // metoda tu jeszcze nie ma znaczenia, bo grupa zawiera 2 takie same elementy
            double[][] macierz = new double[10][];
            macierz[0] = new double[] { 0 };
            macierz[1] = new double[] { 4 };
            macierz[2] = new double[] { 10, 6 };
            macierz[3] = new double[] { 20, 16, 7 };
            macierz[4] = new double[] { 28, 24, 15, 8 };
            macierz[5] = new double[] { 40, 36, 27, 20, 12 };

            var algorytm = new HierarchicznaAnalizaSkupień(dane, MetodaSkupień.PojedynczegoPołączenia);

            algorytm.PołączGrupy();
            algorytm.PołączGrupy();
            algorytm.PołączGrupy();
            algorytm.PołączGrupy();

            PrivateObject accessor = new PrivateObject(algorytm);

            double[][] uzyskanaMacierz = (double[][])accessor.GetField("macierzOdległościMiędzyklastrowej");
            for (int i = 0; i < 6; ++i)
            {
                for (int j = 0; j < i; ++j)
                {
                    if (macierz[i][j] != uzyskanaMacierz[i][j])
                    {
                        Assert.Fail("i:{0}\tj:{1}\tA:{2}\tB:{3}", i, j, macierz[i][j].ToString(), uzyskanaMacierz[i][j].ToString());
                    }
                }
            }
        }
示例#6
0
        public void PołączGrupy_ŁączyGrupy_Krok1()
        {
            int[] klastry = new int[]
            {
                0, 1, 2, 3, 4, 5, 6, 7, 7, 9
            };

            var algorytm = new HierarchicznaAnalizaSkupień(dane, MetodaSkupień.PojedynczegoPołączenia);

            algorytm.PołączGrupy();

            PrivateObject accessor = new PrivateObject(algorytm);

            int[] uzyskaneKlastry = (int[])accessor.GetField("klastry");
            CollectionAssert.AreEqual(klastry, uzyskaneKlastry);
        }
        public void Execute(object parameter)
        {
            if (algorytm == null)
            {
                if (vm.punkty == null)
                {
                    throw new ApplicationException("Coś poszło niezgodnie z naturą");
                }
                algorytm = new HierarchicznaAnalizaSkupień(vm.punkty, vm.metoda);
            }

            vm.CośJestMielone = true;
            JednoPołączenie połączenie = algorytm.PołączGrupy();

            if (vm.rysownik == null)
            {
                throw new ApplicationException("Coś poszło niezgodnie z naturą");
            }
            vm.rysownik.RysujPołączenie(połączenie);
            vm.CośJestMielone = false;
        }