Algorytm ACYKL 1. Utwórz macierz relacji R dla systemu. 2
Transkrypt
Algorytm ACYKL 1. Utwórz macierz relacji R dla systemu. 2
Algorytm ACYKL 1. Utwórz macierz relacji R dla systemu. 2. Wyszukaj w macierzy relacji zerowe wiersze i zerowe kolumny. Jeżeli takich wierszy i kolumn nie ma lub w macierzy pozostał tylko 1 element, przejdź do punktu 6. 3. Jeżeli są zerowe wiersze to wybierz wiersz najwyżej położony. W przeciwnym wypadku, przejdź do punktu 5. 4. Usuń ten wiersz i odpowiadającą mu kolumnę z macierzy relacji. Element odpowiadający wykreślonemu wierszowi nie ma następników. Wpisz numer tego elementu na kolejną pozycję listy końca obliczeń LK. Przejdź do punktu 2. 5. Wybierz zerową kolumnę położoną w macierzy relacji najbardziej na lewo. Usuń tę kolumnę i odpowiadający jej wiersz. Element odpowiadający wykreślonej kolumnie nie ma poprzedników. Wpisz numer tego elementu na kolejną pozycję listy początku obliczeń LP. Przejdź do punktu 2. 6. Jeżeli wymiar zredukowanej macierzy relacji RZR jest równy 1 to wpisz numer tego ostatniego elementu macierzy na kolejną pozycję listy początku obliczeń. W przeciwnym wypadku przejdź do punktu 8. 7. Lista kolejności obliczeń utworzona przez algorytm ACYKL jest kompletna. System jest acykliczny. Algorytm DEKOMP zakończył działanie. 8. Lista kolejności obliczeń utworzona przez ACYKL nie jest kompletna. System zawiera co najmniej 1 układ cykliczny. Przejdź ze zredukowaną macierzą relacji RZR do podprogramu MAKS. Algorytm MAKS 1. Utwórz kolejno z macierzy RZR macierz osiągalności i macierz intersekcji. 2. Wyodrębnij w macierzy intersekcji zestawy identycznych niezerowych wierszy. Każdy taki zestaw określa elementy maksymalnego układu cyklicznego. Wszystkie elementy zerowe odpowiadają elementom nie należącym do żadnego maksymalnego układu cyklicznego. 3. Jeżeli liczba maksymalnych układów cyklicznych jest większa niż 1 to przejdź do punktu 4. W przeciwnym wypadku umieść na kolejnej pozycji listy początku obliczeń LP pseudoelement odpowiadający temu jednemu maksymalnemu układowi cyklicznemu. Utwórz macierz relacji dla tego układu i przejdź z nią do podprogramu DARP. Podprogram MAKS zakończył działanie. 4. Dla każdego z osobna maksymalnego układu cyklicznego zsumuj logicznie wiersze i kolumny macierzy RZR, tworząc w ten sposób zastępcze wiersze i kolumny. Każdy zastępczy wiersz i kolumna odpowiadają maksymalnemu układowi cyklicznemu traktowanemu jako pseudoelement systemu. 5. W utworzonej w ten sposób macierzy relacji RZZ usuń wszystkie "jedynki" znajdujące się na głównej przekątnej. 6. Jeśli w macierzy relacji RZZ są wiersze zerowe to wybierz wiersz najwyżej położony. W przeciwnym wypadku przejdź do punktu 8. 7. Usuń ten wiersz i odpowiadającą mu kolumnę z macierzy RZZ. Element odpowiadający wykreślonemu wierszowi umieść na kolejnej pozycji listy końca obliczeń LK. Jeżeli otrzymana macierz jest jednoelementowa to przejdź do punktu 9. W przeciwnym wypadku przejdź do punktu 6. 8. Wybierz zerową kolumnę położoną najbardziej na lewo w macierzy RZZ. Usuń tę kolumnę i odpowiadający jej wiersz. Element odpowiadający wykreślonej kolumnie umieść na kolejnej pozycji listy początku obliczeń LP. Jeżeli otrzymana macierz jest jednoelementowa to przejdź do punktu 9. W przeciwnym wypadku przejdź do punktu 6. 9. Wpisz ostatni element macierzy relacji RZZ na kolejną pozycję listy początku obliczeń LP. 10. Utwórz macierz relacji oraz grafy przepływu informacji dla wszystkich maksymalnych układów cyklicznych i przejdź z nimi do podprogramu DARP. Podprogram MAKS zakończył działanie. Algorytm DARP 1. Weź do analizy kolejny maksymalny układ cykliczny oraz odpowiadający mu graf. 2. Wybierz dowolny wierzchołek grafu. 3. Rozwiń z wybranego wierzchołka ścieżkę, kierując się zawsze do wierzchołka o najniższym numerze spośród tych, do których prowadzą wyjścia z wierzchołka poprzedniego. Ścieżka jest ukończona jeśli osiągnięty będzie na niej po raz drugi którykolwiek wierzchołek ze ścieżki. W takim przypadku znaleziony jest układ cykliczny, którego wierzchołkiem początkowym i końcowym jest wierzchołek powtarzający się w ścieżce. 4. Utwórz pseudograf znalezionego cyklu uwzględniający również wejścia do cyklu i wyjścia poza cykl. 5. Nadaj wagi (wg załączonej procedury) krawędziom należącym do znalezionego cyklu. 6. Wybierz krawędzie cyklu o największej wadze i rozetnij dowolną z tych krawędzi. 7. Usuń rozciętą krawędź z grafu maksymalnego układu cyklicznego. 8. Jeżeli wierzchołek, z którego wychodziła rozcięta krawędź nie ma wyjść to przejdź do punktu 11. 9. Kontynuuj rozwijanie ścieżek z tego wierzchołka szukając nowego układu cyklicznego. Jeśli rozwijając ścieżkę napotkasz wierzchołek, z którego nie ma wyjść, przejdź do punktu 11. 10. W przeciwnym wypadku znaleziony został nowy układ cykliczny. Przejdź do punktu 4. 11. Umieść ten wierzchołek na kolejnej pozycji listy końca obliczeń. 12. Jeżeli wierzchołek, który przed chwilą został umieszczony na liście końca obliczeń był pierwszym w ścieżce to usuń wszystkie krawędzie z grafu wchodzące do tego wierzchołka oraz przejdź do punktu 16. 13. Cofnij się do poprzedniego wierzchołka w ścieżce i usuń wszystkie krawędzie z grafu maksymalnego układu cyklicznego wchodzące do wierzchołka z którego się wycofaliśmy. 14. Jeżeli wierzchołek, w którym się znajdujemy nie ma wyjść to przejdź do punktu 11. 15. W przeciwnym wypadku przejdź do punktu 9. 16. Jeżeli pozostały w grafie co najmniej dwa wierzchołki, których nie ma na liście końca obliczeń to wybierz dowolny z nich i przejdź do punktu 9. 17. Jeżeli pozostał w grafie co najmniej jeden wierzchołek, który nie jest na liście końca obliczeń to wpisz go na tę listę. 18. Zakończone zostało ustalanie kolejności obliczeń w maksymalnym układzie cyklicznym. Jeżeli pozostał jeszcze do analizy jakiś maksymalny układ cykliczny to przejdź do punktu 1. 19. Połącz wygenerowane w tym podprogramie listy kolejności obliczeń z odpowiednimi listami utworzonymi w podprogramach ACYKL i MAKS. Algorytm DEKOMP zakończył diałanie. Procedura nadawania wag strumieniom w układach cyklicznych. (kryterium najmniejszej liczby dartych strumieni) wg J. Kruszewski: Wykłady z Inżynierii Systemów Procesowych 1. Nadać wagę strumieniowi recyrkulującemu = dowolna liczba naturalna. 2. Nadać wagi strumieniom spoza cyklu wchodzącym do układu i wychodzącym z układu = 1. 3. Nadać wagi wszystkim strumieniom zawracanym w cyklu = 1. 4. Obliczyć wagi pozostałych, nieznanych strumieni w cyklu ze wzoru: suma wag strumieni suma znanych wag strumieni wchodzącyc h do danego węzla wychodzący ch z danego węzla liczba strumienio nieznanych wagach wychodząc ych z danego węzla