Monday, March 02, 2009

Predykcja danych w szeregach czasowych

M Stanek-Predykcja Danych w Szeregach Czasowych


Predykcja danych w szeregach czasowych 1/42 Predykcja danych w szeregach czasowych na przykładzie predykcji cen akcji giełdowych spółki KGHM Polska Miedź S.A. Piotr Kupczyk (pkk@wp.pl) Michał Stanek (michal.stanek@student.pwr.wroc.pl) 13 czerwca 2005 Abstract: Prognozowanie przyszłych wartości akcji giełdowych jest marzeniem wielu osób. Artykuł przedstawia wykorzystanie hybrydowego rozwiązania bazującego na sieciach neuronowych oraz analizie statystycznej podczas predykcji danych w szeregach czasowych na przykładzie predykcji cen akcji KGHM Polska Miedź S.A. W dokumencie zostały szczegółowo omówione dwie architektury sieci neuronowych jedna bazująca na znakowej reprezentacji wartości funkcji druga bazująca na jej wartościach rzeczywistych. Na koniec omówiono rozwiązanie hybrydowe łączące Predykcja danych w szeregach czasowych moŜliwości tych sieci z predykcją opartą na funkcji regresji. Zostały omówione otrzymane wyniki oraz przedstawione moŜliwe ulepszenia. 2/42 Predykcja danych w szeregach czasowych 3/42 Spis treści: Wstęp.............................................................................................................................. 6 Dane ............................................................................................................................... 7 Predykcja ...................................................................................................................... 11 Metody predykcji ......................................................................................................... 13 Sieć neuronowa numeryczna............................................................................................ 13 Sieć neuronowa znakowa ................................................................................................. 15 Regresja ............................................................................................................................ 17 5. Eksperymenty............................................................................................................... 18 1. Badanie..................................................................................................................... 18 6. Wnioski ........................................................................................................................ 41 7. Literatura ...................................................................................................................... 42 1. 2. 3. 4. Spis tabel: Tabela 1. Dane giełdowe dla akcji spółki KGHM. .................................................................... 7 Tabela 2. Dane po preprocessingu. ............................................................................................ 7 Tabela 3. Błąd predykcji sieci liczbowej dla zbioru uczącego. ............................................... 19 Tabela 4. Liczba epok uczących sieci numerycznej dla zbioru testowego. ............................. 19 Spis rysunków: Rysunek 1. Dane giełdowe spółki KGHM................................................................................. 8 Rysunek 2. Wykres funkcji liniowej. ......................................................................................... 9 Rysunek 3. Wykres funkcji kwadratowej................................................................................... 9 Rysunek 4. Funkcja okresowa sin(x) + a ................................................................................. 10 Rysunek 5. Funkcja okresowa sin(x) + x ................................................................................ 10 Rysunek 6. Związek pomiędzy wartościami funkcji predykowanymi i rzeczywistymi. ......... 11 Rysunek 7. Idea predykcji krótko okresowej. .......................................................................... 12 Rysunek 8. Idea predykcji długo okresowej. ........................................................................... 12 Rysunek 9. Schemat blokowy hybrydy.................................................................................... 13 Rysunek 10. Schemat sieci numerycznej. ................................................................................ 14 Rysunek 11. Schemat konwersji danych dla sieci znakowej. .................................................. 15 Rysunek 12. Budowa sieci znakowej. ...................................................................................... 16 Rysunek 13. Przykład przybliŜenia funkcji wielomianem drugiego stopnia. .......................... 17 Rysunek 14. Przykład przybliŜenia funkcji wielomianem trzeciego stopnia........................... 17 Rysunek 15. Przykład przybliŜenia funkcji wielomianem czwartego stopnia......................... 17 Rysunek 16. Przykład przybliŜenia funkcji wielomianem piątego stopnia.............................. 17 Rysunek 17.Przykład przybliŜenia funkcji wielomianem szóstego stopnia. ........................... 17 Rysunek 18. Wykres zaleŜności błędu sieci numerycznej od ilości epok uczących................ 18 Rysunek 19. Wykres zaleŜności błędu sieci znakowej od ilości epok uczących. .................... 18 Rysunek 20. Funkcja linowa. ................................................................................................... 21 Rysunek 21. Predykcja na zbiorze uczącym. ........................................................................... 21 Rysunek 22. Predykcja krokowa na zbiorze testowym............................................................ 22 Rysunek 23. Predykcja ciągła na zbiorze testowym. ............................................................... 22 Predykcja danych w szeregach czasowych 4/42 Rysunek 24. Predykcja na zbiorze uczącym. ........................................................................... 22 Rysunek 25 Predykcja krokowa na zbiorze testowym............................................................. 22 Rysunek 26 Predykcja ciągła na zbiorze testowym. ................................................................ 22 Rysunek 27. Predykcja na zbiorze uczącym. ........................................................................... 23 Rysunek 28. Predykcja krokowa na zbiorze testowym............................................................ 23 Rysunek 29. Predykcja na zbiorze uczącym. ........................................................................... 23 Rysunek 30. Predykcja krokowa na zbiorze testowym............................................................ 23 Rysunek 31. Funkcja kwadratowa............................................................................................ 24 Rysunek 32. Predykcja na zbiorze uczącym. ........................................................................... 24 Rysunek 33. Predykcja krokowa na zbiorze testowym............................................................ 25 Rysunek 34. Predykcja ciągła na zbiorze testowym. ............................................................... 25 Rysunek 35. Predykcja na zbiorze uczącym. ........................................................................... 25 Rysunek 36. Predykcja krokowa na zbiorze testowym............................................................ 25 Rysunek 37. Predykcja ciągła na zbiorze testowym. ............................................................... 25 Rysunek 38. Predykcja na zbiorze uczącym. ........................................................................... 26 Rysunek 39. Predykcja krokowa na zbiorze testowym............................................................ 26 Rysunek 40. Predykcja na zbiorze uczącym. ........................................................................... 26 Rysunek 41. Predykcja krokowa na zbiorze testowym............................................................ 26 Rysunek 42. Funkcja sinusoidalna. .......................................................................................... 27 Rysunek 43. Predykcja na zbiorze uczącym. ........................................................................... 27 Rysunek 44. Predykcja krokowa na zbiorze testowym............................................................ 28 Rysunek 45. Predykcja ciągła na zbiorze testowym. ............................................................... 28 Rysunek 46. Predykcja na zbiorze uczącym. ........................................................................... 28 Rysunek 47. Predykcja krokowa na zbiorze testowym............................................................ 28 Rysunek 48. Predykcja ciągła na zbiorze testowym. ............................................................... 28 Rysunek 49. Funkcja sinusoidalno-malejąca. .......................................................................... 29 Rysunek 50. Predykcja na zbiorze uczącym. ........................................................................... 29 Rysunek 51. Predykcja krokowa na zbiorze testowym............................................................ 30 Rysunek 52. Predykcja ciągła na zbiorze testowym. ............................................................... 30 Rysunek 53. Predykcja na zbiorze uczącym. ........................................................................... 30 Rysunek 54. Predykcja krokowa na zbiorze testowym............................................................ 30 Rysunek 55. Predykcja ciągła na zbiorze testowym. ............................................................... 30 Rysunek 56. Predykcja na zbiorze uczącym. ........................................................................... 31 Rysunek 57. Predykcja krokowa na zbiorze testowym............................................................ 31 Rysunek 58. Predykcja na zbiorze uczącym. ........................................................................... 31 Rysunek 59. Predykcja krokowa na zbiorze testowym............................................................ 31 Rysunek 60. Funkcja notowań akcji firmy KGHM Polska Miedź S.A. .................................. 32 Rysunek 61. Predykcja na zbiorze uczącym. .......................Błąd! Nie zdefiniowano zakładki. Rysunek 62. Predykcja krokowa na zbiorze testowym............................................................ 33 Rysunek 63. Predykcja ciągła na zbiorze testowym. ............................................................... 33 Rysunek 64. Predykcja na zbiorze uczącym. ........................................................................... 33 Rysunek 65. Predykcja krokowa na zbiorze testowym............................................................ 34 Rysunek 66. Predykcja ciągła na zbiorze testowym. ............................................................... 34 Rysunek 67. Predykcja na zbiorze uczącym. .......................Błąd! Nie zdefiniowano zakładki. Rysunek 68. Predykcja krokowa na zbiorze testowym............................................................ 35 Rysunek 69. Predykcja ciągła na zbiorze testowym. ............................................................... 35 Rysunek 70. Predykcja na zbiorze uczącym. ........................................................................... 35 Rysunek 71. Predykcja krokowa na zbiorze testowym............................................................ 35 Rysunek 72. Predykcja na zbiorze uczącym. ........................................................................... 35 Rysunek 73. Predykcja krokowa na zbiorze testowym............................................................ 35 Predykcja danych w szeregach czasowych 5/42 Rysunek 74. Predykcja na zbiorze uczącym. ........................................................................... 35 Rysunek 75. Predykcja krokowa na zbiorze testowym, ciągły w stosunku do zbioru uczącego. .......................................................................................................................................... 37 Rysunek 76. Predykcja ciągła na zbiorze testowym, po okresie jednorocznej przerwy, w stosunku do zbioru uczącego............................................................................................ 37 Rysunek 77. Okno główne programu - widok parametrów nauki. .......................................... 38 Rysunek 78. Okno główne programu - widok parametrów predykcji ..................................... 39 Rysunek 79. Okno główne programu - widok danych wyników. ............................................ 39 Rysunek 80. Okno główne programu - widok danych predykcji............................................. 40 Predykcja danych w szeregach czasowych 6/42 1. Wstęp Dokument ten poświęcony jest zagadnieniu predykcji danych w szeregach czasowych. Na wstępie postaramy się wyjaśnić podstawowe pojęcia uŜywane zarówno w tytule jak i dalszej części niniejszej pracy. Jednym z kluczowych pojęć jest predykcja danych, polega ona na próbie przewidzenia t przyszłych wartości funkcji na podstawie n wcześniejszych wartości. Drugim bardzo waŜnym pojęciem jest szereg czasowy, który jest ciągiem następujących po sobie czasowo wartości. Szereg czasowy moŜe na przykład stanowić odczyt wskazań urządzenia pomiarowego lub zestawienie cen akcji giełdowych danej spółki na giełdzie. Predykcja cen akcji giełdowych jest niezmiernie interesująca dziedziną biorąc pod uwagę korzyści, jakie moŜe przynieść dokładne prognozowanie kolejnych wartości cenowych. Na podstawie tych prognoz moŜna podejmować decyzję czy dane akcje warto kupować w danej chwili czy teŜ moŜe lepiej je sprzedać. Im predykcja jest bardziej dokładna tym lepiej moŜna operować dysponowanymi przez nas pieniędzmi. Nic więc dziwnego, Ŝe prowadzi się wiele prac na ten temat. Niestety wiele z rozwiązań nie jest publikowanych i stanowią one jedynie część całych pakietów, których cena jest czasami niesamowicie wysoka. Predykcja moŜe być krótko lub długookresowa. Predykcja krótko okresowa dotyczy zazwyczaj predykcji kilku wartości w przód, podczas gdy predykcja długookresowa swoim zasięgiem moŜe obejmować bardzo długie okresy. Przyjmuje się, Ŝe dla predykcji krótko okresowych błąd szacowanych wartości z wartościami rzeczywistymi powinien być bardzo mały. Podczas predykcji długookresowej tolerowana jest nawet znaczna rozbieŜność na rzecz zachowania ogólnego trendu danych. W dokumencie tym opisane jest wykorzystanie sieci neuronowych oraz metod regresji w zadaniu predykcji danych. Metody te zostaną dokładnie scharakteryzowane w dalszej części tej pracy. Predykcja danych w szeregach czasowych 7/42 2. Dane Udało się uzyskać dane giełdowe spółki KGHM z lat 2001 – 2005, pobrane one zostały z serwisu www.money.pl. Wśród wartości, jakimi dysponowaliśmy były: • • • • • • Cena otwarcia Cena minimalna w ciągu dnia Cena maksymalna w ciągu dnia Cena podczas zamknięcia giełdy Procentowa zmiana w stosunku do dnia poprzedniego Ilość sprzedanych akcji w ciągu dnia (wolumen) W Tabela 1 znajduje się przykład formatu wykorzystywanych danych. Tabela 1. Dane giełdowe dla akcji spółki KGHM. Data 2005-05-27 2005-05-25 2005-05-24 2005-05-23 2005-05-20 2005-05-19 2005-05-18 2005-05-17 2005-05-16 Otw 29,10 28,60 28,60 28,70 28,90 28,90 28,30 28,90 29,00 Min 29,00 28,60 28,10 28,50 28,50 28,50 27,70 27,70 28,20 Max 29,40 29,00 28,70 29,00 29,40 29,00 28,50 28,90 29,00 Zamkn 29,40 28,90 28,60 28,60 28,60 29,00 28,40 28,10 28,60 Zmn.[%] Wolumen 1,73 1,05 0,00 0,00 -1,38 2,11 1,07 -1,75 -1,72 328848 271585 256392 231664 549326 1188384 818496 702573 207168 s Uznaliśmy, Ŝe interesująca z naszego punktu widzenia jest szczególnie wartość dotycząca ceny akcji podczas zamknięcia giełdy. Posiadane przez nas dane zostały poddane wstępnemu preprocessingowi, w którym usunęliśmy kolumny nie istotne z naszego punktu widzenia. W Tabela 2 został pokazany widok danych po tym procesie. Tabela 2. Dane po preprocessingu. Data 2005-05-27 2005-05-25 2005-05-24 2005-05-23 2005-05-20 2005-05-19 2005-05-18 2005-05-17 2005-05-16 Zamkn 29,40 28,90 28,60 28,60 28,60 29,00 28,40 29,40 28,90 Na Rysunek 1 przedstawiona jest zmiana wartości akcji w czasie. Predykcja danych w szeregach czasowych Dane giełdowe spółki KGHM 45,00 8/42 40,00 35,00 30,00 Wartość akcji [zł] 25,00 20,00 15,00 10,00 5,00 0,00 2005-05-27 2005-04-18 2005-03-07 2005-01-27 2004-12-21 2004-11-12 2004-10-04 2004-08-26 2004-07-20 2004-06-11 2004-05-04 2004-03-23 2004-02-13 2004-01-07 2003-11-25 2003-10-16 2003-09-09 2003-07-31 2003-06-24 2003-05-15 2003-04-03 2003-02-25 2003-01-17 2002-12-05 2002-10-24 2002-09-17 2002-08-08 2002-07-01 2002-05-20 2002-04-09 2001-11-20 2001-07-30 2001-04-04 2000-08-11 1999-05-25 1999-03-29 1999-01-22 1998-11-09 Data [dni] Rysunek 1. Dane giełdowe spółki KGHM. PoniewaŜ nie widać w tych danych wyraźniej zaleŜności postanowiliśmy przebadać nasze rozwiązanie równieŜ na innych danych wejściowych. Wybraliśmy do tego następujące funkcje: • • • • Funkcja liniowa y = ax+b Funkcja kwadratowa y = ax2 + bx + c Funkcja okresowa y = sin(x) + a Funkcja okresowa y = sin(x) + x PoniŜej znajdują się wykresy tych funkcji. Predykcja danych w szeregach czasowych Cena [zł] 10000 12000 14000 Cena [zł] 100 200 300 400 500 600 700 800 900 0 2000 4000 6000 8000 2003-01-27 2003-03-27 2003-05-27 2003-07-27 0 2002-04-16 2002-06-16 2002-08-16 2002-10-16 2002-12-16 Rysunek 3. Wykres funkcji kwadratowej. Funkcja kwadratowa y=ax^2+bx+c Rysunek 2. Wykres funkcji liniowej. 2003-02-16 2003-04-16 2003-06-16 2003-08-16 Data [dni] 2003-10-16 2003-12-16 2004-02-16 2004-04-16 2004-06-16 2004-08-16 2004-10-16 2004-12-16 2005-02-16 2003-09-27 Funkcja liniowa y=-ax+b 2003-11-27 2004-01-27 Data [dni] 2004-03-27 2004-05-27 2004-07-27 2004-09-27 2004-11-27 2005-01-27 2005-03-27 2005-04-16 2005-05-27 9/42 Predykcja danych w szeregach czasowych Cena [zł] 10,00 12,00 14,00 Cena [zł] 10,5 11,5 8,5 9,5 10 11 8 9 0,00 2002-04-16 2002-06-16 2002-08-16 2002-10-16 2002-12-16 2,00 4,00 6,00 8,00 2002-04-16 2002-06-16 2002-08-16 2002-10-16 2002-12-16 Rysunek 5. Funkcja okresowa sin(x) + x Rysunek 4. Funkcja okresowa sin(x) + a 2003-02-16 2003-04-16 2003-02-16 2003-04-16 2003-06-16 2003-08-16 Data [dni] 2003-10-16 2003-12-16 2004-02-16 2004-04-16 2004-06-16 2004-08-16 2004-10-16 2004-12-16 2005-02-16 2005-04-16 Funkcja okresowa y=sin(x)+a Fukncja sin(x)+x 2003-06-16 2003-08-16 Data [dni] 2003-10-16 2003-12-16 2004-02-16 2004-04-16 2004-06-16 2004-08-16 2004-10-16 2004-12-16 2005-02-16 2005-04-16 10/42 Predykcja danych w szeregach czasowych 11/42 3. Predykcja Jak wspominaliśmy juŜ we wstępie predykcja ma za zadanie oszacowanie wartości funkcji na podstawie innych jej wartości. Predykcja w szeregach czasowych bazuje na wartościach z przeszłości w celu próby oszacowania wartości w kolejnych punktach czasu. Jakość predykcji mierzy się zazwyczaj jako średnie odchylenie wartości uzyskanych w poszczególnych punktach od wartości rzeczywistych (oczekiwanych). Weźmy pod uwagę przykładową funkcję przedstawioną na Rysunek 6, oraz pewne punkty kontrolne t0, t1 oraz t2. Funkcja rzeczywista, czyli ta która próbujemy oszacować narysowana jest linią ciągłą, zaś nasze oszacowanie na wykresie narysowane jest linią przerywaną. Z rysunku łatwo moŜna zobaczyć, Ŝe znalezione oszacowanie róŜni się od funkcji jakiej szukaliśmy. Rysunek 6. Związek pomiędzy wartościami funkcji predykowanymi i rzeczywistymi. Przyjęta przez nas miara jakości predykcji wyraŜona jest wzorem (1). Błąd predykcji: n Err = Objaśnienie: ∑o i =1 z −o (1) n Err – całkowity błąd predykcji o – wartość uzyskana z predykcji oz – wartość oczekiwana n – ilość elementów predykowanego zbioru Predykcja danych w szeregach czasowych 12/42 Predykcja krótko okresowa – jest to rodzaj predykcji, który na podstawie wartości z przeszłości (okna) próbuje oszacować małą liczbę wartości w przyszłości. Podczas takiej predykcji nacisk kładziony jest na minimalizacje błędu predykcji. Podczas predykcji kaŜdej wartości wykorzystuje się dane rzeczywiste. W przypadku naszego programu byłaby to sytuacja, w której prognozuje on cenę akcji na następny dzień na podstawie wartości poprzednich. Za kaŜdym razem do programu podawane są rzeczywiste wartości cen akcji z dni poprzednich. Cena [zł] Rysunek 7. Idea predykcji krótko okresowej. Predykcja długo okresowa – to rodzaj predykcji który ma na celu prognozę trendu badanej funkcji. Nacisk kładziony jest na zachowanie ogólnego charakteru funkcji, a niŜeli dokładne przewidzenie przyszłych wartości. Predykcja taka dokonywana jest zazwyczaj poprzez przesuwanie okna danych z jednoczesnym włączaniem do szeregu uczącego przewidzianych wartości. Schemat ideowy takiego rozwiązania przedstawiony jest na Rysunek 8. Rysunek 8. Idea predykcji długo okresowej. Predykcja danych w szeregach czasowych 13/42 4. Metody predykcji W programie zostały zastosowane trzy metody predykcji. Dwie z nich wykorzystują sztuczną sieć neuronową, trzecia natomiast opiera się na metodzie regresji wielomianowej dowolnego stopnia. Rozwiązanie hybrydowe umoŜliwia wykorzystanie dowolnej kombinacji tych metod. Na Rysunek 9 przedstawiony jest ideowy schemat pracy hybrydy z włączonymi wszystkimi metodami predykcji. Rysunek 9. Schemat blokowy hybrydy. W dalszej części tego rozdziału zostanie dokładnie wyjaśnione kaŜde z tych rozwiązań. Sieć neuronowa numeryczna Jako pierwsze omówimy rozwiązanie bazujące na sieci neuronowej z propagacją wsteczną. Nazwa „sieć numeryczna” została jej nadana ze względu na sposób pracy z danymi. Sieć ta składa się przynajmniej z trzech warstw (Rysunek 10), pierwsza warstwa – wejściowa, jest odpowiedzialna za pobieranie wartości funkcji. Liczność tej warstwy odpowiada dokładnie szerokości okna danych. KaŜdy neuron pobiera wobec tego jedną wartość z okna i przekazuje go do warstwy ukrytej. Warstwa ukryta jest konfigurowalna w programie. MoŜemy określić ile neuronów będzie wchodzić w jej skład. Dodatkowo mamy równieŜ moŜliwość określenia ilości tych warstw. W literaturze podawane jest jednak najczęściej, Ŝe sieć taka powinna posiadać jedną warstwę ukrytą o liczności równej ilości neuronów w warstwie wejściowej. W naszym programie postanowiliśmy jednak sprawdzić jak zachowują się sieci z większą ilością warstw ukrytych oraz z róŜna od wejściowej liczbą neuronów w nich zawartych. Warstwa wyjściowa składa się zawsze z jednego neuronu, którego wartość na wyjściu stanowi wynik działania sieci. Predykcja danych w szeregach czasowych 14/42 Wyjście – denormalizacja wartości Warstwa wyjściowa Warstwa ukryta 1 2 3 4 5 6 7 8 Warstwa wejściowa 1 2 3 4 5 6 7 8 Wejścia do sieci – normalizacja danych Rysunek 10. Schemat sieci numerycznej. Błąd działania sieci: ilośl _ wyjsc ilosc _ wzorców Blad = Objaśnienie: ∑ (o i =0 Z − o) 2 ∑ i =1 (2) ilosc _ wyjsc Blad –błąd pracy sieci neuronowej o – wartość uzyskana na wyjściu z neuronu warstwy wyjściowej oz – wartość oczekiwana na wyjściu neuronu ilosc_wzorców – ilość wzorców danych ilosc_wyjsc – ilość wyjść sieci neuronowej Wartości dostarczane do warstwy wejściowej poddaje się normalizacji zgodnie z następującym wzorem: Normalizacja wartości wejściowej xs = Objaśnienie: xr − min max − min (3) xs – wartość podawana na wejście sieci Predykcja danych w szeregach czasowych xr – wartość rzeczywista przekazana na wejście min – minimalna wartość w zbiorze danych max – maksymalna wartość w zbiorze danych Wyjście z sieci następnie poddawane jest procesowi denormalizacji: 15/42 xs = xr ⋅ (max − min) + min Objaśnienie: xs – wartość podawana na wejście sieci xr – wartość rzeczywista przekazana na wejście min – minimalna wartość w zbiorze danych max – maksymalna wartość w zbiorze danych (4) Do uczenia sieci zastosowany jest algorytm propagacji wstecznej. KaŜdy z neuronów wchodzących w skład sieci ma dodatkowe wejście zwane biasem, które zawsze na wejściu ma podawaną wartość 1. Jako funkcja aktywacji neuronu zastosowana została funkcja unipolarna. Sieć neuronowa znakowa Sieć znakowa w naszym programie to specyficzny rodzaj sieci, która na wejściu analizuje nie wartości liczb a cyfry, z jakich one się składają. Efektem działania takiej sieci jest zatem predykcja pewnego napisu, który w szczególności będzie liczbą. Przykład konwersji liczby 2.5 na wejścia sieci znakowej został pokazany na Rysunek 11. Rysunek 11. Schemat konwersji danych dla sieci znakowej. NaleŜy zwrócić uwagę, Ŝe dla ciągu liczb 2.5; 2.51; 4.321 naleŜy ujednolicić ich zapis. W programie realizowane jest to dopisaniem tylu zer końcowych, aby długość kaŜdej liczby była taka sama. Dla naszego przykładu po takiej konwersji uzyskalibyśmy liczby (a w zasadzie napisy): 2.500 ; 2.510; 4.321 Predykcja danych w szeregach czasowych Budowa sieci znakowej jest następująca: • • • 16/42 Liczba neuronów w warstwie wejściowej – długość najdłuŜszej liczby (w postaci napisu) * 4 * szerokość okna Liczba neuronów w warstwie ukrytej – 0.5 * ilość neuronów wejściowych Liczba neuronów wyjściowych – długość najdłuŜszej liczby z danych uczących (w postaci napisu) * 4 Rysunek 12. Budowa sieci znakowej. Liczba, 4 przez która przemnaŜana jest liczba neuronów warstwy wejściowej i wyjściowej, wynika z faktu konwersji kaŜdej cyfry na postać binarną. PoniewaŜ musimy zakodować 10 cyfr oraz przecinek, potrzebnych jest naw w tym celu 11 wartości, a najbliŜsza potęgą dwójki jest 4 (liczba 16). KaŜdy neuron sieci znakowej zbudowany jest tak samo jak neuron sieci numerycznej. Błąd sieci równieŜ liczony jest ze wzoru (2). Sieć uczona jest równieŜ algorytmem BackPropagation. Zdecydowaną róŜnicą, jaka cechuje sieć znakową i sieć liczbową poza sposobem interpretacji danych wejściowych jest ilość neuronów, jaka wchodzi w ich skład. Zastosowanie sieci znakowej wynikało z paru czynników. Pierwszy z nich polegał na chęci przetestowania zastosowalności i przydatności takiego podejścia. Nigdzie w literaturze nie spotkaliśmy się z podobnym rozwiązaniem, dlatego ciekawiło nas jakie rezultaty jesteśmy w stanie osiągnąć z jego pomocą. Drugim powodem jaki przemawiał za zastosowaniem sieci znakowej był fakt jej wraŜliwości nawet na bardzo małe zmiany wartości wejściowych. Wystarczy, Ŝe weźmiemy taki przykład: Zakres danych = 100 Wartość 1 = 45.500 Wartość 2 = 49.000 Wartość 3 = 45.506 Dla sieci numerycznej wartości 1 oraz 3 są w zasadzie nierozróŜnialne, podczas gdy w sieci znakowej zmianie ulegnie wartość 3 neuronów. Regresja jest metodą, która polega na ustaleniu wzoru krzywej pewnego stopnia, w naszym przypadku jest to krzywa wielomianowa, poprzez dostrajanie jej parametrów. Dostrajanie to polega na minimalizacji średniego odchylenia krzywej aproksymującej prostą od funkcji bazowej. Wybranie stopnia wielomianu pozawala na mniejsze lub większe dopasowanie się krzywej regresji do funkcji. PoniŜej przedstawionych jest kilka przykładów, które demonstrują wpływ stopnia wielomianu na otrzymany wynik: Regresja Predykcja danych w szeregach czasowych Wartość akcji [zł] Wartość akcji [zł] 10,00 15,00 20,00 25,00 30,00 35,00 40,00 45,00 0,00 5,00 10,00 15,00 20,00 25,00 30,00 35,00 40,00 45,00 0,00 5,00 2005-05-27 2005- 05-27 Rysunek 15. Przykład przybliŜenia funkcji wielomianem czwartego stopnia. Rysunek 13. Przykład przybliŜenia funkcji wielomianem drugiego stopnia. 2005-04-19 2005-03-09 2005-02-01 2004-12-27 2004-11-19 2004-10-12 2004-09-06 2004-07-30 2004-06-24 2004-05-18 2004-04-07 2004-03-02 2005- 04-19 2005- 03-09 2005- 02-01 2004- 12-27 2004- 11-19 2004- 10-12 2004- 09-06 2004- 07-30 2004- 06-24 2004- 05-18 2004- 04-07 2004- 03-02 Rysunek 17.Przykład przybliŜenia funkcji wielomianem szóstego stopnia. Dane giełdowe spółki KGHM Dane giełdowe spółki KGHM 2004- 01-26 2003- 12-15 2003- 11-06 2003- 10-01 2003- 08-26 2003- 07-18 Data [dni] 2003- 06-11 2003- 05-06 2003- 03-26 2003- 02-18 2003- 01-13 2002- 12-02 2002- 10-22 2002- 09-16 2002- 08-08 2002- 07-02 2002- 05-22 2002- 04-12 2001- 12-14 2001- 08-22 2001- 05-16 2000- 10-13 1999- 08-25 1999- 04-26 1999- 02-15 1998- 12-02 2004-01-26 2003-12-15 2003-11-06 2003-10-01 2003-08-26 2003-07-18 Data [dni] 2003-06-11 2003-05-06 2003-03-26 2003-02-18 2003-01-13 2002-12-02 2002-10-22 2002-09-16 2002-08-08 2002-07-02 2002-05-22 2002-04-12 2001-12-14 2001-08-22 2001-05-16 2000-10-13 1999-08-25 1999-04-26 1999-02-15 1998-12-02 Wartość akcji [zł] 10,00 15,00 20,00 25,00 30,00 35,00 40,00 45,00 0,00 5,00 2005- 05-27 2005- 04-19 2005- 03-09 2005- 02-01 2004- 12-27 2004- 11-19 2004- 10-12 2004- 09-06 2004- 07-30 2004- 06-24 2004- 05-18 2004- 04-07 2004- 03-02 Dane giełdowe spółki KGHM 2004- 01-26 2003- 12-15 2003- 11-06 2003- 10-01 2003- 08-26 2003- 07-18 Data [dni] 2003- 06-11 2003- 05-06 2003- 03-26 2003- 02-18 2003- 01-13 2002- 12-02 2002- 10-22 2002- 09-16 2002- 08-08 2002- 07-02 2002- 05-22 2002- 04-12 2001- 12-14 2001- 08-22 2001- 05-16 2000- 10-13 1999- 08-25 1999- 04-26 1999- 02-15 1998- 12-02 Wartość akcji [zł] Wartość akcji [zł] 10,00 15,00 20,00 25,00 30,00 35,00 40,00 45,00 0,00 5,00 10,00 15,00 20,00 25,00 30,00 35,00 40,00 45,00 0,00 5,00 2005- 05-27 2005- 05-27 Rysunek 16. Przykład przybliŜenia funkcji wielomianem piątego stopnia. Rysunek 14. Przykład przybliŜenia funkcji wielomianem trzeciego stopnia. 2005- 04-19 2005- 03-09 2005- 02-01 2004- 12-27 2004- 11-19 2004- 10-12 2004- 09-06 2004- 07-30 2004- 06-24 2004- 05-18 2004- 04-07 2004- 03-02 2005- 04-19 2005- 03-09 2005- 02-01 2004- 12-27 2004- 11-19 2004- 10-12 2004- 09-06 2004- 07-30 2004- 06-24 2004- 05-18 2004- 04-07 2004- 03-02 Dane giełdowe spółki KGHM 2004- 01-26 2003- 12-15 2003- 11-06 2003- 10-01 2003- 08-26 2003- 07-18 Data [dni] 2003- 06-11 2003- 05-06 2003- 03-26 2003- 02-18 2003- 01-13 2002- 12-02 2002- 10-22 2002- 09-16 2002- 08-08 2002- 07-02 2002- 05-22 2002- 04-12 2001- 12-14 2001- 08-22 2001- 05-16 2000- 10-13 1999- 08-25 1999- 04-26 1999- 02-15 1998- 12-02 Dane giełdowe spółki KGHM 2004- 01-26 2003- 12-15 2003- 11-06 2003- 10-01 2003- 08-26 2003- 07-18 Data [dni] 2003- 06-11 2003- 05-06 2003- 03-26 2003- 02-18 2003- 01-13 2002- 12-02 2002- 10-22 2002- 09-16 2002- 08-08 2002- 07-02 2002- 05-22 2002- 04-12 2001- 12-14 2001- 08-22 2001- 05-16 2000- 10-13 1999- 08-25 1999- 04-26 1999- 02-15 1998- 12-02 17/42 Predykcja danych w szeregach czasowych 18/42 5. Eksperymenty 1. Badanie błędu sieci podczas procesu uczenia Pierwsze badanie miało na celu określenie zaleŜności pomiędzy wartością błędu sieci, a długością procesu uczenia. Dla sieci numerycznej zaleŜność ta została przedstawiona na Rysunek 18, a dla sieci znakowej, na Rysunek 19. Jak widać obie zaleŜności mają charakter 1/x. Uczenie sieci numerycznej 3,5 3 2,5 Wartość błędu 2 1,5 1 0,5 0 1 51 101 151 201 251 301 351 Ilość epok uczących Rysunek 18. Wykres zaleŜności błędu sieci numerycznej od ilości epok uczących. Błąd podczas uczenia sieci znakowej 5 4,5 4 3,5 Błąd sieci 3 2,5 2 1,5 1 0,5 0 1 26 51 Ilość epok 76 Rysunek 19. Wykres zaleŜności błędu sieci znakowej od ilości epok uczących. Predykcja danych w szeregach czasowych 19/42 2. Badanie wpływu parametrów uczenia na ilość epok uczących oraz błąd sieci. Badanie polegało na sprawdzeniu wpływu parametrów uczenia takich jak: maksymalny dopuszczalny błąd, współczynnik uczenia. Jak widać (Tabela 3. Błąd predykcji sieci liczbowej dla zbioru uczącego.Tabela 3 i Tabela 4) zmniejszenie wartośći dopuszczalnego błędu wpływa na polepszenie jakości otrzymywanych rozwiązań. JednakŜe związane jest to z dodatkowym kosztem obliczeniowym, wynikającym z dłuŜszego procesu uczenia. Tabela 3. Błąd predykcji sieci liczbowej dla zbioru uczącego. L.p. 1 2 3 4 5 6 7 8 9 10 Średnia: Max_bład=0,1 Wsp_uczenia=0.25 0,33944595 0,40685362 0,3211001 0,39504743 0,30614528 0,3702581 0,55567235 0,4061748 0,44178638 0,34696692 0,388945093 Max_błąd=0,1 Wsp_uczenia=0.1 0,40188 0,377126 0,435145 0,399811 0,388575 0,401558 0,39477 0,39934 0,405562 0,399018 0,400279 Max_błąd=0,01 Wsp_uczenia=0.25 0,119438 0,087539 0,139914 0,178516 0,166054 0,100523 0,119242 0,393672 0,096405 0,212274 0,161358 Tabela 4. Liczba epok uczących sieci numerycznej dla zbioru testowego. L.p. 1 2 3 4 5 6 7 8 9 10 Średnia: Max_bład=0,1 Wsp_uczenia=0.25 128 51 54 32 61 31 47 73 36 38 50,11363636 Max_błąd=0,1 Wsp_uczenia=0.1 156 67 104 87 121 131 108 130 109 104 101,5545 Max_błąd=0,01 Wsp_uczenia=0.25 443 638 723 879 505 660 848 480 742 637 595,9318 Predykcja danych w szeregach czasowych 3. Predykcja funkcji 20/42 W celu porównania działania wykorzystanych metod, poddano predykcji następujące funkcje: • funkcja liniowa • funkcja kwadratowa • funkcja sinusoidalna (sin(x) + a) • funkcja sinusoidalna połączona z funkcja liniową (sin(x) + x) • funkcja przedstawiająca notowania cen akcji firmy KGHM Polska Miedź S.A. Proces testowania polegał na wyuczeniu sieci numerycznej i znakowej na wybranym podzbiorze dziedziny funkcji, a następnie próbie predykcji wartości dla nieznanych dotąd argumentów. W kolejnych punktach przedstawione są uzyskiwane rezultaty. Predykcja danych w szeregach czasowych 4. Predykcja funkcji liniowej 21/42 Badania predykcji funkcji liniowej przedstawionej na Rys.20, miało na celu określenie zdolności systemu do wykrywania prostych zaleŜności między danymi. Rysunek 20. Funkcja linowa. Jako pierwszą zastosowaną metodę opartą na sieci numerycznej. Predykcję przeprowadzono dla dwóch wartości dopuszczalnego błędu: 1.0 i 0.01. Jak wynika z Rysunek 21 i Rysunek 24, obniŜenie progu błędu, pozwala na lepsze odwzorowanie funkcji, dla wartości wchodzących w skład zbioru uczącego. Wpływa to jednak ujemnie na zdolność uogólniania (Rysunek 22 i Rysunek 25). Akceptowalne rezultaty otrzymujemy jedynie dla predykcji krótkookresowej (krokowej). Dla predykcji długookresowej kumulacja błędu jest tak duŜa, Ŝe wartości predykowane nie zachowują nawet trendu funkcji bazowej (Rysunek 23 i Rysunek 26). Predykcja z zastosowaniem sieci numerycznej (max. błąd = 1): Rysunek 21. Predykcja na zbiorze uczącym. Predykcja danych w szeregach czasowych 22/42 Rysunek 22. Predykcja krokowa na zbiorze testowym. Rysunek 23. Predykcja ciągła na zbiorze testowym. Predykcja z zastosowaniem sieci numerycznej (max. błąd = 0.01): Rysunek 24. Predykcja na zbiorze uczącym. Rysunek 25 Predykcja krokowa na zbiorze testowym. Rysunek 26 Predykcja ciągła na zbiorze testowym. Predykcja danych w szeregach czasowych 23/42 Drugi test został przeprowadzony na sieci znakowej (zasada działania opisana w poprzednim punkcie). Uzyskane wyniki dla duŜego błędu (powyŜej 1) nie wykazują Ŝadnej (bardzo znikomą) korelacji z funkcją bazową (Rysunek 27 i Rysunek 28). Dopiero zmniejszenie dopuszczalnego błędu pozwoliło uzyskać akceptowalne wyniki dla zbioru uczącego. JednakŜe, tak jak podejrzewaliśmy, sieć ta ma tendencję do uczenia się na pamięć, co moŜna zaobserwować na Rysunek 29 i Rysunek 30. Predykcja z zastosowaniem sieci znakowej (max. błąd = 1): Rysunek 27. Predykcja na zbiorze uczącym. Rysunek 28. Predykcja krokowa na zbiorze testowym. Predykcja z zastosowaniem sieci znakowej (max. błąd = 0.01) Rysunek 29. Predykcja na zbiorze uczącym. Rysunek 30. Predykcja krokowa na zbiorze testowym. Predykcja danych w szeregach czasowych 5. Predykcja funkcji kwadratowej 24/42 Kolejny test przeprowadzony został dla funkcji kwadratowej, przedstawionej na Rysunek 31. Badanie to ma na celu sprawdzenie zdolności uogólniania zaleŜności funkcyjnej. Badania zostały przeprowadzone zarówno dla sieci numerycznej jak i sieci znakowej. Rysunek 31. Funkcja kwadratowa. Uzyskane wyniki są porównywalne z wynikami otrzymanymi w poprzednim badaniu. Po raz kolejny swoja przewagę wykazała sieć numeryczna. Podczas testów potwierdziło się poprzednie przypuszczenie, Ŝe dla małej dopuszczalnej wartości błędu sieci, uczy się ona na pamięć. PoniŜej znajdują się otrzymane wyniki. Predykcja z zastosowaniem sieci numerycznej (max. błąd = 1): Rysunek 32. Predykcja na zbiorze uczącym. Predykcja danych w szeregach czasowych 25/42 Rysunek 33. Predykcja krokowa na zbiorze testowym. Rysunek 34. Predykcja ciągła na zbiorze testowym. Predykcja z zastosowaniem sieci numerycznej (max. błąd = 0.01) Rysunek 35. Predykcja na zbiorze uczącym. Rysunek 36. Predykcja krokowa na zbiorze testowym. Rysunek 37. Predykcja ciągła na zbiorze testowym. Predykcja danych w szeregach czasowych 26/42 Predykcja z zastosowaniem sieci znakowej (max. błąd = 1) Rysunek 38. Predykcja na zbiorze uczącym. Rysunek 39. Predykcja krokowa na zbiorze testowym. Predykcja z zastosowaniem sieci znakowej (max. błąd = 0.01) Rysunek 40. Predykcja na zbiorze uczącym. Rysunek 41. Predykcja krokowa na zbiorze testowym. Predykcja danych w szeregach czasowych 6. Predykcja funkcji okresowej – y=sin(x) + a 27/42 Kolejne testy przeprowadzone zostały dla funkcji okresowej w celu zbadania zdolności sieci do uczenia się schematów. Na Rysunek 42 przestawiony jest wykres funkcji bazowej. Rysunek 42. Funkcja sinusoidalna. Podczas prowadzenia badań zaobserwowaliśmy, iŜ okresowość funkcji pozwala zmniejszyć dopuszczalny błąd. W poprzednich badaniach zabieg ten dał negatywne efekty, których przejawem była nauka wzorców na pamięć. W aktualnie testowanej funkcji cecha ta jest poŜądana. Predykcja z zastosowaniem sieci numerycznej (max. błąd = 1): Rysunek 43. Predykcja na zbiorze uczącym. Predykcja danych w szeregach czasowych 28/42 Rysunek 44. Predykcja krokowa na zbiorze testowym. Rysunek 45. Predykcja ciągła na zbiorze testowym. Predykcja z zastosowaniem sieci numerycznej (max. błąd = 0.01): Rysunek 46. Predykcja na zbiorze uczącym. Rysunek 47. Predykcja krokowa na zbiorze testowym. Rysunek 48. Predykcja ciągła na zbiorze testowym. Predykcja danych w szeregach czasowych 7. Predykcja funkcji okresowej – y=sin(x) + x 29/42 W celu zbadania zdolności uogólniania zaleŜności funkcyjnych przy jednoczesnym wykorzystaniu faktu okresowości funkcji, badaniu poddaliśmy funkcję y=sin(x)+x. Wykres funkcji znajduje się na Rysunek 49. Rysunek 49. Funkcja sinusoidalno-malejąca. Jak wykazują przeprowadzone badania sieć numeryczna z dobrym rezultatem potrafiła odwzorować trend rozpatrywanej funkcji. Wysoka dokładność predykcji została uzyskana nie tylko na wzorcach uczących, ale równieŜ na zbiorze testowym (Rysunek 54). Wyniki predykcji długookresowej (ciągłej) pozostają nadal niezadowalające (Rysunek 52 i Rysunek 55). Predykcja z zastosowaniem sieci numerycznej (max. błąd = 1): Rysunek 50. Predykcja na zbiorze uczącym. Predykcja danych w szeregach czasowych 30/42 Rysunek 51. Predykcja krokowa na zbiorze testowym. Rysunek 52. Predykcja ciągła na zbiorze testowym. Predykcja z zastosowaniem sieci numerycznej (max. błąd = 0.01): Rysunek 53. Predykcja na zbiorze uczącym. Rysunek 54. Predykcja krokowa na zbiorze testowym. Rysunek 55. Predykcja ciągła na zbiorze testowym. Predykcja danych w szeregach czasowych Predykcja z zastosowaniem sieci znakowej (max. błąd = 1): 31/42 Rysunek 56. Predykcja na zbiorze uczącym. Rysunek 57. Predykcja krokowa na zbiorze testowym. Predykcja z zastosowaniem sieci znakowej (max. błąd = 0.01): Rysunek 58. Predykcja na zbiorze uczącym. Rysunek 59. Predykcja krokowa na zbiorze testowym. Predykcja danych w szeregach czasowych 32/42 8. Predykcja danych giełdowych na przykładzie notowań akcji firmy KGHM Polska Miedź S.A. Najbardziej istotnym testem z punktu widzenia projektu było badanie zaproponowanego rozwiązania na danych rzeczywistych. Wstępna analiza ciągu uczącego nie pozwalała nam zakładać, Ŝe istnieją w nim jakiekolwiek zaleŜności funkcyjne (Rysunek 60). Rysunek 60. Funkcja notowań akcji firmy KGHM Polska Miedź S.A. Predykcja z zastosowaniem sieci numerycznej (max. błąd = 1): Rysunek 61. Predykcja na zbiorze uczącym Predykcja danych w szeregach czasowych 33/42 Rysunek 62. Predykcja krokowa na zbiorze testowym. Rysunek 63. Predykcja ciągła na zbiorze testowym. Dla duŜej wartości dopuszczalnego błędu, sieć numeryczna nie odwzorowuje funkcji bazowej. Jest to związane z faktem bardzo małej róŜnicy pomiędzy kolejnymi wartościami w ciągu uczącym (Rysunek 61, Rysunek 62 i Rysunek 63). Predykcja z zastosowaniem sieci numerycznej (max. błąd = 0.01): Rysunek 64. Predykcja na zbiorze uczącym. Predykcja danych w szeregach czasowych 34/42 Rysunek 65. Predykcja krokowa na zbiorze testowym Rysunek 66. Predykcja ciągła na zbiorze testowym. Przy obniŜeniu wartości dopuszczalnego błędu, uzyskane rezultaty na ciągu testowym wykazują niesamowite zdolności predykcji danych. Sieć potrafiła poprawnie predykować wartości dla 4-miesięcznego okresu następującego po ciągu uczącym. Niemniej jednak zdolność do predykcji długoterminowej nie uległa znacznej poprawie. Okres predykcji w tym przypadku nie przekracza nawet tygodnia. Predykcja z zastosowaniem sieci numerycznej (max. błąd = 0.001): Rysunek 67. Predykcja na zbiorze uczącym Predykcja danych w szeregach czasowych 35/42 Rysunek 68. Predykcja krokowa na zbiorze testowym. Rysunek 69. Predykcja ciągła na zbiorze testowym. Predykcja z zastosowaniem sieci znakowej (max. błąd = 1): Rysunek 70. Predykcja na zbiorze uczącym. Rysunek 71. Predykcja krokowa na zbiorze testowym. Predykcja z zastosowaniem sieci znakowej (max. błąd = 0.01) Rysunek 72. Predykcja na zbiorze uczącym. Rysunek 73. Predykcja krokowa na zbiorze testowym. Predykcja danych w szeregach czasowych Predykcja z zastosowaniem sieci znakowej (max. błąd = 0.001) 36/42 Rysunek 74. Predykcja na zbiorze uczącym. Rysunek 75. Predykcja krokowa na zbiorze testowym. Zaskakującym jest fakt, iŜ sieć znakowa wykazuje zdolność do wiernego odwzorowywania tak złoŜonej funkcji. Wyniki uzyskane w tej części badań są dla nie duŜo lepsze, niŜ w poprzednich testach. W pewnych sytuacjach jest ona lepsza niŜ sieć numeryczna. Wytłumaczyć to moŜna faktem, iŜ w ciągu uczącym róŜnice pomiędzy kolejnymi elementami są bardzo małe. Predykcja z zastosowaniem sieci numerycznej i sieci znakowej (max. błąd = 0.01): Rysunek 76. Predykcja na zbiorze uczącym. Predykcja danych w szeregach czasowych 37/42 Rysunek 77. Predykcja krokowa na zbiorze testowym, ciągłym w stosunku do zbioru uczącego. Rysunek 78. Predykcja ciągła na zbiorze testowym, po okresie jednorocznej przerwy, w stosunku do zbioru uczącego. Ostatnie badanie polegało na sprawdzeniu jakości predykcji dla danych testowych, pochodzących z następujących po sobie lat. Jak moŜna zauwaŜyć dokładność działania sieci maleje wraz z Predykcja danych w szeregach czasowych 38/42 6. Opis programu PoniŜsze rysunki przedstawiają interfejs programu oraz jego podstawowe funkcje. Okno z wykresem wyników Wybór metod predykcji Otrzymane krzywe predykcji Parametry sieci numerycznej Parametry regresji wielomianowej Parametry nauki sieci neuronowych Parametry zbiorów uczących Rozpoczęcie nauki Rysunek 79. Okno główne programu - widok parametrów nauki. Predykcja danych w szeregach czasowych 39/42 Parametry dotyczące zakresu predykcji Parametry dotyczące typu predykcji Rozpoczęcie predykcji Uzyskane wartości z predykcji Rysunek 80. Okno główne programu - widok parametrów predykcji Dane kontrolne gromadzone w procesie nauki oraz predykcji Rysunek 81. Okno główne programu - widok danych wyników. Predykcja danych w szeregach czasowych 40/42 Wartość predykcji sieci znakowej Wartość predykcji dla metody regresji Wartość rzeczywista funkcji Wartość predykcji sieci numerycznej Rysunek 82. Okno główne programu - widok danych predykcji. Predykcja danych w szeregach czasowych 41/42 7. Wnioski Projekt dał nam moŜliwość zgłębienia wiedzy na temat predykcji i aproksymacji danych. Postawiony przed nami rzeczywisty problem, pozwolił nam zastosować własne rozwiązanie w postaci sieci znakowej. Podejście to nie było nigdzie opisane, dlatego z niecierpliwością oczekiwaliśmy na pierwsze wyniki. W celu zwiększenia efektywności tej metody, postanowiliśmy wspomóc ją innymi rozwiązaniami. Tworząc tym samym system hybrydowy. Nie ogranicza to w Ŝaden sposób naszych moŜliwości związanych z konfiguracją poszczególnych modułów. W celu oceny otrzymanego rozwiązania, przeprowadzone zostały testy na wybranych funkcjach o róŜnych charakterystykach. W dokumencie zamieszczone zostały wyniki przeprowadzonych badań. Sieć numeryczna w znakomitej większości przypadków wykazywała swoją przewagę nad innymi podejściami. Na jej korzyść przemawiają równieŜ: prostota oraz powszechnie znany algorytm uczenia. Zaproponowana przez nas sieć znakowa nie radziła sobie dobrze z funkcjami testowymi. Jednak dla funkcji rzeczywistej (notowań akcji na giełdzie) spisywała się ona porównywalnie lub w nielicznych przypadkach nawet lepiej niŜ sieć numeryczna. Efekt ten uzyskiwany był jednak tylko na krótkich przedziałach czasowych, nieznacznie oddalonych od zbioru uczącego. W projekcie uŜytkownik ma równieŜ moŜliwość wykorzystania metod statystycznych, jaką jest regresja wielomianowa. Rozwiązanie nasze cechuje bardzo dobra zdolność predykcji krótkookresowej, która moŜe być przydatna w rzeczywistych zastosowaniach, na przykład podczas gry na giełdzie. Wyniki predykcji długoterminowej są niezadowalające, czego moŜna się było spodziewać ze względu na kumulację błędów predykcji krótkookresowej, co w skali dłuŜszego okresu czasu odbiegało znacznie od wartości rzeczywistych. Projekt ten stanowił dla nas wyzwanie i pozwolił nam zgłębić nasza wiedzę w tej dziedzinie. Predykcja danych w szeregach czasowych 42/42 Literatura Benjamin W. Wah, Minglun Qian „Constrained Formulations and Algorithms for Stock-Price Predictions Using Recurrent FIR Neural Networks” G. E. P. Box, G. M. Jenkins „Time Series Analysis: Forecasting and Control” Józef Kalisz, Ryszard Pełka, Ryszard Szplet „Problemy projektowe w precyzyjnej metrologii odcinków czasu” Rayid Ghani, Hillery Simmons „Predicting the End-Price of Online Auctions” Rick Martinelli „Market data prediction with adaptive kalman filter” Jeffrey K. MacKie-Mason Anna Osepayshvili Daniel M. Reeves Michael P. Wellman „Price Prediction Strategies for Market-Based Scheduling” Ivakhnenko, A.G. „Recent Developments of Self-Organising Modeling in Prediction and Analysis of Stock Market” Foster „Commodities Futures Price Prediction An Artificial Intelligence Approach” (presentation) Sven F. „Crone Bussiness Forecasting with Artificial Neural Networks” (presentation)

Friday, February 27, 2009

ADAPTACYJNY SYSTEM SYGNALIZACJI ŚWIETLNEJ OPARTY NA ALGORYTMIE GENETYCZNYM

ADAPTACYJNY SYSTEM SYGNALIZACJI ŚWIETLNEJ OPARTY NA ALGORYTMIE GENETYCZNYM

Nowoczesne metody mikrosymulacji ruchu drogowego z wykorzystaniem automatów komórkowych

Nowoczesne metody mikrosymulacji ruchu drogowego z wykorzystaniem automatów komórkowych

Metody predykcji w szeregach czasowych


"Metody predykcji w szeregach czasowych, na przykładzie predykcji cen akcji giełdowych spółki KGHM Polska Miedz S. A." referat wygłoszony na Konferencji Naukowej Studentów w 2006 roku.



Artykuł przedstawia wykorzystanie rozwiązania bazującego na sieciach neuronowych podczas predykcji danych w szeregach czasowych na przykładzie zarówno predykcji krótko jak i długo okresowej cen akcji spółki KGHM Polska Miedź S.A. Dokument szczegółowo omawia dwie architektury sieci neuronowych, jedna bazująca na znakowej reprezentacji, druga na wartościach rzeczywistych. Omówione zostały otrzymane wyniki oraz moŜliwości ulepszenia za pomocą rozwiązania hybrydowego wykorzystującego wyniki działania obu sieci połączone z analizą statystyczną.



Dokument PDF - Metody predykcji w szeregach czasowych, na przykładzie predykcji cen akcji giełdowych spółki KGHM Polska Miedz S. A. (167 kB)

Wednesday, February 18, 2009

Sztuczna Inteligencja - Systemy Hybrydowe


Praca ta stanowi wprowadzenie w zagadnienie systemów hybrydowych (inteligentnych systemów hybrydowych). W dokumencie zawarte są podstawowe informacje dotyczące wyjaśnienia pojęć, przeglądu najczęściej wykorzystywanych metod sztucznej inteligencji oraz charakterystyki ich zalet i wad. Druga część pracy skupia się już na bardziej szczegółowych aspektach zagadnienia. Wyjaśnione w niej zostały powody oraz cele stosowania systemów hybrydowych, proponowane w literaturze architektury oraz modele komunikacji. Końcową część pracy stanowi analiza kierunków rozwoju.



Systemy Hybrydowe - Prezentacja (965 kB)


Michal Stanek-Systemy Hybrydowe

Systemy Hybrydowe Wprowadzenie Michał Stanek (mikol@e-informatyka.pl) 21 stycznia 2005 Streszczenie Praca ta stanowi wprowadzenie w zagadnienie systemów hybrydowych (inteligentnych systemów hybrydowych). W dokumencie zawarte są podstawowe informacje dotyczące wyjaśnienia pojęć, przeglądu najczęściej wykorzystywanych metod sztucznej inteligencji oraz charakterystyki ich zalet i wad. Druga część pracy skupia się już na bardziej szczegółowych aspektach zagadnienia. Wyjaśnione w niej zostały powody oraz cele stosowania systemów hybrydowych, proponowane w literaturze architektury oraz modele komunikacji. Końcową część pracy stanowi analiza kierunków rozwoju. 1 SPIS TREŚCI 2 Spis treści 1 Wstęp 2 Metody sztucznej inteligencji 2.1 Krótki rys historyczny . . . . . . . . . . . . . 2.2 Przegląd metod sztucznej inteligencji . . . . . 2.2.1 Systemy eskpertowe . . . . . . . . . . 2.2.2 Sieci neuronowe . . . . . . . . . . . . . 2.2.3 Algorytmy genetyczne . . . . . . . . . 2.2.4 Logika rozmyta . . . . . . . . . . . . . 2.3 Ocena użyteczności poszczególnych rozwiązań 3 Systemy hybrydowe 3.1 Cele systemu hybrydowego . . . . . . . . . . 3.2 Architektury budowy systemów hybrydowych 3.2.1 Systemy niezależne . . . . . . . . . . . 3.2.2 Systemy transformujące . . . . . . . . 3.2.3 Systemy luźno związane . . . . . . . . 3.2.4 Systemy zintegorwane . . . . . . . . . 3.2.5 Systemy w pełni zintegrowane . . . . . 3.3 Modele pracy systemu hybrydowego . . . . . 3.4 Przykładowy system hybrydowy . . . . . . . 3.5 Kierunki rozwoju systemów hybrydowych . . 4 5 5 6 6 7 8 10 10 12 12 14 14 14 15 15 15 16 17 18 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Spis rysunków 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Kroki milowe rozwoju sztucznej inteligencji . . . . . . . . . . . . Reprezentacja ideowa systemu ekspertowego . . . . . . . . . . . . Model neuronu oraz sieci neuronowej . . . . . . . . . . . . . . . . Przykład klasteryzacji danych . . . . . . . . . . . . . . . . . . . . Schemat procesu działania algorytmu genetycznego . . . . . . . . Przykładowa reprezentacja zbiorów za pomocą logiki rozmytej . . Właściwości różnych metod sztucznej inteligencji . . . . . . . . . Możliwe elementy systemu hybrydowego . . . . . . . . . . . . . . Model systemu niezależnego . . . . . . . . . . . . . . . . . . . . . Model systemu transformującego . . . . . . . . . . . . . . . . . . Model systemu luźno powiązanego . . . . . . . . . . . . . . . . . Model systemu zintegrowanego . . . . . . . . . . . . . . . . . . . Model systemu w pełni zintegrowanego . . . . . . . . . . . . . . . Model przetwarzania w systemach hybrydowych . . . . . . . . . . Model ideowy połączenia Systemu ekspertowego z siecią neuronową Ilość prac naukowych na temat systemów hybrydowych . . . . . 5 6 8 8 9 10 11 13 14 14 15 16 16 17 18 19 SPIS RYSUNKÓW 3 17 Model agenta w systemie wieloagentowym . . . . . . . . . . . . . 19 1 WSTĘP 4 1 Wstęp Wydaje mi się, że wprowadzenie do systemów hybrydowych powinienem rozpocząć od wyjaśnienia samej nazwy, ponieważ dla osób niezaznajomionych z zagadnieniem, może wydawać się dziwna i niezrozumiała, a przez to mylnie interpretowana. Według jednej z definicji słownikowych system jest układem elementów o określonej strukturze, będący uporządkowaną logicznie całością. Hybryda, to natomiast mieszaniec powstały ze skrzyżowania dwóch różnych gatunków, ras, odmian, dziwoląg łączący cechy różnych osobników. Idea systemu hybrydowego bazuje wobec tego na integracji wielu dostępnych technik, metod, narzędzi w jednej spójnej i określonej strukturze stanowiącej logicznie uporządkowaną całość (wspólnie dążącą do osiągnięcia celu). Nasuwa się wobec tego pytanie, po co łączy się wiele różnych rozwiązań? Najogólniej można powiedzieć, że w celu osiągnięcia bardziej zadawalającego efektu niż przy wykorzystaniu każdej z tych technik osobno. Inteligentne systemy hybrydowe (Intelligent Hybrid Systems) starają się integrować odmienne techniki sztucznej inteligencji (logika rozmyta, sieci neuronowe, obliczenia ewolucyjne, metody probabilistyczne, maszynowe uczenie, systemy ekspertowe, itd. . . ). Fundamentem powstawania takich rozwiązań jest stwierdzenie, że metody te między sobą są komplementarne. W praktyce oznacza to, że metody te wzajemnie się uzupełniają, wady jednej są kompensowane zaletami innej. Istnieje wiele możliwych kombinacji wśród systemów symbolicznych i metod tak zwanej miękkiej sztucznej inteligencji (soft-computing) 1 , oraz wiele możliwych sposobów ich łączenia. Dla przykładu sieci neuronowe mogą być łączone z logiką rozmytą, wnioskowaniem na podstawie przykładów, algorytmami genetycznymi. W ostatnich latach, bardzo gwałtowny wzrost zapotrzebowania na wyrafinowane i złożone rozwiązania z dziedziny inteligentnych systemów informatycznych sprawia, że osiągnięcie pełnego sukcesu nie jest możliwe bez wykorzystania możliwości, jakie oferują nam systemy hybrydowe. Reprezentacja i manipulacja, przy pomocy komputerów, dużymi ilościami wiedzy oraz zapewnienie ich integralności, spójności i efektywności wykorzystania jest jednym z kluczowych nurtów badań w dziedzinie szeroko pojętej sztucznej inteligencji. Należy zdawać sobie sprawę z tego, że przyjęty przez nas format przechowywania i reprezentacji wiedzy powinien być w stanie poradzić sobie z pewnymi oczywistymi problemami. Niedokładność i niekompletność zgromadzonej wiedzy to jeden z nich. Różne sposoby przechowywania tejże wiedzy (np. sieci neuronowe, logika rozmyta, systemy ekspertowe) posiadają specyficzne własności radzenia sobie z danymi niepewnymi, nieprecyzyjnymi albo nawet nieprawidłowymi. Pewne metody lepiej nadają się do przechowywania danych numerycznych, jeszcze inne sprawdzają się lepiej, kiedy pragniemy operować na danych w postaci symbolicznej. Nie ma zadowalającego uniwersalnego rozwiązania, pozwalającego radzić sobie z wszystkimi problemami związanymi z reprezentacją wiedzy. 1 Pierwszy raz użył tego terminu Lotfi A. Zadeh 1995 2 METODY SZTUCZNEJ INTELIGENCJI 5 2 2.1 Metody sztucznej inteligencji Krótki rys historyczny Podobnie jak wiele innych, sztuczna inteligencja jest dziedziną nauki, która rozwija się w bardzo prężny sposób. W stosunkowo krótkiej historii, bo zaledwie 60 letniej, zaproponowano wiele koncepcji, które w znaczącym stopniu przyczyniły się do rozwoju, nie tylko jej, ale również wielu innych dziedzin w tym np. teorii sterowania i podejmowania decyzji. Pewne kroki milowe rozwoju AI (Artificial Intelligence) prezentuje rysunek 1. Wiele proponowanych teorii inspirowanych było przez naturę. Podczas gdy jedne próbowały ją naśladować (systemy ekspertowe, wnioskowanie na podstawie przykładów, logika rozmyta) inne ją kopiowały (sieci neuronowe, algorytmy genetyczne). Bardzo dużo danych wdrożeń systemów sztucznej inteligencji, projektowanych jako systemy ekspertowe, miało miejsce na przełomie lat 1970 1980 (MYCIN, DENDRAL, PROSPECTOR). Systemy te zostały tak oto zdefiniowane przez prof. Feigenbaum’a: ”inteligentne programy komputerowe wykorzystujące wiedzę oraz mechanizm wnioskowania w celu rozwiązania problemów, które są na tyle skomplikowane, że celem ich rozwiązania wymagają szczegółowej ekspertyzy wykonanej przez człowieka”. Każde z rozwiązań posiadało jednak pewne braki i ograniczenia. Problemem systemów ekspertowych była między innymi akwizycja wiedzy. Nowe rozwiązania, były odpowiedzią na wady poprzednich. Nowe koncepcje wprowadzały nowe możliwości, ale jednocześnie nowe ograniczenia. W pewnym momencie stało się oczywiste, że pewne metody da się, a nawet trzeba ze sobą łączyć, aby móc z ich pomocą rozwiązać problemy, które wcześniej były nierozwiązywalne (przy wykorzystaniu tylko jednej). W ten sposób postało pojęcie i rozpoczęły się badania nad systemami hybrydowymi. Rysunek 1: Kroki milowe rozwoju sztucznej inteligencji 2 METODY SZTUCZNEJ INTELIGENCJI 6 2.2 2.2.1 Przegląd metod sztucznej inteligencji Systemy eskpertowe Tak jak zostało to przedstawione w poprzednim punkcie idea systemu ekspertowego zainspirowana była sposobem, w jaki ludzie (eksperci w danej dziedzinie) rozwiązują zagadnienia i na podstawie pewnych przesłanek dochodzą do konkluzji (wniosków). Typowa budowa systemu ekspertowego została przedstawiona na rysunku 2. Poszczególne bloki odpowiadają za inne funkcje, bloki przedstawione kolorem jasnoszarym prezentują właściwą część systemu ekspertowego: • Baza wiedzy - stanowi bazę faktów, jaką dysponuje system. Baza ta budowana jest na podstawie danych pozyskanych od ekspertów dziedzinowych, a przekazuje ją do systemu inżynier wiedzy. • Blok rozumowania (mechanizm wnioskowania) jest to najważniejszy składnik systemu ekspertowego, jego zadaniem jest wyciąganie wniosków z przesłanek i pytań wprowadzanych przez użytkownika i generowanie odpowiedzi. • Mechanizmu wyjaśniający - umożliwia wyjaśnienie, na życzenie użytkownika, dlaczego system udzielił takiej, a nie innej odpowiedzi, albo dlaczego system zadał użytkownikowi określone pytanie. Ekstrakcją wiedzy od ekspertów zajmują się na ogół inżynierowie wiedzy. Jest to zwykle długi i żmudny proces, ponieważ wiedza stosowana przez ludzkich ekspertów jest zwykle wiedzą praktyczną i intuicyjną. Rysunek 2: Reprezentacja ideowa systemu ekspertowego 2 METODY SZTUCZNEJ INTELIGENCJI 7 Początkowo systemy ekspertowe były podatne na problemy związane z akwizycją (pozyskiwaniem wiedzy) i wnioskowaniem z niepewnością. W gruncie rzeczy problem transferu wiedzy ludzkiej do systemu ekspertowego jest kluczowy i nazywany jest w literaturze ”‘wąskim gardłem akwizycji wiedzy”’ (knowledge acquisition bottleneck ) [Giarratano98]. Jest to oczywiste o ile zrozumie się jak ciężkim i długim procesem jest przekazanie posiadanej przez eksperta wiedzy. Często wiedza ta jest rutynowa, bądź też intuicyjna, a sam ekspert nie zdaje sobie sprawy z jej posiadania. Drugim problemem systemów ekspertowych jest przekazywanie wiedzy nieścisłej, niepełnej i przybliżonej. Systemy ekspertowe wykorzystywane są m.in. w zagadnieniach: • diagnozowania, • przewidywania, • interpretacji, • planowania, • kontroli. 2.2.2 Sieci neuronowe Idea sieci neuronowych zainspirowana została modelem funkcjonowania mózgu człowieka. Sieć neuronowa składa się z neuronów oraz połączeń miedzyneronowych (rysunek 3). Sieć uczy się zależności, które występują między danymi, można powiedzieć, że sama ekstrahuje reguły, które w systemie ekspertowym trzeba było przekazać ręcznie. Informacje na temat tych właśnie reguł kodowane są w połączeniach miedzyneuronowych, a dokładniej w wagach wejść każdego neuronu. W odróżnieniu od systemu ekspertowego, typowa sieć neuronowa pracuje na danych numerycznych, a nie symbolicznych. Problemem staje się proces wyjaśnienia, dlaczego sieć odpowiedziała tak a nie inaczej. Wiedza nie jest zapisana w czytelny dla człowieka sposób. Można powiedzieć, że sieć działa i generuje odpowiedzi, ale tak naprawdę nie wiemy, dlaczego takie a nie inne. Jest to bardzo poważne ograniczenie, ponieważ czasami musimy wiedzieć, na jakiej podstawie została podjęta pewna decyzja. Dużą zaletą sieci neuronowych jest fakt automatycznego wydobywania wiedzy z przykładów uczących (tutaj pojawia się problem doboru odpowiednich przykładów uczących i testujących). Oprócz sieci neuronowych uczonych z nauczycielem istnieją również sieci, które uczą się bez nadzoru (rysunek 3). Wynikiem ich nauki jest rozpoznanie zależności, jakie występują miedzy danymi. Sieci takie potrafią wyróżniać klastry danych (grupy danych pod jakimś względem do siebie podobnych). Sieci neuronowe wykorzystywane są m.in. do: • rozpoznawania obiektów, • kompresji danych, 2 METODY SZTUCZNEJ INTELIGENCJI 8 • analizy serii danych i przewidywania, • detekcji anormalnych stanów pracy systemu, • analizy oraz klasteryzacji danych, • wizualizacji danych - wielowymiarowych zbiorów danych. Rysunek 3: Model neuronu oraz sieci neuronowej Rysunek 4: Przykład klasteryzacji danych 2.2.3 Algorytmy genetyczne Algorytmy genetyczne zainspirowane zostały obserwacją procesu ewolucji żywych organizmów. Koncepcja ta przeniesiona została przez Johna H. Holland’a 2 METODY SZTUCZNEJ INTELIGENCJI 9 w świat komputerów. Wystarczy założyć, że pewnym środowiskiem jest dziedzina problemu, jaki chcemy rozwiązać. Kodujemy teraz potencjalne początkowe rozwiązania jako osobniki naszej populacji. Następnie uruchamiamy proces ewolucji, w którym osobniki słabiej przystosowane eliminujemy (proces selekcji), a osobniki lepsze poddajemy procesowi krzyżowania. Skrzyżowany osobnik posiada część informacji przekazanej przez swoich rodziców (potencjalnie dobre rozwiązania). Z czasem osobniki będą coraz lepiej przystosowane do danego środowiska, czyli w naszym przypadku będą to coraz lepsze rozwiązania z przestrzeni zadania. Najczęściej działanie algorytmu przebiega następująco: 1. Losowana jest pewna populacja początkowa. 2. Populacja poddawana jest ocenie (selekcja). Najlepiej przystosowane osobniki biorą udział w procesie reprodukcji. 3. Genotypy najlepszych osobników są ze sobą kojarzone poprzez złączanie genotypów rodziców (krzyżowanie). 4. Przeprowadzana jest mutacja, czyli wprowadzenie drobnych losowych zmian. 5. Rodzi się drugie pokolenie i algorytm powraca do kroku drugiego, jeżeli nie znaleziono dostatecznie dobrego rozwiązania. W przeciwnym wypadku uzyskujemy wynik. Rysunek 5: Schemat procesu działania algorytmu genetycznego Algorytmy genetyczne stosowane są m.in. do: • harmonogramowania, 2 METODY SZTUCZNEJ INTELIGENCJI 10 • optymalizacji ułożenia elementów w układach cyfrowych, • znajdowanie optymalnych wartości parametrów, • optymalizacja długości drogi. 2.2.4 Logika rozmyta Logika rozmyta (fuzzy logic)2 , jedna z logik wielowartościowych (multi-valued logic), stanowi uogólnienie klasycznej dwuwartościowej logiki. Została zaproponowana przez Lotfi Zadeha w 1965 roku. W logice rozmytej między stanem 0 (fałsz) a stanem 1 (prawda) rozciąga się szereg wartości pośrednich (rysunek 6), które można kojarzyć z prawdopodobieństwem. Logika rozmyta okazała się bardzo przydatna w zastosowaniach inżynierskich, czyli tam, gdzie klasyczna logika klasyfikująca jedynie według kryterium prawda/fałsz nie potrafi skutecznie poradzić sobie z wieloma niejednoznacznościami i sprzecznościami. Logika rozmyta wykorzystywana jest m.in. w: • elektronicznych systemach sterowania (maszynami, pojazdami i automatami), • zadaniach eksploracji danych, • budowie systemów ekspertowych Rysunek 6: Przykładowa reprezentacja zbiorów za pomocą logiki rozmytej 2.3 Ocena użyteczności poszczególnych rozwiązań W poprzednim podpunkcie zostało przedstawione kilka najważniejszych metod sztucznej inteligencji. Został przedstawiony ich sposób działania oraz przykładowe zastosowania. Zwrócona została również uwaga na pewne mocne i słabe strony każdego z rozwiązań. 2 Definicja zaczerpnięta z Wikipedii, wolnej encyklopedii internetowej. 2 METODY SZTUCZNEJ INTELIGENCJI 11 Przyjrzyjmy się najważniejszym ograniczenią każdej z prezentowanych wcześniej metod: • Sieci neuronowe - brak wyjaśnień • Sieci samoorganizujące - brak możliwości rozwiązywania zadań • Systemy ekspertowe - nie są wystarczająco elastyczne • Algorytmy genetyczne - czasami nie da się zastosować, ze względu na kłopot z kodowaniem osobników, specyficzną dziedzinę problemu lub też inne specyficzne czynniki. • Systemy rozmyte - są rozmyte. . . Właściwości poszczególnych rozwiązań zostały przedstawione na rysunku 7. Oś pionowa demonstruje zdolność adaptacji metody do zmieniających się warunków pracy (w stosunku do założonych warunków początkowych), oś pozioma demonstruje przejście pomiędzy poziomem operacji na liczbach do operacji na wiedzy formalnej. Rysunek 7: Właściwości różnych metod sztucznej inteligencji 3 SYSTEMY HYBRYDOWE 12 3 3.1 Systemy hybrydowe Cele systemu hybrydowego Projektując inteligentny system informatyczny musimy zadać sobie pytanie, jaki jest cel jego pracy oraz na jakim rodzaju danych system będzie on pracował. Wcześniej wspomniany był problem akwizycji wiedzy w kontekście jej niepewności, sprzeczności itp. Przyjrzyjmy się jednak, z jakim rodzajami wiedzy mamy my, na co dzień do czynienia: • Film rozpocznie się o 8:15. [Dokładna] • Film rozpocznie się między 8:00 a 9:00. [Nieprecyzyjna] • Sądzę, że film rozpocznie się o 8:00, ale nie jestem pewien. [Niepewna] • Film rozpocznie się około 8:00. [Przybliżona] • Możliwe, że film rozpocznie się o 8:00. [Możliwa] • Prawdopodobnie film rozpocznie się o 8:00 (90 %). [Prawdopodobna] • Marek mówi, że film rozpocznie się o 8:00, ale Kasia mówi, że o 9:00. [Niespójna] • Nie wiem dokładnie, o której rozpocznie się film, ale zazwyczaj zaczyna się o 9:00. [Niekompletna] • Naprawdę nie wiem, o której zaczyna się film. [Nieznana] • Jestem pewien, że film nie zaczyna się z rana. [Negacja] • Film zaczyna się 2 godziny, po poprzedniej sesji. [Względna] • Film jest grany dzisiaj o 8:00 oraz jutro o 10:00. [Alternatywna] • Film zaczyna się o 8:00, 10:00 oraz 12:00. [Opcjonalna] • Film może się rozpocząć tylko pod warunkiem, że reżyser przyjedzie. [Asocjacyjna] • W następnym miesiącu. [Temporalna] Wiedza ludzka jest często trudna do wyrażenia w formacie, na jakim zazwyczaj operują komputery. Typowym jest fakt, że nie potrafimy sformułować naszej wiedzy w specyficznym języku (formie) jej reprezentacji. Ludzie rozwiązują problemy oraz operują na posiadanej wiedzy za pomocą następujących mechanizmów: • wnioskowanie, • analogia, 3 SYSTEMY HYBRYDOWE 13 • dedukcja, • bazowanie na wcześniejszych doświadczeniach. Naturalna inteligencja bazuje na wielu ”hybrydowych” sposobach jej reprezentacji i manipulacji. Podobnie celem stosowania systemów hybrydowych w dziedzinie sztucznej inteligencji jest: • wykorzystanie całej dostępnej wiedzy na temat specyficznego problemu, • możliwości skorzystania z wielu typów informacji (symbolicznej, numerycznej, nieścisłej, nieprecyzyjnej), • zaoferowanie wielu różnych schematów rozumowania i bardziej trafnego wyszukiwania odpowiedzi na zadawane pytania, • zwiększenia ogólnej efektywności systemu i eliminacja ujemnych stron pojedynczych metod, • stworzenie wydajnych i potężnych systemów rozumowania. Aby osiągnąć te cele konstruuje się systemy hybrydowe w skład, których mogą wchodzić metody przedstawione na rysunku 8 Rysunek 8: Możliwe elementy systemu hybrydowego 3 SYSTEMY HYBRYDOWE 14 3.2 Architektury budowy systemów hybrydowych Architektury systemów hybrydowych mogą być sklasyfikowane według stopnia integracji i sposobu integracji. Stopień integracji jest kryterium do mierzenia stopnia integracji pomiędzy dwoma modułami systemu hybrydowego. 3.2.1 Systemy niezależne Niezależne systemy hybrydowe charakteryzują się tym, że pomiędzy poszczególnymi modułami systemu nie istnieje żadna komunikacja (rysunek 9). Każdy moduł, nie korzysta w żaden sposób z wyników pracy innego modułu. Podejścia tego typu ma tą dobrą zaletę, że daje się zrównoleglić w bardzo dużym stopniu. Niezależność dwóch pracujących systemów może służyć również badaniu efektywności obu rozwiązań. Model ten może być również przyjęty w przypadku prototypowania systemu. Rysunek 9: Model systemu niezależnego 3.2.2 Systemy transformujące System hybrydowy bazujący na modelu transformującym działa na takiej zasadzie, że wyniki pracy jednego modułu systemu są transformowane do innego modułu (np. jako dane wejściowe). Rozwiązanie takie nadaje się bardzo dobrze w przypadkach, kiedy przed przekazaniem danych do głównego modułu systemu występuje potrzeba ich wcześniejszej transformacji lub obróbki (pre-processing danych). Rysunek 10: Model systemu transformującego 3 SYSTEMY HYBRYDOWE 15 3.2.3 Systemy luźno związane W systemach hybrydowych o luźno powiązanej architekturze (rysunek 11) występuje już zjawisko komunikacji pomiędzy modułami. Najczęściej jako medium wymiany danych używane są pliki, w których jeden proces zapisuje wyniki danych inny odczytuje, po czym może nastąpić zamiana. Ważne jest, że komunikacja w tym modelu jest dwustronna. Zaletami takiej architektury jest prostota implementacji, przez co nadają się znakomicie do prototypowania pewnych rozwiązań. Dodatkowa zaleta może być fakt, że taka architektura pozwala na korzystanie z modułów zewnętrznych dostarczonych przez inne osoby lub firmy. Prostota tego rozwiązania okupiona jest niestety wysokim kosztem komunikacji (odczytu. zapisu na dysku, ewentualnego parsowania danych). Rysunek 11: Model systemu luźno powiązanego 3.2.4 Systemy zintegorwane W systemach hybrydowych zintegrowanych przesyłanie informacji pomiędzy modułami odbywa się w pamięci operacyjnej komputera(rysunek 12). Aby możliwe było wykorzystanie tej architektury w systemie hybrydowym, każdy moduł musi zostać zaprojektowany tak, aby umożliwiał komunikację z częściami systemu. Systemy takie są najczęściej dedykowanymi rozwiązaniami, które są projektowane w celu rozwiązanie konkretnego problemu. Ponieważ komunikacja procesów następuje poprzez współdzieloną pamięć operacyjną, zrównoleglenie obliczeń jest czynnością dużo bardziej skomplikowaną niż w przypadku wcześniejszych rozwiązań. Zaleta wykorzystania tej architektury jest mały koszt związany z komunikacją. W rozwiązaniu tym wykorzystuje się również ideę tablicy (blackboard ), jest to ogólnodostępny obszar pamięci, w którym wykonujące się moduły zapisują wyniki swojej pracy, tak aby wszyscy inni mogli z nich natychmiast skorzystać. 3.2.5 Systemy w pełni zintegrowane W architekturze w pełni zintegrowanego systemu hybrydowego moduły dzielą między sobą zarówno wiedzę jak również struktury danych (rysunek 13). Zdecydowanie się na tą architekturę powoduje bardzo mocne powiązanie każdego modułu z resztą systemu, jednak zaletą jest usunięcie zbytecznej redundancji 3 SYSTEMY HYBRYDOWE 16 Rysunek 12: Model systemu zintegrowanego elementów. Możliwe jest również pełne kontrolowanie jednego modułu przez inny (np. algorytm genetyczny kierujący pracą innego algorytmu genetycznego), co powoduje większe możliwości rozwiązywania problemów. Niewątpliwą wadą takich systemów jest to, że są to rozwiązania ściśle dedykowane pod dany typ problemu i istnieją małe szanse ponownego wykorzystania elementów systemu w innych projektach. Kłopotliwe może być również zapewnienie dostatecznego poziomu równoległości, ze względu na dużą ilość zależności i powiązań międzymodułowych. Rysunek 13: Model systemu w pełni zintegrowanego 3.3 Modele pracy systemu hybrydowego Istnieje kilka modeli pracy modułów systemu hybrydowego. Zostały one przedstawione na rysunku 14. Opis sposobów integracji modułów: • Przetwarzanie łańcuchowe - moduł przetwarzania symbolicznego (np. system ekspertowy), odgrywa rolę głównego procesu systemu. Jego praca może być wspierana przez prace przez pre - procesor oraz post-procesor będący np. siecią neuronową. Możliwa jest również konfiguracja odwrotna. • Meta przetwarzanie - jeden moduł odgrywa rolę głównego procesu rozwiązującego problem inne natomiast pracują w meta - warstwie pełniąc role np. dozorcy, kontrolera wydajności, detektora błędów, w stosunku do procesu w niższej warstwie. • Przetwarzanie wewnętrzne - jeden lub więcej modułów jest osadzonych (wbudowanych) w innych. Praca elementów osadzonych jest koordy- 3 SYSTEMY HYBRYDOWE 17 nowana przez proces główny. • Przetwarzanie wspólne - oba moduły są równorzędnymi partnerami podczas rozwiązywania problemu. Każdy proces może działać bezpośrednio na środowisku, w którym pracują, oraz każdy może transmitować oraz obierać informacje od drugiego. Rysunek 14: Model przetwarzania w systemach hybrydowych 3.4 Przykładowy system hybrydowy Tradycyjne systemy ekspertowe podczas swojej pracy manipulują symbolami. Zaletami tego podejścia jest zdolność do zrozumiałej reprezentacji posiadanej wiedzy. Z drugiej zaś strony istnieją sieci neuronowe, w których wiedza zakodowana jest w postaci wag połączeń miedzyneuronowych. Wiedza ta nie jest łatwa do zinterpretowania i zanalizowania. Sieci neuronowe można traktować jak czarne pudełka, które działają, ale ciężko powiedzieć dlaczego i czy na pewno poprawnie. Jednakże sztuczne sieci neuronowe są bardzo potężnym narzędziem używanym do wydobywania (akwizycji) wiedzy z istniejących danych oraz do jej generalizacji. Sieci neuronowe z łatwością radzą sobie z informacją nieścisłą czy niepewną, która dla systemów ekspertowych stanowi poważny problem. Podczas, gdy tradycyjne systemy ekspertowe zostały zaprojektowane do przechowywania wiedzy w postaci reguł (uzyskiwanej od ludzi i przez nich rozumianej), systemy takie jak sieci neuronowe są używane do nauki i generalizowania wiedzy zawartej w praktycznych przypadkach. Połączenie tych dwóch podejść (systemów ekspertowych z sieciami neuronowymi), pozwoliło wykorzystać te dwa komplementarne podejścia w celu zwiększenia efektywności całego 3 SYSTEMY HYBRYDOWE 18 Rysunek 15: Model ideowy połączenia Systemu ekspertowego z siecią neuronową systemu. Wydobycie dodatkowych danych, wcześniej nieosiągalnych pozwoliło podnieść ogólną skuteczność wnioskowania, przy jednoczesnym zachowaniu możliwości objaśniających. Model ideowy takiego systemu ekspertowego został przedstawiony na rysunku 15. 3.5 Kierunki rozwoju systemów hybrydowych Aby stwierdzić, w jakim kierunku zmierza rozwój systemów hybrydowych, należałoby się przyjrzeć, jakie rozwiązania stosuje się przy konstruowania nowoczesnych systemów sztucznej inteligencji. Niestety informacje te są albo trudno osiągalne, albo wręcz chronione i stanowią tak zwane Know-How firm. Inną metodą jest porównanie liczby publikacji, jakie ukazują się na świecie z dziedziny systemów hybrydowych. Ilość publikacji na temat różnych rozwiązań świadczyć może zarówno o jego stopniu przydatności jak i o kierunku i potencjalnych przyszłych rozwiązań. Na rysunku 16, można zauważyć, że największa liczba publikacji dotyczy połączenia systemów ekspertowych z sieciami neuronowymi. W następnej kolejności publikowane są artykuły na temat systemów ekspertowych i logiki rozmytej, sieci neuronowej i logiki rozmytej. Najmniejszym zainteresowaniem cieszą się systemy hybrydowe próbujące wykorzystać zalety systemów ekspertowych i algorytmów genetycznych oraz systemy złożone z wielu modułów, to ostatnie podejrzewać można wiąże się z faktem bardzo dużego skomplikowania takich systemów. Nowe kierunki rozwoju systemów hybrydowych, poza badaniem skuteczności różnych połączeń poszczególnych modułów, prowadzą do stworzenia ujednoliconej architektury systemów hybrydowych oraz do standardowych modeli komunikacji. Powstał specjalny język służący komunikacji pracujących w systemie modułów - CHARON. Kolejnym krokiem jest koncepcja systemu wieloagentowego. Na system wie- 3 SYSTEMY HYBRYDOWE 19 Rysunek 16: Ilość prac naukowych na temat systemów hybrydowych loagentowy składają się agenci (niezależne jednostki), egzystujące i wchodzące w interakcje ze środowiskiem, w którym przebywają. Model agenta przedstawiony jest na rysunku 17. Obecnie implementacja systemów hybrydowych odbywa się na klasycznym ogólnodostępnym sprzęcie komputerowym. Kolejnym krokiem na drodze rozwoju systemów hybrydowych jest stworzenie dedykowanych architektur sprzętu (np. jak sterowniki rozmyte czasu rzeczywistego). Rysunek 17: Model agenta w systemie wieloagentowym LITERATURA 20 Literatura [1] Michał Białko Podstawowe własności sieci neuronowych i hybrydowych systemów eksperowych. Wydawnictwo Uczelniane Politechniki Koszalińskiej, 2000 [2] Hybrid Intelligent Systems - niebieska książka zalana kawą ;-) [3] Giarratano, Joseph and Riley, Gary. Expert Systems: Principles and Programming. 3rd Edition. PWS Publishing, Boston, MA. 1998. [4] Fernando Osorio Hybrid Systems. P.R.I.S - N.U.S. Singapore, April 2001 [5] Athanosios Tsakonas, George Dounias Hybrid Computational Intelligence Shemes in Complex Domains: An extended review [6] Rajeev Alur, Radu Grosu, Yerang Hur, Vijay Kumar, and Insup Lee Modular Specification of Hybrid Systems in Charon URL: http://www.cis.upenn.edu/ alur,grosu,yehur,kumar,lee [7] L´szló Monostori, József Horny´k, Csaba Egresits, Zsolt J´nos Viharos a a a SOFT COMPUTING AND HYBRID AI APPROACHES TO INTELLIGENT MANUFACTURING ieaaie, 1998

Monday, January 19, 2009

Negocjacje - Techniki, Strategie

Odnalazłem w swoich archiwach dokument, który pisałem jeszcze na początku studiów (więc już dość dawno temu), niemniej jednak myślę że temat jest na tyle ciekawy, że warto udostępnić ten tekst szerszemu gronu odbiorców. Życzę miłej lektury.

Negocjacje - dokument w wersji pdf (290kb)

Michal_Stanek-Negocjacje

Friday, January 09, 2009

Ubuntu 8.10 Netbeans 6.5 Segmentation Fault

My Netbeans stop working on Ubuntu. I try to google the solution but the problem is more complicated than I suppose on the beginning. I investigate many things even hardware problems (but on my gentoo netbeans work absolutely fine), even reinstall system couple of times, back to previous version and install 32bit version. Nothing of those things solve this problem. The strange thing, that the segfault is replicated even if I switched the VM to another vendor for example open-jdk. If any of you experience similar problem please leave a comment.




#
# An unexpected error has been detected by Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007ff970beb5af, pid=20424, tid=1117591888
#
# Java VM: Java HotSpot(TM) 64-Bit Server VM (11.0-b16 mixed mode linux-amd64)
# Problematic frame:
# C [libc.so.6+0x315af] catgets+0x1f
#
# An error report file with more information is saved as:
# /home/m/netbeans-6.5/bin/hs_err_pid20424.log
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#
/usr/share/netbeans/6.1/bin/../platform8/lib/nbexec: line 470: 20424 Aborted

"/usr/lib/jvm/jdk1.6.0_11/bin/java" -Djdk.home="/usr/lib/jvm/jdk1.6.0_11"

-Djava.library.path=/usr/lib/jni -classpath "/usr/share/netbeans/6.1/platform8/lib/boot.jar:

/usr/share/netbeans/6.1/platform8/lib/org-openide-modules.jar:/usr/share/netbeans
/6.1/platform8/lib/org-openide-util.jar:/usr/lib/jvm/jdk1.6.0_11/lib/dt.jar:/usr/lib/jvm/jdk1.6.0_11/lib/tools.jar" -Dnetbeans.system_http_proxy="DIRECT"
-Dnetbeans.system_http_non_proxy_hosts="" -Dnetbeans.dirs="/usr/share/netbeans/6.1/nb6.1:/usr/share/netbeans/6.1/ide9:/usr/share/netbeans/6.1/java2:/usr/share/netbeans/6.1/apisupport1:/usr/share/netbeans/6.1/harness:"
-Dnetbeans.home="/usr/share/netbeans/6.1/platform8" '-Dnetbeans.importclass=org.netbeans.upgrade.AutoUpgrade'
'-Dnetbeans.accept_license_class=org.netbeans.license.AcceptLicense' '-Xmx512m' '-client'
'-Xss2m' '-Xms32m' '-XX:PermSize=32m' '-XX:MaxPermSize=200m' '-Xverify:none'
'-Dapple.laf.useScreenMenuBar=true' '-Dsun.java2d.noddraw=true'
org.netbeans.Main --userdir "/home/m/.netbeans/6.1" "--branding" "nb"


java -version
java version "1.6.0_10"
Java(TM) SE Runtime Environment (build 1.6.0_10-b33)
Java HotSpot(TM) 64-Bit Server VM (build 11.0-b15, mixed mode)



m@izmisiek:~/netbeans-6.5/bin$ cat /home/m/netbeans-6.5/bin/hs_err_pid20424.log
#
# An unexpected error has been detected by Java Runtime Environment:
#
# SIGSEGV (0xb) at pc=0x00007ff970beb5af, pid=20424, tid=1117591888
#
# Java VM: Java HotSpot(TM) 64-Bit Server VM (11.0-b16 mixed mode linux-amd64)
# Problematic frame:
# C [libc.so.6+0x315af] catgets+0x1f
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#

--------------- T H R E A D ---------------

Current thread (0x00007ff93d7df800): JavaThread "AWT-EventQueue-0" [_thread_in_native, id=20450, stack(0x00000000427d1000,0x00000000429d2000)]

siginfo:si_signo=SIGSEGV: si_errno=0, si_code=1 (SEGV_MAPERR), si_addr=0x0000000000000008

Registers:
RAX=0x00007ff93f220490, RBX=0x0000000000000001, RCX=0x00007ff93f0f06cd, RDX=0x0000000000000013
RSP=0x00000000429d0008, RBP=0x00007ff93f0f06cd, RSI=0x0000000000000013, RDI=0x0000000000000000
R8 =0x00000000408db350, R9 =0x0000000000000000, R10=0x00000000429cfda0, R11=0x00007ff970beb590
R12=0x0000000000000113, R13=0x00000000408db350, R14=0x000000000000000f, R15=0x00000000429d0520
RIP=0x00007ff970beb5af, EFL=0x0000000000010202, CSGSFS=0x0000000000000033, ERR=0x0000000000000004
TRAPNO=0x000000000000000e

Top of Stack: (sp=0x00000000429d0008)
0x00000000429d0008: 00000000408d4280 00000000429d0040
0x00000000429d0018: 00007ff93f04dc36 00000000408db350
0x00000000429d0028: 00007ff93813eae0 00007ff93813eae0
0x00000000429d0038: 00007ff93d7e1aa0 00000000429d0090
0x00000000429d0048: 00007ff93f04e855 0000000000a2e701
0x00000000429d0058: 0000000000000115 000000000001a9a0
0x00000000429d0068: 00000000408db350 00007ff93ef09590
0x00000000429d0078: 0000000000000113 0000000000000115
0x00000000429d0088: 00007ff93d7e1aa0 00007ff93d7df9c0
0x00000000429d0098: 00007ff93ef0969e 00007ff93f20e1f0
0x00000000429d00a8: 00000000429d0130 00000000408d4280
0x00000000429d00b8: 00007ff93ef0a363 00000000429d00e0
0x00000000429d00c8: 00007ff970444c37 0000000000000000
0x00000000429d00d8: 00007ff93814a4a0 00007ff93814a4a0
0x00000000429d00e8: 00000000705ad0c6 00000000408db350
0x00000000429d00f8: 0001000000000000 00007ff93d7e0a20
0x00000000429d0108: 00007ff93d7a7b50 00007ff93ea77120
0x00000000429d0118: 0000000000000000 00000000429d0510
0x00000000429d0128: 0000000000000000 00007ff93e86a192
0x00000000429d0138: 0000000000000000 00007ff93e86a218
0x00000000429d0148: 0000000000000000 00007ff93e86a168
0x00000000429d0158: 00007ff9381422f0 00007ff93e86973a
0x00000000429d0168: 0000000000000020 00007ff93e869743
0x00000000429d0178: 0000000000000018 00007ff93e869865
0x00000000429d0188: 0000000000000000 00007ff93e869a15
0x00000000429d0198: 0000000000000000 00007ff93e869a17
0x00000000429d01a8: 0000000000000000 00007ff93e869a08
0x00000000429d01b8: 0000000000000000 00007ff93e86978a
0x00000000429d01c8: 0000000000000000 00007ff93f0dcb0b
0x00000000429d01d8: 00007ff93d7e18c0 00007ff93f0dcb27
0x00000000429d01e8: 00007ff93d7e1990 00007ff93f0dcb35
0x00000000429d01f8: 00007ff93d7e1a60 00007ff93f0de23f

Instructions: (pc=0x00007ff970beb5af)
0x00007ff970beb59f: 00 00 83 c6 01 85 f6 7e 76 85 d2 78 72 0f af d6
0x00007ff970beb5af: 4c 8b 47 08 48 8b 4f 18 48 63 d2 4f 8d 1c 40 48

Stack: [0x00000000427d1000,0x00000000429d2000], sp=0x00000000429d0008, free space=2044k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C [libc.so.6+0x315af] catgets+0x1f

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j sun.awt.motif.MWindowPeer.pCreate(Lsun/awt/motif/MComponentPeer;Ljava/lang/String;)V+0
j sun.awt.motif.MWindowPeer.create(Lsun/awt/motif/MComponentPeer;)V+12
j sun.awt.motif.MComponentPeer.init(Ljava/awt/Component;)V+31
j sun.awt.motif.MWindowPeer.init(Ljava/awt/Window;)V+102
j sun.awt.motif.MFramePeer.(Ljava/awt/Frame;)V+159
j sun.awt.motif.MToolkit.createFrame(Ljava/awt/Frame;)Ljava/awt/peer/FramePeer;+5
j java.awt.Frame.addNotify()V+20
j java.awt.Window.pack()V+28
j org.netbeans.core.startup.Splash.center(Ljava/awt/Window;)V+1
j org.netbeans.core.startup.Splash$SplashRunner.run()V+11
j java.awt.event.InvocationEvent.dispatch()V+47
j java.awt.EventQueue.dispatchEvent(Ljava/awt/AWTEvent;)V+26
j java.awt.EventDispatchThread.pumpOneEventForFilters(I)Z+204
j java.awt.EventDispatchThread.pumpEventsForFilter(ILjava/awt/Conditional;Ljava/awt/EventFilter;)V+30
j java.awt.EventDispatchThread.pumpEventsForHierarchy(ILjava/awt/Conditional;Ljava/awt/Component;)V+11
j java.awt.EventDispatchThread.pumpEvents(ILjava/awt/Conditional;)V+4
j java.awt.EventDispatchThread.pumpEvents(Ljava/awt/Conditional;)V+3
j java.awt.EventDispatchThread.run()V+9
v ~StubRoutines::call_stub

--------------- P R O C E S S ---------------

Java Threads: ( => current thread )
=>0x00007ff93d7df800 JavaThread "AWT-EventQueue-0" [_thread_in_native, id=20450, stack(0x00000000427d1000,0x00000000429d2000)]
0x00007ff93d7ba400 JavaThread "AWT-Motif" daemon [_thread_blocked, id=20449, stack(0x00000000425d0000,0x00000000427d1000)]
0x00007ff93d7b5c00 JavaThread "AWT-Shutdown" [_thread_blocked, id=20448, stack(0x00000000423cf000,0x00000000425d0000)]
0x00007ff938150c00 JavaThread "Java2D Disposer" daemon [_thread_blocked, id=20447, stack(0x00000000421ce000,0x00000000423cf000)]
0x0000000040868000 JavaThread "Timer-0" daemon [_thread_blocked, id=20446, stack(0x00000000402f0000,0x00000000404f1000)]
0x00000000408da000 JavaThread "main" [_thread_in_vm_trans, id=20445, stack(0x0000000041fcd000,0x00000000421ce000)]
0x0000000040948400 JavaThread "Active Reference Queue Daemon" daemon [_thread_blocked, id=20436, stack(0x0000000040d23000,0x0000000040f24000)]
0x000000004084ec00 JavaThread "Low Memory Detector" daemon [_thread_blocked, id=20434, stack(0x000000004181d000,0x0000000041a1e000)]
0x000000004084c000 JavaThread "CompilerThread1" daemon [_thread_blocked, id=20433, stack(0x000000004171c000,0x000000004181d000)]
0x0000000040848400 JavaThread "CompilerThread0" daemon [_thread_in_native, id=20432, stack(0x00000000414ec000,0x00000000415ed000)]
0x0000000040846400 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=20431, stack(0x00000000412eb000,0x00000000414ec000)]
0x0000000040827400 JavaThread "Finalizer" daemon [_thread_blocked, id=20430, stack(0x0000000041ccb000,0x0000000041ecc000)]
0x0000000040820000 JavaThread "Reference Handler" daemon [_thread_blocked, id=20429, stack(0x0000000041aca000,0x0000000041ccb000)]
0x0000000040799c00 JavaThread "main" [_thread_blocked, id=20425, stack(0x0000000040b22000,0x0000000040d23000)]

Other Threads:
0x000000004081a800 VMThread [stack: 0x000000004161b000,0x000000004171c000] [id=20428]
0x0000000040851000 WatcherThread [stack: 0x0000000041ecc000,0x0000000041fcd000] [id=20435]

VM state:not at safepoint (normal execution)

VM Mutex/Monitor currently owned by a thread: None

Heap
PSYoungGen total 9536K, used 5956K [0x00007ff9616d0000, 0x00007ff962170000, 0x00007ff96c170000)
eden space 8192K, 72% used [0x00007ff9616d0000,0x00007ff961ca13e0,0x00007ff961ed0000)
from space 1344K, 0% used [0x00007ff962020000,0x00007ff962020000,0x00007ff962170000)
to space 1344K, 0% used [0x00007ff961ed0000,0x00007ff961ed0000,0x00007ff962020000)
PSOldGen total 21888K, used 0K [0x00007ff94c170000, 0x00007ff94d6d0000, 0x00007ff9616d0000)
object space 21888K, 0% used [0x00007ff94c170000,0x00007ff94c170000,0x00007ff94d6d0000)
PSPermGen total 32768K, used 10263K [0x00007ff93f970000, 0x00007ff941970000, 0x00007ff94c170000)
object space 32768K, 31% used [0x00007ff93f970000,0x00007ff940375d30,0x00007ff941970000)

Dynamic libraries:
40000000-40009000 r-xp 00000000 08:01 168553 /usr/lib/jvm/jdk1.6.0_11/bin/java
40108000-4010a000 rwxp 00008000 08:01 168553 /usr/lib/jvm/jdk1.6.0_11/bin/java
402f0000-402f3000 ---p 402f0000 00:00 0
402f3000-404f1000 rwxp 402f3000 00:00 0
40791000-40b0e000 rwxp 40791000 00:00 0 [heap]
40b22000-40b25000 ---p 40b22000 00:00 0
40b25000-40d23000 rwxp 40b25000 00:00 0
40d23000-40d26000 ---p 40d23000 00:00 0
40d26000-40f24000 rwxp 40d26000 00:00 0
410e9000-410ea000 ---p 410e9000 00:00 0
410ea000-411ea000 rwxp 410ea000 00:00 0
411ea000-411eb000 ---p 411ea000 00:00 0
411eb000-412eb000 rwxp 411eb000 00:00 0
412eb000-412ee000 ---p 412eb000 00:00 0
412ee000-414ec000 rwxp 412ee000 00:00 0
414ec000-414ef000 ---p 414ec000 00:00 0
414ef000-415ed000 rwxp 414ef000 00:00 0
4161b000-4161c000 ---p 4161b000 00:00 0
4161c000-4171c000 rwxp 4161c000 00:00 0
4171c000-4171f000 ---p 4171c000 00:00 0
4171f000-4181d000 rwxp 4171f000 00:00 0
4181d000-41820000 ---p 4181d000 00:00 0
41820000-41a1e000 rwxp 41820000 00:00 0
41aca000-41acd000 ---p 41aca000 00:00 0
41acd000-41ccb000 rwxp 41acd000 00:00 0
41ccb000-41cce000 ---p 41ccb000 00:00 0
41cce000-41ecc000 rwxp 41cce000 00:00 0
41ecc000-41ecd000 ---p 41ecc000 00:00 0
41ecd000-41fcd000 rwxp 41ecd000 00:00 0
41fcd000-41fd0000 ---p 41fcd000 00:00 0
41fd0000-421ce000 rwxp 41fd0000 00:00 0
421ce000-421d1000 ---p 421ce000 00:00 0
421d1000-423cf000 rwxp 421d1000 00:00 0
423cf000-423d2000 ---p 423cf000 00:00 0
423d2000-425d0000 rwxp 423d2000 00:00 0
425d0000-425d3000 ---p 425d0000 00:00 0
425d3000-427d1000 rwxp 425d3000 00:00 0
427d1000-427d4000 ---p 427d1000 00:00 0
427d4000-429d2000 rwxp 427d4000 00:00 0
7ff938000000-7ff9381f2000 rwxp 7ff938000000 00:00 0
7ff9381f2000-7ff93c000000 ---p 7ff9381f2000 00:00 0
7ff93cbb6000-7ff93cbbb000 r-xp 00000000 08:01 8936 /usr/lib/libXfixes.so.3.1.0
7ff93cbbb000-7ff93cdba000 ---p 00005000 08:01 8936 /usr/lib/libXfixes.so.3.1.0
7ff93cdba000-7ff93cdbb000 rwxp 00004000 08:01 8936 /usr/lib/libXfixes.so.3.1.0
7ff93cdbb000-7ff93cdc4000 r-xp 00000000 08:01 8956 /usr/lib/libXrender.so.1.3.0
7ff93cdc4000-7ff93cfc3000 ---p 00009000 08:01 8956 /usr/lib/libXrender.so.1.3.0
7ff93cfc3000-7ff93cfc4000 r-xp 00008000 08:01 8956 /usr/lib/libXrender.so.1.3.0
7ff93cfc4000-7ff93cfc5000 rwxp 00009000 08:01 8956 /usr/lib/libXrender.so.1.3.0
7ff93cfc5000-7ff93cfce000 r-xp 00000000 08:01 8926 /usr/lib/libXcursor.so.1.0.2
7ff93cfce000-7ff93d1ce000 ---p 00009000 08:01 8926 /usr/lib/libXcursor.so.1.0.2
7ff93d1ce000-7ff93d1cf000 rwxp 00009000 08:01 8926 /usr/lib/libXcursor.so.1.0.2
7ff93d1cf000-7ff93d1d6000 r-xp 00000000 08:01 169087 /usr/lib/jvm/jdk1.6.0_11/jre/lib/amd64/libnio.so
7ff93d1d6000-7ff93d2d5000 ---p 00007000 08:01 169087 /usr/lib/jvm/jdk1.6.0_11/jre/lib/amd64/libnio.so
7ff93d2d5000-7ff93d2d7000 rwxp 00006000 08:01 169087 /usr/lib/jvm/jdk1.6.0_11/jre/lib/amd64/libnio.so
7ff93d2d7000-7ff93d2ea000 r-xp 00000000 08:01 169086 /usr/lib/jvm/jdk1.6.0_11/jre/lib/amd64/libnet.so
7ff93d2ea000-7ff93d3eb000 ---p 00013000 08:01 169086 /usr/lib/jvm/jdk1.6.0_11/jre/lib/amd64/libnet.so
7ff93d3eb000-7ff93d3ee000 rwxp 00014000 08:01 169086 /usr/lib/jvm/jdk1.6.0_11/jre/lib/amd64/libnet.so
7ff93d3ee000-7ff93d46c000 r-xp 00000000 08:01 169095 /usr/lib/jvm/jdk1.6.0_11/jre/lib/amd64/libfontmanager.so
7ff93d46c000-7ff93d56e000 ---p 0007e000 08:01 169095 /usr/lib/jvm/jdk1.6.0_11/jre/lib/amd64/libfontmanager.so
7ff93d56e000-7ff93d584000 rwxp 00080000 08:01 169095 /usr/lib/jvm/jdk1.6.0_11/jre/lib/amd64/libfontmanager.so
7ff93d584000-7ff93d595000 rwxp 7ff93d584000 00:00 0
7ff93d595000-7ff93d59a000 r-xp 00000000 08:01 8930 /usr/lib/libXdmcp.so.6.0.0
7ff93d59a000-7ff93d799000 ---p 00005000 08:01 8930 /usr/lib/libXdmcp.so.6.0.0
7ff93d799000-7ff93d79a000 rwxp 00004000 08:01 8930 /usr/lib/libXdmcp.so.6.0.0
7ff93d79a000-7ff93d89a000 rwxp 7ff93d79a000 00:00 0
7ff93d8c0000-7ff93d8db000 r-xp 00000000 08:01 9863 /usr/lib/libxcb.so.1.0.0
7ff93d8db000-7ff93dada000 ---p 0001b000 08:01 9863 /usr/lib/libxcb.so.1.0.0
7ff93dada000-7ff93dadb000 r-xp 0001a000 08:01 9863 /usr/lib/libxcb.so.1.0.0
7ff93dadb000-7ff93dadc000 rwxp 0001b000 08:01 9863 /usr/lib/libxcb.so.1.0.0
7ff93dadc000-7ff93dadd000 r-xp 00000000 08:01 9861 /usr/lib/libxcb-xlib.so.0.0.0
7ff93dadd000-7ff93dcdc000 ---p 00001000 08:01 9861 /usr/lib/libxcb-xlib.so.0.0.0
7ff93dcdc000-7ff93dcdd000 r-xp 00000000 08:01 9861 /usr/lib/libxcb-xlib.so.0.0.0
7ff93dcdd000-7ff93dcde000 rwxp 00001000 08:01 9861 /usr/lib/libxcb-xlib.so.0.0.0
7ff93dcde000-7ff93dcf5000 r-xp 00000000 08:01 8878 /usr/lib/libICE.so.6.3.0
7ff93dcf5000-7ff93def4000 ---p 00017000 08:01 8878 /usr/lib/libICE.so.6.3.0
7ff93def4000-7ff93def6000 rwxp 00016000 08:01 8878 /usr/lib/libICE.so.6.3.0
7ff93def6000-7ff93def9000 rwxp 7ff93def6000 00:00 0
7ff93def9000-7ff93df01000 r-xp 00000000 08:01 8907 /usr/lib/libSM.so.6.0.0
7ff93df01000-7ff93e100000 ---p 00008000 08:01 8907 /usr/lib/libSM.so.6.0.0
7ff93e100000-7ff93e101000 r-xp 00007000 08:01 8907 /usr/lib/libSM.so.6.0.0
7ff93e101000-7ff93e102000 rwxp 00008000 08:01 8907 /usr/lib/libSM.so.6.0.0
7ff93e102000-7ff93e104000 r-xp 00000000 08:01 8919 /usr/lib/libXau.so.6.0.0
7ff93e104000-7ff93e303000 ---p 00002000 08:01 8919 /usr/lib/libXau.so.6.0.0
7ff93e303000-7ff93e304000 rwxp 00001000 08:01 8919 /usr/lib/libXau.so.6.0.0
7ff93e304000-7ff93e30d000 r-xp 00000000 08:01 8942 /usr/lib/libXi.so.6.0.0
7ff93e30d000-7ff93e50d000 ---p 00009000 08:01 8942 /usr/lib/libXi.so.6.0.0
7ff93e50d000-7ff93e50e000 r-xp 00009000 08:01 8942 /usr/lib/libXi.so.6.0.0
7ff93e50e000-7ff93e50f000 rwxp 0000a000 08:01 8942 /usr/lib/libXi.so.6.0.0
7ff93e50f000-7ff93e612000 r-xp 00000000 08:01 14916 /usr/lib/libX11.so.6.2.0
7ff93e612000-7ff93e812000 ---p 00103000 08:01 14916 /usr/lib/libX11.so.6.2.0
7ff93e812000-7ff93e813000 r-xp 00103000 08:01 14916 /usr/lib/libX11.so.6.2.0
7ff93e813000-7ff93e817000 rwxp 00104000 08:01 14916 /usr/lib/libX11.so.6.2.0
7ff93e817000-7ff93e874000 r-xp 00000000 08:01 8960 /usr/lib/libXt.so.6.0.0
7ff93e874000-7ff93ea74000 ---p 0005d000 08:01 8960 /usr/lib/libXt.so.6.0.0
7ff93ea74000-7ff93ea7a000 rwxp 0005d000 08:01 8960 /usr/lib/libXt.so.6.0.0
7ff93ea7a000-7ff93ea7b000 rwxp 7ff93ea7a000 00:00 0
7ff93ea7b000-7ff93ea8b000 r-xp 00000000 08:01 8934 /usr/lib/libXext.so.6.4.0
7ff93ea8b000-7ff93ec8b000 ---p 00010000 08:01 8934 /usr/lib/libXext.so.6.4.0
7ff93ec8b000-7ff93ec8d000 rwxp 00010000 08:01 8934 /usr/lib/libXext.so.6.4.0
7ff93ec8d000-7ff93ec92000 r-xp 00000000 08:01 8962 /usr/lib/libXtst.so.6.1.0
7ff93ec92000-7ff93ee92000 ---p 00005000 08:01 8962 /usr/lib/libXtst.so.6.1.0
7ff93ee92000-7ff93ee93000 rwxp 00005000 08:01 8962 /usr/lib/libXtst.so.6.1.0
7ff93eea6000-7ff93f10d000 r-xp 00000000 08:01 169106 /usr/lib/jvm/jdk1.6.0_11/jre/lib/amd64/motif21/libmawt.so
7ff93f10d000-7ff93f20e000 ---p 00267000 08:01 169106 /usr/lib/jvm/jdk1.6.0_11/jre/lib/amd64/motif21/libmawt.so
7ff93f20e000-7ff93f262000 rwxp 00268000 08:01 169106 /usr/lib/jvm/jdk1.6.0_11/jre/lib/amd64/motif21/libmawt.so
7ff93f262000-7ff93f265000 rwxp 7ff93f262000 00:00 0
7ff93f265000-7ff93f2ef000 r-xp 00000000 08:01 169128 /usr/lib/jvm/jdk1.6.0_11/jre/lib/amd64/libawt.so
7ff93f2ef000-7ff93f3ee000 ---p 0008a000 08:01 169128 /usr/lib/jvm/jdk1.6.0_11/jre/lib/amd64/libawt.so
7ff93f3ee000-7ff93f406000 rwxp 00089000 08:01 169128 /usr/lib/jvm/jdk1.6.0_11/jre/lib/amd64/libawt.so
7ff93f406000-7ff93f42b000 rwxp 7ff93f406000 00:00 0
7ff93f42b000-7ff93f489000 r-xs 00b8b000 08:01 169475 /usr/lib/jvm/jdk1.6.0_11/lib/tools.jar
7ff93f489000-7ff93f490000 r-xs 00000000 08:01 11672 /usr/lib/gconv/gconv-modules.cache
7ff93f490000-7ff93f4cf000 r-xp 00000000 08:01 12899 /usr/lib/locale/pl_PL.utf8/LC_CTYPE
7ff93f4cf000-7ff93f544000 rwxp 7ff93f4cf000 00:00 0
7ff93f544000-7ff93f6d4000 r-xs 02ef0000 08:01 169188 /usr/lib/jvm/jdk1.6.0_11/jre/lib/rt.jar
7ff93f6d4000-7ff93f70c000 rwxp 7ff93f6d4000 00:00 0
7ff93f70c000-7ff93f760000 rwxp 7ff93f70c000 00:00 0
7ff93f760000-7ff93f76b000 rwxp 7ff93f760000 00:00 0
7ff93f76b000-7ff93f80b000 rwxp 7ff93f76b000 00:00 0
7ff93f80b000-7ff93f81b000 rwxp 7ff93f80b000 00:00 0
7ff93f81b000-7ff93f86f000 rwxp 7ff93f81b000 00:00 0
7ff93f86f000-7ff93f87a000 rwxp 7ff93f86f000 00:00 0
7ff93f87a000-7ff93f919000 rwxp 7ff93f87a000 00:00 0
7ff93f919000-7ff93f91f000 rwxp 7ff93f919000 00:00 0
7ff93f91f000-7ff93f96f000 rwxp 7ff93f91f000 00:00 0
7ff93f96f000-7ff941970000 rwxp 7ff93f96f000 00:00 0
7ff941970000-7ff94c170000 rwxp 7ff941970000 00:00 0
7ff94c170000-7ff94d6d0000 rwxp 7ff94c170000 00:00 0
7ff94d6d0000-7ff9616d0000 rwxp 7ff94d6d0000 00:00 0
7ff9616d0000-7ff962170000 rwxp 7ff9616d0000 00:00 0
7ff962170000-7ff96c170000 rwxp 7ff962170000 00:00 0
7ff96c17c000-7ff96c3ec000 rwxp 7ff96c17c000 00:00 0
7ff96c3ec000-7ff96f17c000 rwxp 7ff96c3ec000 00:00 0
7ff96f17c000-7ff96f18a000 r-xp 00000000 08:01 169097 /usr/lib/jvm/jdk1.6.0_11/jre/lib/amd64/libzip.so
7ff96f18a000-7ff96f28c000 ---p 0000e000 08:01 169097 /usr/lib/jvm/jdk1.6.0_11/jre/lib/amd64/libzip.so
7ff96f28c000-7ff96f28f000 rwxp 00010000 08:01 169097 /usr/lib/jvm/jdk1.6.0_11/jre/lib/amd64/libzip.so
7ff96f28f000-7ff96f290000 rwxp 7ff96f28f000 00:00 0
7ff96f290000-7ff96f2b9000 r-xp 00000000 08:01 169110 /usr/lib/jvm/jdk1.6.0_11/jre/lib/amd64/libjava.so
7ff96f2b9000-7ff96f3b8000 ---p 00029000 08:01 169110 /usr/lib/jvm/jdk1.6.0_11/jre/lib/amd64/libjava.so
7ff96f3b8000-7ff96f3bf000 rwxp 00028000 08:01 169110 /usr/lib/jvm/jdk1.6.0_11/jre/lib/amd64/libjava.so
7ff96f3bf000-7ff96f3cc000 r-xp 00000000 08:01 169092 /usr/lib/jvm/jdk1.6.0_11/jre/lib/amd64/libverify.so
7ff96f3cc000-7ff96f4cb000 ---p 0000d000 08:01 169092 /usr/lib/jvm/jdk1.6.0_11/jre/lib/amd64/libverify.so
7ff96f4cb000-7ff96f4ce000 rwxp 0000c000 08:01 169092 /usr/lib/jvm/jdk1.6.0_11/jre/lib/amd64/libverify.so
7ff96f4ce000-7ff96f4d9000 r-xp 00000000 08:01 2539 /lib/libnss_files-2.8.90.so
7ff96f4d9000-7ff96f6d8000 ---p 0000b000 08:01 2539 /lib/libnss_files-2.8.90.so
7ff96f6d8000-7ff96f6d9000 r-xp 0000a000 08:01 2539 /lib/libnss_files-2.8.90.so
7ff96f6d9000-7ff96f6da000 rwxp 0000b000 08:01 2539 /lib/libnss_files-2.8.90.so
7ff96f6da000-7ff96f6e4000 r-xp 00000000 08:01 2549 /lib/libnss_nis-2.8.90.so
7ff96f6e4000-7ff96f8e3000 ---p 0000a000 08:01 2549 /lib/libnss_nis-2.8.90.so
7ff96f8e3000-7ff96f8e4000 r-xp 00009000 08:01 2549 /lib/libnss_nis-2.8.90.so
7ff96f8e4000-7ff96f8e5000 rwxp 0000a000 08:01 2549 /lib/libnss_nis-2.8.90.so
7ff96f8e5000-7ff96f8ed000 r-xp 00000000 08:01 2535 /lib/libnss_compat-2.8.90.so
7ff96f8ed000-7ff96faec000 ---p 00008000 08:01 2535 /lib/libnss_compat-2.8.90.so
7ff96faec000-7ff96faed000 r-xp 00007000 08:01 2535 /lib/libnss_compat-2.8.90.so
7ff96faed000-7ff96faee000 rwxp 00008000 08:01 2535 /lib/libnss_compat-2.8.90.so
7ff96faee000-7ff96fb04000 r-xp 00000000 08:01 2533 /lib/libnsl-2.8.90.so
7ff96fb04000-7ff96fd03000 ---p 00016000 08:01 2533 /lib/libnsl-2.8.90.so
7ff96fd03000-7ff96fd04000 r-xp 00015000 08:01 2533 /lib/libnsl-2.8.90.so
7ff96fd04000-7ff96fd05000 rwxp 00016000 08:01 2533 /lib/libnsl-2.8.90.so
7ff96fd05000-7ff96fd07000 rwxp 7ff96fd05000 00:00 0
7ff96fd07000-7ff96fd0e000 r-xp 00000000 08:01 169099 /usr/lib/jvm/jdk1.6.0_11/jre/lib/amd64/native_threads/libhpi.so
7ff96fd0e000-7ff96fe0f000 ---p 00007000 08:01 169099 /usr/lib/jvm/jdk1.6.0_11/jre/lib/amd64/native_threads/libhpi.so
7ff96fe0f000-7ff96fe11000 rwxp 00008000 08:01 169099 /usr/lib/jvm/jdk1.6.0_11/jre/lib/amd64/native_threads/libhpi.so
7ff96fe11000-7ff96fe12000 rwxp 7ff96fe11000 00:00 0
7ff96fe12000-7ff96fe1a000 r-xp 00000000 08:01 2575 /lib/librt-2.8.90.so
7ff96fe1a000-7ff970019000 ---p 00008000 08:01 2575 /lib/librt-2.8.90.so
7ff970019000-7ff97001a000 r-xp 00007000 08:01 2575 /lib/librt-2.8.90.so
7ff97001a000-7ff97001b000 rwxp 00008000 08:01 2575 /lib/librt-2.8.90.so
7ff97001b000-7ff97009f000 r-xp 00000000 08:01 2526 /lib/libm-2.8.90.so
7ff97009f000-7ff97029e000 ---p 00084000 08:01 2526 /lib/libm-2.8.90.so
7ff97029e000-7ff97029f000 r-xp 00083000 08:01 2526 /lib/libm-2.8.90.so
7ff97029f000-7ff9702a0000 rwxp 00084000 08:01 2526 /lib/libm-2.8.90.so
7ff9702a0000-7ff97092d000 r-xp 00000000 08:01 169116 /usr/lib/jvm/jdk1.6.0_11/jre/lib/amd64/server/libjvm.so
7ff97092d000-7ff970a2c000 ---p 0068d000 08:01 169116 /usr/lib/jvm/jdk1.6.0_11/jre/lib/amd64/server/libjvm.so
7ff970a2c000-7ff970b7d000 rwxp 0068c000 08:01 169116 /usr/lib/jvm/jdk1.6.0_11/jre/lib/amd64/server/libjvm.so
7ff970b7d000-7ff970bba000 rwxp 7ff970b7d000 00:00 0
7ff970bba000-7ff970d23000 r-xp 00000000 08:01 2492 /lib/libc-2.8.90.so
7ff970d23000-7ff970f22000 ---p 00169000 08:01 2492 /lib/libc-2.8.90.so
7ff970f22000-7ff970f26000 r-xp 00168000 08:01 2492 /lib/libc-2.8.90.so
7ff970f26000-7ff970f27000 rwxp 0016c000 08:01 2492 /lib/libc-2.8.90.so
7ff970f27000-7ff970f2c000 rwxp 7ff970f27000 00:00 0
7ff970f2c000-7ff970f2e000 r-xp 00000000 08:01 2507 /lib/libdl-2.8.90.so
7ff970f2e000-7ff97112e000 ---p 00002000 08:01 2507 /lib/libdl-2.8.90.so
7ff97112e000-7ff97112f000 r-xp 00002000 08:01 2507 /lib/libdl-2.8.90.so
7ff97112f000-7ff971130000 rwxp 00003000 08:01 2507 /lib/libdl-2.8.90.so
7ff971130000-7ff971147000 r-xp 00000000 08:01 2569 /lib/libpthread-2.8.90.so
7ff971147000-7ff971346000 ---p 00017000 08:01 2569 /lib/libpthread-2.8.90.so
7ff971346000-7ff971347000 r-xp 00016000 08:01 2569 /lib/libpthread-2.8.90.so
7ff971347000-7ff971348000 rwxp 00017000 08:01 2569 /lib/libpthread-2.8.90.so
7ff971348000-7ff97134c000 rwxp 7ff971348000 00:00 0
7ff97134c000-7ff97136b000 r-xp 00000000 08:01 2472 /lib/ld-2.8.90.so
7ff971371000-7ff971377000 r-xs 0001e000 08:01 169477 /usr/lib/jvm/jdk1.6.0_11/lib/dt.jar
7ff971377000-7ff97137e000 r-xs 0007e000 08:01 140109 /usr/share/netbeans/platform8/lib/org-openide-util.jar
7ff97137e000-7ff97137f000 r-xs 00004000 08:01 140110 /usr/share/netbeans/platform8/lib/org-openide-modules.jar
7ff97137f000-7ff971380000 r-xs 0003b000 08:01 140981 /usr/share/netbeans/6.1/nb6.1/core/locale/core_nb.jar
7ff971380000-7ff971382000 r-xs 00037000 08:01 140982 /usr/share/netbeans/6.1/nb6.1/core/org-netbeans-upgrader.jar
7ff971382000-7ff971387000 r-xs 00065000 08:01 140106 /usr/share/netbeans/platform8/core/org-openide-filesystems.jar
7ff971387000-7ff971391000 rwxp 7ff971387000 00:00 0
7ff971391000-7ff971447000 rwxp 7ff971391000 00:00 0
7ff971447000-7ff971449000 rwxp 7ff971447000 00:00 0
7ff971449000-7ff971450000 r-xp 00000000 08:01 169082 /usr/lib/jvm/jdk1.6.0_11/jre/lib/amd64/jli/libjli.so
7ff971450000-7ff971551000 ---p 00007000 08:01 169082 /usr/lib/jvm/jdk1.6.0_11/jre/lib/amd64/jli/libjli.so
7ff971551000-7ff971553000 rwxp 00008000 08:01 169082 /usr/lib/jvm/jdk1.6.0_11/jre/lib/amd64/jli/libjli.so
7ff971553000-7ff971554000 rwxp 7ff971553000 00:00 0
7ff971555000-7ff97155a000 r-xs 00087000 08:01 140107 /usr/share/netbeans/platform8/core/core.jar
7ff97155a000-7ff97155d000 r-xs 00034000 08:01 140111 /usr/share/netbeans/platform8/lib/boot.jar
7ff97155d000-7ff971565000 rwxs 00000000 08:01 871 /tmp/hsperfdata_m/20424
7ff971565000-7ff971566000 rwxp 7ff971565000 00:00 0
7ff971566000-7ff971567000 r-xp 7ff971566000 00:00 0
7ff971567000-7ff97156a000 rwxp 7ff971567000 00:00 0
7ff97156a000-7ff97156b000 r-xp 0001e000 08:01 2472 /lib/ld-2.8.90.so
7ff97156b000-7ff97156c000 rwxp 0001f000 08:01 2472 /lib/ld-2.8.90.so
7fff79557000-7fff7956c000 rwxp 7ffffffea000 00:00 0 [stack]
7fff795ff000-7fff79600000 r-xp 7fff795ff000 00:00 0 [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]

VM Arguments:
jvm_args: -Djdk.home=/usr/lib/jvm/jdk1.6.0_11 -Djava.library.path=/usr/lib/jni -Dnetbeans.system_http_proxy=DIRECT -Dnetbeans.system_http_non_proxy_hosts= -Dnetbeans.dirs=/usr/share/netbeans/6.1/nb6.1:/usr/share/netbeans/6.1/ide9:/usr/share/netbeans/6.1/java2:/usr/share/netbeans/6.1/apisupport1:/usr/share/netbeans/6.1/harness: -Dnetbeans.home=/usr/share/netbeans/6.1/platform8 -Dnetbeans.importclass=org.netbeans.upgrade.AutoUpgrade -Dnetbeans.accept_license_class=org.netbeans.license.AcceptLicense -Xmx512m -Xss2m -Xms32m -XX:PermSize=32m -XX:MaxPermSize=200m -Xverify:none -Dapple.laf.useScreenMenuBar=true -Dsun.java2d.noddraw=true
java_command: org.netbeans.Main --userdir /home/m/.netbeans/6.1 --branding nb
Launcher Type: SUN_STANDARD

Environment Variables:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
USERNAME=m
LD_LIBRARY_PATH=/usr/lib/jvm/jdk1.6.0_11/jre/lib/amd64/server:/usr/lib/jvm/jdk1.6.0_11/jre/lib/amd64:/usr/lib/jvm/jdk1.6.0_11/jre/../lib/amd64
SHELL=/bin/bash
DISPLAY=:0.0

Signal Handlers:
SIGSEGV: [libjvm.so+0x5fcb80], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004
SIGBUS: [libjvm.so+0x5fcb80], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004
SIGFPE: [libjvm.so+0x4e0d10], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004
SIGPIPE: [libjvm.so+0x4e0d10], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004
SIGXFSZ: [libjvm.so+0x4e0d10], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004
SIGILL: [libjvm.so+0x4e0d10], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004
SIGUSR1: SIG_DFL, sa_mask[0]=0x00000000, sa_flags=0x00000000
SIGUSR2: [libjvm.so+0x4e3430], sa_mask[0]=0x00000000, sa_flags=0x10000004
SIGHUP: [libjvm.so+0x4e3180], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004
SIGINT: SIG_IGN, sa_mask[0]=0x00000000, sa_flags=0x00000000
SIGTERM: [libjvm.so+0x4e3180], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004
SIGQUIT: [libjvm.so+0x4e3180], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004


--------------- S Y S T E M ---------------

OS:lenny/sid

uname:Linux 2.6.27-9-generic #1 SMP Thu Nov 20 22:15:32 UTC 2008 x86_64
libc:glibc 2.8.90 NPTL 2.8.90
rlimit: STACK 8192k, CORE 0k, NPROC 40448, NOFILE 1024, AS infinity
load average:0.43 0.82 0.61

CPU:total 2 (2 cores per cpu, 1 threads per core) family 6 model 7 stepping 6, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3

Memory: 4k page, physical 3988812k(1149728k free), swap 4883752k(4883752k free)

vm_info: Java HotSpot(TM) 64-Bit Server VM (11.0-b16) for linux-amd64 JRE (1.6.0_11-b03), built on Nov 10 2008 01:28:14 by "java_re" with gcc 3.2.2 (SuSE Linux)

time: Fri Jan 9 01:26:01 2009
elapsed time: 10 seconds

Monday, January 05, 2009

Set SUN JDK as default Java Machine in UBUNTU


sudo update-java-alternatives -s java-6-sun

Weighted fulltext search in MySQL


SELECT
*,
(MATCH (column1) AGAINST ('$query' IN BOOLEAN MODE)*100) +
(MATCH (column2) AGAINST ('$query' IN BOOLEAN MODE)*10) +
MATCH (column3) AGAINST ('$query' IN BOOLEAN MODE) AS rating
FROM
table
WHERE
MATCH (column1,column2,column3) AGAINST ('$query' IN BOOLEAN MODE)
ORDER BY
rating DESC
LIMIT 0,10

Saturday, January 03, 2009

MPlayer Polskie czcionki

Źródło: http://forum.ubuntu.pl/showthread.php?t=38659

1. Ściągamy potrzebne elementy :
czcionka ttf :


wget http://aed_221.webpark.pl/subfont.ttf


czcionka RAW :

wget http://aed_221.webpark.pl/iso-8859-2-win-1250.zip


2. Kopiujemy pliki w odpowiednie miejsce :


Katalog na którym pracujemy to :

/home/nazwausera/.mplayer


Gdzie nazwausera to : nazwa użytkownika na którym pracujesz. Tworzymy katalog fonts :


mkdir /home/nazwausera/.mplayer/fonts


Kopiujemy do nowo stworzonego katalogu ściągnięty uprzednio plik subfont.ttf. Teraz zajmiemy się plikiem iso-8859-2-win-1250.zip . Rozpakowujemy go najpierw gdziekolwiek.W rozpakowanym katalogu znajdziemy takie podkatalogi jak :


font-arial-##-iso-8859-2

gdzie ## to wielkość czcionki jaką chcemy mieć (w moim przypadku wybrałem wielkość 24).



Kopiujemy całą zawartość wybranego katalogu (w moim przypadku font-arial-24-iso-8859-2) do katalogu



/home/nazwausera/.mplayer/fonts


3.Już jesteśmy blisko.


Odpalamy mplayera i ustawiamy odpowiednio w opcjach:

Zakładka “Napisy i OSD” -> Kodowanie -> CP1250

Zakładka “Czcionka” -> Kodowanie -> Unicode


Zakładka “Czcionka” -> Kodowanie -> u samej góry jest miejsce na ścieżkę do czcionki -> wpisujemy ścieżkę do naszego subfont.ttf czyli :


/home/nazwausera/.mplayer/fonts/subfont.ttf


4.Klikamy OK i wychodzimy z Mplayera



Przy kolejnym uruchomieniu cieszymy się polskimi fontami w podpisach filmów

Sunday, December 28, 2008

MySQL data in /home direcotory

(following http://www.debianadmin.com/mysql-database-server-installation-and-configuration-in-ubuntu.html)

Here is the procedure how to change Mysql default data directory

By default, MySQL’s datadir is placed in the /var/lib/mysql directory.

Create the directory that will be new datadir (ex:-/home/db)

chown the directory to the mysql:mysql user

sudo chown -R mysql:mysql /home/db/*

You need to stop the mysql server using the following command

sudo /etc/init.d/mysql stop

Now you need to edit the /etc/mysql/my.cnf file

sudo vi /etc/mysql/my.cnf

and look for “datadir = /var/lib/mysql” this si where mysql database default data directory here you need to change this one to your new directory

datadir = /home/db

copy the files from the old datadir to the new location. However, make sure that the files named
ib_arch_log_0000000000, ib_logfile0 etc. are not copied to the newer location.

Make sure that the files and directories are owned by mysql user

Make changes in the my.cnf to point the new datadir.

Restart the MySQL database

sudo /etc/init.d/mysql start

----

Following: http://neodon.blogspot.com/2008/09/changing-data-directory-for-mysql-in.html

You simply edit /etc/apparmor.d/usr.sbin.mysqld. Underneath the two lines authorizing the default MySQL data directories, add two more with your custom directory. Make sure you have a trailing / on the directory name, otherwise it will not work (I had this problem at first). After this change, restart AppArmor:

sudo invoke-rc.d apparmor restart

Now you should be able to set up the new directory as a MySQL data directory and initialize it using mysql_install_db. For more information on this topic, check out the following links:

Thursday, December 04, 2008

Wyświetlanie Daty


strftime:

%a - The abbreviated weekday name (``Sun'')
%A - The full weekday name (``Sunday'')
%b - The abbreviated month name (``Jan'')
%B - The full month name (``January'')
%c - The preferred local date and time representation
%d - Day of the month (01..31)
%H - Hour of the day, 24-hour clock (00..23)
%I - Hour of the day, 12-hour clock (01..12)
%j - Day of the year (001..366)
%m - Month of the year (01..12)
%M - Minute of the hour (00..59)
%p - Meridian indicator (``AM'' or ``PM'')
%S - Second of the minute (00..60)
%U - Week number of the current year,
starting with the first Sunday as the first
day of the first week (00..53)
%W - Week number of the current year,
starting with the first Monday as the first
day of the first week (00..53)
%w - Day of the week (Sunday is 0, 0..6)
%x - Preferred representation for the date alone, no time
%X - Preferred representation for the time alone, no date
%y - Year without a century (00..99)
%Y - Year with century
%Z - Time zone name
%% - Literal ``%'' character

t = Time.now
t.strftime("Printed on %m/%d/%Y") #=> "Printed on 04/09/2003"
t.strftime("at %I:%M%p") #=> "at 08:56AM"

Saturday, November 22, 2008

Netbeans 6.5, a GIT

W przypadku nowej wersji Netbeansa, szczególnie dla developerów Ruby on Rails uciążliwy może być brak wsparcia dla systemu wersjonowania GIT. Na szczęście dostępny jest już odpowiedni moduł (na razie w wersji eksperymentalnej), który doda do naszego środowiska odpowiednie wsparcie. Zainteresowanych odsyłam na oficjalną stronę.

Thursday, November 20, 2008

NetBeans 6.5

Właśnie ukazał się nowy NetBeans 6.5. Od dłuższego czasu używam tego środowiska do pisania aplikacji w Ruby on Rails i śmiało mogę go polecić wszystkim, którzy szykają edytora wspirającego w "rozsądny sposób podpowiadanie składni". Bardzo ciekawą cechą podpowiedzi kodu w NetBeansie jest wyświetlanie również odpowiedniego fragmentu RDoca, co umożliwia szybki dostęp do bardzo wielu przykładów użycia danych metod (bardzo cenne zwkłaszcza dla metod ActiveResource).

Zainteresowanych odsyłam również na stronę Huukau, gdzie znajduje się bardzo dobry schemat graficzny dla developerów rubiego.



Alternatywny temat kolorystyczny znaleźć możemy również na stronie Tora Norbyesa



Na zakończenie ostatni ciekawy temat kolorystyczny, który znaleźć możemy na stronie iBrasten.


Monday, November 03, 2008

Ubuntu 8.10 Sun Java 1.6

Instalacja:


sudo apt-get install sun-java6-jdk
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-6-sun/jre/bin/java 1100

RubyGems 1.3.1 na Ubuntu 8.10

Wraz z pojawieniem się nowej wersji Ubuntu 8.10 - nie obeszło się bez problemów. Domyślnie dla tej wersji apt-get instaluje rubygemy w wersji 1.2. Niestety polecenie:


sudo update_rubygems


Wydane po instalacji "gem install rubygems-update" się nie wywołuje.

Oto metoda jak sobie z tym poradzić znaleziona na blogu (http://roninonrails.blogspot.com/2008/11/setting-up-ubuntu-810-for-ruby-on-rails.html):


wget http://rubyforge.org/frs/download.php/45905/rubygems-1.3.1.tgz
cd rubygems-1.3.1
ruby setup.rb
ln -s /usr/bin/gem1.8 /usr/bin/gem

Thursday, October 16, 2008

Ruby on Rails pod maską Ogólnopolskiej Informacji Medycznej

Firma Delta Software oficjalnie uruchomiła serwis Ogólnopolskiej Informacji Medycznej. Cały projekt zrealizowany został w technologii Ruby on Rails. Technologia ta umożliwiła wytworzenie produktu, który stać się ma największą konkurencją dla dotychczasowych portali medycznych. W chwili obecnej system działa w podstawowej funkcjonalności, jednakże bardzo szybko uruchamiane są dodatkowe moduły. W ostatecznej wersji serwis wykorzystywać będzie również algorytmy sztucznej inteligencji.

Thursday, July 10, 2008

Instalacja Ruby on Rails 2.1 pod Ubuntu 8.04

Informacje zaczerpnięte są ze strony "Installing Ruby & Rails on Ubuntu 8.04 Hardy Heron", ale jednocześnie starałem się je uzupełnić o rozwiązania problemów na jakie można trafić w trakcie instalacji (dodane elementy starałem się wyróżniać kolorem czerwonym).

Krok 1:
Instalacja pakietów podstawowych


sudo apt-get install ruby irb ri rdoc ruby1.8-dev
libzlib-ruby libyaml-ruby libreadline-ruby libncurses-ruby libcurses-ruby libruby
libruby-extras libfcgi-ruby1.8 build-essential libopenssl-ruby libdbm-ruby libdbi-ruby
libdbd-sqlite3-ruby sqlite3 libsqlite3-dev libsqlite3-ruby libxml-ruby libxml2-dev
ruby rubygems


Krok 2:
Instalacja najnowszej wersji gem


sudo gem update --system


Może się zdażyć, że pojawi się komunikat następującej treści:

uninitialized constant Gem::GemRunner

Rozwiązanie można znaleźć na tej stronie, ale ponieważ jest krótkie pozwoliłem sobie je zamieścić poniżej:

sudo gedit /usr/bin/gem

A następnie przed linią:

require 'rubygems'

Dodajemy:

require 'rubygems/gem_runner'


3. Krok
Dalsza aktualizacja gema:

gem install rubygems-update
sudo update_rubygems


4. Krok
Instalacja railsa

sudo gem install rails


To zainstaluje nam najnowszą wersję railsa. Gdybyśmy chcieli zainstalować również wcześniejszą wersję należy wywołać następującą komendę (zainstaluje ona railsa w wersji 2.0.2)

sudo gem install rails -v 2.0.2


5. Krok
Instalacja bazy danych i narzędzi pomocniczych

sudo apt-get install mysql-server mysql-client libdbd-mysql-ruby mysql-query-browser mysql-admin


6. Krok
Instalacja gema mysql

sudo gem install mysql


W przypadku problemów z isntalacją warto przeczytać tego posta.

6. Krok
Instalacja dodatkowych przydatnych gemow:


sudo gem install mongrel sqlite3-ruby capistrano mini_magick mislav-will_paginate

Tuesday, July 08, 2008

Instalacja gema mysql pod ubuntu

Jeżeli w czasie wywołania:


sudo gem install mysql


Pojawia się następujący błąd:


/usr/bin/ruby1.8 extconf.rb install mysql
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lm... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lz... yes
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lsocket... no
checking for mysql_query() in -lmysqlclient... no
checking for main() in -lnsl... yes
checking for mysql_query() in -lmysqlclient... no
*** extconf.rb failed ***


Należy zainstalować następującą bibliotekę:


sudo apt-get install libmysqlclient15-dev


A następnie wywołać:


sudo gem install mysql

Thursday, July 03, 2008

Drag&Drop dla drzewa

Jeżeli w projekcie nad którym pracujemy potrzebna jest funkcjonalność zapewniająca sortowanie listy możemy wykorzystać dwie rzeczy - ScriptAculoUs(domyślnie dostarczona wraz z railsem) oraz ActsAsList.

Problem stanowiło natomiast utworzenie sortowalnego drzewa. Z pomocą w tym przypadku przychodzi rozwiązanie opracowane przez Svena Fuchsa.

Poniżej przykładowe dwa dema:
demo/bold.html
demo/textmate.html