Drugi projekt na przedmiot: Równoległe Algorytmy Sztucznej Inteligencji. Temat: Program szukający rozwiązań problemu komiwojażera metodą tabu search z użyciem biblioteki PVM Autor: Marek Langiewicz O projekcie: Algorytm: Wykorzystałem równoległy algorytm przeszukiwania tabu (trochę zmodyfikowany). Każdy proces szukający komunikuje się z procesem nadrzędnym co określoną ilość iteracji (losowa od 500 do 3000). Lista tabu to poprostu lista ostatnio odwiedzonych rozwiązań (nie żadnych atryutów) (dł listy tabu jest losowa od 3 do 20). Proces szukający jeśli przez ustaloną ilość iteracji nie polepszy rekordu to skacze w losowe miejsce. Każdy procesz szukający pamięta parę najlepszych kierunków w które nie poszedł i jak przychodzi pora komunikacji z procesem nadrzędnym to wymieniana jest też lista najlepszych kierunków. Implementacja: Została użyta biblioteka PVM do równoległych obliczeń i również biblioteka wxWidgets (do ogólnych zastosowań w C++) Po skompilowaniu programu i skopiowaniu binarek do odp. katalogów (tak jak chce PVM) Uruchamiamy PVM i nasz program (podając jako parametr liczbę procesów szukających do odpalenia): $ pvm pvm> spawn -> TSP 10 Wyniki: Każdy Szukacz wypisuje swoje min zawsze jak poprawi na lepsze. Dodatkowo Kontroler wypisuje każdą poprawę globalnego min. Przy każdym napisie jest czas. Pliki projektu: att48.tsp - dane programu (ze strony: http://www.iwr.uni-heidelberg.de/groups/comopt/software/TSPLIB95/) d18512.tsp - inne dane (ich jeszcze nie uzywalem) Dane.cpp, Dane.h - Moduł z klasami danych wykorzystywanymi w progrmie. Szczegóły: Perm - klasa reprezentujaca okresloną permutację (czyli rozwiązanie) zawiera metody genetujące otoczenie, porównujące funkcje celu i inne Tabu - klasa zawierająca tablicę permutacji wykorzystywana jako lista tabu. (metoda: cenzuruj kasuje z podanej tablicy wszystkie elementy należące do tabu) PermITabu - poprostu permutacja i lista tabu używane jako stan algorytmu szukającego który można zapisać na później. Naj - lista n najlepszych permutacji razem z ich listami tabu Miasta_att48.h - dane programu przeformatowane dla języka C++ DaneTest.cpp - programik testujący poprawność modułu Dane Kontroler.cpp, Kontroler.h - klasa pamiętająca globalne minimum znalezione przez program i globalną tablicę Naj z najlepszymi kierunkami które można jeszcze sprawdzić Szukacz.cpp Szukacz.h - moduł z procesem szukającym. W tym pliku (Szukacz.h) jest nasz algorytm przeszukiwania tabu. TSP.cpp, TSP.h - program główny tworzący objekt Kontroler i odpalający podaną ilość Szukaczy wyniki_tsp_1.txt, wyniki_tsp_2.txt, wyniki_tsp_10.txt - wyniki działania programu dla 1 2 i 10 Szukaczy. CommonWX.cpp, CommonWX.h - moduł z różnymi rzydatnymi procedukami (napisany wcześniej - nie specjalnie dla tego projektu) Random.cpp, Random.h - do generowania liczb losowych. wxPVM.cpp wxPVM.h - opakowanie na PVMa żeby można było przesyłać dane tak samo jak dla dowolnego strumienia danych.