pobierz
Transkrypt
pobierz
GRZEGORZ PAWEŁ KORBAŚ Katedra Automatyzacji i Diagnostyki Układów Elektromechanicznych PROJEKT SYSTEMU MINIMALIZACJI DLA ŚRODOWISKA ZORIENTOWANEGO OBIEKTOWO streszczenie: W artykule przedstawiono projekt systemu minimalizacji funkcji wielu zmiennych o wartościach rzeczywistych. Projekt wykonano dla środowiska zorientowanego obiektowo przy zastosowaniu zagadnień programowania obiektowego i wzorców projektowych. Poszczególne elementy systemu zobrazowano diagramami UML. Ostatecznie uzyskano prosty, elastyczny i efektywny system, który zaimplementowano w środowisku Delphi firmy Borland. 1. WSTĘP W wielu dziedzinach nauki spotykamy się z koniecznością minimalizacji funkcji wielu zmiennych. Zagadnienie to jest w szczególności podstawą szeroko pojętej optymalizacji. Istnieje wiele numerycznych metod minimalizacji – są one tworzone dla różnych założeń i pozwalają na odszukanie minimum funkcji (funkcji celu) z różną szybkością i dokładnością. Jakość funkcjonowania znanych algorytmów zależy od wielu czynników, np. od rodzaju funkcji celu, punktu startowego, prawdopodobieństwa itp. Waga zagadnienia powoduje, że istniejące metody są udoskonalane i wciąż powstają nowe. Nie istnieje jedna metoda, która byłaby jednoznacznie najefektywniejsza dla wszystkich problemów minimalizacji. Korzystne jest zatem posiadanie wielu metod zgrupowanych w jednym przejrzystym systemie, w którym w zależności od potrzeb można wybrać właściwą ze względu na zagadnienie i związane z nim założenia. Istnieją systemy, w których znajduje się wiele metod minimalizacji. Jako przykład można wymienić programy Matlab i Mathematica. Są również biblioteki programistyczne, do których można sięgnąć np. [1, 6]. Wydaje się jednak, że istnieje potrzeba zaprojektowania kompleksowego systemu minimalizacji, który nie tylko będzie efektywny i da możliwość szerokiego wyboru właściwej metody minimalizacji, ale również będzie bardzo elastyczny. Przez elastyczność rozumie się tu łatwość rozbudowy lub zmian. Przykładem może być sytuacja, kiedy trzeba dodać nową metodę minimalizacji, nowe założenia lub wykorzystać istniejące rozwiązania (biblioteki .dll, programy typu Matlab lub inne systemy) z poziomu zaprojektowanego systemu minimalizacji. W ramach artykułu przedstawiono propozycję projektu elastycznego systemu minimalizacji dla środowiska zorientowanego obiektowo. Implementacja projektu może być dokonana w dowolnym środowisku obiektowym.W ramach tej pracy zaimplementowano system w języku programowania Delphi firmy Borland [2]. Opis projektu uzupełniany jest diagramami klas w języku UML [7,8]. W projekcie wykorzystuje się zagadnienia dotyczące programowania obiektowego oraz wzorców projektowych [9]. 2. PROJEKT SYSTEMU MINIMALIZACJI 2.1.Metodologia projektowania i opis systemu Projektowanie systemów w środowisku obiektowym może odbywać się w oparciu o różne reguły. Ciekawe informacje dotyczące projektowania można odnaleźć w [9]. Najbardziej podstawową kwestią wydaje się być dostrzeżenie niezależnych obiektów wchodzących w skład systemu - samodzielnych bytów. Określa się zatem zakres odpowiedzialności obiektu, co pociąga za sobą analizę cech zmiennych obiektu i metod, które są konieczne do jego funkcjonalności obiektu. Metody, które zostaną uznane za konieczne dla pewnej klasy obiektów stanowią swoisty interfejs (czyli podstawowy zbiór poleceń klasy). Dla cech zmiennych stosuje się regułę hermetyzacji (ukrywania) i na tej podstawie zazwyczaj tworzy się nowe klasy. Właściwa analiza prowadzi do odpowiedniego podziału systemu na klasy, co tworzy: z jednej strony - system elastyczny, a z drugiej - funkcjonalny i przejrzysty. Klasy, na których opiera się system są zasadniczo klasami abstrakcyjnymi lub interfejsami. Dopiero klasy pochodne realizują konkretne implementacje klas abstrakcyjnych i stanowią o rzeczywistym działaniu systemu. Zastosowanie klas abstrakcyjnych i hermetyzacji pozwala oddzielić warstwę abstrakcyjną systemu od warstwy implementacji. Przeprowadzono szczegółową analizę systemu, w wyniku której uzyskano podział systemu na klasy oraz ich powiązania w warstwie abstrakcyjnej – rys. 1. Podczas projektowania zdecydowano się wydzielić klasy: IPoczątkowe, IKońcowe, IZałożenia oraz IInformacje – odpowiedzialne kolejno: za warunki początkowe (np. punkt startowy), końcowe (np. dokładność) minimalizacji, założenia dotyczące procesu minimalizacji (np. ograniczenia) i informacje zwrotne (np. znalezione minimum). Kolejne klasy: IFunkcjaCelu i IMetodaMini, są odpowiedzialne za realizację funkcji celu i metody minimalizacji. Całość jest „spięta” klasą ISystemMini, której interfejs jest zbliżony do IMetodaMini, ale pełni odmienne zadanie – zarządzające. Decyzja o doborze minimalnego zestawu metod dla klas abstrakcyjnych jest efektem wcześniejszych doświadczeń autora związanych z metodami minimalizacji np. [3,4]. Rysunek 1. Diagram systemu w warstwie abstrakcyjnej Rysunek 2. Diagram przykładowej implementacji elementów systemu Elementy analizy poszczególnych klas można znaleźć w kolejnych podpunktach artykułu. Przedstawiono tam również, w formie diagramów, propozycje implementacji poszczególnych klas abstrakcyjnych. W konsekwencji – dla przykładowych klas pochodnych (potomków) uzyskuje się system, którego diagram klas przedstawia rysunek 2. Należy pamiętać, że przedstawiono jedynie propozycję implementacji, natomiast o elastyczności systemu stanowi fakt, że można dokonać zupełnie odmiennej implementacji dla tego samego układu warstwy abstrakcyjnej. W dalszych punktach artykułu pominięto (dla przejrzystości) kwestię konstruktorów i destruktorów – należy jednak pamiętać, że w rzeczywistości metody te występują we wszystkich omawianych klasach. 2.2.Projekt klasy IMetodaMini i przykładowej klasy pochodnej TMetodaMini1 Klasa IMetodaMini jest abstrakcyjną klasą, która reprezentuje interfejs metody minimalizacji. Klasy pochodne od IMetodaMini są odpowiedzialne za właściwą implementację metod i użycie odpowiednich pól, aby zapewnić odpowiednie działanie konkretnej realizacji metody minimalizacji. Zakres odpowiedzialności systemu minimalizacji określono następująco (w treści podkreślono elementy zmienne i pogrubiono podstawowe metody): „Metoda minimalizacji (MM) jest odpowiedzialna za minimalizację różnych funkcji celu. MM może przyjmować zbiór różnych warunków startowych, zbiór różnych założeń dotyczących pracy, zbiór różnych warunków końca i może zwracać zbiór różnych informacji zwrotnych. MM dostarcza metody ustalxx pozwalające ustalić wszystkie wymienione wcześniej parametry – metody te zwracają komunikaty, np. czy podane parametry są odpowiednie. MM wie jakie parametry są odpowiednie. MM dostarcza metodę minimalizacja, która dokonuje minimalizacji funkcji celu, aż do spełnienia warunków końca, lub komunikuje brak ustawienia odpowiednich parametrów. MM dostarcza metody start i krok, które umożliwiają dokonanie minimalizacji w formie krokowej. Jeśli nie ustawiono odpowiednich parametrów lub konkretna realizacja MM nie obsługuje trybu krokowego, wymienione metody zwracają odpowiednie komunikaty.” Projekt klasy IMetodaMini przedstawiono na rysunku 3. Metody ustalxx. jako parametry otrzymują obiekty zgodne z innymi interfejsami, które zostaną omówione w dalszej części artykułu. Przykładem realizacji metody o takim interfejsie jest klasa TMetodaMini1 (potomek IMetodaMini). Klasa realizuje klasyczną metodę minimalizacji algorytmem genetycznym [5]. Jej projekt pokazano na rysunku 4. Rysunek 3. Abstrakcyjna klasa IMetodaMini Rysunek 4. Klasa TMetodaMini1 Można zaobserwować pola, które służą do przechowania informacji podanych w metodach ustalxx. Pozostałe pola przechowują elementy charakterystyczne dla algorytmu genetycznego: populację osobników, liczność populacji, prawdopodobieństwo krzyżowania i mutacji. Dodatkowo dodana została metoda ustalParametry, która ustala parametry algorytmu genetycznego. Warto zauważyć, że istnieje inny (być może lepszy) sposób ustalania parametrów algorytmu genetycznego. Sposób ten polega na konstrukcji klasy TPoczatkoweGA pochodnej w stosunku do IPoczatkowe i przesłaniu charakterystycznych dla danej metody parametrów, przy czym tylko ta metoda (lub zbliżone) komunikowałyby gotowość współpracy z TPoczatkoweGA. Wskazanie tu dwóch sposobów rozwiązania tego zagadnienia ma na celu ukazanie elastyczności systemu nawet w kwestii tak subtelnych zagadnień. 2.3.Projekt klasy ISystemMini i przykładowej klasy pochodnej TSystemMini1 Klasa ISystemMini jest klasą abstrakcyjną, która reprezentuje interfejs systemu minimalizacji. Ta klasa jest klasą pochodną względem IMetodaMini, więc interfejs systemu minimalizacji jest zbliżony do opisanego wcześniej interfejsu metody minimalizacji. Różnica polega na tym, że system zarządza minimalizacją, a metoda minimalizacji dokonuje jej zgodnie ze swoim algorytmem. Różne systemy mogą używać tych samych lub różnych metod, mogą też w ogóle nie korzystać z pochodnych IMetodaMini. Klasy pochodne od ISystemMini są odpowiedzialne za właściwą implementację metod i użycie odpowiednich pól, aby zapewnić odpowiednie działanie konkretnej realizacji systemu minimalizacji. Zakres odpowiedzialności systemu minimalizacji określono następująco: „System minimalizacji (SM) jest odpowiedzialny za zarządzanie minimalizacją różnych funkcji celu, przy użyciu zbioru różnych metod minimalizacji. SM może przyjmować zbiór różnych warunków startowych, zbiór różnych założeń dotyczących pracy, zbiór różnych warunków końca i może zwracać zbiór różnych informacji zwrotnych. SM dostarcza metody ustalxx pozwalające ustalić wszystkie wymienione wcześniej parametry – metody te zwracają komunikaty, np. czy podane parametry są odpowiednie. SM dostarcza metodę minimalizacja, która dokonuje minimalizacji funkcji celu, aż do spełnienia warunków końca, lub komunikuje brak ustawienia odpowiednich parametrów. SM dostarcza metody start i krok, które umożliwiają dokonanie minimalizacji w formie krokowej. Jeśli nie ustawiono odpowiednich parametrów lub używana metoda minimalizacji nie obsługuje trybu krokowego, wymienione metody zwracają odpowiednie komunikaty.” Projekt klasy ISystemMini przedstawiono na rysunku 5. Metody ustalxx jako parametry otrzymują obiekty zgodne z innymi interfejsami, które zostaną omówione w dalszej części artykułu. Rysunek 5. Abstrakcyjna klasa ISystemMini Rysunek 6. Klasa TSystemMini1 Przykładem realizacji klasy pochodnej ISystemMini jest klasa TSystemMini1. Jej projekt pokazano na rysunku 6. W klasie TSystemMini1 informacje podane za pomocą metod ustalxx zostają zapamiętane w prywatnych polach klasy. W najprostszym przypadku TSystemMini1 może poza zapamiętaniem informacji wywoływać jedynie metody podanej klasy MM (metody minimalizacji). 2.4.Projekt klasy IFunkcjaCelu i przykładowej klasy pochodnej TFunkcjaCelu1 Abstrakcyjna klasa IFunkcjaCelu zapewnia interfejs funkcji celu, czyli funkcji, której minimum jest poszukiwane. Zakres odpowiedzialności funkcji celu określono następująco: „Funkcja celu (FC) reprezentuje funkcję o wartościach rzeczywistych określoną dla n zmiennych rzeczywistych. FC dostarcza metodę licz, której argumentem jest wektor (klasy IWektor). Metoda ta zwraca wartość funkcji dla podawanego wektora lub podaje komunikat o błędzie (w zmiennej) jeśli wektor ma zły wymiar lub nie należy do dziedziny funkcji. ” Projekt klasy IFunkcjaCelu przedstawiono na rysunku 7. Metoda licz jako parametry otrzymuje obiekty zgodne z interfejsem IWektor, który przedstawiono na rysunku 8. Rysunek 7. Klasa abstrakcyjna IFunkcjaCelu i klasa TFunkcjaCelu1 Rysunek 8. Pomocnicza klasa abstrakcyjna IWektor Rysunek 9. Klasa TWektor1 Przykładem realizacji funkcji celu o interfejsie zgodnym z IFunkcjaCelu jest klasa pochodna TFunkcjaCelu1, która w ramach metody licz dokonuje sprawdzenia poprawności podanych danych i oblicza wartość pewnej funkcji wielu zmiennych (rys. 7). Na rysunku 9 przedstawiono przykładową klasę TWektor1 (pochodną od IWektor). Klasa ta reprezentuje wektor przechowywany w dynamicznej tablicy liczb zmiennoprzecinkowych. 2.5.Projekty pozostałych klas Można założyć, że w szczególnym przypadku użytkownik systemu minimalizacji nie poda żadnych warunków startowych i końcowych oraz żadnych założeń licząc na to, że odpowiednio zaimplementowany system zachowa się w pełni automatycznie i znajdzie minimum (globalne lub lokalne) przerywając pracę w odpowiednim czasie. Można także przyjąć, że w pewnych sytuacjach użytkownik nie będzie wymagał żadnych informacji zwrotnych. Dlatego też klasy abstrakcyjne IPoczatkowe, IKoncowe, IZalozenia oraz IInformacje nie dostarczają żadnych metod. Z założenia nie są za nic odpowiedzialne – odpowiedzialność spoczywa na obiektach, które wykorzystują obiekty tych klas. Różnica pomiędzy wymienionymi klasami związana jest wyłącznie z celem ich zastosowania i konkretnymi klasami pochodnymi. Projekty wymienionych klas i ich przykładowych klas pochodnych przedstawiono na rysunkach 10 i 11. Rysunek 10. Pozostałe klasy abstrakcyjne systemu Rysunek 11. Przykładowe klasy pochodne Klasa TPoczatkowe1 reprezentuje warunek punktu startowego minimalizacji. Klasa TKoncowe1 reprezentuje warunek maksymalnej liczby iteracji procesu minimalizacji. Klasa TZalozenia1 reprezentuje ograniczenia dolne i górne obszaru poszukiwania minimum. Klasa TInformacje1 reprezentuje informację o znalezionym minimum. Bez naruszania już zaprojektowanej warstwy abstrakcyjnej można zmodyfikować system dodając wspólnego przodka dla klas IPoczatkowe, IKoncowe, IZalozenia oraz IInformacje. Wynika to z jednakowego (pustego) interfejsu tych klas. Wspomniane rozwiązanie może wprowadzić do systemu dodatkowe możliwości. 3. PRZYKŁADY ROZBUDOWY SYSTEMU 3.1.Dodanie nowej metody minimalizacji Rysunek 12. Dodanie nowej metody minimalizacji Rozważono możliwość rozbudowy systemu o nową metodę minimalizacji, do obsługi której tworzy się nową klasę TMetodaMiniN101. Założono, że metoda obsługuje niektóre istniejące już w systemie warunki początkowe, końcowe, założenia i informacje wyjściowe, ponadto obsługuje jeden dodatkowy warunek początkowy (klasa TPoczątkoweN16) i dostarcza dodatkowych informacji wyjściowych (klasa TInformacjeN13). Dodawana metoda ma (zgodnie z wcześniejszą specyfikacją) rozpoznawać obsługiwane przez siebie założenia. Musi też mieć zaimplementowane wszystkie metody dziedziczone od klasy IMetodaMini. Na rysunku 12 przedstawiono diagram klas dla dodanych do systemu elementów. 3.2.Adaptacja niedostosowanej klasy lub funkcji minimalizacji Rysunek 13. Adaptacja klasy o niewłaściwym interfejsie Rysunek 14. Adaptacja funkcji z pliku dll Rozważono możliwość wykorzystania zaimplementowanej już metody minimalizacji. Przyjęto jednak, że metoda ta dostarczona została w formie klasy niezgodnej z interfejsem IMetodaMini lub jest dostępna jako zewnętrzna funkcja (np. w pliku dll). Stosowane tu rozwiązanie jest zgodne ze wzorcami projektowymi i nosi nazwę wzorca adaptera. Na rysunkach 13 i 14 przedstawiono diagram dla dodanych do systemu klas TMetodaMiniN102a i TMetodaMiniN102b dotyczących obydwu opisanych powyżej sytuacji. 3.3.Wykorzystanie istniejącego zewnętrznego systemu minimalizacji Rysunek 15. Wykorzystanie zewnętrznego systemu minimalizacji Rozważono możliwość wykorzystania gotowego zewnętrznego systemu minimalizacji (np. TMinuit, Matlab). Jest wiele możliwości rozwiązań tego zagadnienia. Jako przykład utworzono nową klasę TSystemMiniN3 (pochodną ISystemMini). Klasa ta realizuje komunikację z istniejącym zewnętrznym systemem minimalizacji, wykrywa jego istnienie i wywołuje odpowiednie metody minimalizacji. Użytkownik musi jednak zakomunikować systemowi, której metody chce używać. W tym celu tworzy się klasy TMetodaMini1S3, TMetodaMini2S3 i TMetodaMini3S3. Klasy te nie przechowują rzeczywistych metod minimalizacji – są jedynie informacjami dla TSystemMiniN3. Klasy te muszą jednak implementować odpowiedni dla nich interfejs zgodny z IMetodaMini. W najprostszym przypadku – dla każdej ze swoich metod zwracają informację o błędzie. Dzięki temu system inny niż TSystemMiniN3 nie może ich niewłaściwie wykorzystać. Na rysunku 15 pokazano diagram zgodny z opisaną sytuacją dodając także pochodną klasy IInformacje. 3.4.Rozbudowa istniejącego systemu Rozważono możliwość rozbudowy istniejącego systemu minimalizacji TSystemMiniN3, będącego pochodną ISystemMini. Może to mieć miejsce, gdy pojawia się nowa wersja zewnętrznego systemu minimalizacji i posiadana klasa realizująca obsługę tego systemu nie jest już w pełni aktualna. Oczywiście jeśli zmiany systemu są duże warto napisać zupełnie nową klasę. Jeśli jednak zmiany nie są wielkie (pewne metody minimalizacji dodano, niektóre usunięto, ale większość jest taka sama) opłaca się zastosować wzorzec adaptera i hermetyzować TSystemMiniN3 w nowej klasie TSystemMiniN4. Odpowiedni diagram przedstawiono na rysunku 16. Rysunek 16. Rozbudowa istniejącego systemu minimalizacji 4. IMPLEMENTACJA PROJEKTU Opisany system został zaimplementowany za pomocą obiektowego języka programowania Delphi firmy Borland. Forma implementacji była zbliżona do przykładów podawanych w ramach artykułu. Wprowadzono kilkanaście metod minimalizacji: deterministycznych (gradientowych i bezgradientowych), ewolucyjnych i hybrydowych. Sprawdzono również możliwość rozbudowy systemu zgodnie z opisanymi wcześniej punktami. W konsekwencji uzyskano bibliotekę programistyczną zawierającą klasy zaprojektowanego systemu. W oparciu o bibliotekę napisano aplikację, dzięki której z powodzeniem dokonano minimalizacji kilkudziesięciu funkcji wielu zmiennych za pomocą różnych metod. Poniżej przedstawiony został najprostszy przykład zastosowania opisanych wcześniej klas w środowisku Delphi – w ramach pojedynczej procedury tworzone są, wykorzystywane i niszczone konkretne klasy związane z minimalizacją wybranej funkcji celu. Procedure przyklad; var MetodaMini1:TMetodaMini1; Koncowe1:TKoncowe1; Zalozenia1:TZalozenia1; Informacje1:TInformacje1; FunkcjaCelu1:TFunkcjaCelu1; Begin ... {wywołanie konstruktorów poszczególnych klas} MetodaMini1.ustalKoncowe([Koncowe1]); MetodaMini1.ustalZalozenia([Zalozenia1]); MetodaMini1.ustalInformacje([Informacje1]); MetodaMini1.ustalFCelu(FunkcjaCelu1); MetodaMini1.minimalizacja; ...{pobranie i wyświetlenie wyników z Informacje1} ...{wywołanie destruktorów poszczególnych klas} End; Przykładowe klasy odpowiadają opisanym w ramach artykułu. Wykorzystuje się zatem obiekt MetodaMini1 reprezentujący algorytm genetyczny. Ustala się warunek zakończenia minimalizacji przekazując obiekt Koncowe1, który reprezentuje maksymalną ilość iteracji. Ustala się założenia przekazując obiekt Zalozenia1, który reprezentuje ograniczenia prostokątne obszaru poszukiwania minimum. Ustala się żądane informacje wyjściowe przekazując obiekt Informacje1, który reprezentuje znalezione minimum. W końcu ustala się funkcję celu przekazując obiekt FunkcjaCelu1 i wywołuje proces minimalizacji. 5. PODSUMOWANIE W artykule przedstawiono projekt systemu minimalizacji funkcji wielu zmiennych o wartościach rzeczywistych. Główny nacisk położono zarówno na efektywność i prostotę systemu jak i na jego elastyczność. W ramach projektu wykorzystano reguły rządzące środowiskami obiektowymi ze szczególnym uwzględnieniem nurtu wzorców projektowych. Najistotniejszy efekt projektowy uzyskano w warstwie abstrakcyjnej, gdzie system jest reprezentowany przez grupę odpowiednio powiązanych abstrakcyjnych klas. Przedstawiono także przykłady implementacji poszczególnych elementów systemu i wskazano na różne możliwości jego rozbudowy. Praktyczna realizacja prezentowanego systemu zarówno w formie tworzenia bibliotek programistycznych jak i tworzenia opartej na systemie aplikacji potwierdza, że system posiada zakładane wcześniej zalety: – Jest prosty i przejrzysty z punktu widzenia programisty. Tworzenie kodu odpowiadającego konkretnej implementacji jest dzięki temu znacznie prostsze. Co więcej – mniej jest sytuacji w której programista może popełnić błąd, a jeśli już sytuacja taka zaistnieje, to zarówno lokalizacja jak i poprawa błędu jest łatwiejsza. – Jest efektywny, czyli potrafi dokonać minimalizacji różnych funkcji celu za pomocą różnych metod minimalizacji, przy różnych założeniach i warunkach. Zaprojektowany interfejs umożliwia nie tylko przeprowadzenie minimalizacji jednostanowiskowej metodą (procedurą) minimalizacja. Istnienie metod start i krok ułatwia z założenia pracę wielowątkową lub tworzenie aplikacji do minimalizacji w sieci. Założenia te są potwierdzone w wymiarze praktycznym. Na przydatność włączenia tych metod do podstawowego interfejsu ISystemMini oraz IMetodaMini wskazywały wcześniejsze doświadczenia autora np. [4]. Jednocześnie system przewiduje, że metody te mogą nie być obsługiwane (odpowiednie komunikaty – zależne od implementacji). – Ogromną zaletą systemu jest jego elastyczność. Projekt został wykonany w ten sposób, aby rozbudowa lub zamiana poszczególnych elementów systemu nie sprawiała problemu. W praktyce oznacza to, że programista chcąc coś dodać lub zmienić może pisać nową klasę (która może używać już istniejących elementów) bez jakiejkolwiek zmiany w kodzie, który został napisany wcześniej. Taka metodologia umożliwia pracę nad implementacją systemu przez wielu programistów przy zachowaniu pewności, że tworzone przez nich (zupełnie niezależnie) klasy będą kompatybilne. 6. LITERATURA [1] BARON B., MARCOL A., PAWLIKOWSKI S.: Metody numeryczne w Delphi 4, Helion, Gliwice 1999 [2] CANTU M.: Delphi 4 – praktyka programowania, Mikom, Warszawa 1999 [3] KORBAŚ G.P.: Badanie efektywności wyznaczania parametrów modeli matematycznych za pomocą gradientowych i bezgradientowych metod minimalizacji, Ogólnopolskie Warsztaty Doktoranckie, Istebna 2003 [4] KORBAŚ G.P.: Sieciowa implementacja hybrydowej metody minimalizacji GA-HJmod, Międzynarodowe Warsztaty Doktoranckie, Wisła 2004 [5] MICHALEWICZ Z.: Algorytmy genetyczne + struktury danych = programy ewolucyjne, WNT, Warszawa 1996 [6] MINUIT – reference manual, CERN, Geneva 1992 [7] OMG Unified Modeling Language Specification, version 1.5, http://www.uml.com z dnia 10.11.2004 [8] MILLER R.: Practical UML: A Hands-On Introduction for Developers, http://www.borland.com z dnia 12.11.2004 [9] SHALLOWAY A., TROTT J.R.: Programowanie zorientowane obiektowo. Wzorce projektowe, Helion, Gliwice 2001 Project of the minimization system for an object oriented environment. summary: The paper presents the project of the minimization system. It is designed for object oriented environment with the use of object oriented programming rules and design patterns. UML diagrams of project parts are presented. The system is simple, effective and flexible. It has been implemented in Borland's Delphi.