Zaawansowane programowanie

Podobne dokumenty
Techniki optymalizacji

Rój cząsteczek. Particle Swarm Optimization. Adam Grycner. 18 maja Instytut Informatyki Uniwersytetu Wrocławskiego

Algorytmy metaheurystyczne Wykład 6. Piotr Syga

Optymalizacja. Wybrane algorytmy

Algorytm genetyczny (genetic algorithm)-

Algorytmy mrówkowe (optymalizacja kolonii mrówek, Ant Colony optimisation)

Algorytmy metaheurystyczne podsumowanie

Algorytmy mrówkowe. P. Oleksyk. Wydział Informatyki Zachodniopomorski Uniwersytet Technologiczny w Szczecinie Inteligentne systemy informatyczne

Problem Komiwojażera - algorytmy metaheurystyczne

Systemy mrówkowe. Opracowali: Dawid Strucker, Konrad Baranowski

Podejście memetyczne do problemu DCVRP - wstępne wyniki. Adam Żychowski

PSO Rój cząsteczek - Particle Swarm Optimization. Michał Szopiak

Metody przeszukiwania

Algorytm dyskretnego PSO z przeszukiwaniem lokalnym w problemie dynamicznej wersji TSP

METODY SZTUCZNEJ INTELIGENCJI algorytmy ewolucyjne

Zaawansowane programowanie

Dobór parametrów algorytmu ewolucyjnego

Wstęp do Sztucznej Inteligencji

Aproksymacja funkcji a regresja symboliczna

Algorytmy ewolucyjne 1

SZTUCZNA INTELIGENCJA

Algorytmy mrówkowe. H. Bednarz. Wydział Informatyki Zachodniopomorski Uniwersytet Technologiczny w Szczecinie Inteligentne systemy informatyczne

Strategie ewolucyjne (ang. evolution strategies)

Wybrane podstawowe rodzaje algorytmów

Techniki optymalizacji

Katedra Informatyki Stosowanej. Algorytmy ewolucyjne. Inteligencja obliczeniowa

Algorytmy ewolucyjne

O dwóch modyfikacjach algorytmu PSO

Techniki optymalizacji

ALGORYTMY GENETYCZNE ćwiczenia

Algorytmy mrówkowe (ang. Ant Colony Optimization)

Strategie ewolucyjne (ang. evolu4on strategies)

Algorytmy memetyczne (hybrydowe algorytmy ewolucyjne)

Algorytmy genetyczne

Algorytmy Mrówkowe. Daniel Błaszkiewicz. 11 maja Instytut Informatyki Uniwersytetu Wrocławskiego

Algorytmy ewolucyjne NAZEWNICTWO

Zaawansowane programowanie

w analizie wyników badań eksperymentalnych, w problemach modelowania zjawisk fizycznych, w analizie obserwacji statystycznych.

Optymalizacja. Przeszukiwanie lokalne

Algorytmy ewolucji różnicowej (ang. differential evolution -DE) oraz roju cząstek (ang. particle swarm optimization -PSO)

Metody Programowania

Plan. Zakres badań teorii optymalizacji. Teoria optymalizacji. Teoria optymalizacji a badania operacyjne. Badania operacyjne i teoria optymalizacji

Techniki optymalizacji

Algorytmy ewolucyjne `

Obliczenia inspirowane Naturą

Optymalizacja ciągła

Algorytmy genetyczne. Dariusz Banasiak. Katedra Informatyki Technicznej Wydział Elektroniki

WAE Jarosław Arabas Pełny schemat algorytmu ewolucyjnego

Zadanie 5 - Algorytmy genetyczne (optymalizacja)

LABORATORIUM 3: Wpływ operatorów krzyżowania na skuteczność poszukiwań AE

Odkrywanie algorytmów kwantowych za pomocą programowania genetycznego

Heurystyczne metody przeszukiwania

Rozwiązywanie problemów metodą przeszukiwania

Algorytmy genetyczne. Materiały do laboratorium PSI. Studia niestacjonarne

WYKORZYSTANIE ALGORYTMÓW GENETYCZNYCH I MRÓWKOWYCH W PROBLEMACH TRANSPORTOWYCH

Teoria i metody optymalizacji

Zadania laboratoryjne i projektowe - wersja β

Tabu Search (Poszukiwanie z zakazami)

Algorytmy genetyczne

Algorytmy mrówkowe. Plan. » Algorytm mrówkowy» Warianty» CVRP» Demo» Środowisko dynamiczne» Pomysł modyfikacji» Testowanie

Algorytm Genetyczny. zastosowanie do procesów rozmieszczenia stacji raportujących w sieciach komórkowych

Zastosowanie algorytmów heurystycznych do rozwiązywania problemu układania tras pojazdów

Tomasz Pawlak. Zastosowania Metod Inteligencji Obliczeniowej

SCHEMAT ROZWIĄZANIA ZADANIA OPTYMALIZACJI PRZY POMOCY ALGORYTMU GENETYCZNEGO

Uniwersytet Zielonogórski Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Sterowania i Systemów Informatycznych

Przeszukiwanie lokalne

Strefa pokrycia radiowego wokół stacji bazowych. Zasięg stacji bazowych Zazębianie się komórek

PLAN WYKŁADU OPTYMALIZACJA GLOBALNA OPERATOR KRZYŻOWANIA ETAPY KRZYŻOWANIA

Mrówka Pachycondyla apicalis

Algorytmy ewolucyjne (3)

Algorytmy genetyczne. Paweł Cieśla. 8 stycznia 2009

Technika optymalizacji

LABORATORIUM 4: Algorytmy ewolucyjne cz. 2 wpływ operatorów krzyżowania i mutacji na skuteczność poszukiwań AE

Technika optymalizacji

Algorytmy ewolucyjne. Łukasz Przybyłek Studenckie Koło Naukowe BRAINS

Programowanie genetyczne

OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) Algorytmy i Struktury Danych PIŁA

Algorytm memetyczny dla rzeczywistego problemu planowania tras pojazdów

Systemy wieloagentowe (Multi Agent Systems - MAS) aspekty wybrane

Metody Optymalizacji: Przeszukiwanie z listą tabu

SZTUCZNA INTELIGENCJA

Algorytmy genetyczne. Materiały do laboratorium PSI. Studia stacjonarne i niestacjonarne

Równoważność algorytmów optymalizacji

Algorytmy ewolucyjne - algorytmy genetyczne. I. Karcz-Dulęba

ALGORYTMY EWOLUCYJNE W OPTYMALIZACJI JEDNOKRYTERIALNEJ

Optymalizacja optymalizacji

Programowanie genetyczne, gra SNAKE

6. Klasyczny algorytm genetyczny. 1

Algorytm hybrydowy dla alokacji portfela inwestycyjnego przy ograniczonych zasobach

Algorytmy genetyczne (AG)

Strategie ewolucyjne. Gnypowicz Damian Staniszczak Łukasz Woźniak Marek

Systemy wieloagentowe (Multi Agent Systems - MAS) aspekty wybrane

Algorytmy stochastyczne, wykład 01 Podstawowy algorytm genetyczny

Algorytmy stochastyczne laboratorium 03

PLAN WYKŁADU OPTYMALIZACJA GLOBALNA ALGORYTM MRÓWKOWY (ANT SYSTEM) ALGORYTM MRÓWKOWY. Algorytm mrówkowy

Algorytmy genetyczne w optymalizacji

Heurystyki i metaheurystyki

NOWE WARIANTY OPERATORÓW GENETYCZNYCH DLA PROBLEMÓW Z KRYTERIUM SUMACYJNYM

II. Optymalizacja globalna. Metody optymalizacji. dr inŝ. Ewa Szlachcic

ZASTOSOWANIE ALGORYTMU MRÓWKOWEGO DO WYZNACZANIA MAKSYMALNEJ GRUPY WZAJEMNIE POŁĄCZONYCH ELEMENTÓW

Transkrypt:

Zaawansowane programowa wykład 4: jeszcze o metaheurystykach Genealogia metaheurystyk Genealogia wg [El-Ghazali Talbi, Metaheuristics: From Design to Implementation, 2009] wybór 1940 LS 1947 1950 prof. dr hab. inż. Marta Kasprzak Instytut Informatyki, Politechnika Poznańska 1960 1970 1980 1990 2000 TS 1986 GRASP 1989 ILS 1991 GLS1995 GREEDY 1971 GA 1962 EP 1962 GP 1992 ACO 1992 PSO 1995 2 Genealogia metaheurystyk Klasyfikacja metaheurystyk Genealogia wg [El-Ghazali Talbi, Metaheuristics: From Design to Implementation, 2009] legenda LS local search, jako pierwszy algorytm tego typu zaliczona metoda simplex [Dantzig 1947], brak wskazania na pierwszą typową metodę LS GA genetic algorithms, pierwszy zarys metody [Holland, 1962] EP evolutionary programming, pierwszy zarys metody [Fogel, 1962] GREEDY greedy algorithm [Edmonds, 1971] TS tabu search, pierwszy zarys metody [Glover, 1986] GRASP greedy randomized adaptive search procedures [Feo, Resende, 1989] ILS iterated local search [Martin, Otto, Felten, 1991]; że [Baum, 1986] GP genetic programming [Koza, 1992] ACO ant colony optimization [Dorigo, 1992] GLS guided local search [Voudouris, Tsang, 1995] PSO particle swarm optimization [Eberhart, Kennedy, 1995] 3 Klasyfikacja wg [F. Glover, M. Laguna, Tabu Search, 1997] uzupełniona Tabu search A / N / 1 Scatter search M / N / P Genetic algorithms M / S / P GRASP M / N / 1 A / S / P M / S / P Legenda: A adaptive memory, M memoryless N neighborhood search, S random sampling P population-based, 1 single solution 4 GRASP [T.A. Feo, M.G.C. Resende, Operations Research Letters 8, 1989, 67 71; Journal of Global Optimization 6, 1995, 109 133] Metaheurystyka GRASP (ang. greedy randomized adaptive search procedures) przypomina podejście multistart local search. W kolejnych iteracjach najpierw konstruowane jest rozwiąza początkowe heurystyką zachłanną, następ jest ono poprawiane metodą przeszukiwania lokalnego Heurystyka zachłanna użyta w GRASP różni się od zwyczajowego podejścia, gdyż zamiast wybierać w każdym kroku element najbardziej poprawiający w danym momencie funkcję celu wybiera jeden z najbardziej obiecujących elementów GRASP Wybór jednego z najbardziej obiecujących elementów dokonywany jest losowo, przez co w każdej iteracji tej metaheurystyki jest szansa na wygenerowa innego rozwiązania początkowego liczba iteracji liczność podzbioru najbardziej obiecujących elementów (może zmieniać się w kolejnych iteracjach) 5 6 1

Ogólny schemat metaheurystyki GRASP Evolutionary programming wygenerowa rozwiązania początkowego probabilistycznym algorytmem zachłannym uruchomie lokalnego przeszukiwania [L.J. Fogel, Proceedings of IFIPC, Munich 1962, 395 399; L.J. Fogel, A.J. Owens, M.J. Walsh, Artificial Intelligence through Simulated Evolution, Wiley, New York 1966] Evolutionary programming jest metaheurystyką o schemacie zbliżonym do algorytmów genetycznych. Zmienność osobników opiera się tu jedy na mutacjach i ma rekombinacji W typowym podejściu każdy rodzic produkuje jednego potomka poprzez losową mutację, po czym następną populację ustala się wybierając połowę najlepszych osobników spośród połączonej puli rodziców i potomków. Selekcja najlepszych osobników odbywa się z użyciem metody turjowej (ang. tournament selection) 7 8 Evolutionary programming Ogólny schemat metaheurystyki EP Brak operatora krzyżowania pozwala na dowolny sposób reprezentacji osobnika, musi już być liniowa liczba iteracji lub inny rozmiar populacji stopień mutacji rozmiar drużyny turjowej wygenerowa populacji początkowej selekcja populacji potomnej mutacja oblicze wartości przystosowania 9 10 [J. Koza, Genetic Programming, MIT Press, Cambridge, MA, 1992] jest metaheurystyką przeznaczoną do automatycznego generowania programów rozwiązujących zadany problem. Jej schemat przypomina algorytmy genetyczne, z tym że populacja składa się tutaj z zapisanych w postaci drzew programów komputerowych (podejście używane w AI) Zapis drzewiasty programów został zaczerpnięty ze struktury języka programowania LISP. Charakteryzuje się on jednolitą formą zapisu struktur danych i funkcji w notacji polskiej nawiasowej (tzw. S-wyrażenia). Funkcja jest listą z nazwą funkcji jako pierwszym elementem i jej argumentami w dalszej części listy (ciało funkcji definiowane osobną funkcją). Oprócz list/funkcji podstawowym elementem składni języka są atomy (stałe, zmienne) Przykładowy fragment kodu w języku LISP: wikipedia.org 11 12 2

Przełoże operacji z programu na postać drzewiastą: (= (- a b) (+ c (* 3 d))) = - + a b c * 3 d (define (counter) (set! count (+ count 1)) count) counter define count set! + count count 1 13 Programy składane są z elementów zamieszczonych w predefiniowanych zbiorach dostępnych funkcji i atomów. Należy zapewnić kompletną z punktu widzenia rozwiązywanego problemu zawartość tych zbiorów Populacja początkowa generowana jest w dużej mierze losowo, zawiera drzewa o różnym kształcie. Wszystkie wygenerowane programy muszą być wykonywalne (poprawne syntycz). Liczność populacji powinna być bardzo duża (tysiące osobników) Parametry tej metaheurystyki i jej schemat są ie same, jak w przypadku algorytmów genetycznych, z dodatkowymi predefiniowanymi zbiorami dostępnych składników kodu źródłowego programu oraz z dopuszczalną głębokością drzewa 14 Należy w szczególny sposób zadbać o poprawność programu, utrzymującą się zależ od zastosowanych rekombinacji i mutacji, czyli: wszystkie funkcje i argumenty powinny być tego samego typu (np. liczby całkowite) lub ewentual należy zapewnić konwersję typów funkcje powinny być dostosowane do przyjęcia dowolnych argumentów i powinny zawieść w żadnym przypadku (np. w dzieleniu przez 0) należy w razie potrzeby zapewnić zastępczą wartość funkcji dopuszczalna głębokość drzewa lub dopuszczalny rozmiar programu powinny zostać przekroczone Selekcja w GP odbywa się na podstawie wartości funkcji przystosowania. Funkcję tę oblicza się uruchamiając programy i porównując wynik z oczekiwanym dla badanych instancji Krzyżowa to zamiana miejscami losowo wybranych poddrzew u dwóch osobników w populacji (dwóch programów) Mutacja to losowa zmiana w drzewie osobnika Prawdopodobieństwo krzyżowania jest często ustawiane na wartość mjszą niż 1 (czyli część osobników przechodzi bez zmian do następnego pokolenia) Obec implementacje wychodzą poza tradycyjny język LISP, że dopuszcza się zamianę struktury drzewiastej na grafową lub liniową 15 16 Scatter search [F. Glover, Decision Sciences 8, 1977, 156 166; New Ideas in Optimization, McGraw-Hill, New York, 1999, 297 316] Scatter search jest metaheurystyką opartą na populacji lecz w przeciwieństwie do innych tego typu metod w dużej mierze wykorzystującą deterministyczne wybory Populacja tworzona jest z najlepszych rozwiązań lub ich fragmentów, osiągniętych uprzednio przez zastosowa innej heurystyki/metaheurystyki. Powinna charakteryzować się dużym zróżnicowam osobników. Osobniki muszą tworzyć rozwiązań dopuszczalnych Dodatkowo tworzony jest zbiór referencyjny (ang. reference set), który zawiera wybrane z populacji najlepsze rozwiązania Rozmiar zbioru referencyjnego jest wielki ( większy niż 20), populacja jest zazwyczaj ok. 10 razy liczjsza 17 Scatter search W rekombinacji uczestniczą jedy osobniki ze zbioru referencyjnego. Wewnątrz tego zbioru wybór zazwyczaj opiera się już na ich wartości funkcji celu i wszystkie osobniki biorą udział w tworzeniu nowych Powyższe może odbywać się na zasadzie doboru wszystkich możliwych par osobników. Liczba stworzonych nowych osobników może przekroczyć liczność populacji, wtedy wybierane są jedy najlepsze z nich, z dodatkowym wymogiem na zachowa różnorodności populacji Więcej niż dwa osobniki mogą zostać wybrane do rekombinacji. Rekombinacja może wyprodukować jednego lub większą liczbę nowych osobników Nowe rozwiązania są następ poprawiane heurystyką i zastępują te ze zbioru referencyjnego, jeśli są od nich lepsze 18 3

Scatter search Ogólny schemat metaheurystyki SS Scatter search jest tradycyj łączony z metaheurystyką tabu search i z inną metodą tego samego autora, path relinking. Wszystkie preferują determinizm nad losowością liczba iteracji lub inny rozmiar populacji rozmiar zbioru referencyjnego parametry heurystyki/metaheurystyki używanej do poprawy osobników z populacji wygenerowa populacji początkowej poprawa osobników heurystyką krzyżowa wybór podzbiorów selekcja 19 20 [M. Dorigo, Optimization, learning and natural algorithms, PhD thesis, Politecnico di Milano, 1992] jest najbardziej znaną metaheurystyką z grupy metod opartych na inteligencji zbiorowej (inteligencji roju, ang. swarm intelligence). Odzwierciedla zachowa kolonii mrówek w procesie zdobywania pożywienia. Inne metody z tej grupy to np. bee colony optimization i particle swarm optimization Zaobserwowano, że połączone działa prostych obiektów przekazujących sobie informacje może zostać z sukcesem wykorzystane do rozwiązywania problemów optymalizacyjnych. Ruch obiektów w naturze odpowiada w algorytmie przemieszczaniu się w przestrzeni rozwiązań Mrówki poprzez komunikację pomiędzy sobą odnajdują najkrótszą drogę do pożywienia, dotyczy to że gatunków o słabym wzroku. Idąc, pozostawiają ślad feromonowy, który wskazuje kolejnym mrówkom trasę. Im większe stęże feromonów na trasie, tym większe prawdopodobieństwo, że kolejna mrówka ją wybierze. Z czasem ślad słab Dla dwóch tras pomiędzy dwoma punktami, dłuższej i krótszej, prawdopodobieństwo ich wyboru przez mrówki jest początkowo ie same. Po dojściu do celu mrówki wracają wybraną wcześj trasą. Przejście trasy krótszej wymaga mj czasu, w dłuższym okresie więcej mrówek zdąży więc zostawić na j swój ślad. Dodatkowo na krótszej trasie mjsza ilość feromonu zdąży się ulotnić 21 22 Zachowa mrówek w algorytmie imituje losowa heurystyka zachłanna. Przestrzeń rozwiązań problemu jest modelowana w postaci grafu, w którym ścieżka odpowiada trasie mrówki. Wierzchołkami są elementy składowe rozwiązania Mrówka konstruuje rozwiąza krok po kroku, wybierając następny wierzchołek ścieżki w oparciu o ślad krawędzi wychodzących z bieżącego wierzchołka. Przykładowo, można zastosować prawdopodobieństwo wyboru opisane wzorem: p ij = τ ij /( k S τ ik ), j S gdzie i oraz j to odpowiednio wierzchołek bieżący i rozważany, τ ij jest feromonowym śladem krawędzi (i,j), a S jest zbiorem wierzchołków spoza bieżącej ścieżki. Stosując np. metodę ruletki losuje się następnika bieżącego wierzchołka. Okresowo można dopuścić zupeł losowy wybór 23 Ścieżka feromonowa jest rodzajem pamięci w algorytmie, magazynuje zdobytą przez mrówki wiedzę Ulatnia się feromonu jest realizowane poprzez zastosowa w każdej iteracji wzoru: τ ij = (1 ρ)τ ij, i,j [1,n] gdzie ρ [0,1] jest współczynnikiem redukcji feromonu, a τ ij jest śladem krawędzi pomiędzy wierzchołkami i oraz j Wzmoc feromonu może zostać zrealizowane przez zastosowa różnych strategii, np. po przejściu całej ścieżki przez doda wartości proporcjonalnej do jakości rozwiązania, albo po przejściu wszystkich ścieżek w danej iteracji przez uaktual wartości tylko k najlepszych ścieżek 24 4

Ogólny schemat metaheurystyki ACO liczba iteracji lub inny liczba mrówek współczynniki redukcji i wzmocnia feromonu, ew. liczba k najlepszych ścieżek zainicjalizowa ścieżek feromonowych konstrukcja rozwiązań dla każdej mrówki aktualizacja ścieżek feromonowych (wzmoc lub osłabie feromonu) 25 26 [J. Kennedy, R.C. Eberhart, Proceedings of IEEE International Conference of Neural Networks, Perth, 1995, 1942 1948] jest kolejną metaheurystyką z grupy swarm intelligence. Odzwierciedla sposób poruszania się obiektów w grupie (zwierząt w stadzie) w sposób skoordynowany i bez centralnego sterowania. Przykładami tego typu ruchów może być lot pów w stadzie lub ruch ryb w ławicy w poszukiwaniu pożywienia Potencjalne rozwiązania są w PSO nazywane cząsteczkami (ang. particles). Trajektoria najlepszych w danym momencie cząsteczek wyznacza trasę pozostałym. Wartość cząsteczki mierzona jest funkcją przystosowania W podstawowym modelu każda z N cząsteczek (potencjalnych rozwiązań) porusza się w D-wymiarowej przestrzeni rozwiązań. Ruch cząsteczek opisany jest ich położem (wektor x i ) i prędkością (wektor v i wskazujący że kierunek/zwrot) Sąsiedztwo jest definiowane dla każdej cząsteczki w celu określenia wpływu otoczenia. W zależności od zastosowanego podejścia, może obejmować cały zbiór, dużą część zbioru lub jedy najbliższych sąsiadów Cząsteczki zmieniają położe w kierunku globalnego optimum na podstawie informacji o najlepszym swoim własnym położeniu p i oraz najlepszym położeniu p g spośród osiągniętych przez wszystkie cząsteczki z sąsiedztwa 27 28 Prędkość cząsteczki v i jest uaktualniana następującym wzorem: v i = v i + ρ 1 C 1 (p i x i )+ ρ 2 C 2 (p g x i ) gdzie v i oznacza poprzednią prędkość, x i poprzed położe, ρ 1 i ρ 2 losowe wartości z przedziału [0,1], a C 1 i C 2 to stałe współczynniki uczenia się (ang. learning factors; wskazują, czy cząsteczka podąży raczej za własnym sukcesem, czy sukcesem swoich sąsiadów) Prędkość obliczana powyższym wzorem podlega korekcie, jeśli przekroczy zdefiniowany wcześj dopuszczalny zakres wartości. Także można zwiększyć wpływ poprzedj wartości v i przez umieszcze we wzorze tzw. współczynnika inercji w (wv i ) Położe cząsteczki x i jest uaktualniane następującym wzorem: x i = x i + v i W każdej iteracji uaktualniane są że wartości p i oraz p g PSO jest metodą dedykowaną głów problemom optymalizacji ciągłej. W przypadku problemów kombinatorycznych należy zadbać o to, żeby nowe położe odpowiadało wartościom akceptowalnym w problemie. Nie zawsze jest to łatwe jeśli N-wymiarowym wektorem opisującym położe cząsteczki w przestrzeni rozwiązań byłaby permutacja N elementów, wystarczy zaokrąglić wartości w tym wektorze do najbliższych całkowitych 29 30 5

Ogólny schemat metaheurystyki PSO Aby rozwiązać problem kombinatoryczny, można zastosować odmianę metaheurystyki, w której aktualizacja wektorów odbywa się na zasadzie krzyżowania jak w algorytmach genetycznych. Można że zastąpić wektor prędkości listą dopuszczalnych ruchów, stosowanych po kolei do wektora położenia liczba iteracji lub inny liczba cząsteczek rozmiar sąsiedztwa współczynniki uczenia się, współczynnik inercji dopuszczalny zakres wartości prędkości losowe zainicjalizowa zbioru cząsteczek oblicze wartości przystosowania aktualizacja prędkości, położenia oraz wartości p i, p g cząsteczek 31 32 Heurystyki hybrydowe Literatura cd. Mianem heurystyki hybrydowej określa się algorytm złożony z połączenia dwóch lub więcej klasycznych podejść heurystycznych (że z użyciem algorytmów dokładnych) Często stosowanymi połączeniami są np.: algorytm genetyczny z heurystyką zachłanną algorytm genetyczny z lokalnym przeszukiwam tabu search i scatter search PSO z GA ACO z PSO algorytmy populacyjne z losową heurystyką zachłanną heurystyki z algorytmami dokładnymi Fred Glover, Gary A. Kochenberger (ed.), Handbook of Metaheuristics, Kluwer Academic Publishers, Boston, 2003. 33 34 6