Aritificial Intelligence Expertsaie24.pl

Net Logo : Agenci i Środowisko

Dawno, dawno temu … w przyszłości

Sztuczna inteligencja to złożony, a jednocześnie intrygujący temat. Gdybyśmy posłużyli się analogią do opisu badań Sztucznej Inteligencji, moglibyśmy ewentualnie porównać do krajobrazu, w którym z biegiem czasu kształtuje się i zmienia kształt człowieka (aby podkreślić jego ciągłą ewolucję). Lub moglibyśmy obserwować piaski pustyni, które przesuwają się wraz z wiatrem (aby wskazać na jego dynamiczny charakter). Jeszcze inna analogia może dotyczyć efemerycznej natury chmur, kontrolowanych przez przeważające wiatry, których substancji nie da się jednak uchwycić. Te analogie są bogate w metaforę i są bliskie prawdy pod innymi względami. Język naturalny jest substancją, z którą piszemy, a metafory i analogie są ważnymi urządzeniami, które my, jako użytkownicy i producenci języka sami, jesteśmy w stanie zrozumieć i stworzyć. To jedno z największych wyzwań w dziedzinie sztucznej inteligencji. Inne wyzwania obejmowały pokonanie mistrza świata w szachach, prowadzenie samochodu w środku miasta, wykonywanie operacji chirurgicznej, pisanie zabawnych historii i tak dalej; Sztuczna inteligencja to tak ciekawy temat. Podobnie jak wspomniane wyżej przesuwane piaski, przez wiele lat dokonywano wielu ważnych zmian paradygmatu w Sztucznej Inteligencji. Tradycyjny lub klasyczny paradygmat sztucznej inteligencji (podejście "symboliczne") polega na projektowaniu inteligentnych systemów opartych na symbolach, stosując metaforę przetwarzania informacji. Przeciwny paradygmat sztucznej inteligencji (podejście "sub-symboliczne" lub onnektyczny) zakłada, inteligentne zachowanie w sposób nie symboliczny, przyjmujący ucieleśnione podejście behawiorystyczne. Takie podejście kładzie nacisk na znaczenie fizycznego uziemienia, ucieleśnienia i usytuowania, jak podkreślają prace Brooksa w dziedzinie robotyki i Lakoffa i Johnsona w dziedzinie językoznawstwa. Głównym podejściem przyjętym przez nas będzie głównie to drugie podejście, ale zostanie również opisane pośrednie podłoże w oparciu o prace Gärdenforsa, które ilustrują, w jaki sposób systemy symboliczne mogą powstać w wyniku zastosowania ukrytego podliczbowego podejścia. . Postęp wiedzy szybko się rozwija, szczególnie w dziedzinie sztucznej inteligencji. Co ważne, istnieje również nowe pokolenie ludzi , którzy poszukują tej wiedzy - tych, dla których Internet i gry komputerowe istnieją już od dzieciństwa. Ci ludzie mają bardzo odmienną perspektywę i bardzo odmienny zestaw zainteresowań niż starsi .Na przykład, nigdy nie słyszeli nawet o grach planszowych takich, dlatego będą mieli trudności z zrozumieniem znaczenia algorytmów wyszukiwania w tym kontekście. Kiedy jednak uczą się tych samych algorytmów wyszukiwania w kontekście gier komputerowych lub przeszukiwania sieci, szybko pojmują te pojęcia i przenoszą je do miejsca, w którym ty, jako ich nauczyciel, nie mógłbyś odejść bez ich pomocy. To, czego potrzebuje sztuczna inteligencja, to "odrodzenie wyobraźni", jak obecny trend w serialach science-fiction - opowiedzenie tej samej historii, ale z różnymi aktorami i różnymi akcentami, aby zaangażować nowoczesną publiczność.

AI i Języki Programowania : NetLogo

Przez lata proponowano kilka języków programowania, które dobrze pasują do budowy systemów komputerowych dla sztucznej inteligencji. Historycznie, najbardziej znanymi językami programowania AI były Lisp i Prolog

Lisp (i powiązane dialekty, takie jak Common Lisp i Scheme) ma doskonałe możliwości przetwarzania list i symboli, z możliwością łatwej zamiany kodu i danych, i był szeroko wykorzystywany do programowania AI, ale jego dziwna składnia z zagnieżdżonym nawiasem czyni go trudnym język do opanowania, a jego użycie zmniejszyło się od lat dziewięćdziesiątych.
Prolog, logiczny język programowania, stał się językiem wybranym w 1982 roku dla ostatecznie nieudanego japońskiego projektu piątej generacji, który miał na celu stworzenie superkomputera z użytecznymi możliwościami sztucznej inteligencji.
NetLogo ( stworzony przez Wilensky'ego w 1999) został wybrany do dostarczania próbek kodu w naszych przykładach, aby zilustrować, w jaki sposób można zaimplementować algorytmy. Przyczyny dostarczenia rzeczywistego kodu są takie same jak przedstawione przez Segaran w jego książce o zbiorowej inteligencji - że jest to bardziej użyteczne i "prawdopodobnie łatwiejsze do naśladowania", z nadzieją, że takie podejście doprowadzi do pewnego rodzaju nowego "kompromisu" w książkach technicznych, które "wprowadzają czytelników delikatnie w algorytmy", pokazując im działający kod. Alternatywne opisy, takie jak pseudo-kod, wydają się być niejasne i mylące oraz mogą ukrywać błędy, które stają się widoczne dopiero na etapie implementacji. Co ważniejsze, rzeczywisty kod można łatwo uruchomić, aby zobaczyć, jak działa i szybko się zmienił, jeśli czytelnik chce dokonać ulepszeń bez potrzeby pisania kodu od zera.
NetLogo (potężny dialekt Logo) to język programowania z dominującymi atutami agenta. Posiada wyjątkowe możliwości, które sprawiają, że jest niezwykle potężny do tworzenia i wizualizacji symulacji systemów wieloagentowych i jest użyteczny do podkreślania różnych problemów związanych z ich implementacją, która może zaćmiłaby bardziej tradycyjny język, taki jak Java czy C / C ++. NetLogo jest implementowany w Javie i ma bardzo zwarty i czytelny kod, dlatego jest idealny do demonstrowania skomplikowanych pomysłów w zwięzły sposób. Ponadto pozwala użytkownikom rozszerzyć język, pisząc nowe polecenia i reportery w Javie. W rzeczywistości żaden język programowania nie jest odpowiedni do wdrożenia pełnego zakresu systemów komputerowych wymaganych do sztucznej inteligencji. Rzeczywiście, nie istnieje jeszcze jeden język programowania, który sprosta zadaniu. W przypadku "sztucznej inteligencji opartej na zachowaniu" (i pokrewnych dziedzinach, takich jak ucieleśniona kognitywistyka), wymagany jest język w pełni zorientowany na agenta, który ma bogactwo języka Java, ale jest zorientowana na agentów prostota języka, takiego jak NetLogo.

Krótkie Wprowadzenie

1.1 Czym jest "Sztuczna inteligencja"?

Sztuczna inteligencja jest nauką, jak budować systemy komputerowe, które wykazują inteligencję w pewien sposób. Sztuczna inteligencja przyniosła wiele przełomów w informatyce - wiele podstawowych tematów badawczych w dzisiejszej nauce informatyki rozwinęło się z badań nad sztuczną inteligencją; na przykład sieci neuronowe, obliczenia ewolucyjne, uczenie maszynowe, przetwarzanie języka naturalnego, programowanie obiektowe, aby wymienić tylko kilka. W wielu przypadkach głównym tematem tych badań nie jest już rozwój sztucznej inteligencji, stały się dyscypliną samą w sobie, a w niektórych przypadkach nie są już uważane za związane z AI. Sama AI kontynuuje podróż w poszukiwaniu dalszych spostrzeżeń, które doprowadzą do kluczowych przełomów, które są nadal potrzebne. Być może czytelnik może być tym, który dostarczy jeden lub więcej przełomowych odkryć w przyszłości. Jednym z najbardziej ekscytujących aspektów sztucznej inteligencji jest to, że wciąż istnieje wiele pomysłów do wymyślenia, wiele dróg wciąż jest do odkrycia. Sztuczna inteligencja jest ekscytującym i dynamicznym obszarem badań. Szybko się zmienia, a badania na przestrzeni lat rozwijają i wciąż rozwijają wiele genialnych i interesujących pomysłów. Jednak musimy jeszcze osiągnąć ostateczny cel sztucznej inteligencji. Wiele osób kwestionuje, czy kiedykolwiek osiągniemy to z powodów wymienionych poniżej. Dlatego każdy, kto studiuje lub bada sztuczną inteligencję, powinien zachować otwarty umysł na temat stosowności przedstawionych pomysłów. Powinni zawsze zastanawiać się, jak dobrze działają te pomysły, pytając, czy istnieją lepsze pomysły lub lepsze podejścia

1.2 Ścieżki do sztucznej inteligencji

Zróbmy analogię między badaniami nad sztuczną inteligencją a eksploracją niezbadanego terytorium; na przykład wyobraźmy sobie czas, kiedy kontynent północnoamerykański był eksplorowany po raz pierwszy, a mapy nie były dostępne. Pierwsi odkrywcy nie mieli wiedzy o terenie, który badali; ruszają w jednym kierunku, aby dowiedzieć się, co tam jest. W tym procesie mogą zapisywać to, co odkryli, pisząc w dziennikach lub rysując mapy. Pomogłoby to późniejszym odkrywcom, ale dla większości wczesnych odkrywców teren był zasadniczo nieznany, chyba że mieli trzymać się tych samych ścieżek, z których korzystali pierwsi odkrywcy. Obecnie badania nad sztuczną inteligencją wciąż znajdują się na wczesnym etapie eksploracji. Większość terenu do zbadania jest wciąż nieznana. Eksplorator sztucznej inteligencji ma wiele możliwych ścieżek, które mogą odkrywać w poszukiwaniu metod, które mogą prowadzić do inteligencji maszyny. Niektóre z tych ścieżek będą łatwe i prowadzą do żyznych ziem; inne doprowadzą do górzystego i trudnego terenu lub do pustyń. Niektóre ścieżki mogą prowadzić do nieprzebytych klifów. Bez względu na to, jaką konkretną ścieżkę stwarza badaczom sztucznej inteligencji, poszukiwania będą ekscytujące, ponieważ w naszej ludzkiej naturze chcemy odkrywać i znajdować rzeczy. Możemy spojrzeć na ścieżki wybrane przez dawnych "odkrywców" w Sztucznej Inteligencji. Na przykład analiza pytania "Czy komputery potrafią myśleć?" doprowadziła do wielu intensywnych debat w przeszłości, które zaowocowały różnymi ścieżkami podjętymi przez badaczy sztucznej inteligencji. Nilsson zwrócił uwagę, że możemy podkreślić każde słowo po kolei, aby przedstawić inne spojrzenie na to pytanie. (Użył słowa "maszyny", ale zamiast tego użyjemy słowa "komputery"). Weź pierwsze słowo - "Czy komputery mogą myśleć?" Czy mamy na myśli: "Czy komputery mogą myśleć (kiedyś)?" lub "Czy mogą myśleć (teraz)?" Czy mamy na myśli, że mogą (w zasadzie) być w stanie, ale nigdy nie bylibyśmy w stanie go zbudować? Czy też prosimy o rzeczywistą demonstrację? Niektórzy uważają, że maszyny myślące mogą być tak skomplikowane, że nigdy nie moglibyśmy ich zbudować. Nilsson czyni analogię z próbą zbudowania systemu, który na przykład powielałby ziemską pogodę. Być może będziemy musieli zbudować system nie mniej złożony niż faktyczna powierzchnia Ziemi, atmosfera i pływy. Podobnie, ludzka inteligencja na pełną skalę może być zbyt skomplikowana, aby istnieć poza jej ucieleśnieniem u ludzi usytuowanych w otoczeniu. Na przykład, w jaki sposób maszyna może zrozumieć, czym jest "drzewo" lub czym "jabłko" smakuje bez ucieleśnienia w prawdziwym świecie? Lub możemy podkreślić drugie słowo - "Czy komputery mogą myśleć?", Ale co rozumiemy przez "komputery"? Definicja komputerów zmienia się z roku na rok, a definicja w przyszłości może być bardzo różna od dzisiejszej, a najnowsze osiągnięcia w dziedzinie komputerów molekularnych, komputerów kwantowych, komputerów z możliwością noszenia na ciele, komputerów przenośnych i wszechobecnych komputerów zmieniają sposób myślimy o komputerach. Być może możemy zdefiniować komputer jako maszynę. Znaczna część literatury AI używa słowa "maszyna" zamiennie ze słowem komputer - więc pytanie "Czy maszyny myślą?" jest często uważane za synonim "Czy komputery mogą myśleć?" Ale czym są maszyny? I czy ludzie są maszyną? (Jeśli są, jak mówi Nilsson, wtedy maszyny mogą myśleć!) Nilsson wskazuje, że naukowcy zaczynają teraz wyjaśniać rozwój i funkcjonowanie organizmów biologicznych w taki sam sposób, jak maszyny (badając genomowy "plan" każdego organizmu). Oczywiście, "biologiczne" maszyny wykonane z białek mogą myśleć (my!), Ale czy "krzemowe" maszyny mogłyby kiedykolwiek myśleć? I wreszcie możemy podkreślić trzecie słowo - "Czy komputery mogą myśleć?" Ale co to znaczy myśleć? Być może chcemy myśleć "jak" my (ludzie). Alan Turing, brytyjski matematyk i jeden z pierwszych badaczy AI, opracował słynny (a także kontrowersyjny) test empiryczny na inteligencję, która nosi jego imię - test Turinga. W tym teście maszyna próbuje przekonać ludzkiego śledczego że jest człowiekiem . (Patrz poniżej). Ten test został poddany intensywnej krytyce w literaturze AI, być może niesprawiedliwie, ponieważ nie jest jasne, czy test jest prawdziwym testem na inteligencję. W przeciwieństwie do wcześniejszego celu AI podobnego rodzaju, cel polegający na tym, że system AI pokonał mistrza świata w szachach, spotkał się z dużo mniejszą krytyką.

Test Turinga

Wyobraźcie sobie sytuację, w której prowadzicie oddzielne rozmowy z dwoma innymi osobami, których nie możecie zobaczyć w oddzielnych pokojach, być może za pomocą teletropii (jak u Alana Turinga), lub może w pokoju rozmów przez Internet (jeśli mielibyśmy zmodernizować ustawienie) . Jedna z tych osób to mężczyzna, a drugim jest kobieta - nie wiesz którym. Twoim celem jest ustalenie, kto jest kim , poprzez rozmowę z każdym z nich i zadawanie im pytań. Częścią gry jest to, że mężczyzna próbuje cię nakłonić do uwierzenia, że jest kobietą, a nie odwrotnie (inspiracja dla pomysłu Turinga pochodziła z popularnej wiktoriańskiej gry o nazwie Imitacja). Teraz wyobraź sobie, że sytuacja się zmieniła, a zamiast mężczyzny i kobiety, bohaterami są komputer i człowiek. Celem komputera jest przekonanie Cię, że jest człowiekiem, a więc dzięki temu zdać ten test na inteligencję, teraz nazywany "testem Turinga". Jak realistyczny jest ten test? Joesph Weizenbuam zbudował jeden z pierwszych chatbotów, zwany ELIZA, w 1966 roku. Jego sekretarka znalazła program uruchomiony na jednym komputerze i zaczęła łuskać historię swojego życia przez okres kilku tygodni i była przerażona, gdy Weizenbaum powiedziała jej, że to było tylko program. Jednak nie była to sytuacja, w której zdano test Turinga. Test Turinga jest testem kontradyktoryjnym w tym sensie, że jest to gra, w której jedna strona próbuje oszukać drugą, ale druga strona jest tego świadoma i stara się nie dać się oszukać. To właśnie sprawia, że test jest trudnym testem dla systemu sztucznej inteligencji. Podobnie, istnieje wiele stron internetowych w Internecie, które twierdzą, że ich chatbot zdał test Turinga; jednak do niedawna żaden chatbot nawet się do tego nie zbliżył. Istnieje otwarty (i często oczerniany) konkurs, zwany Konkursem Loebnera, który odbywa się co roku, gdzie programiści mogą przetestować swoje chatboty AI, aby sprawdzić, czy mogą zdać test Turinga. Konkurencja z 2008 roku była godna uwagi, ponieważ najlepsza sztuczna inteligencja była w stanie oszukać jedną czwartą sędziów w przekonaniu, że jest człowiekiem, co stanowi znaczny postęp w stosunku do wyników w poprzednich latach. Zapewnia to nadzieję, że komputer będzie mógł zdać test Turinga w niezbyt odległej przyszłości. Czy jednak test Turinga jest naprawdę dobrym testem na inteligencję? Być może, gdy komputer przeszedł ostateczne wyzwanie, jakim jest oszukiwanie panelu ekspertów AI, możemy ocenić skuteczność tego komputera w zadaniach innych niż test Turinga. Następnie, dzięki tym dalszym ocenom, będziemy w stanie określić, na ile naprawdę jest test Turinga (lub nie). W końcu komputer pokonał już mistrza świata w szachach, ale tylko za pomocą metod wyszukiwania z funkcjami oceny, które wykorzystują minimalną "inteligencję". I co tak naprawdę nauczyliśmy się o inteligencji - poza tym, jak budować lepsze algorytmy wyszukiwania? Warto zauważyć, że cel, jakim jest zdobycie komputera do pokonania mistrza świata, jest znacznie mniej krytykowany niż zdanie testu Turinga, a mimo to ten pierwszy został osiągnięty, podczas gdy drugi nie (jeszcze). Debatę wokół testu Turinga dobrze pokazuje praca Roberta Horna. Zaproponował język wizualny jako formę wizualnego myślenia. Część jego pracy objęła produkcję siedmiu plakatów, które podsumowują debatę Turinga w AI, aby zademonstrować jego wizualny język i wizualne myślenie. Siedem plakatów obejmuje następujące pytania:

1. Czy komputery mogą myśleć?
2. Czy test Turinga może określić, czy komputery mogą myśleć?
3. Czy mogą myśleć fizyczne systemy symboli?
4. Czy chińskie pokoje mogą myśleć?
5. (i) Czy sieci łączące mogą myśleć? oraz (ii) Czy komputery mogą myśleć obrazami?
6. Czy komputery muszą być świadome, aby myśleć?
7. Czy myślenie komputerów jest możliwe matematycznie?

Te plakaty są nazywane "mapami", ponieważ zapewniają mapę 2D, której pytania pokrywają się z innymi pytaniami, używając analogii badaczy odkrywających niezbadane terytorium. Pierwszy plakat mapuje eksploracje pytania "Czy komputery myślą?" I pokazuje ścieżki prowadzące do dalszych pytań wymienionych poniżej:

•  Czy komputery mają wolną wolę?
•  Czy komputery mogą mieć emocje?
•  Czy powinniśmy udawać, że komputery nigdy nie będą w stanie myśleć?
•  Czy Bóg nie pozwala komputerom myśleć?
•  Czy komputery rozumieją arytmetykę?
•  Czy komputery mogą narysować analogie?
•  Czy komputery są z natury wyłączone?
•  Czy komputery mogą być kreatywne?
•  Czy komputery mogą się logicznie nauczyć?
•  Czy komputery mogą być osobami?

Drugi z nich omawia debatę na temat testu Turinga: "Czy test Turinga może decydować o tym, czy komputery mogą myśleć?". Inne pytania, które zostały zmapowane na tym plakacie, to:

•  Czy gra symulacyjna może decydować, czy komputery mogą myśleć?
•  Czy symulowana inteligencja przemija, czy jest inteligentna?
•  Ile maszyn zdało test?
•  Czy niepowodzenie testu jest decydujące?
•  Czy zdanie testu jest decydujące?
•  Czy test, rozumiany behawioralnie lub operacyjnie jest legalnym testem inteligencji?

Jedną ze szczególnych ścieżek do sztucznej inteligencji, którą będziemy stosować, jest zasada projektowania, że system sztucznej inteligencji powinien być zbudowany przy użyciu zorientowanego na agenta wzorca projektowego, a nie alternatywy, takiej jak zorientowany obiektowo wzór projektowy. Agenci uosabiają silniejsze pojęcie autonomii niż obiektów, sami decydują o tym, czy wykonać działanie na żądanie innego agenta i są zdolni do zachowania elastycznego (reaktywnego, proaktywnego, społecznego), podczas gdy standardowy model obiektu nie ma nic wspólnego z powiedz o tych typach zachowań, a obiekty nie mają kontroli nad tym, kiedy są wykonywane. Kolejna ścieżka, którą będziemy śledzić, to położenie silnego nacisku na znaczenie AI opartej na zachowaniach oraz na wcielenie i usytuowanie agentów w złożonym środowisku. Wczesne przełomowe prace w tej dziedzinie dotyczyły Brooksa w robotyce oraz Lakoffa i Johnsona w dziedzinie językoznawstwa. Architektura podsieci Brooksa, obecnie popularna w robotyce i wykorzystywana w innych dziedzinach, takich jak animacja behawioralna i inteligentni wirtualni agenci, adoptuje modułową metodologię dzielenia inteligencji na warstwy zachowań, które kontrolują wszystko, co robi agent, na podstawie faktycznego fizycznego usytuowania w jego otoczeniu i dynamicznej reakcji z nim. Lakoff i Johnson podkreślają znaczenie metafory pojęciowej w języku naturalnym (np. Użycie słów "przełomowe" na początku tego paragrafu) i jak jest ona powiązana z naszym postrzeganiem poprzez naszą ucieleśnienie i fizyczne uziemienie. Prace te położyły podwaliny pod obszary badawcze ucieleśnionej nauki kognitywnej i poznania usytuowanego, a spostrzeżenia z tych obszarów zostaną również zaczerpnięte z tych podręczników.

IX Zastrzeżeń Alana Turinga wobec Sztucznej Inteligencji

1.3 Zastrzeżenia wobec sztucznej inteligencji

Przez lata było wiele zastrzeżeń do Sztucznej Inteligencji. Jest to zrozumiałe, do pewnego stopnia, ponieważ pojęcie inteligentnej maszyny, która może potencjalnie wyprzedzić i prześcignąć nas w przyszłości, jest przerażające. Być może jest to napędzane przez wiele nierealistycznych powieści science fiction i filmów wyprodukowanych w ciągu ostatniego stulecia, które koncentrują się na popularnym motywie robotów niszczących ludzkość lub przejmujących świat. Sztuczna inteligencja może zakłócić każdy aspekt naszego obecnego życia, a ta niepewność może również zagrażać ludziom, którzy martwią się, jakie zmiany mogą przynieść w przyszłości. Następujące technologie zostały określone jako wschodzące, potencjalnie "destrukcyjne" technologie, które oferują "nadzieję na poprawę kondycji ludzkiej", w raporcie zatytułowanym "Future Technologies, Today's Choices", zleconym Greenpeace Environmental Trust:

•  Biotechnologia;
•  Nanotechnologia;
•  Kognitywistyka;
•  Robotyka;
•  Sztuczna inteligencja.

Ostatnie trzy z nich odnoszą się bezpośrednio do obszaru inteligencji maszyn i wszystkie można scharakteryzować jako potencjalnie destrukcyjne, umożliwiające i interdyscyplinarne. Głównym efektem tych nowych technologii będzie różnorodność produktów ("oczekuje się, że ich pojawienie się na rynku" wpłynie na prawie każdy aspekt naszego życia "w nadchodzących dziesięcioleciach"). Technologie zakłócające przenoszą starsze technologie i "umożliwiają przejęcie radykalnie nowych generacji istniejących produktów i procesów" oraz umożliwiają zupełnie nowe klasy produktów, które wcześniej nie były możliwe do zrealizowania. Jak napisano w raporcie: "Implikacje dla przemysłu są znaczne: firmy, które nie dostosowują się szybko, stają w obliczu przestarzałości i upadku, podczas gdy te, które zajmują się i zauważają, będą mogły robić nowe rzeczy w niemal każdej możliwej dyscyplinie technologicznej". Aby zilustrować głęboki wpływ destrukcyjnej technologii na społeczeństwo, należy jedynie wziąć pod uwagę przykład komputera, a ostatnio także wyszukiwarki takie jak Google i wpływ, jaki te technologie wywarły na współczesne społeczeństwo. John Searle opracował wysoce dyskutowany sprzeciw wobec Sztucznej Inteligencji. Zaproponował eksperyment myślowy, zwany obecnie "pokojem chińskim", aby przekonać się, w jaki sposób system sztucznej inteligencji nigdy nie miałby umysłu podobnego do tego, który ma ludzkość, lub miał zdolność zrozumienia naszego sposobu działania

Chiński pokój Searle′a

Wyobraź sobie, że masz program komputerowy, który może przetwarzać znaki chińskie jako dane wejściowe i produkować chińskie znaki jako dane wyjściowe. Ten program, jeśli jest wystarczająco dobry, będzie miał zdolność do zaliczenia testu Turinga dla Chińczyków - to znaczy, może przekonać człowieka, że jest native speakerem chińskim. Według zwolenników testu Turinga, oznaczałoby to, że komputery mają zdolność rozumienia języka chińskiego. Teraz wyobraź sobie jeszcze jeden możliwy sposób działania programu. Osoba, która zna tylko angielski, została zamknięta w pokoju. Pokój jest pełen pudełek chińskich symboli ("baza danych") i zawiera książkę z instrukcjami w języku angielskim ("program") o tym, jak manipulować strunami chińskich znaków. Osoba otrzymuje oryginalne chińskie znaki za pośrednictwem jakiegoś urządzenia do komunikacji wejściowej. Następnie konsultuje się z książką i postępuje zgodnie z instrukcjami, i produkuje strumień wyjściowy chińskich znaków, które następnie wysyła przez wyjściowe urządzenie komunikacyjne. Celem tego eksperymentu myślowego jest twierdzenie, że chociaż program komputerowy może mieć zdolność do konwersacji w języku naturalnym, nie ma prawdziwego zrozumienia, jakie ma miejsce. Komputery mają jedynie możliwość używania reguł syntaktycznych do manipulowania symbolami, ale nie mają zrozumienia znaczenia (lub semantyki) z nich. Searle powiedział: "Argumentacja jest następująca: jeśli człowiek w pokoju nie rozumie chińskiego na podstawie wdrożenia odpowiedniego programu do zrozumienia chińskiego, to żaden inny komputer cyfrowy nie jest na tej podstawie, ponieważ nie ma komputera , który ma wszystko, czego człowiek nie ma. " Było wiele odpowiedzi na argument Searle'a. Podobnie jak w przypadku wielu eksperymentów z myślą o sztucznej inteligencji, takich jak ten, argument można po prostu uznać za niestanowiący problemu. Naukowcy zajmujący się sztuczną inteligencją zwykle go ignorują, ponieważ argumentacja Searle'a nie powstrzymuje nas od budowania użytecznych systemów AI, które działają inteligentnie, i czy mają umysł, czy myślą w ten sam sposób jak nasz mózg, są nieistotne. Stuart Russell i Peter Norvig zauważają, że większość badaczy AI "nie dba o silną hipotezę sztucznej inteligencji - tak długo, jak program działa, nie obchodzi go, czy nazywacie to symulacją inteligencji czy prawdziwej inteligencji." Turing sam przedstawił dziewięć zastrzeżeń wobec sztucznej inteligencji, które stanowią dobre podsumowanie większości zarzutów, które pojawiły się w kolejnych latach od opublikowania jego pracy.

1.3.1 Zarzut teologiczny
Argument ten powstaje wyłącznie z perspektywy teologicznej - tylko ludzie z nieśmiertelną duszą mogą myśleć, a Bóg dał nieśmiertelną duszę tylko ludziom, a nie zwierzętom czy maszynom. Turing nie pochwalał takich argumentów teologicznych, ale argumentował przeciwko temu z teologicznego punktu widzenia. Kolejnym problemem teologicznym jest to, że stworzenie Sztucznej Inteligencji uzurpuje sobie rolę Boga jako stwórcy dusz. Turing użył analogii ludzkiej prokreacji, aby wskazać, że mamy także rolę do odegrania w tworzeniu dusz.
1.3.2 Zastrzeżenie "Głowy w piasku"
Dla niektórych ludzi myślenie o konsekwencjach maszyny, która może myśleć, jest zbyt przerażające, aby o tym myśleć. Ten argument jest skierowany do osób, które lubią chować "głowy w piasku", a Turing pomyślał, że argument jest tak fałszywy, że nie zadał sobie trudu, aby temu zapobiec.
1.3.3 Zarzut matematycznym
Turing uznał ten zarzut oparty na matematycznym rozumowaniu za substancję większą niż dwie pierwsze. Został on podniesiony przez wiele osób, od czasu włączenia filozofa Johna Lucasa i fizyka Rogera Penrose'a. Zgodnie z twierdzeniem Gödla o niezupełności, istnieją granice oparte na logice na pytania, na które komputer może odpowiedzieć, a zatem komputer musiałby uzyskać błędne odpowiedzi. Jednak ludzie często mylą się, więc omylna maszyna może oferować bardziej wiarygodną iluzję inteligencji. Dodatkowo sama logika jest ograniczoną formą rozumowania, a ludzie często nie myślą logicznie. Sprzeciwianie się sztucznej inteligencji w oparciu o ograniczenia rozwiązania opartego na logice ignoruje fakt, że istnieją alternatywne rozwiązania nie oparte na logice (takie jak na przykład przyjęte w ucieleśnionej kognitywistyce), w których argumenty matematyczne oparte na logice nie mają zastosowania.
1.3.4 Argument ze świadomości
Ten argument mówi, że komputer nie może mieć świadomych doświadczeń ani zrozumienia. Odmianą tego argumentu jest eksperyment myślowy Johna Searlea w chińskim pokoju. Geoffrey Jefferson w 1949 podsumowuje argument: "Dopóki maszyna nie napisze sonetu lub nie skomponuje koncertu z powodu odczuwanych myśli i emocji, a nie przez przypadkowy skład symboli, możemy zgodzić się, że maszyna równa się mózgowi - to znaczy , nie tylko napisze, ale wiesz, że to on napisał. Żaden mechanizm nie mógłby odczuwać (i nie tylko sztucznie sygnalizować, łatwą manipulację) przyjemności z sukcesów, żalu, gdy zawory się topią, ocieplają pochlebstwa, staje się nieszczęśliwy przez swoje błędy, oczarowany seksem, gniewa się lub jest przygnębiony, kiedy nie może dostać to, czego chce. "Turing zauważył, że ten argument wydaje się zaprzeczeniem ważności testu Turinga:" jedynym sposobem, dzięki któremu można być pewnym, że maszyna myśli, jest bycie maszyną i myślenie ". Jest to oczywiście niemożliwe do osiągnięcia, tak jak nie można tego być pewnym , że ktokolwiek inny myśli, ma emocje i jest świadomy w taki sam sposób jak my sami. Niektórzy twierdzą, że świadomość jest nie tylko domeną ludzi, ale także ma świadomość. Zatem brak powszechnie akceptowanej definicji świadomości stwarza problemy dla tego argumentu.
1.3.5 Argumenty z różnych rodzajów ułomności
Te argumenty przyjmują postać, że komputer może robić wiele rzeczy, ale nigdy nie byłby zdolny do X. W przypadku X, Turing zaproponował następującą selekcję: "bądź miły, zaradny, piękny, przyjazny, z inicjatywą, poczuciem humoru, odróżniaj dobro od zła, popełniaj błędy, zakochaj się, ciesz się truskawkami i śmietaną, spraw, aby ktoś się w nim zakochał, ucz się z doświadczenia, używaj słów poprawnie, bądź przedmiotem własnej myśli, bądź tak różnorodny w zachowaniu jak człowiek Zróbcie coś naprawdę nowego".Turing zauważył, że zazwyczaj uzasadnione jest uzasadnienie tych argumentów, a niektóre z nich są po prostu odmianami argumentu świadomości. Ten argument pomija także wszechstronność maszyn i czystą pomysłowość ludzi, którzy je budują. Większość listy Turinga została już osiągnięta w różnym stopniu, z wyjątkiem zakochania się i cieszenia truskawkami i śmietaną. (Turing uznał to za "idiotyczną" rzecz, którą można zrobić maszyna). Agenci afektywni zostali już zbudowani, aby być życzliwym i przyjaznym. Niektórzy wirtualni agenci i gry komputerowe mają inicjatywę i są niezwykle zaradni. Ageni konwersacyjni wiedzą, jak poprawnie używać słów; niektórzy mają poczucie humoru i potrafią odróżnić dobro od zła. Bardzo łatwo jest zaprogramować maszynę, aby popełniła błąd. Niektóre generowane komputerowo twarze kompozytowe i twarz Julesa , androgenicznego robota są statystycznie doskonałe, dlatego można je uznać za piękne. Samoświadomość, czyli bycie przedmiotem własnych myśli, zostało już osiągnięte przez robota Nico w ograniczonym sensie. Pojemność pamięci masowej i możliwości przetwarzania współczesnych komputerów nakładają niewiele ograniczeń na liczbę zachowań, jakie może wykazywać komputer. (Trzeba tylko grać w grę komputerową ze złożoną sztuczną inteligencją, aby zaobserwować dużą różnorodność sztucznych zachowań). Aby komputery zrobiły coś naprawdę nowego, zobacz następny zarzut.
1.3.6 Zastrzeżenie Lady Lovelace
Ten zarzut stwierdza, że komputery nie są zdolne do oryginalnego myślenia. Lady Loveless napisała wspomnienie w 1842 r. (Zawarte w szczegółowej informacji z Analitical Engine Babbage′a) stwierdzając, że: "Silnik Analityczny nie ma żadnych pretensji aby coś zainicjować. Może zrobić wszystko, jeśli wiemy, w jakiej kolejności to wykonać". Turing argumentował, że pamięć mózgu jest podobna do pamięci komputera i nie ma powodu, aby sądzić, że komputery nie są w stanie zaskoczyć ludzi. Rzeczywiście, zastosowanie programowania genetycznego stworzyło wiele nowych wynalazków posiadających zdolność patentową. Na przykład NASA używał programowania genetycznego w celu opracowania anteny, która została zastosowana na statku kosmicznym w 2006 r. . Antena ta została uznana za konkurencyjną dla ludzi, ponieważ zapewniała podobną wydajność, co antena zaprojektowana przez człowieka, ale jej konstrukcja była całkowicie nowa.
1.3.7 Argument z ciągłości układu nerwowego
Turing przyznał, że mózg nie jest cyfrowy. Neurony strzelają impulsami, które mają komponenty analogowe. Turing sugeruje, że każdy system analogowy może być łatwo symulowany do dowolnego stopnia dokładności. Inną formą tego argumentu jest to, że mózg przetwarza sygnały (z bodźców), a nie symbole. Istnieją dwa paradygmaty w sztucznej inteligencji - symboliczne i subsymboliczne (lub koneksjonistyczne) - które protagoniści uważają za najlepszy sposób rozwoju inteligentnych systemów. Pierwsza z nich kładzie nacisk na podejście do przetwarzania symboli z góry na dół (systemy oparte na wiedzy są jednym z przykładów), podczas gdy drugi kładzie nacisk na podejście oddolne z symbolami fizycznie uziemionymi w pewien sposób (na przykład sieci neuronowe). Paradygmaty symboliczne i subimienne stały się zaciekłą debatą w sztucznej inteligencji i naukach kognitywnych na przestrzeni lat, i podobnie jak w przypadku wszystkich debat, zwolennicy często przyjmowali wzajemnie wykluczające się punkty widzenia. Metody łączące aspekty obu podejść mają pewne zalety, takie jak przestrzenie pojęciowe, co podkreśla, że reprezentujemy informacje na poziomie koncepcyjnym - to znaczy, że pojęcia są kluczowym elementem i zapewniają połączenie między bodźcami i symbolami.
1.3.8 Argument z nieformalności zachowania
Ludzie nie mają skończonego zestawu zachowań - improwizują w oparciu o okoliczności. W związku z tym, jak moglibyśmy opracować zestaw zasad lub praw, które opisywałyby, co dana osoba powinna robić w każdej możliwej sytuacji? Turing przedstawił tę argumentację w następujący sposób: "jeśli każdy człowiek miałby określony zestaw zasad postępowania, które regulowałby jego życie, nie byłby lepszy od maszyny. Ale nie ma takich zasad, więc ludzie nie mogą być maszynami. "Turing twierdzi, że tylko dlatego, że nie wiemy, jakie są prawa, nie oznacza to, że nie istnieją takie prawa. Argument ten ujawnia także błędne przekonanie, do czego zdolny jest komputer. Jeśli myślimy o komputerach jako 'maszynach' możemy łatwo popełnić błąd używając pojęcia, które możemy kojarzyć z wieloma maszynami, których używamy w codziennym życiu (takimi jak wiertarka lub samochód). Ale niektóre maszyny - tj. komputery - są zdolne do znacznie więcej niż te prostsze maszyny. Są zdolne do zachowania autonomicznego i mogą obserwować i reagować na złożone środowisko, powodując w rezultacie pożądaną złożoność zachowania. Niektóre z nich wykazują również emergentne (niezaprogramowane) zachowania ze swoich interakcji ze środowiskiem, takie jak stukanie stóp przez wirtualne pająki, które odzwierciedla zachowanie pająków w prawdziwym życiu.
1.3.9 Argument z percepcji pozazmysłowej
Ten ostatni zarzut ma dziś mniejsze znaczenie, ponieważ odzwierciedla zainteresowanie dodatkową percepcją sensoryczną (ESP), które było szeroko rozpowszechnione w czasie, gdy Turing opublikował swój artykuł. Argument jest taki, że jeśli ESP jest możliwe u ludzi, to można to wykorzystać do unieważnienia testu Turinga. (Komputer może być w stanie dokonać losowych przewidywań w grze zgadującej karty, podczas gdy człowiek z umiejętnościami czytania umysłu może być w stanie odgadnąć lepiej niż przypadek.) Turing omówił sposoby, w których warunki testu mogą zostać zmienione w celu przezwyciężenia to. Kolejny zarzut dotyczy postrzegania braku konkretnych wyników, które badania AI wytworzyły w ponad pół wieku starań. Wspomniany wcześniej raport wyjaśniał ciągłą porażkę badań nad sztuczną inteligencją: "Uważa się, że obecne systemy AI są zasadniczo niezdolne do ujawnienia inteligencji, tak jak ją rozumiemy." Termin "AI Winter" odnosi się do poglądu, że badania i rozwój Sztucznej Inteligencji słabnie i trwa to już od jakiegoś czasu. Powiązane z tym jest przekonanie, że Sztuczna Inteligencja nie jest już godnym miejscem badawczym, ponieważ (w niektórych umysłach) nie spełniła się spektakularnie w spełnianiu swoich obietnic, odkąd termin został sformułowany na konferencji Dartmouth w 1956 roku (tej konferencji teraz przypisuje się wprowadzenie terminu "Sztuczna inteligencja"). Wbrew mitowi, że istnieje AI Winter, tempo badań gwałtownie rośnie. Jednym z głównych czynników przyszłych badań będzie branża rozrywkowa - potrzeba realistycznej interakcji z postaciami niezależnymi (NPC) w branży gier oraz dążenie do większej wiarygodności w powiązanych sektorach filmowych i telewizyjnych. Branże te mają znaczne wpływy finansowe i mają prawie nieograniczony potencjał do zastosowania technologii sztucznej inteligencji. Na przykład przekształcenie rzeczywistości telewizyjnej w gry komputerowe online może doprowadzić do w pełni interaktywnej telewizji w niezbyt odległej przyszłości gdzie widzowie będą zanurzani i będą mogli wpływać na historię, którą oglądają (poprzez głosowanie na możliwe wyniki - np. czy zabić jednego z głównych aktorów). Alternatywną możliwością może być połączenie animacji komputerowej, symulacji i technologii sztucznej inteligencji ,prowadzić do filmów, które można oglądać wiele razy, za każdym razem z różnymi wynikami, w zależności od tego, co wydarzyło się podczas symulacji. Pomimo tych interesujących wydarzeń w branży rozrywkowej, gdzie AI nie jest postrzegana jako zagrożenie, coraz większe zaangażowanie technologii sztucznej inteligencji w inne aspekty naszego codziennego życia budzi coraz większy niepokój wielu osób. Kevin Warwick w swojej książce "The March of the Machines" z 1997 roku przewidział, że roboty lub super-inteligentne maszyny przemocą przejęłyby ludzkość za następne 50 lat. Jednym z powodów takiego myślenia jest projekcja, że komputery wyprzedzą moc przetwarzania ludzkiego mózgu już w 2020 r. Na przykład w tej projekcji przewidziano, że komputery mają już zdolność przetwarzania pająków - a niedawne symulacje stawonogów Sztucznego Życia pokazały, jak można obecnie uzyskać wiarygodną animację dynamiczną pająków w czasie rzeczywistym. Te same ramy używane do symulacji zostały rozszerzone na jaszczurki. Zarówno jaszczurka jak i odpowiednik pająka, został przewidziany przez Moraveca aby już został osiągnięty. Jednak w przeciwieństwie do wykresu Moraveca różnica między wirtualnymi pająkami a wirtualnymi jaszczurkami była znacznie mniejsza. Jeśli takie ramy mogą być dostosowane do naśladowania ssaków i ludzi, wówczas wiarygodne ludzkie symulacje mogą być bliższe niż początkowo sądzono. Nieporozumienia dotyczące maszyn przejmujących rasę ludzką, które grają na niepoinformowanych niepokojach i obawach ludzi, mogą niestety mieć wpływ na politykę publiczną wobec badań i rozwoju. Na przykład, petycja z Instytutu Wynalazków Społecznych stwierdza: "W związku z prawdopodobieństwem, że na początku następnego tysiąclecia komputery i roboty będą rozwijane ze zdolnością i złożonością większą niż ludzki mózg, a także z potencjałem aby działać złowrogo w stosunku do ludzi, my, niżej podpisani, wzywamy polityków i stowarzyszenia naukowe do powołania międzynarodowej komisji monitorującej i kontrolującej rozwój systemów sztucznej inteligencji. ".

Chris Malcolm dostarcza przekonujących argumentów w serii artykułów, dlaczego roboty nie rządzą światem. Podkreśla, że tempo wzrostu inteligencji jest znacznie wolniejsze niż tempo wzrostu mocy obliczeniowej. Na przykład Moravec przewiduje, że będziemy mieli w pełni inteligentne roboty w 2050, chociaż do 2020 roku będziemy mieć komputery o większej mocy obliczeniowej niż mózg. Malcolm podkreśla także niebezpieczeństwa związane z "antropomorfizmem i interpretowaniem wszystkiego". Na przykład, trudno uniknąć nie przypisywania emocji i uczuć, obserwując zadziwiająco żywy, sztuczny klon Hiroshi Ishiguro, zwany Geminoidem, lub androgenicznego androida Hansona Roboticsa. Joseph Weizenbaum, który opracował Elizę, chatbota z umiejętnością symulowania Rogeriana i jedną z pierwszych prób przejścia testu Turinga, był tak zaniepokojony niedoinformowanymi odpowiedziami osób, które nalegały, by traktować Elizę jako prawdziwą osobę, że "rasa ludzka po prostu nie była intelektualnie dojrzała, by mieszać się z tak kuszącą nauką, jak sztuczna inteligencja"

Eksperymenty konceptualnej metafory, analogii i myślowe

Duża część języka składa się z metafory pojęciowej i analogii. Na przykład analogia między badaniami sztucznej inteligencji a fizyczną eksploracją wykorzystuje przykłady metafory pojęciowej, która łączy pojęcia "badania nad sztuczną inteligencją" i "eksploracja". Lakoff i Johnson podkreślają ważną rolę, jaką metafora pojęciowa odgrywa w języku naturalnym i jak są one powiązane z naszymi fizycznymi doświadczeniami. Twierdzą, że metafora jest wszechobecna nie tylko w języku potocznym, ale w naszych myślach i działaniu, będąc podstawową cechą ludzkiego systemu pojęciowego. Rozpoznanie użycia metafory i analogii w języku może pomóc w zrozumieniu i ułatwieniu uczenia się. Na przykład opracowano koncepcyjne ramy metaforyczne dla biologii i nauczania matematyki. Analogia i metafora pojęciowa są ważnymi językowymi narzędziami do wyjaśniania związków między pojęciami. Metaforę rozumie się przez znalezienie analogii odwzorowania między dwiema domenami - między bardziej abstrakcyjną docelową domeną koncepcyjną, którą próbujemy zrozumieć, a źródłową koncepcyjną domeną, która jest źródłem wyrażeń metaforycznych. Lakoff i Johnson dokładnie zbadali powszechnie używane pojęciowe metafory, takie jak "ŻYCIE TO PODRÓŻ", i "CZAS TO PIENIĄDZE", które pojawiają się w codziennych zwrotach, których używamy w języku. Oto kilka przykładów: "Mam przed sobą swoje życie", "Zaatakował mój argument" i "Zainwestowałem w to dużo czasu". Zrozumienie tych zdań wymaga od czytelnika lub słuchacza zastosowania cech z bardziej zrozumiałych pojęć, takich jak PODRÓŻ, WOJNA i PIENIĄDZE, do mniej zrozumiałych, bardziej abstrakcyjnych pojęć, takich jak ŻYCIE, i CZAS. W wielu przypadkach bardziej zrozumiała lub bardziej "konkretna" koncepcja pochodzi z dziedziny odnoszącej się do naszego fizycznie wcielonego ludzkiego doświadczenia (np. Metafora "UP IS GOOD" użyta w wyrażeniu "Things is lookup up"). Innym przykładem jest metafora kartograficzna, która jest podstawą "map" Roberta Horna. Analogia, podobnie jak metafora, rysuje podobieństwo między rzeczami, które początkowo mogą wyglądać inaczej. Pod pewnymi względami możemy uznać analogię za formę argumentu, którego celem jest przybliżenie relacji między parami porównywanych pojęć, podkreślenie dalszych podobieństw i pomoc przez porównanie nieznanego podmiotu z bardziej znanym. Analogia wydaje się być podobna do metafory w roli, w której gra, więc jak się różnią? Według internetowego słownika Merriam-Webster metafora jest "figurą wypowiedzi, w której słowo lub fraza dosłownie oznaczają jeden rodzaj przedmiotu lub idei jest używany zamiast innego, aby zasugerować podobieństwo lub analogię między nimi (jak przy topieniu pieniędzy). "Analogię definiuje się jako" wnioskowanie, że jeśli dwie lub więcej rzeczy zgadzają się ze sobą pod pewnymi względami, prawdopodobnie zgodzą się w innych " a także "podobieństwo w niektórych szczegółach między rzeczami innymi w odróżnieniu. Zasadnicza różnica polega na tym, że metafora jest postacią mowy, w której jedna rzecz ma na myśli inną, podczas gdy analogia nie jest jedynie figurą - może być logicznym argumentem, że jeśli dwie rzeczy są podobne pod pewnymi względami, będą one podobne na inne sposoby. Język używany do opisywania informatyki i sztucznej inteligencji jest często bogaty w użycie metafory pojęciowej i analogii. Jednak rzadko są one wyraźnie określone, a zamiast tego czytelnik często jest pozostawiony do wywnioskowania z użytych słów, powstaje niejawny związek. My użyjemy analogii (i metafory pojęciowej), aby wyraźnie podkreślić, jak dwa pojęcia są ze sobą powiązane, jak pokazano poniżej:

•  Wirus komputerowy w informatyce jest analogiczny do "wirusa" w prawdziwym życiu.
•  "Robak komputerowy" w informatyce jest analogiczny do "robaka" w prawdziwym życiu.
•  "Pająk internetowy" w informatyce jest analogiczny do "pająka" w prawdziwym życiu.
•  "Internet" w informatyce jest analogiczny do "sieci pajęczej w prawdziwym życiu.
•  "Strona internetowa" w informatyce jest analogiczna do "środowiska" w prawdziwym życiu.

W tych przykładach wyraźnie stwierdzono między wirusami komputerowymi pojęcia "wirus komputerowy", "robak komputerowy", "pająk internetowy" i "Internet" oraz ich rzeczywiste odpowiedniki. Wiele funkcji (ale nie wszystkie) związanych z nimi koncepcji (takich jak wirus w prawdziwym życiu) są często używane do opisania cech abstrakcyjnego pojęcia (wirus komputerowy), który jest wyjaśniony. Te analogie należy pamiętać w porządku zrozumieć język używany do opisu pojęć. Na przykład, gdy używamy wyrażenia "przeszukiwanie sieci", możemy zrozumieć jego ukryte znaczenie w kontekście trzeciej i czwartej analogii powyżej. Alternatywne analogie (np. piąta analogia) kryją się za znaczeniem różnych metafor wykorzystywanych w wyrażeniach takich jak "gubienie się podczas wyszukiwania w Internecie" i "surfowanie po Internecie". Kiedy ktoś mówi, że zgubił się podczas eksplorowania sieci, nie jest fizycznie zagubiony. Poza tym byłoby dziwnie mówić o prawdziwym pająku "surfującym" po sieci, ale możemy mówić o osobie surfującej po Internecie, ponieważ robimy analogię, że sieć jest jak fala w prawdziwym życiu. Przykładowe metafory związane z tą analogią to wyrażenia takie jak "powódź informacji" i "zalewanie przez przeciążenie informacji". Analogia to próba utrzymania równowagi na fali informacji nad którą nie masz kontroli. Dwie ważne analogie stosowane w sztucznej inteligencji dotyczące algorytmów genetycznych i sieci neuronowych mają podstawę biologiczną:

•  "Algorytm genetyczny" w Sztucznej Inteligencji jest analogiczny do ewolucji genetycznej w biologii.
•  "Sieć neuronowa" w Sztucznej Inteligencji jest analogiczna do neuronowego przetwarzania w mózgu.

Są to przykłady "naturalnych obliczeń" - komputerów inspirowanych naturą. W niektórych przypadkach w języku używane są konkurencyjne analogie iw tym przypadku musimy wyjaśnić każdą analogię dalej, określając punkty podobieństwa i odmienności (gdzie każda analogia jest silna lub załamuje się odpowiednio) i dostarczając przykłady metafor użyte w tekście, który wyciąga analogię. Na przykład można dokonać analogii między docelową koncepcją "badania" i konkurującymi pojęciami źródłowymi "eksploracja" i "budowa" w następujący sposób:

Analogia 1 "Badania" w nauce są analogiczne do "eksploracji" w prawdziwym życiu.

Punkty podobieństwa: samo słowo "badanie" również stosuje analogię eksploracji: możemy myśleć o tym jako o procesie z powrotem (powtórzenie) wyszukiwania, które już zrobiliśmy. Punkty niepodobieństwa: wymyślanie nowych pomysłów jest bardziej skomplikowane niż poszukiwanie nowej ścieżki. Musisz budować na istniejących pomysłach, tworzyć lub konstruować coś nowego z istniejących części. Przykłady metafor użytych w tym rozdziale: "Pływamy po tym nowym morzu, ponieważ jest nowa wiedza, którą można zdobyć", "Ścieżki do sztucznej inteligencji", "Większość terenów do zbadania jest wciąż nieznana".

Analogia 2 "Badania" w nauce są analogiczne do "konstrukcji" w prawdziwym życiu.

Punkty podobieństwa: Często mówimy, że nowe pomysły są tworzone lub budowane na podstawie istniejących pomysłów; mówimy także o strukturach, które zapewniają wsparcie lub strukturę dla konkretnego pomysłu. Punkty niepodobieństwa: wymyślanie nowych pomysłów jest bardziej skomplikowane niż tylko konstruowanie lub budowanie czegoś nowego. Czasami musisz iść tam, gdzie nigdy wcześniej nie byłeś; czasem gubisz się po drodze (coś, co wydaje się dziwne, jeśli budujesz budynek). Przykłady metafor użytych w tym rozdziale: "jak budować lepsze algorytmy wyszukiwania", "Zróbmy analogię", "bazuj na istniejących pomysłach", "zazwyczaj uzasadnione jest uzasadnienie tych argumentów".

Eksperymenty myślowe

Zapewniają alternatywną metodę opisywania nowego pomysłu lub opracowywania problemów z istniejącym pomysłem. Analogią do terminu "eksperyment myślowy" jest to, że przeprowadzamy pewien eksperyment (jak naukowiec w laboratorium), ale eksperyment ten przeprowadzany jest tylko w naszym umyśle. Podobnie jak w przypadku wszystkich eksperymentów, wypróbowujemy różne rzeczy, aby zobaczyć, co może się wydarzyć, jedyną różnicą jest to, że rzeczy, które wypróbowywaliśmy, są w większości wykonywane tylko w naszych własnych myślach. Nie ma rzeczywistych eksperymentów - to tylko proces rozumowania, który jest używany przez osobę proponującą eksperymenty. W eksperymencie myślowym zasadniczo stawiamy pytania "co jeśli" w naszych własnych umysłach. Na przykład "Co jeśli X?" Lub "Co stanie się, jeśli X?", Gdzie X może być "możemy dać się zwieść przekonaniu, że komputer to człowiek" w eksperymencie myślowym Turinga. Ponadto osoba, która proponuje tę myśl eksperyment polega na tym, aby inni ludzie przeprowadzili ten sam proces myślowy we własnym umyśle, wyobrażając sobie konkretną sytuację i prawdopodobne konsekwencje. Często eksperyment myślowy wymaga postawienia się w sytuacji (w twoim umyśle), a następnie wyobrażenia sobie, co by się stało. Cel tego eksperymentu myślowego polega na przedstawianiu argumentów za lub przeciw określonemu punktowi widzenia, podkreślając ważne kwestie. Niemiecki termin eksperymentu myślowego to Gedankeneximentiment - na przykład istnieje wiele przykładów stosowanych w fizyce. Jednym z najsławniejszych postawionych przez Alberta Einsteina było ściganie wiązki światła i doprowadzenie do rozwoju Teorii Szczególnej Względności. Sztuczna inteligencja ma również wiele przykładów eksperymentów myślowych, a kilka z nich opisano w tych podręcznikach, aby zilustrować ważne idee i koncepcje.

Zasady projektowania autonomicznych agentów

Pfeifer and Scheier proponują kilka zasad projektowania dla autonomicznych agentów:

Projekt 1.1 Zasady projektowania Pfeifer i Scheier dla autonomicznych agentów.

Design Meta-Principle: "Zasada trzech składników". Ta pierwsza zasada jest klasyfikowana jako meta-zasada, ponieważ definiuje kontekst rządzący innymi zasadami. Stwierdza on, że projektowanie autonomicznych czynników obejmuje trzy składniki: (1) niszę ekologiczną; (2) pożądane zachowania i zadania; i (3) sam agent. "Środowisko zadań" obejmuje razem (1) i (2).

Zasada projektowania 1: Zasada "pełnych agentów". Agenci muszą być kompletni: autonomiczni; samowystarczalny; wcieleni; i położeni.

Zasada projektowania 2 : "zasada równoległych, luźno powiązanych procesów". Inteligencja wyłania się z interakcji między agentem a środowiskiem poprzez równoległe, luźno powiązane procesy powiązane z mechanizmami zmysłowo-motorycznymi.

Zasada projektowania 3 : "zasada koordynacji sensoryczno-motorycznej". Wszystkie inteligentne zachowania (np. Percepcja, kategoryzacja, pamięć) są wynikiem koordynacji czuciowo-ruchowej, która strukturyzuje dane zmysłowe.

Zasada projektowania 4 : "Zasada tanich projektów". Projekty są oszczędne i wykorzystują fizykę nisz ekologicznych.

Zasada projektowania 5 : "Zasada redundancji". Nadmiar jest uwzględniany w projekcie agenta z nakładaniem się informacji między różnymi kanałami sensorycznymi.

Zasada projektowania 6 : "Zasada równowagi ekologicznej". Złożoność agenta odpowiada złożoności środowiska zadań. Musi być dopasowanie złożoności czujników, układu ruchowego i podłoża neuronowego.

Zasada projektowania 7 : "Zasada wartości". Agent ma system wartości, który opiera się na mechanizmach samo-nadzorowanego uczenia się i samoorganizacji.

Te dobrze opracowane zasady mają znaczący wpływ na projektowanie autonomicznych czynników. W przeważającej części postaramy się przestrzegać tych zasad podczas projektowania naszych własnych agentów. Będziemy także wielokrotnie przeglądać aspekty tych zasad, gdzie będziemy bardziej szczegółowo analizować konkretne pojęcia, takie jak pojawienie się i samoorganizacja. Jednakże nieco zmienimy niektóre aspekty tych zasad, aby lepiej dopasować terminologię i podejście. Zamiast odróżniać trzy składniki, jak w metodzie projektowania i odnosić się do "niszy ekologicznej", wolimy używać tylko dwóch: agentów i środowisk. Środowiska są ważne dla agentów, ponieważ interakcja agent-środowisko jest niezbędna do złożonego zachowania agenta. W następnej części omówimy, co rozumiemy przez środowisko, i spojrzymy na niektóre środowiska odzwierciedlające złożoność realnego świata. Przedstawiając rozwiązania problemów, będziemy trzymać się głównie zasad projektowania opisanych powyżej, ale z następującymi dalszymi zasadami projektowania.

Dalsze zasady projektowania dla agentów i środowisk w NetLogo

Zasada projektowania 8 : Projekt powinien być prosty i zwięzły (zasada "Keep It Simple Stupid" lub KISS).

Zasada projektowania 9 : Projekt powinien być wydajny obliczeniowo.

Zasada projektowania 10 : Projekt powinien być w stanie modelować tak szeroką gamę złożonych zachowań agenta i złożonych środowisk, jak to możliwe.

Głównym powodem, dla którego projekt jest prosty i zwięzły, jest ze względów pedagogicznych. Jednakże, jak zobaczymy w ostatnich rozdziałach, prostota projektu niekoniecznie wyklucza złożoność zachowania agenta lub złożoność w środowisku. Na przykład język programowania NetLogo ma bogaty zestaw modeli, mimo że większość z nich ogranicza się do prostego środowiska 2D używanego do symulacji i wizualizacji.

Podsumowanie

Cytat z początku tej części odnosi się do czasu, kiedy ludzkość jeszcze nie pokonała "ostatecznej granicy" przestrzeni. Pół wieku późniejszej eksploracji przestrzeni kosmicznej, być może możemy uznać, że przestrzeń nie jest już "ostateczną" granicą. Mamy wiele więcej możliwości do zbadania, chociaż nie jest to kwestia fizyczna tak jak przestrzeń. Są to granice nauki i inżynierii oraz granice umysłu. Możemy albo zdecydować się na konfrontację z tymi trudnymi granicami, albo zignorować je, utrzymując nasze "głowy w piasku". Ta część stanowi wprowadzenie do dziedziny Sztucznej Inteligencji (AI) i pozycjonuje AI jako wschodzącą, ale potencjalnie destrukcyjną technologię na przyszłość. Jest to analogia między badaniem SI a eksploracją niezbadanego terytorium, oraz opisuje kilka ścieżek, które zostały podjęte w przeszłości w celu zbadania tego terytorium, niektóre z nich są ze sobą w konflikcie. Pojawiło się wiele zastrzeżeń do sztucznej inteligencji, z których wiele zostało zrobionych z ludzi, którzy są źle poinformowani. W niniejszym rozdziale podkreślono również zastosowanie metafory pojęciowej i analogii w języku naturalnym i sztucznej inteligencji. Podsumowanie ważnych pojęć, które można wyciągnąć z tej części, pokazano poniżej:

•  Istnieje wiele dróg do Sztucznej Inteligencji. Istnieje również wiele zastrzeżeń.
•  Test Turinga jest kontrowersyjnym testem sztucznej inteligencji.
•  Argument Chińskiego Pokoju Searles'a mówi, że komputer nigdy nie będzie w stanie myśleć i rozumieć tak, jak my. Badacze sztucznej inteligencji zwykle ignorują to i dalej budują użyteczne systemy sztucznej inteligencji.
•  Komputery najprawdopodobniej będą miały możliwości przetwarzania danych do 2020 roku, ale na komputery z inteligencją prawdopodobnie poczekamy dłużej.
•  AI Winter - nie w tej chwili.
•  Konceptualna metafora i analogia - to ważne urządzenia językowe, których powinniśmy być świadomi, aby to zrozumieć język naturalny.
•  Pfeifer i Scheier zaproponowali kilka ważnych zasad projektowania dla autonomicznych agentów.

Agenci i Środowisko

2.1 Co to jest agent?

Systemy zorientowane na agenta stały się jednym z najbardziej żywych i ważnych obszarów informatyki. Historycznie, jednym z głównych obszarów zainteresowania w sztucznej inteligencji było budowanie inteligentnych systemów. Standardowy podręcznik w AI napisany przez Russella i Norviga przyjmuje koncepcję racjonalnych agentów jako centralnych dla ich podejścia do sztucznej inteligencji. Nacisk kładziony jest na rozwój systemów agentów, które można rozsądnie nazwać inteligentnymi. Systemy zorientowane na klienta są również ważnym obszarem badań, który leży u podstaw wielu innych obszarów badawczych w dziedzinie technologii informatycznych. Na przykład, twórcy programu Agentlink III, który jest siecią doskonałości dla systemów opartych na agentach, twierdzą, że agenci stanowią podstawę wielu aspektów szerszego europejskiego programu badawczego oraz że "agenci stanowią najważniejszy nowy paradygmat rozwoju oprogramowania od momentu orientacji". Istnieje jednak wiele nieporozumień dotyczących tego, co ludzie rozumieją przez "agenta". Poniżej przedstawiono kilka perspektyw dla znaczenie terminu "agent".

Perspektywa : Sztuczna Inteligencja

Kluczowa Idea : Agent jest ucieleśniony (tj. Usytuowany) w otoczeniu i podejmuje własne decyzje. Odbiera on otoczenie poprzez czujniki i działa na otoczenie poprzez siłownik
Obszary Zastosowania : Inteligentni agenci. Inteligentne systemy. Robotyka.

Perspektywa : Przetwarzanie Rozproszone

Kluczowa Idea : Agent to autonomiczny proces programowy lub wątek.
Obszary Zastosowania : Model trójwymiarowy (przy użyciu agentów). Sieci peer-to-peer. Przetwarzanie równoległe i gridowe.

Perspektywa : Obliczenia Internetowe

Kluczowa Idea : Agent wykonuje zadanie w imieniu użytkownika. tj. agent działa jako proxy; użytkownik nie może wykonać (lub nie chce wykonać) zadania samodzielnie.
Obszary Zastosowania : Pająki i roboty sieciowe. Skrobaczki internetowe. Gromadzenie, filtrowanie i pobieranie informacji.

Perspektywa : Symulacja i modelowanie

Kluczowa Idea : Agent udostępnia model do symulacji działań i interakcji autonomicznych osób w sieci.
Obszary Zastosowania : Teoria gry. Złożone systemy. Systemy wieloagentowe. Programowanie ewolucyjne

Termin "bot" - skrót od robota - stał się powszechny jako zamiennik terminu "agent". W publikacjach akademickich zwykle preferowany jest ten drugi - na przykład agent konwersacyjny, a nie chatbot lub chatterbot - choć są one synonimami. Lista botów jest pokazana poniżej w nazwie zgodnie z zadaniami, które wykonują.

Nazwa(-y) botów : Opis

Chatterbots : Służą do czatowania w sieci.
Annoybots : Używane do niszczenia pokojów rozmów i grup dyskusyjnych.
Spamboty : Którzy generują niepożądane wiadomości e-mail "spam") po zebraniu internetowych adresów e-mail.
Mailbots : Zarządzający i filtrującymi wiadomości e-mail (np. W celu sunięcia spamu).
Spiderbots : Przeszukują sieć w celu pobrania zawartości do bazy danych (np. Googlebot). Do wyszukiwania silników (np. Google) jest to następnie indeksowane w pewien sposób.
Infobots : Zbierają informacje. na przykład "Newsbots" bierają wiadomości; "Hotboty" znajdują najgorętsze lub najnowsze strona dla informacji; "Jobbots" zbierają informacje o pracy.
Knowbots lub Knowledgebots : Szukają konkretnej wiedzy. na przykład "Shopbot"

Inne nazwy agentów i botów to: agenci programowi, kreatory, pająki, inteligentne roboty programistyczne, softboty i różne dalsze kombinacje słów "oprogramowanie", "inteligentny", "bot" i "agent". Zamieszanie może również powstać, ponieważ ludzie często przyjmują terminy z innych obszarów i przenoszą znaczenie w swoje własne obszary zainteresowań. W trakcie procesu pierwotne znaczenie tego terminu często może ulec zmianie lub pomieszaniu. Na przykład "robot" to inne określenie, takie jak "agent", w którym dokładne znaczenie jest trudne do ustalenia. Termin "robot" jest teraz mylony z terminem "bot" - wiele osób uważa teraz "robot" za niekoniecznie maszynę fizyczną, ponieważ w ich definicji są takie rzeczy jak pająki internetowe (używane w wyszukiwarkach), i konwersacyjne roboty (takie, jakie można napotkać w tych dniach podczas dzwonienia na infolinię). Jeszcze więcej nieporozumień powstaje, ponieważ dla niektórych osób oba te mogą być również uważane za agentów. Co może także powodować zamieszanie z użyciem terminu agent, jest często związane z pojęciem "agencji", które samo w sobie może mieć wiele znaczeń. Jednym z aspektów pojęcia agencji jest zdolność agenta do działania w świecie - dla ludzi wiąże się to z ich zdolnością do dokonywania własnych wyborów, które będą miały wpływ na świat, w którym żyją. Znaczenie to jest ściśle związane z znaczenie agenta, który przyjmujemy w tych książkach. Jednak innym znaczeniem agencji jest upoważnienie do działania w imieniu innej osoby - na przykład biuro podróży jest upoważnione do działania w imieniu swoich klientów w celu znalezienia najbardziej konkurencyjnej firmy z opcjami podróży. Słownik online Merriam-Webster podaje następujące znaczenia terminu agent:

1. Który działa lub wywiera moc;
a: coś, co wytwarza lub może wywołać efekt: czynną lub wydajną
b: zasada chemiczna, fizyczna lub biologicznie czynna;
3. środek lub narzędzie, za pomocą którego prowadząca inteligencja osiąga wynik;
4. ten, kto jest upoważniony do działania w imieniu lub w miejsce innego: jak
a: przedstawiciel, emisariusz lub urzędnik rządu < agent korony > < agent federalny >
b: jeden zaangażowany w tajne działania (jako szpiegostwo): szpieg
c: przedstawiciel handlowy (jako sportowiec lub artysta) < a theatrical agent >;
5. aplikacja komputerowa przeznaczona do automatyzacji niektórych zadań (takich jak zbieranie informacji online).

Czwarte znaczenie agenta odnosi się do znaczenia agenta często używanej w ogólnym języku angielskim, takiej jak używane w popularnych zwrotach "agent ubezpieczeniowy", "agent modelujący", "agent reklamowy", "tajny agent" i "agent sportowy". To może wywołać najwięcej zamieszania, ponieważ różni się od znaczenia agenta przyjętego i nas (co jest bardziej związane z piątym znaczeniem). Wszystkie te podobne, ale nieco inne znaczenia wywodzą się z podstawowej koncepcji "agenta". Najlepiej można to zrozumieć, zauważając, że agent lub system zorientowany na agenta jest analogiczny do człowieka w prawdziwym życiu. Biorąc pod uwagę tę analogię, możemy dokonać porównania między zorientowanymi na agentów systemami, które projektujemy, a atrybutami ludzi w prawdziwym życiu. Ludzie podejmują własne decyzje, istnieją w nich, wchodzą w interakcję z otaczającym je środowiskiem i wpływają na nie. Podobnie, celem projektantów agentów jest wyposażenie ich systemów zorientowanych na agenta podobnymi zdolnościami decyzyjnymi i podobną zdolnością do interakcji i wpływania na środowisko. W tym świetle różne znaczenia wymienione w definicji słownika są powiązane ze sobą za pomocą podstawowej analogii podmiotu, który ma zdolność działania dla siebie, lub w imieniu innego, lub z możliwością wywołania efektu, z niektórymi możliwości człowieka. Agent istnieje (znajduje się) w środowisku i jest w stanie wyczuwać, poruszać się i wpływać na to środowisko, podejmując własne decyzje, które mają wpływ na przyszłe zdarzenia. Agent jest analogiczny do osoby w prawdziwym życiu, posiadającej pewne zdolności danej osoby. Z punktu widzenia sztucznej inteligencji kluczową ideą jest to, że agent jest ucieleśniony (tj. Usytuowany) w środowisku. Franklin i Graesser definiują autonomicznego agenta jako "system usytuowany wewnątrz i część środowiska, które wyczuwa to środowisko i działa na nie, z biegiem czasu, w dążeniu do własnej agendy i aby osiągnąć to, co wyczuwa w przyszłość". Na przykład agent oparty na grach znajduje się w środowisku wirtualnej gry, podczas gdy roboty są zlokalizowane w rzeczywistym (lub prawdopodobnie symulowanym) środowisku. Agent postrzega środowisko za pomocą czujników (rzeczywistych lub wirtualnych) i działa na nie za pomocą siłowników (ponownie, rzeczywistych lub wirtualnych). Znaczenie terminu "agent" może jednak zmienić nacisk, gdy stosowana jest alternatywna perspektywa, co może prowadzić do zamieszania. Ludzie często będą również używać definicji, którą znają z własnego tła i zła. Na przykład, przetwarzanie rozproszone, przetwarzanie w Internecie i symulacja oraz modelowanie zapewniają trzy dalsze perspektywy definiowania, czym jest "agent". W sensie przetwarzania rozproszonego agenty są autonomicznymi procesami programowymi lub wątkami, w których ważne są atrybuty mobilności i autonomii. W rozumieniu agentów internetowych, pojęcie agencja jest kryterium nadrzędnym, tj. agenci działają w imieniu kogoś (tak jak robi to biuro podróży, udzielając pomocy w organizowaniu podróży w naszym imieniu, gdy nie mamy wiedzy, ani ochoty, ani czasu, aby to zrobić sami ). W symulacji i modelowaniu model oparty na agentach (ABM) to model obliczeniowy, którego celem jest symulacja działań i interakcji autonomicznych jednostek w sieci lub środowisku, a tym samym ocena ich wpływu na system jako całość

Projektowanie zorientowane na agenta a projektowanie zorientowane na obiekt

Czym różni się projektowanie zorientowane na agentów od projektowania obiektowego? Aby odpowiedzieć na to pytanie, najpierw musimy zbadać, co to znaczy, aby projekt systemu był zorientowany obiektowo. Programowanie obiektowe (OOP) jest obecnie głównym paradygmatem programowania obsługiwanym przez większość języków programowania. "Obiekt" to encja oprogramowania, która jest abstrakcją osoby, miejsca lub rzeczy w realnym świecie. Obiekty są zwykle powiązane z rzeczownikami, które pojawiają się w wymaganiach systemowych i są ogólnie definiowane przy użyciu klasy. Celem zajęć jest scalenie wszystkich danych i procedur (zwanych "metodami") w jednym miejscu. Przedmiot składa się z: tożsamości, która pozwala na jednoznaczną identyfikację przedmiotu - na przykład atrybuty takie jak imię i nazwisko, data urodzenia, miejsce urodzenia mogą jednoznacznie identyfikować osobę; stany, takie jak "door = open" lub "switch = on"; i zachowanie, takie jak "wyślij wiadomość" lub "otwarte drzwi" (są one powiązane z czasownikami + rzeczownikami w wymaganiach systemowych). Jakie właściwości potrzebuje system, aby był zorientowany na obiekt? Niektóre definicje stwierdzają, że tylko wymagane są abstrakcje i enkapsulacja właściwości. Inne definicje stwierdzają, że wymagane są również dalsze właściwości: dziedziczenie, polimorfizm, wiązanie dynamiczne i trwałość.

Opis : Właściwości

Abstrakcja : Obiekty oprogramowania to wirtualne reprezentacje obiektów świata rzeczywistego. Na przykład klasa HumanClass może być abstrakcją ludzi w prawdziwym świecie. Możemy uważać klasę za definiującą analogiczny związek między nią a ludźmi w prawdziwym świecie.

Enkapsulacji : Obiekty obejmują wszystkie dane i metody związane z klasą, a dostęp do nich jest dozwolony tylko poprzez ściśle wymuszony interfejs, który definiuje to, co jest widoczne dla innych klas,pozostała część pozostaje ukryta (zwana "ukrywaniem informacji"). Na przykład klasa HumanClass może mieć metodę talk (), której kod określa dokładnie, co i jak mówiosiągnięty. Jednak każdy, kto chce wykonać metodę talk () nie jest zainteresowany tym, w jaki sposób mówienie zostało osiągnięte.

Dziedziczenie : Projektant może zdefiniować podklasy, które są specjalizacjami klas nadrzędnych. Podklasy dziedziczą atrybuty i zachowanie swoich klas nadrzędnych, ale mają dodatkową funkcjonalność. Na przykład HumanClass dziedziczy właściwości swojej macierzystej MammalClass, która z kolei dziedziczy właściwości od rodzica AnimalClass.

Polimorfizm : To dosłownie oznacza "wiele form". Metoda o tej samej nazwie zdefiniowana przez klasę nadrzędną może przyjmować różne formy podczas wykonywania w zależności od definicji podklasy. Na przykład, MammalClass może mieć metodę talk () - spowoduje to wykonanie różnych procedur dlaobiekt należący do HumanClass w porównaniu do obiektów należących do DogClass lub LambClass (ten pierwszy może zacząć czatować, podczas gdy drugi może zacząć szczekać lub beczeć).

Dynamiczne wiązanie : Określa, która metoda jest wywoływana w środowisku wykonawczym. Na przykład, jeśli d jest obiektem klasy DogClass, wtedy odpowiednia metoda do jej aktualnej klasy zostanie wywołana w czasie wykonywania, gdy d.talk () jest wykonany. (Szczekanie zostanie stworzone zamiast czatowania lub beczenia).

Persistence : Obiekty i klasy obiektów pozostają, dopóki nie zostaną jawnie usunięte, nawet po ich zakończeniu wykonania.

Rysunek poniższy ilustruje, w jaki sposób obiekty są abstrakcjami dla podmiotów w prawdziwym życiu. Są przedstawione trzy obiekty - Bill, który jest instancją HumanClass, Tooty, który jest instancją klasy DogClass i Timothy, która jest instancją LambClass. (Obiekty są również nazywane "instancjami" danej klasy).





Czym różni się agent od obiektów? Wooldridge zapewnia następującą odpowiedź:

•  Agenci mają większy stopień autonomii niż obiekty.
•  Obiekty nie mają kontroli nad tym, kiedy są wykonywane, podczas gdy agenci decydują samodzielnie, czy wykonać jakąś akcję. Innymi słowy, obiekty wywołują metody innych obiektów, podczas gdy agenty proszą innych agentów o wykonanie niektórych akcji.
•  Agenci są zdolni do zachowania elastycznego (reaktywnego, proaktywnego, społecznego), podczas gdy obiekty nie określają takich zachowań.
•  System wieloagentowy jest z natury wielowątkowy - zakłada się, że każdy agent ma co najmniej jeden wątek kontroli.

Możemy przyjrzeć się dwóm przykładowym zadaniom, aby dokładniej zilustrować rozróżnienie między agentami i obiektami: zadanie 1, czyszczenie podłogi w kuchni; i zadanie 2, pranie. Jakie są zorientowane na klienta i obiektowe rozwiązania tych dwóch zadań? Krótka odpowiedź brzmi, że dla żadnego z zadań nie istnieje rozwiązanie całkowicie obiektowe, ponieważ musimy użyć agenta, aby wykonać zadania. W przypadku zadania 1 osoba czyszcząca podłogę może być uważana za przedstawiciela. W przypadku rozwiązania obiektowego tę osobę można uznać za analogiczną do twórcy oprogramowania - podejmie on decyzje o tym, kiedy rozpocząć czyszczenie, i wybierze odpowiednie narzędzia (przedmioty) oraz sposób ich użycia. Sam wybierze najbardziej odpowiednie ustawienia - odpowiadają one parametrom, które programista wybiera podczas pisania kodu (np. Stan, metody i argumenty przekazywane metodom). Niektóre przykładowe obiekty to: miotła - jej kierunek użycia, prędkość i częstotliwość przeciągnięć; wiadro - ile wody, jej temperatura, rozmiar wiadra; lub odkurzacz - ustawienie mocy, ustawienie dywanu lub twardej posadzki, jej kierunek użytkowania i tak dalej. W przeciwieństwie do tego, jednym z możliwych rozwiązań zorientowanych na agentów jest sprawienie, by robot wykonał zadanie - na przykład zrobotyzowany odkurzacz (patrz zdjęcie po prawej). W przeciwieństwie do rozwiązania obiektowego, robot działa sam, a nie ktoś inny. Sam decyduje, gdzie, kiedy i jak to zrobić. Na ryzyko antropomorfizacji, co jest oczywiście maszyną, możemy wziąć pod uwagę samego robota, który podejmuje decyzje, takie jak: "Nie muszę tego teraz robić - zrobię to jutro"; "Kończą mi się moce - lepiej się ładuję ponownie"; "Podłoga jest trochę brudna - lepiej ją zmoczyć"; "Utknąłem - lepiej poprosić o pomoc". W przypadku zadania 2, obiektowe rozwiązanie polega na tym, aby czynnik ludzki używał pralki do prania odzieży. Pralka ma wiele ustawień, które człowiek może wybrać. W większości przypadków dosłownie nie wie, jak działa pralka - jej działania są ukryte przed nim. Po naciśnięciu przycisku start (to jest analogicznie do rozpoczęcia wykonywania kodu programu), pozostaje niewiele kontroli nad tym, co dzieje się później. Obiekt pralki ma metody - na przykład szybki cykl, cykl wirowania i tak dalej. Ma także stan - na przykład czas do zakończenia, temperaturę i tak dalej. W przeciwieństwie do tego, czynniki ludzkie są jedynym rozwiązaniem zorientowanym na agent, dostępnym obecnie dla tego problemu. W przyszłości, robot domowy może wykonać to zadanie dla ludzi. W tym przypadku z jego perspektywy może podjąć następujące decyzje: "teraz zrobię pranie dla ciebie"; "Ja sam zabiorę brudne ubrania"; "Teraz się doładuję". Zwróć uwagę, że słowa "ja" i "mnie" zostały wyróżnione kursywą dla dwóch powyższych zadań. Ma to na celu podkreślenie pierwszoosobowej perspektywy projektowej agenta - podejmuje decyzje z własnego osobistego punktu widzenia. Obiekty przeciwnie, są zaprojektowane z perspektywy trzeciej osoby, będąc przywoływanymi zewnętrznie - wewnętrznie, nie ma pojęcia "ja". Programowanie i projektowanie obiektowe jest dominującym paradygmatem inżynierii oprogramowania; kilka głównych języków programowania obsługuje obecnie programowanie zorientowane na agentów. Na przykład Python jest wieloparadygmatem, ale nie obsługuje programowania zorientowanego na agenta. Obecnie deweloper jest zmuszony uciekać się do hybrydowego projektu - za pomocą platform zorientowanych na agenta zaimplementowanych na platformie zorientowanej obiektowo. Różne struktury agentów omówiono w następnym rozdziale. W międzyczasie przyjrzymy się różnym rodzajom agentów, ich właściwościom i rodzajom środowisk, w których mogą one istnieć.

Taksonomia autonomicznych agentów Powszechną metodą stosowaną w badaniach naukowych jest klasyfikowanie pojęć w taksonomię. Często są one przydatne w tworzeniu struktury ułatwiającej organizację tematu dyskusji. Wiele przykładów można podzielić na wiele kategorii lub istnieją one między granicami dwóch powiązanych ze sobą pojęć. Dlatego należy ostrożnie stosować klasyfikację taksonomiczną. Rysunek pokazuje taksonomię autonomicznych agentów w oparciu o taksonomię zaproponowaną przez Franklina i Graessera (1998).



Biorąc pod uwagę powyższe komentarze na temat ograniczeń klasyfikacji taksonomicznej, należy podkreślić, że nie jest to ostateczna lub wyczerpująca taksonomia. Dolny wiersz na poprzednim rysunku różni się od taksonomii Franklina i Graessera, która składa się tylko z trzech podkategorii w kategorii "Agenci oprogramowania" - są to "Agenci specyficzni dla zadań", "Agenci rozrywki" i "Wirusy". Te ostatnie nie są uwzględnione - chociaż wirusy komputerowe są formą agenta, nie są dobroczynne (to jest,zwykle szkodliwe) i są lepiej traktowane jako osobny przedmiot. "Agent specyficzny dla zadań" został rozszerzony w celu dokładniejszego zbadania poszczególnych zadań, takich jak przetwarzanie języka ludzkiego i zbieranie informacji. Zauważ, że ostatni wiersz nie jest w żadnym wypadku wyczerpujący - kolejne kategorie agentów obejmują wirtualnych ludzi, interakcje międzyludzkie, mobilne i wszechobecne czynniki. Inna kategoria agentów, o której często się mówi, to "Inteligentni agenci". Niestety, ten termin jest często nadużywany. Często system jest oznaczony jako inteligentny agent z niewielkim uzasadnieniem, dlaczego jest "inteligentny". Ocena może następnie polegać na pomiarze, jak dobrze agent wykonuje zadania, dla których został zaprojektowany. To, czy osiągi są wystarczające, aby agent został zaklasyfikowany jako "inteligentny", zależy od obserwatora, który obserwuje wykonywane zadanie. Omówimy teraz każdy z typów agentów, aby pomóc w wyjaśnieniu definicji. "Real Life Agents" oznacza żywe zwierzęta, takie jak ssaki, gady, ryby, ptaki, owady i tak dalej. Franklin i Graesser użyli terminu "agenci biologiczni" zamiast tej kategorii, ale można to pomylić z czynnikami biologicznymi, którymi są toksyny, choroby zakaźne (takie jak wirusy w prawdziwym życiu; na przykład Denga Fever i Ebola) i bakterii (takich jak Anthrax i Plague). "Sztuczni agenci życia" to agenci, którzy tworzą sztuczną formę życia lub symulują prawdziwą istotę życiową. Robotyczne mechanizmy mechaniczne (zamiast robotów programistycznych) są również agentami z punktu widzenia sztucznej inteligencji - na przykład roboty używane do misji Mars Rover, takie jak Spirit i Opportunity, działają jako "agenci" dla NASA na Marsie, ale mają także pewien stopień autonomii, aby działać samodzielnie. Agenci oprogramowania, którzy istnieją wyłącznie w środowisku wirtualnym lub opartym na oprogramowaniu. Można je podzielić na wiele różnych kategorii - na przykład agentów przetwarzających język ludzki, agentów zbierających informacje, agentów posiadających wiedzę, agentów, którzy uczą się i agentów przeznaczonych do celów rozrywkowych, takich jak używane w grach komputerowych i na specjalne potrzeby efekty w filmach. "Human Agents" naturalnie należą do kategorii "Real Life Agents". Murch i Johnson (1999) wskazują, że obecnie ludzie są agentami, którzy są najlepsi w wykonywaniu najbardziej złożonych zadań na świecie i będą tak przez jakiś czas. Ludzie agenci o specjalistycznych umiejętnościach (np. biuro podróży lub agent piłki nożnej lub gwiazda filmowa) świadczą usługi w imieniu innych ludzi, którzy nie byliby w stanie uzyskać tej usługi w inny sposób, lub którzy nie mają czas lub umiejętności, aby zrobić to samemu. Mają kontakty, aby świadczyć tę usługę, mają dostęp do odpowiednich informacji i często mogą świadczyć tę usługę za ułamek kosztów. Jednak ludzie są ograniczeni liczbą godzin pracy w tygodniu; w ciągu 12 godzin mogą pracować maksymalnie 84 godziny w tygodniu, a przy tym szybko wypalą! Dlatego istnieje możliwość, aby agenci komputerowi mogli nam przezwyciężyć te ograniczenia. Próbując sklasyfikować, czym jest agent, możemy również zadać przeciwne pytanie - "Czym nie są agenci?" Nwana (1996) zauważył, że Minsky w swojej książce "Towarzystwo Umysłu" użył tego terminu do sformułowania swojej teorii ludzkiej inteligencji:

…aby wyjaśnić umysł, musimy pokazać, jak umysły są budowane z bezmyślnych rzeczy, z części, które są znacznie mniejsze i prostsze niż wszystko, co uważalibyśmy za mądre …Ale jakie mogłyby być te prostsze cząstki -" agenci ", którzy tworzą nasz umysły? To jest temat naszej książki… " (Minsky)

Nazwa definiuje agentów w taki sposób, że pojęcie Minsky′ego o agencie nie spełnia jej kryteriów. Używa trzech minimalnych cech, by wyprowadzić cztery typy agentów w oparciu o typologię pokazaną na poniższym rysunku : współpracujący agent, współpracujący agent uczący się, agenci interfejsu i prawdziwi inteligentni agenci. Ta ostatnia rozszerza tę listę, aby uwzględnić trzy dalsze typy: agentów informacji / Internetu, agentów reaktywnych i agentów hybrydowych



Jej definicja mówi, że agenci działają bardziej na poziomie wiedzy niż na poziomie symboli i wymagają "komunikacji na wysokim poziomie" [jej słów] (w przeciwieństwie do "komunikatów niskiego poziomu" używanych w systemach rozproszonych). Dlatego agenci Minsky′ego, systemy eksperckie, większość opartych na wiedzy aplikacji systemowych i moduły w aplikacjach rozproszonych nie kwalifikują się. Ani agenci żółwi nie używali języka programowania NetLogo, języka zaprojektowanego po jej opublikowaniu. Termin proto-agent jest często używany w modelowaniu agentów i symulacji w celu objęcia agentów "niższego poziomu", takich jak agenci żółwi w NetLogo, aby odróżnić je od agentów, do których należą. Slniejsze definicje, takie jak Nwana. Północ i Macal definiują proto-agenta jako jednostkę używaną w modelowaniu i symulacji, która zachowuje zestaw właściwości i zachowań, które nie muszą wykazywać zachowania uczenia się. Jeśli uzyskają oni zdolność uczenia się, stają się agentami. Do celów tych książek, zamiast dokonywania arbitralnego rozróżnienia między proto-agentem i agenta, uważamy, że wszystkie powyższe przykłady mają pewien stopień agresywności zdefiniowany w podrozdziale 2.1. Dlatego użyjemy terminu agent zamiast raczej proto-agenta, ponieważ w rzeczywistości obecnie nie istnieje żaden system zorientowany na agenta, który osiągnął jeszcze pełny zestaw właściwości zgodnie z definicją Nwana lub zestaw pożądanych właściwości opisanych bardziej szczegółowo w następnym dokumencie.

Pożądane właściwości agentów

Pojęcie agenta można zdefiniować, wyszczególniając pożądane właściwości, które chcemy wystawiać agentom. Russell i Norvig zidentyfikowali pierwsze cztery właściwości w tabeli jako kluczowe atrybuty agenta z perspektywy sztucznej inteligencji: autonomię (działanie we własnym imieniu bez interwencji); reaktywność (reagowanie na bodźce); proaktywność (bycie proaktywnym); i zdolności społeczne (w stanie komunikować się w jakiś sposób z innymi agentami). Autonomia jest w szczególności ważną kluczową cechą - w rzeczywistości termin "niezależni agenci" jest często używany w literaturze jako synonim systemów zorientowanych na agenta, aby podkreślić ten punkt. Sześć właściwości w Tabeli 2 często określa się jako należące do słabego agenta, dodając zdolność do wyznaczania celów i ciągłości czasowej jako dwa dalsze kluczowe atrybuty. Właściwości w tabeli 3 są związane z silnym pojęciem środka, ponieważ są to właściwości zwykle stosowane u ludzi. Taskin i in. wymień trzy dalsze właściwości w tabeli , które są kombinacjami podstawowych właściwości: koordynacja, umiejętność współpracy i zdolność planowania.

Właściwość : Opis

Autonomia : Agent sprawuje kontrolę nad własnymi działaniami; działa asynchronicznie.

Reaktywność : Agent reaguje w odpowiednim czasie na zmiany w środowisku i sam decyduje o tym kiedy działać.

Proaktywność : Agent reaguje w najlepszy możliwy sposób na możliwe przyszłe działania, które są oczekiwane zdarzyć.

Zdolności społeczne (Zdolność do porozumienia się) : Agent ma możliwość komunikowania się w sposób złożony z innymi agentami, w tym ludzi, w celu uzyskania informacji lub uzyskania pomocy w osiąganiu celów.

Umiejętność wyznaczania celów : Agent ma cel.

Czasowa ciągłość : Agent jest ciągle działającym procesem.

Właściwość : Opis

Mobilność : Agent może się przemieszczać w swoim otoczeniu.

Adaptacyjność : Agent ma zdolność uczenia się. Jest w stanie zmienić swoje zachowanie na podstawie swojego poprzedniego doświadczenia.

Życzliwość : Agent wykonuje swoje działania dla dobra innych.

Racjonalność : Agent podejmuje racjonalne, świadome decyzje.

Umiejętność współpracy : Agent wykonuje współpracę z innymi agentami lub ludźmi w celu wykonania swoich zadań.

Elastyczność : Agent jest w stanie dynamicznie reagować na zewnętrzny stan środowiska wybór własnych działań.

Osobowość : Agent ma dobrze zdefiniowaną, wiarygodną osobowość i stan emocjonalny.

Zdolności poznawcze : Agent jest w stanie jednoznacznie uzasadnić własne intencje lub stan i plany innych agentów.

Wszechstronność : Agent może mieć wiele bramek jednocześnie.

Wiarygodność : Agent nie będzie świadomie przekazywać fałszywych informacji.

Wytrwałość : Agent będzie nieprzerwanie dążyć do realizacji jakiegokolwiek planu.

Właściwość : Opis

Koordynacja : Agent ma możliwość zarządzania zasobami, gdy trzeba je rozprowadzić lub zsynchronizować.

Współpraca : Agent wykorzystuje protokoły interakcji poza prostymi dialogami, na przykład negocjacje dotyczące znalezienia wspólnego stanowiska, rozwiązywania konfliktów lub dystrybucji zadań

Umiejętność planowania : Agent ma zdolność aktywnego planowania i koordynowania swoich reaktywnych zachowań w obecności dynamicznego środowiska stworzonego przez innych agentów.

Te definicje są interesujące z filozoficznego punktu widzenia, ale ich znaczenie jest często niejasne i nieprecyzyjne. Na przykład, jeśli ktoś spróbuje sklasyfikować istniejące systemy agentowe za pomocą tych etykiet, okaże się, że zadanie jest obarczone trudnościami i niespójnościami. Proste ćwiczenie w stosowaniu tych właściwości w celu klasyfikacji przykładów systemów zorientowanych na agenta ujawni niektóre niedociągnięcia takiego systemu klasyfikacji. Na przykład Googlebot, robot sieciowy używany przez Google do tworzenia indeksu sieci, ma autonomię właściwości, reaktywność, ciągłość czasowa, mobilność i życzliwość, ale to, czy przejawia inne właściwości, jest niejasne - na przykład nie ma właściwości racjonalności (podejmowane przez nią świadomie decyzje nie są jego własnymi). Dlatego wykazuje zarówno słabe, jak i silne właściwości, ale może być interpretowany jako nie. Chatbot z drugiej strony wykazuje wszystkie te właściwości w różnych mocach. Być może najdziwniejsza z właściwości jest życzliwością. Nie jest jasne, dlaczego jest to niezbędna właściwość systemu zorientowanego na agenta - wirusy komputerowe wyraźnie nie są życzliwe; interakcja pomiędzy konkurującymi wieloma agentami może również nie być dobroczynna, ale może prowadzić do stabilności w całym systemie. Ponadto, podstawą wielu z tych właściwości jest ukryte założenie, że agent ma pewien stopień świadomości - na przykład, że świadomie podejmuje racjonalne decyzje, świadomie wyznacza cele i planuje je osiągnąć, i że nie komunikuje świadomie informacje i tak dalej. W związku z tym może nie być możliwe zbudowanie agenta obliczeniowego z tymi właściwościami bez uprzedniego posiadania zdolności, które posiada człowiek z pełną świadomością. Drugą wadą jest to, że są to atrybuty jakościowe, a nie ilościowe. Inżynier wolałby mieć bardziej precyzyjnie zdefiniowane atrybuty - na przykład, co to znaczy, że agent jest racjonalny? Jednak klasyfikacja ma zalety w tym sensie, że podkreśla niektóre z atrybutów, które możemy zaprojektować w naszych systemach. Na przykład, możemy wykorzystać właściwości od 1 do 3 jako punkt wyjścia do zasugerowania pewnych minimalnych zasad projektowania, które system musi przestrzegać, zanim będzie można go zastosować uważany za system zorientowany na agenta w następujący sposób: System zorientowany na agenta powinien być zgodny z następującymi celami projektowymi agenta - jest autonomiczny; jest reaktywny; jest proaktywny (przynajmniej):

Zasada projektowania 2.1: System zorientowany na agenta powinien być autonomiczny.

Zasada projektowania 2.2: System zorientowany na agenta powinien być reaktywny.

Zasada projektowania 2.3: System zorientowany na agenta powinien być proaktywny

Jednak zamiast iść dalej i zasugerować listę źle zdefiniowanych właściwości jako definiujących stopnie inteligencji (to znaczy, czy są słabe lub silne), te książki przyjmują inne podejście ukierunkowane na projekt. W części 10 opisano różne pożądane cele projektowe, aby zapewnić "najsilniejsze" pojęcie agenta: wiedzę, inteligencję, racjonalność, samoświadomość, świadomość i zamyślenie (tj. Czynnik, który myśli tak jak my). Zamiast mówić, że sztuczna inteligencja musi mieć te właściwości, aby można było je uznać za "inteligentne", proponujemy kilka celów projektowych - właściwości, które my, jako projektanci, życzymy naszemu systemowi. Uważamy, że aby agent mógł myśleć, musi najpierw znać środowisko, w którym się znajduje, oraz wiedzę o tym, jak działać w jego obrębie, aby utrzymać przewagę konkurencyjną (pod względem zdolności do przetrwania w porównaniu z innymi agentami). Agent musi również być inteligentny, tzn. Być w stanie zrozumieć znaczenie swojej wiedzy, być w stanie wyciągnąć dalsze wnioski, aby dodać do swojej wiedzy i działać w "inteligentny" sposób, aby zareagować na wszystko, co dzieje się w jego otoczeniu lub cokolwiek może się wydarzyć (ponownie w celu utrzymania lub poprawy swojej kondycji). Samoświadomość, świadomość i zamyślenie odpowiadają cechom ludzkim, które wszyscy znamy, ale brakuje nam prawdziwego zrozumienia tego, jak się one mają lub tego, w jaki sposób możemy opracować sztuczne systemy, które mają te właściwości. Te rozdziały będą stanowić scenariusz dla wyjaśnienia tej opartej na projektach perspektywy sztucznej inteligencji. Pozostała część tego rozdziału zajmie się tym, jakie są środowiska i podkreśli ich znaczenie dla projektowania systemów sztucznej inteligencji.

Co to jest środowisko?

Możemy postrzegać środowisko jako wszystko, co otacza agenta, ale które różni się od agenta i jego zachowania. Środowisko to wszystko na świecie, które co otacza agenta, co nie jest częścią samego agenta. W tym miejscu agent "żyje" lub działa i dostarcza agentowi coś, co można wyczuć i gdzie się przemieszcza. Środowisko jest analogiczne do świata w prawdziwym życiu, ma pewne jego właściwości. Środowisko to nie to samo, co termin "nisza ekologiczna", który jest używany do opisania, w jaki sposób organizm lub ludność reaguje na dystrybucję zasobów i konkurentów i zależy nie tylko od tego, gdzie organizm żyje i co go otacza, ale także od tego, co robi. . Odum (1959) używa analogii, że siedliskiem organizmu jest jego "adres" lub lokalizacja, podczas gdy niszą jest jego "zawód". Na przykład dąb może być siedliskiem lasów dębowych - może to być "Dąb, Nowy Las", a tym, co robi dąb, i jak zarabia, reagując na dystrybucję zasobów i konkurentów, jest jego nisza. Zamiast tego wolimy używać terminu "środowisko", ponieważ bardziej odpowiada to pojęciom znanym w informatyce (takim jak termin "środowisko wirtualne" - Ponadto rozróżnienie między agentem a jego niszą ekologiczną jest związane z jego zachowaniem, z tym, że oba są ze sobą powiązane, to znaczy niszą, w której znajduje się agent, który dyktuje jej zachowanie, a jego zachowanie w pewnym stopniu określa jego niszę. Z drugiej strony, środowisko jest wyraźnie odróżnialne od agenta, jako wszystko w bezpośrednim świecie lub w środowisku agenta, który nie jest częścią samego agenta. Chcielibyśmy również przyjąć perspektywę projektowania z perspektywy pierwszoosobowej, aby bezpośrednio opisać zachowanie agenta w oparciu o punkt widzenia samego agenta, w przeciwieństwie do perspektywy obserwatora z perspektywy trzeciej osoby. Innymi słowy, chcemy zaprojektować zachowanie jako funkcję samego agenta, ponieważ oddziałuje on na swoje otoczenie (które może zawierać inne czynniki), a nie musi go projektować w odniesieniu do swojej niszy. Środowisko może mieć różne atrybuty od punkt widzenia agenta. Są one wymienione w kolejności rosnącej złożoności w tabeli:

Obserwowalne i częściowo obserwowalne. Agenta można uznać za agenta tylko wtedy, gdy ma on zdolność obserwowania swojego środowiska (i odwrotnie, samo środowisko musi być zatem możliwe do zaobserwowania). W niektórych przypadkach, zazwyczaj w prostych środowiskach lub środowiskach generowanych przez oprogramowanie, całe środowisko może być obserwowalne. Jednak środowisko może być tylko częściowo obserwowalne.

Deterministyczne, stochastyczne i strategiczne. W pełni deterministyczne środowisko to takie, w którym każdy przyszły stan środowiska może być całkowicie określony z poprzedniego stanu i działań agenta. Środowisko jest stochastyczne, jeśli występuje jakiś element niepewności lub wpływ zewnętrzny. Zwróć uwagę, że jeśli deterministyczne środowisko jest tylko częściowo obserwowalne dla agenta, to wygląda na stochastyczne z punktu widzenia agenta. Środowisko strategiczne jest w pełni zdeterminowane przez stan poprzedzający w połączeniu z działaniami wielu agentów.

Epizodyczne i sekwencyjne. Środowisko zadań jest epizodyczne, jeśli każde zadanie agenta nie opiera się na wcześniejszej wydajności lub nie może wpływać na przyszłe wyniki. Jeśli nie, to jest sekwencyjne. Statyczny i dynamiczny. Środowisko statyczne się nie zmienia. W dynamicznym środowisku, jeśli agent nie reaguje na zmianę, jest to uważane za wybór, aby nie robić nic.

Dyskretne i ciągłe. Dyskretne środowisko ma skończoną liczbę możliwych stanów, podczas gdy liczba stanów w ciągłym środowisku jest nieskończona.

Pojedynczy agent i wiele agentów . Środowisko z wieloma agentami, agent działający wspólnie lub konkurencyjnie z innym agentem. Jeśli tak nie jest, to z perspektywy agenta, inni agenci mogą być postrzegani jako część środowiska, które zachowuje się stochastycznie.

Analogia otoczenia podobnego do świata, w którym żyjemy, jest często pośrednio stosowana, gdy termin "środowisko" jest używany w szczególności w informatyce i sztucznej inteligencji. Agent może eksplorować, zagubić się i mapować środowisko wirtualnego komputera tak samo, jak człowiek w środowisku realnym - zdolność obserwacji / odczuwania i poruszania się po środowisku są kluczowymi właściwościami obu. Jednak środowiska komputerów wirtualnych nie muszą być ograniczone do interpretacji geograficznej, w której fizyczna lokalizacja jest związana z określoną pozycją w środowisku. Fizykę środowiska wirtualnego można zmienić tak, aby pasowała do celów projektanta. Na przykład awatar (komputerowo generowany agent reprezentujący operatora) może latać w wirtualnych środowiskach, takich jak Second Life, aw niektórych grach komputerowych awatary i boty mogą się teleportować, z których oba są niemożliwe dla ludzi w prawdziwym życiu. Alternatywnie środowisko może być reprezentacją czegoś, co może nie być łatwo lub wygodnie reprezentowane geograficznie, na przykład w sieci komputerowej, Internecie, a nawet w sieci londyńskiego metra. Środowisko może być również symulacją rzeczywistego środowiska, w którym celem jest możliwie dokładne symulowanie wybranych rzeczywistych właściwości fizycznych. Problem z symulowanymi środowiskami jest jednak taki, że często trudno jest osiągnąć realizm w symulacji, ponieważ symulacja może odbiegać od rzeczywistości w nieprzewidywalny sposób.

Środowiska jako przestrzenie n-wymiarowe

Istnieje wiele przypadków, w których możemy chcieć reprezentować środowisko, które w ogóle nie ma odpowiednika geograficznego, takie jak zbiór dokumentów tekstowych w systemie wyszukiwania informacji lub dane w bazie danych, w którym to przypadku abstrakcyjna reprezentacja środowiska jest wymagany. W takim przypadku dokumenty tekstowe lub wiersz w tabeli bazy danych mogą być reprezentowane przez krotki odpowiadające punktom w przestrzeni n-wymiarowej, przy czym każdy wymiar reprezentuje jeden określony atrybut (gdzie n oznacza całkowitą liczbę atrybutów użytych we wszystkich krotki, które są wykreślane w przestrzeni). Na przykład, następujące dwie krotki, A i B, mogą być reprezentowane w trójwymiarowej przestrzeni, jak pokazano na rysunku poniżej, ponieważ istnieją trzy atrybuty - gra, gracz i wzrost:

Krotko A: (gra: "Rugby", gracz: "Jonah Lomu", wzrost: 196)

Tuple B: (gra: "Rugby", gracz: "David Kirk", wzrost: 173)



Na osi "Gracz", "DK" oznacza miejsce reprezentujące "David Kirk"; podobnie "JL" oznacza "Jonah Lomu". Na osi "Gry", "Rugby" oznacza miejsce reprezentujące grę w rugby. Oś "Wysokość" jest ciągłym wymiarem przedstawiającym wzrost w centymetrach ≥ 0. Pozostałe dwa wymiary są dyskretne. Dwa punkty reprezentujące krotki A i B są oznaczone czerwonymi krzyżami. N-wymiarowa przestrzeń, jak ilustruje to prosty przykład, może być wyraźnie uznana za środowisko: istnieje przestrzeń, którą można badać i mapować, gdzie obiekty takie jak krotki A i B mogą mieć lokalizacje; ruch z jednej lokalizacji do drugiej może mieć znaczenie i być wykreślany za pomocą ścieżki; a lokalizacje mogą być uważane za bliskie lub odległe od siebie. W rzeczywistości wszystkie środowiska można łatwo przedstawić jako przestrzeń n-wymiarową - poruszamy się w środowisku rzeczywistego świata, które może być reprezentowane w 3D - długość, wysokość i szerokość. Potrzebne są dalsze wymiary, aby opisać atrybuty obiektów i agentów, które można znaleźć w lokalizacjach w rzeczywistym środowisku 3D - ale zasadniczo te atrybuty można po prostu uznać za dalsze wymiary w przestrzeni n-wymiarowej. Jako kolejny przykład możemy spojrzeć na większy zestaw danych, taki jak wymieniony w tabeli 2.8. Tabela zawiera zestaw krotek zawierających informacje o graczach rugby z Nowej Zelandii, zwanych All Blacks. Dane są 5-wymiarowe, ponieważ każda krotka (wiersz w tabeli) zawiera pięć atrybutów dotyczących każdego gracza - pozycję, w której grają, ich nazwę, wysokość w cm, wagę w kg i rok, w którym po raz pierwszy grali All Blacks



Wizualizacja danych n-wymiarowych może często być trudna, nawet jeśli liczba wymiarów jest stosunkowo niewielka - większość danych rzeczywistych jest jednak zwykle wysoce wielowymiarowa. Jeśli używamy kartezjańskiego układu współrzędnych, wówczas jednym z rozwiązań, do których możemy się odwołać, jest użycie wielu wykresów (jak pokazano na lewym wykresie poniżej). Alternatywnym rozwiązaniem jest użycie równoległego układu współrzędnych, w którym osie są umieszczone równolegle do siebie, a pojedyncza krotka jest narysowana jako polilinia, która łączy punkty na każdej osi, które reprezentują każdą wartość atrybutu. Dlatego krotka w tym środowisku jest reprezentowana jako linia, a nie jako pojedynczy punkt (jak pokazano na prawym wykresie rysunku)



Obydwa systemy współrzędnych do wizualizacji danych n-wymiarowych mają swoje wady i zalety, co widać na wykresach pokazanych na powyższym rysunku. Na przykład, wszystkie wykresy są przydatne do pokazywania tendencji i podkreślających właściwości danych, takich jak obrońcy All Blacks, którzy mają tendencję do bycia krótszymi niż blokujący. Niemniej jednak, współrzędne kartezjańskie mają tendencję do ograniczania ilości informacji, które można przekazać (na przykład dodanie nazw na lewych działkach spowodowałoby znaczny bałagan). Podobnie, równoległy wykres współrzędnych po prawej stronie jest ograniczony do określonej kolejności, w której wybrane są osie równoległe, a zatem może być trudniej wykryć konkretny trend, jeśli dwie określone osie są od siebie oddalone. Ma jednak tę zaletę, że ułatwia dołączanie danych dla wszystkich wymiarów na tym samym wykresie. Wykresy pokazane na rysunku belo zostały utworzone przy użyciu NetLogo. Ten język będzie opisany bardziej szczegółowo później. Celem pokazania tego jest podkreślenie powiązania między danymi, informacjami i otoczeniem, a także podkreślenie, że istnieją różne sposoby wizualizacji informacji. Fabuły składają się z szeregu punktów i ścieżek i mogą być uważane za mapy, które w pewien sposób reprezentują aspekty środowiska realnego świata (jak mapa topograficzna stara się reprezentować rzeczywisty świat, jak można to zobaczyć w system nawigacji samochodowej, lub używać podczas wędrówek lub orientacji). Punkty, ścieżki i ich relacje (takie jak bliskość i dalekość) i mapy, są ważnymi pojęciami dla środowisk i ich wizualizacji i będą używane jako podstawowe wzorce projektowe w próbkach kodu w innych miejscach i mogą być uważane za analogiczne do ich topograficznych odpowiedników w prawdziwe życie. Możemy zdefiniować punkt jako lokalizację w środowisku lub w przestrzeni n-wymiarowej. Ścieżkę można zdefiniować jako jeden z możliwych sposobów, w jaki agent może poruszać się między dwoma lub więcej punktami. Mapa jest schematyczną reprezentacją środowiska lub przestrzeni n-wymiarowej. Będą one stanowić podstawowe elementy konstrukcyjne, które wykorzystamy w kolejnych rozdziałach, aby zademonstrować różne aspekty projektowania zorientowanego na agenta dla sztucznej inteligencji. Możemy również uważać punkty, ścieżki i mapy za analogiczne do tych samych terminów używanych w topologii matematycznej.

Wirtualne środowiska

Wirtualne środowiska to immersyjne światy online, które ludzie używają odwiedzając i modyfikując awatary, lub mogą być światami generowanymi komputerowo, takimi jak te przedstawione w grach komputerowych lub w symulacjach (na przykład do symulacji medycznych lub wojskowych). Inne nazwy obejmują "wirtualne światy", "zespołowe wirtualne środowiska" (CVE), "wirtualne środowiska dla wielu użytkowników" (MUVE) i "masowo wieloosobową grę online" (MMOG). "Wirtualna wycieczka" to komputerowo wygenerowana trasa, która zapewnia wrażenia ruchu w oglądanej przestrzeni. Istnieje wiele praktycznych zastosowań wirtualnego zwiedzania w takich sektorach, jak: biznes, edukacja, architektura, nauka, medycyna, robotyka, wojsko, sztuka, rozrywka i sport. Wirtualne środowiska są skonfigurowane do różnych celów, takich jak:

•  komercyjne - na przykład Second Life (http://www.secondlife.com), które ma w pełni konfigurowalne awatary oraz wbudowany język skryptowy i budowlany, w którym użytkownicy wytwarzają i sprzedają produkty rzeczywiste;

•  edukacja - na przykład Forterra Systems (http://www.forterrainc.com) z domenami takimi jak szkolenia w zakresie e-learningu, szkolenia wojskowego i bezpieczeństwa wewnętrznego oraz opieka zdrowotna;

•  społeczny - na przykład Kaneva (http://www.kaneva.com), który łączy środowisko wirtualne z sieciami społecznościowymi;

•  rozrywka - na przykład gry komputerowe takie jak Everquest i World of Warcraft (http://everquest.station.sony.com/ i http://www.worldofwarcraft.com/index.xml);

•  sport - na przykład wirtualna orientacja (http://www.catchingfeatures.com);

•  symulacja - w sytuacjach, w których testowanie w prawdziwym życiu może być zbyt kosztowne lub niebezpieczne, takie jak szkolenie w locie, operacje medyczne i wojskowe gry wojenne. Mogą również mieć różnych odbiorców docelowych, takich jak:

•  wojskowe - takie jak na gry wojenne i szkolenie w zakresie bezpieczeństwa wewnętrznego;

•  akademicki - do celów edukacyjnych;

•  architektura - do wirtualnego przeglądania środowiska zbudowanego;

•  dorośli - na przykład Second Life i The Sims Online (http://www.thesimsonline.com);

•  nastolatki - na przykład Barbie Girls (http://www.barbiegirls.com), świat o tematyce Barbie gdzie dziewczęta kupują modę, grają muzykę, czatują, projektują pokoje i grają w gry; i

•  dzieci - na przykład Neopets (http://www.neopets.com), w którym dzieci grają w gry, towarzysko i kupują rzeczy dla zwierząt domowych. Wdrażanie środowisk wirtualnych można podzielić na następujące trzy pozycje:

1. Pseudo-realistyczny;

2. Fotorealistyczne;

3. Nierealne.

Pseudo-realistyczne środowiska wirtualne są najbardziej rozpowszechnione. Są one renderowane w całości przez komputer i często nie mają odpowiednika w rzeczywistości. Niektóre przykłady przedstawiono na rysunku.



Zrzut ekranu pokazany w lewym górnym rogu, utworzony za pomocą silnika gry, pokazuje wyrafinowanie pod względem szczegółów. W prawym górnym rogu ekranu znajduje się zrzut ekranu z gry symulacyjnej sportów biegowych o nazwie Catching Features. Innym miejscem, w którym znajdują się środowiska wirtualne, są wirtualne światy 3D, takie jak Second Life zaprojektowane przez Linden Lab i stworzone przez jego mieszkańców (jak pokazano na dwóch dolnych zrzutach ekranu). To są ludzie, którzy odwiedzają wirtualny świat za pomocą awatarów, które sami wybrali. Pseudo-realistyczne środowiska są ograniczone jedynie przez wyobraźnię projektanta (-ów) środowiska i wysiłek, który włożył w ich tworzenie. Wymagają znacznego czasu, aby stworzyć realizm, który odzwierciedla rzeczywisty realizm, ponieważ często bardzo potrzebny jest niezwykle szczegółowy szczegół, aby stworzyć wiarygodne, pseudo-realistyczne środowisko wirtualne. Jedną z metod stosowanych w celu uniknięcia tego wysiłku jest powielanie wspólnych obiektów, ale może to umniejszać realizm i wiarygodność. Być może najczęstsze przykłady pseudo-realistycznych środowisk znajdują się w nowoczesnych grach komputerowych. Coraz częściej są one również używane do replikowania rzeczywistych środowisk. Na przykład mogą być wykorzystane do zapewnienia wirtualnego widoku ścieżki dydaktycznej. Wymagałoby to jednak znacznego wysiłku, aby dokładnie przedstawić wszystkie drzewa i rośliny, które można zobaczyć na szlaku, aby uzyskać fotorealistyczne wyniki (tj. ściśle pasujące do tego, co jest widoczne w rzeczywistości) i zazwyczaj taki realizm nie jest wymagany w takich zastosowaniach. Inne aplikacje mogą wymagać dokładnego odtworzenia rzeczywistych scen, takich jak śledztwa kryminalne lub symulacja przetargów, w których należy wcześniej określić linie ognia. Fotorealistycznie renderowane środowiska wirtualne stanowią alternatywę, w której konieczne jest dokładne powielenie rzeczywistego środowiska. Rzeczywiście, długoterminowym celem grafiki komputerowej jest uzyskiwanie fotorealistycznych rezultatów przy użyciu pseudo-realistycznych technik. Jedną z metod jest wykorzystanie statycznych panoram perspektywicznych, które zapewniają widok 360 ° środowiska, i są one często używane w Internecie, aby umożliwić użytkownikowi zobaczenie, jak scena może wyglądać w rzeczywistości. Czasami te statyczne reprezentacje stałoprzecinkowe są ze sobą połączone, aby zapewnić wirtualną wycieczkę, ale w większości przypadków zdolność dynamicznego poruszania się po wszystkich częściach sceny z wielu punktów nie jest możliwa. Możliwość przejścia z jednej panoramy do następnej w określony sposób ogranicza użytkownika i często trudno jest zorientować się, gdzie on się porusza w stosunku do miejsca, z którego się wywodzi. Zasadniczo wirtualna trasa to zbiór niezależnych punktów widzenia, wzdłuż wcześniej ustalonej ścieżki, a panoramy są niezależnie od siebie zależne od kontekstu. Oprócz zwykle kłopotliwego interfejsu, panoramy mogą być kosztowne w stworzeniu, wymagając specjalistycznego sprzętu z ekstremalnym obiektywem szerokokątnym lub soczewką typu "rybie oko". Alternatywą jest użycie specjalistycznego oprogramowania do łączenia wielu nakładających się obrazów w celu utworzenia panoramicznego widoku. Jednak proces ten jest związany z błędem, ponieważ zwykle nakładające się obrazy nie pasują do siebie, gdzie zachodzą na siebie z powodu różnych kątów ,obrazy są pobierane z różnych świateł. Google Street View, jak widać w Mapach Google i Google Earth, to alternatywne podejście wyświetlające obrazy scen z kamer zamontowanych na flocie samochodów. Umożliwia użytkownikom wyświetlanie części wybranych miast na poziomie gruntu i zapewnia panoramiczne widoki na poziomie ulicy w poziomie 360 ° i 290 ° w pionie. Użytkownicy mogą poruszać się po scenie za pomocą kliknięć myszy i klawiszy strzałek na klawiaturze, a obrazy można wyświetlać w różnych rozmiarach, w dowolnym kierunku i pod różnymi kątami. Wyświetlane są również linie wskazujące kierunek, w którym samochód z kamery widoku ulicy został zarejestrowany podczas robienia zdjęć. Chociaż te fotorealistyczne środowiska są najbliższe nam do dokładnych reprezentacji otaczającego nas świata, nie zapewniają mechanizmu oprogramowania do łatwego określania tego, co jest faktycznie przedstawione w samym środowisku wirtualnym, na przykład w miejscu, w którym znajdują się obiekty, które można zobaczyć. wzajemny szacunek. Dlatego te typy środowisk wirtualnych mają ograniczoną wartość, gdy rozważa się zadanie opracowania inteligentnych agentów, które mogą wykrywać, poruszać się i wchodzić w interakcje wewnątrz niego, chyba że środowisko zostanie wzbogacone o dodatkowe informacje o tym, co w nim zawarte. Trudność z dostarczeniem tych dodatkowych informacji jest jednak równoważna ze złożonością w tworzeniu pseudorealistycznej kopii środowiska rzeczywistego. Trzecią metodą jest renderowanie środowisk w sposób inny niż fotorealistyczny, na przykład w postaci rycin, szkiców lub krajobrazów przypominających kreskówki. Obiekty są renderowane przy użyciu uproszczonej reprezentacji szczegółów, koncentrując się raczej na stylu niż na realizmie, a szczegóły są pomijane lub podkreślane w celu skuteczniejszego przekazywania informacji. Często środowisko budowane jest z samych konturów obiektów za pomocą stylizowanych tekstur. W związku z tym możliwe są szybkie algorytmy renderowania i bardzo duża liczba klatek na sekundę, która umożliwia bardzo płynny ruch, umożliwiając nawigację w środowisku przy dużych prędkościach. Jednak zarówno w środowisku pseudo-realistycznym, jak i fotorealistycznym, należy dołożyć starań, aby zaprojektować środowiska o wystarczającej złożoności, aby mogli istnieć inteligentni agenci.

Jak możemy opracować i przetestować system sztucznej inteligencji?

Podczas budowania dowolnego systemu inżynier musi zmierzyć się z pytaniem, jak najlepiej ocenić jego efektywność. Jeśli inżynierowie zignorują fazę ewaluacji, mogą popełnić te same błędy, które popełnili wcześni badacze AI, gdy często pomijali pełną ocenę swojego systemu. (Często jest to pomyłka również z obecnymi systemami AI). Ocena to coś więcej niż testowanie systemu, aby sprawdzić, czy działa poprawnie. Testowanie jest niezbędnym krokiem w procesie inżynierii oprogramowania, którego nie należy pomijać. Jednakże ocena idzie dalej i analizuje wyniki uzyskane przez system i porównuje wyniki z wynikami uzyskanymi przez inne systemy. Bez tej analizy niemożliwe jest stwierdzenie, czy dokonano prawdziwego postępu. To znaczy, czy nastąpiły ulepszenia w dowolnych kryteriach używanych do oceny systemów lub czy cele projektowe zostały osiągnięte. Jak zatem możemy opracować i ocenić system sztucznej inteligencji? Jednym ze sposobów jest stworzenie wirtualnego środowiska o tak dużej szczegółowości i złożoności, jakie ma rzeczywisty świat, w odróżnieniu od środowisk, które oprogramowanie Catching Features jest w stanie stworzyć, i posiada fizycznie wbudowaną sztuczną inteligencję. Są dwie zalety:

1. Środowisko jest generowane komputerowo. Oznacza to, że komputer już wie wszystko na ten temat, ponieważ został już wygenerowany i istnieją struktury danych, które reprezentują każdy jego aspekt. W prawdziwym sensie możemy starannie pominąć kwestię reprezentacji wiedzy (jak przedstawić wiedzę o fizycznych aspektach środowisko), które są opisane później.

2. Jeśli wizualizuje się środowisko wirtualne, zarówno człowiek, jak i sztuczna inteligencja mogą współdziałać ze sobą w tym samym środowisku. Może to być przydatne, jeśli chcemy wziąć tę rolę nauczycieli do nauczania agentów sztucznej inteligencji, aby pomóc im w poznawaniu świata i jak najlepiej z nim współpracować. Rola nauczyciela może być niekonkurencyjna - bardziej jako życzliwego nauczyciela, który nadzoruje proces uczenia się - lub może być konkurencyjna, tak jak w symulacji orientacji, gdzie celem jest doprowadzenie do tego, aby agent komputerowy odtworzyć zachowanie ludzkich graczy i osiągnąć ten sam poziom wydajności, a może nawet go przekroczyć. Jeśli to drugie jest możliwe, agent komputerowy może przejąć rolę nauczyciela lub pomóc graczom w osiągnięciu lepszych wyników (może się to zdarzyć po prostu człowiekowi, który próbuje konkurować na tym samym poziomie co agenci komputerowi).

Podsumowanie i dyskusja

Projektowanie zorientowane na agenta stanowi alternatywę dla bardziej znanego projektowania obiektowego podczas budowania systemów komputerowych. Podczas projektowania możemy konceptualizować systemy komputerowe za pomocą analogii agentów istniejących w środowisku. Ta charakterystyka pozwala nam skoncentrować nasz projekt na konkretnych pożądanych właściwościach, takich jak autonomia (agenci w systemie muszą podejmować własne decyzje), reaktywność (reagują na zdarzenia zachodzące w środowisku) i proaktywność (reagują na prawdopodobne przyszłe zdarzenia) . Agenci nie istnieją poza swoim środowiskiem. Środowisko ma zasadnicze znaczenie w określaniu zachowania agenta. Złożoność systemu zorientowanego na agenta wynika nie tylko z interakcji agentów z innymi agentami, ale również z interakcji między agentami a środowiskiem. Wirtualne środowiska są doskonałym środkiem do testowania systemów sztucznej inteligencji. Podsumowanie ważnych pojęć, które należy wyciągnąć z tej sekcji, pokazano poniżej:

•  Agenci są autonomiczni, reaktywni i proaktywni.

•  Środki mają również inne właściwości, które określają, czy są one słabymi lub silnymi środkami.

•  Agenci podejmują decyzję o tym, co robić, podczas gdy obiekty są wywoływane zewnętrznie.

•  Agentów nie można rozpatrywać niezależnie od ich otoczenia.

•  Środowiska, zarówno rzeczywiste, jak i abstrakcyjne, mogą być reprezentowane jako przestrzenie n-wymiarowe.

•  Wirtualne środowiska mogą być wykorzystywane do testowania systemów sztucznej inteligencji

Struktura dla Agentów i Środowisk

NetLogo to programowalne środowisko modelowania do symulacji zjawisk naturalnych i społecznych ... NetLogo szczególnie dobrze nadaje się do modelowania złożonych systemów rozwijających się w czasie. Modele mogą wydawać polecenia setkom lub tysiącom "agentów", którzy działają niezależnie. Dzięki temu można zbadać związek między zachowaniem na poziomie mikro poszczególnych osób a wzorcami na poziomie makro, które wynikają z interakcji wielu osób. Uri Wilensky, 1999.[twórca NetLogo]

Architektury i ramy dla agentów i środowisk

Jeśli mamy budować systemy zorientowane na agentów, potrzebujemy platformy komputerowej i niektórych frameworków programowych, na których można je zbudować. Kiedy mówimy o platformach i frameworkach, używamy analogii konstrukcji, która wiąże się z koncepcją stworzenia systemu komputerowego z budowaniem w prawdziwym życiu. Słowa takie jak "architektura", "struktura", "platforma", "zestaw narzędzi" i "struktura" są używane w celu zwrócenia uwagi na leżącą u podstaw analogię konstrukcyjną. Ich precyzyjne znaczenie jest trudne do określenia, ponieważ terminy są często używane zamiennie ze względu na ukrytą podstawową analogię. Możemy odnieść się do architektury systemu zorientowanego na agenta jako ogólnego projektu koncepcyjnego i struktury operacyjnej systemu. Celem struktury jest uproszczenie projektowania systemu poprzez zapewnienie wyższego poziomu abstrakcji niezbędnych komponentów i funkcji systemu, tak aby mniej czasu poświęcano na szczegóły niższego poziomu niezbędne do uruchomienia systemu. Platforma jest platformą sprzętową lub programową, która umożliwia uruchamianie oprogramowania. Należą do nich architektura, system operacyjny, języki programowania, biblioteki uruchomieniowe i graficzne interfejsy użytkownika. W tej części omówimy różne struktury dostępne dla systemów zorientowanych na agentów budowlanych. Takie struktury mają różne problemy projektowe, które należy pokonać, takie jak ("Software Agent", 2008): planowanie, synchronizacja i ustalanie priorytetów zadań agenta; współpraca między agentami; przydział zasobów i rekrutacja; powtórne tworzenie instancji agentów w różnych środowiskach; przechowywanie stanów wewnętrznych agentów; badanie środowiska; przesyłanie wiadomości i komunikacja; interakcja agent-środowisko w obliczu zmieniającego się, dynamicznego środowiska; i taksonomia agenta - która hierarchia jest odpowiednia dla zadania, np. Agenci wykonywania zadań, agenci planowania, dostawcy zasobów i tak dalej.

Standardy dla technologii opartych na agentach

Kolejną ważną kwestią jest standaryzacja. Jeśli mamy na przykład opracować autonomiczne agenty z możliwością komunikowania się ze sobą, ważne jest, aby zgodzić się na zestaw standardów dotyczących sposobu komunikacji. FIPA (dla Fundacji na rzecz inteligentnych agentów fizycznych) jest organizacją normalizacyjną IEEE Computer Society zajmującą się technologią opartą na agentach i jej interoperacyjnością z innymi technologiami (FIPA, 2008). Specyfikacje FIPA stanowią zbiór standardów, których celem jest promowanie współdziałania heterogenicznych agentów i usług, które reprezentują. W 2002 r. FIPA zakończyła standaryzację podzbioru 25 wszystkich specyfikacji.



Podzbiór oraz pełny zestaw specyfikacji obejmuje różne kategorie, takie jak: komunikacja z agentem; transport agentów; zarządzanie agentami; abstrakcyjna architektura; i aplikacje. Podstawowe specyfikacje FIPA dotyczą komunikacji agentów, która definiuje język zwany ACL (dla języka komunikacji agenta). Zajmuje się komunikatami komunikacyjnymi, protokołami wymiany wiadomości między agentami i reprezentacjami treści wiadomości. Specyfikacje są dobrze dostosowane do aplikacji agentów, w których komunikacja jest ważna i coraz częściej, wiele architektur i struktur agenta staje się teraz zgodna z FIPA. Komunikacja jest jednak tylko jednym aspektem inteligencji, a specyfikacje pomijają ważne kwestie agenta, takie jak ucieleśnienie i usytuowanie - cechy, które zostały zidentyfikowane w Części 1 (i rozwinięte w Części 5), jako ważne dla inteligencji. Na przykład zaskakujące jest to, że nie ma osobnej kategorii w specyfikacjach dla środowiska i jak agenci są w stanie wyczuć i poruszać się w nich. Dlatego te specyfikacje mają mniejsze znaczenie w zastosowaniach, w których wiarygodna interakcja ze środowiskiem jest kluczowa - na przykład w animacji komputerowej, grach komputerowych oraz symulacji i modelowaniu środowiska.

Języki programowania zorientowane na agenta

Jednym z bezpośrednich problemów dla systemów zorientowanych na agentów jest znalezienie odpowiedniej platformy języka programowania. Obecnie stosunkowo niewiele języków programowania ma wbudowane wsparcie dla programowania zorientowanego na agentów i nie ma w pełni zorientowanego na agenta głównego języka programowania. Zaproponowano różne języki programowania zorientowane na agenta, takie jak:

•  3APL na wdrażanie czynników poznawczych i kontrolę na wysokim poziomie robotów kognitywnych z przekonaniami, obserwacjami, działaniami, celami, komunikacją i zasadami rozumowania

•  AgentSpeak, pozwala na zapisywanie i interpretowanie programów agentów BDI (dla wierzeń, pragnień i intencji) w ramach ograniczonego programu logicznego pierwszego rzędu ze zdarzeniami i działaniami, i może być postrzegany jako uproszczony język tekstowy Systemu Reakcji Proceduralnej (PRS) oraz system rozproszenia rozproszonego dla wielu agentów (dMARS) . Jason jest tłumaczem open-source dla AgentSpeak napisanym w Javie, który pozwala programistom budować systemy wieloagentowe w złożonych środowiskach.

•  SPADES, system oprogramowania pośredniego do tworzenia symulacji opartych na agentach.

•  SPLAW, oparty na KQML, standardowym języku komunikacji między agentami.

•  STAPLE, na podstawie teorii wspólnej zamiaru

Ta lista nie jest wyczerpująca. Jego celem jest zilustrowanie różnorodności opracowanych rozwiązań. Rysunek przedstawia schematyczną klasyfikację wybranych platform i języków do modelowania opartych na agentach.



Klasyfikacja na diagramie dzieli modelowanie oparte na agentach na trzy kategorie - symulacja ukierunkowana na agenta, języki zorientowane na agenta i modelowanie kognitywne. Pierwsza kategoria obejmuje języki, które łączą modelowanie agentów z symulacją. W pozostałych sekcjach tej części przyjrzymy się konkretnemu przykładowi w tej kategorii - NetLogo. Według Zhanga, Lewisa i Sierhuusa, zaletą Netlogo jest to, że ma małą krzywą uczenia się dla początkującego programisty, łatwo jest debugować, i zapewnia łatwy dostęp do podstawowej wizualizacji, ponieważ został "zaprojektowany z myślą o niedoświadczonym programiście". Kolejną zaletą jest to, że programy NetLogo są bardzo kompaktowe i łatwe do odczytania, a zatem w razie potrzeby są znacznie łatwiejsze do konwersji na inne języki programowania. Oczywistą cechą rysunku jest przewaga wystąpień w drugiej kategorii, z bardzo nielicznymi w trzeciej kategorii. Jak wspomniano powyżej, nie ma jeszcze języka programowania zorientowanego na agenta głównego nurtu w posób, w jaki C, Java i Python stały się głównym nurtem. Być może ich powszechnym błędem jest taki sam błąd, jaki ma Prolog - zbyt duży nacisk na oparty na logice paradygmat - który może być trudny do zrozumienia i debugowania dla początkujących programistów. Na przykład Huget umieścił desideratę dla zorientowanego na agenta języka programowania, który zawiera funkcje do obsługi logiki (takie jak BDI dla racjonalnych agentów); ale wymienił także inne pożądane cechy, takie jak: wiedza i komunikacja; definicje organizacji i środowisk; abstrakcja w celu uniknięcia złożoności w projektowaniu; zgodność z normami; umiejętność mieszania formalizmów takich jak automaty i sieci Petriego; oraz architektura sterowana zdarzeniami (używana przez czynniki reaktywne, które reagują na zdarzenia w momencie ich wystąpienia). Mimo że języki oparte na logice są interesujące i same w sobie są potężne, nie pasują one do tego, co programiści lubią robić najlepiej - uzyskując użyteczne rzeczy, aby dobrze działały przy minimalnym zamieszaniu. Zamiast opracowywać zupełnie nowy język programowania zorientowany na agenta, alternatywnym podejściem jest opracowanie systemu hybrydowego w języku programowania, który nie jest zorientowany na agenta. Jak stwierdzono, większość języków programowania nie obsługuje programowania zorientowanego na agenta. Typowym rozwiązaniem jest opracowanie struktury agenta w obiektowym języku programowania, ponieważ jest to obecnie dominujący paradygmat programowania w modzie. Opracowano wiele frameworków agentów, a większość koncentruje się na kwestiach związanych z rozumowaniem przy użyciu rozwiązania opartego na logice (takiego jak BDI), a także innych możliwościach, takich jak komunikacja agent-agent, zwykle przy użyciu standardowego języka komunikacji KQML . Jak wyglądałaby obiektowa struktura agentów? Obiekty mogą być używane do reprezentowania agentów w systemie lub aplikacji, takich jak agenci planowania, agenci interfejsu użytkownika, agenci wyszukiwania i tak dalej. Agenci zorientowani obiektowo są definiowane za pomocą klasy ("AgentClass" lub "RootAgentClass"), a wszyscy agenci mają różne wspólne cechy, takie jak nazwa lub identyfikator, inne globalne atrybuty oraz podstawowy zestaw protokołów komunikacyjnych i obsługi błędów. Podklasy służą do definiowania bardziej konkretnych typów agentów - na przykład "TextSearchAgent" - które będą miały określone atrybuty i protokoły. Każdy obiektowy agent ma atrybuty, które definiują stan agenta i operacje / metody definiujące zachowanie agenta Jakie są zalety rozwoju agentów wykorzystujących technologie obiektowe? Knapik i Johnson wymieniają te same korzyści, które wynikają z paradygmatu programowania obiektowego: kod wielokrotnego użytku; zmniejszone koszty rozwoju agentów; elastyczna struktura projektu agenta; łatwość konserwacji; rozciągliwość; wyrozumiałość; obsługa połączonych hierarchii agentów i domen; wiedza systemowa jest wewnętrzna; oraz łatwo dostępne środowisko programistyczne do modelowania i symulacji. Rosnąca liczba obiektowych struktur agentów została opracowana przy użyciu języka Java. (NetLogo jest również zaimplementowany w Javie). Java oferuje obiektowe rozwiązanie, które jest już zintegrowane z uniwersalnym klientem - przeglądarkami sieciowymi - i obsługuje takie pakiety, jak java.net, które mogą być używane przez agentów do uzyskiwania dostępu i wydobywania informacji ze stron internetowych. Java ma olbrzymi potencjał jako język programowania agenta ze względu na jego szerokie zastosowanie w sieci. Podobnie Python jest innym językiem, który jest coraz częściej używany w sieci i ma wsparcie dla paradygmatu programowania obiektowego, ale do tej pory opracowano dla niego mniej frameworków niż Java. Omówimy teraz kilka innych frameworków agenta. Ponownie, celem nie jest wyczerpujące i udokumentowanie dostępnych struktur, ponieważ jest ich zbyt wiele. Celem jest przede wszystkim zilustrowanie różnorodności możliwych rozwiązań i podkreślenie, że żadne pojedyncze rozwiązanie nie uchwyciło wyobraźni i zainteresowań programistów na całym świecie, aby stać się głównym nurtem. W Javie aplety i servelety można uznać za nieco podobne do agentów. Aplety migrują z serwera do klienta, więc wykonaj je na kliencie, a tym samym zwalniaj serwer, a więc wykorzystaj pewien stopień mobilności, co jest ważną cechą agentów. Serwlety Java pozwalają również użytkownikom przesyłać do sieci program wykonywalny, dzięki czemu użytkownik lub aplikacja kliencka może uruchomić agenta działającego na serwletach w celu wyszukiwania informacji w sieci lub automatycznego reagowania lub okresowych aktualizacji. Aglety IBM (dla agile agentów) to platforma agenta Java dla urządzeń mobilnych, która dodaje do Javy dodatkowe funkcje, które są szczególnie ukierunkowane na zadania agenta. Pierwotnie opracowany w IBM Tokio Research Laboratory, technologia Aglets jest teraz hostowana na sourceforge.net. Aglet jest agentem Java zdolnym do autonomicznego i spontanicznego przechodzenia z jednego hosta na drugi wędrując po Internecie. Dostępna jest kompletna platforma agenta Java Mobile wraz z autonomicznym serwerem o nazwie Tahiti, a także biblioteka umożliwiająca programistom tworzenie agentów mobilnych lub umieszczanie kodu agletowego w aplikacji. Aglety mogą być zatrzymywane, pakowane wraz z ich bieżącym stanem w innym obiekcie wysyłanym do innego środowiska, i ich wykonanie jest wznawiane. Java API ma różne klasy, takie jak: klasa Aglet, streszczenie klasy, która jest używana do definiowania agletów; AgletContext, który jest interfejsem, którego używa aglet, aby zdobyć wiedzę o swoim środowisku; AgletProxy, która jest klasą, która hermetyzuje prawdziwą plamę, chroniąc przed bezpośrednim dostępem do publicznego interfejsu programu; AgletIdentifier, który jest klasą, która ustawia unikalny identyfikator dla agletu; klasa Itinerary reprezentuje trasę do planów podróży dla agletu; oraz klasa Message, która umożliwia komunikację między agentami.

JADE (dla Java Agent DEvelopment Framework) to kolejna platforma w pełni zaimplementowana w Javie i jest wolnym oprogramowaniem dystrybuowanym przez Telecom Italia. Wspiera rozwój systemów wieloagentowych zgodnych ze specyfikacjami FIPA. Dostępne są narzędzia graficzne, które wspomagają fazy debugowania i wdrażania, a zdalny interfejs GUI może być używany do kontrolowania konfiguracji agenta, która może być dystrybuowana między komputerami i która może być zmieniana w czasie wykonywania poprzez przenoszenie agentów z jednego komputera na drugi.

LEAP (dla Light Extensible Agent Platform) jest rozszerzeniem JADE, które pozwala na zgodność z FIPA ,platformą o zmniejszonym zasięgu zgodna z mobilnymi środowiskami Java do uruchamiania na urządzeniach bezprzewodowych i urządzeniach PDA, takich jak telefony komórkowe i komputery przenośne. WADE (Workflows and Agents Development Environment) to rozszerzenie JADE, które umożliwia agentom wykonywanie zadań zdefiniowanych zgodnie z metaforą przepływu pracy.

Przepływ pracy WADE to klasa Java o dobrze zdefiniowanej strukturze, która umożliwia programistom zdefiniowanie procesu pod względem wykonywanych czynności, ich aktywacji i kryteriów zakończenia oraz relacji między nimi. Można podać dalsze informacje, takie jak uczestnicy przepływu pracy, narzędzia programowe, które będą wywoływane, wymagane dane wejściowe i oczekiwane wyniki oraz dane wewnętrzne, które zostaną zmanipulowane podczas wykonywania. Zaletą podejścia opartego na przepływie pracy jest to, że wszystkie etapy wykonania oraz ich sekwencjonowanie są jawne. WADE zawiera platformę programistyczną o nazwie WOLF, która jest wtyczką Eclipse.

Symulacja ukierunkowana na agenta w NetLogo

NetLogo używa podejścia, które różni się od klasycznego podejścia opartego na logice, z którego zazwyczaj korzystają języki programowania i frameworki zorientowane na agenta. Obrazuje siłę podejścia zorientowanego na agentów w rozwiązywaniu problemów w nietradycyjny sposób i ma potencjał przezwyciężenia niektórych barier w rozwoju przydatnych systemów wieloagentowych. NetLogo, zaprojektowany po raz pierwszy przez Uri Wilensky′ego w 1999 r., Jest wieloplatformowym, programowanym, programowalnym środowiskiem modelowania pod ciągłym rozwojem w CCL (Center for Connected Learning and Computer-Based Modeling) na Northwestern University. NetLogo może służyć do szybkiego prototypowania symulacji zjawisk naturalnych i społecznych. Opiera się na wcześniejszym języku zorientowanym na grafikę o nazwie Logo, opracowanym przez Seymoura Paperta w latach 60. XX wieku i odróżnia się od bardziej tradycyjnych, zorientowanych na agenta języków programowania, ponieważ nie obsługuje formalizmów opartych na logice. NetLogo przyjmuje architekturę opartą na zdarzeniach, w której agenci o prostych reakcjach reaktywnych mogą uzyskać zadziwiająco złożone symulacje, mimo że znajdują się w ograniczonym dwuwymiarowym (2D) środowisku sieciowym (obecnie opracowywana jest wersja ze środowiskiem siatki 3D). NetLogo opisuje środowisko, którego używa do wizualizacji swoich symulacji jako "świata" (innymi słowy, czyni analogię między swoim środowiskiem a rzeczywistym światem). Ten świat składa się z "agentów" wykonujących czynności według instrukcji określonych metodami zaprogramowanymi w języku programowania NetLogo. Te działania są przeprowadzane jednocześnie dla wszystkich agentów na świecie. NetLogo ma cztery typy agentów: żółwie, łaty, linki i obserwatora. Żółwie to agenci, którzy poruszają się i wchodzą w interakcje ze światem. Powód, dla którego nazywane są żółwiem, został odziedziczony z języka programowania Logo - analogia do wyobrażonego robota, który ma zdolność poruszania się i podnoszenia lub upuszczania wirtualnego, kolorowego długopisu, który ma na plecach na płótnie do rysowania. Siatka 2D składa się również z łat, które są kwadratowymi kawałkami ziemi, przez które żółwie mogą się przesuwać i poruszać (patrz prawe okienko na rysunku poniżej). Linki to agenci łączący dwa żółwie. Obserwator patrzy na świat żółwi i łat, ale nie ma określonej lokalizacji (w pewnym sensie nie jest ucieleśniony jak inni agenci)



NetLogo zawiera bogaty zestaw przykładowych "modeli" (lub programów) symulujących zjawiska naturalne lub społeczne w wielu dziedzinach, takich jak: sztuka, biologia, chemia i fizyka, informatyka, nauka o ziemi, matematyka i nauki społeczne . Na przykład model Predatora owcy i wilka bada stabilność ekosystemów drapieżników-ofiar. W symulacji występują dwa typy ras (różne rodzaje żółwi) - wilki i owce, a także łaty traw. Wilki jedzą owce, a owce jedzą trawę. W zależności od warunków początkowych (liczba wilków, liczba owiec, wskaźniki reprodukcji wilków i owiec, ile energii uzyskują z jedzenia, gdzie są losowo umieszczone w środowisku, i czas ponownego wzrostu trawy), Symulacja spowoduje niestabilny system, w którym albo wilki albo oba wilki i owce wyginą, lub to spowoduje stabilny system, w którym będzie dążył do utrzymania się pomimo wahań wielkości populacji w czasie. Zrzut ekranu modelu pokazano na rysunku powyżej. Kod NetLogo jest bardzo czytelny i kompaktowy. Poniżej znajduje się kod procedury głównej go, która określa, co się dzieje, gdy uruchomiona jest symulacja Wolf Sheep.

to go
if not any? turtles [ stop ]
ask sheep [
move
if grass? [
set energy energy – 1 ;; odejmij energię dla owiec tylko wtedy, gdy
;; przełącznik trawy jest włączony
eat-grass
]
reproduce-sheep
death
]
ask wolves [
move
set energy energy - 1 ;; wilki tracą energię podczas ruchu
catch-sheep
reproduce-wolves
death
]
if grass? [ ask patches [ grow-grass ] ]
tick
update-plot
display-labels
end

Polecenie ask służy do określania zachowania agentów żółwia, poprawek i linków. W powyższym kodzie zachowanie owiec najpierw się porusza, potem je trawę, rozmnaża się i umiera. Zachowanie wilków polega na poruszaniu się, chwytaniu owiec (i jedzeniu), reprodukcji, a następnie umieraniu. Wiele różnorodnych modeli, które pojawiają się w NetLogo, pokazuje, że zorientowany na agentów paradygmat programowania, który stosuje, jest zdolny do modelowania zaskakującego zakresu zjawisk w nieskomplikowany sposób. Na przykład na poniższym rysunku pokazano model nowotworu, który symuluje wzrost guza i jego odporność na leczenie chemiczne. Guz składa się z dwóch rodzajów komórek: komórek macierzystych reprezentowanych przez niebieskie środki żółwia; i komórki przejściowe reprezentowane przez wszystkie inne żółwie. Rysunek ilustruje, w jaki sposób komórka rozwija się w odległe miejsca i jak tworzy kolejną kolonię nowotworową, proces zwany przerzutami pokazano na czerwono.



NetLogo to doskonałe narzędzie do zilustrowania zasady, że złożoność może wynikać z interakcji agentów, którzy indywidualnie stosują proste zachowania reaktywne, ale zbiorowo wykazują dużo więcej - to znaczy, że system jako całość jest większy niż suma jego części.

Środowisko programistyczne NetLogo

Czytelnik powinien zapoznać się z dokumentacją dołączoną do środowiska programistycznego NetLogo. Będziesz musiał się do tego często odwoływać, jeśli chcesz tworzyć własne programy. Po uruchomieniu aplikacji NetLogo wybierz menu Pomoc, a następnie wybierz "Podręcznik użytkownika NetLogo". Możesz wykonać następujące samouczki, aby dowiedzieć się więcej o NetLogo:

• Sample Model: Party
•  Tutorial #1: Models
•  Tutorial #2: Commands
•  Tutorial #3: Procedures

W przypadku odniesień językowych dostępne są następujące opcje:

•  Interface Guide
•  Programming Guide
•  Transition Guide
•  NetLogo Dictionary

Przewodnik po interfejsie zawiera podsumowanie interfejsu użytkownika NetLogo i sposób poruszania się po nim. Większość interfejsu użytkownika jest dość oczywista, więc nie będziemy tutaj powtarzać tego materiału. Jeśli masz trudności ze znalezieniem rzeczy w interfejsie użytkownika, to jest to miejsce, w którym można znaleźć informacje o menu użytkownika i dostępne opcje użytkownika. Być może najbardziej użyteczną rzeczą, którą należy wiedzieć na temat interfejsu użytkownika, jest załadowanie biblioteki modeli i wybranie konkretnego modelu. W menu kartę Plik wybierz "Biblioteka modeli", a to załaduje dużą bibliotekę modeli podzielonych na różne obszary tematyczne, takie jak Sztuka, Biologia, Informatyka, Chemia i Fizyka i tak dalej. Aby zapoznać się z interfejsem, wybierz obszar tematyczny Biologia, a następnie wybierz model Termity. Po kliknięciu przycisku Ustawienia na ekranie powinny pojawić się następujące elementy:



Zwróć uwagę na trzy przyciski menu u góry - Interfejs, Informacje i Procedury. Po wybraniu przycisku Interfejs otrzymasz interfejs do programu i wizualizację bieżącego stanu środowiska NetLogo (zwykle 2D), jak pokazano na powyższym rysunku. Będzie się to różnić w zależności od aktualnie wykonywanego modelu lub aplikacji. Zwykle jest przycisk konfiguracji, aby ustawić początkowy stan środowiska, i przycisk Go, aby rozpocząć symulację. Czasami można podać przycisk jednorazowego uruchomienia - spowoduje to wykonanie modelu przez pojedynczy krok symulacji lub zaznaczenie. W innych przypadkach pojawi się przycisk "na zawsze", który będzie wykonywał model w nieskończoność. Te elementy interfejsu można dodać, klikając menu przycisku i wybierając spośród wielu elementów, takich jak przyciski, suwaki i wybieracze:



Różne z tych elementów interfejsu definiują zmienne globalne lub wymagają określonego polecenia (tj. Procedury) gdzieś zdefiniowanego w programie. Na przykład przycisk go wymaga zdefiniowania w kodzie polecenia o nazwie go, ale etykieta wyświetlana na przycisku może zostać w razie potrzeby zastąpiona. Przycisk Information przełączy się na ekran, na którym wyświetlane są informacje o modelu dostarczonym przez programistę. Przycisk Procedure przełączy się w tryb ekranu, w którym wyświetlany jest kod NetLogo modelu i który można edytować. W przypadku modelu Termites dwa pierwsze polecenia określają kod, który ma zostać wykonany po kliknięciu przycisku setup i go:

to setup
clear-all
set-default-shape turtles "bug"
;; losowo rozprowadzać zrębki
ask patches
[ if random-float 100 < density
[ set pcolor yellow ] ]
;; losowo rozmieszczaj termity
create-turtles number [
set color white
setxy random-xcor random-ycor
set size 5 ;; easier to see
]
end
to go ;; procedura żółwia
search-for-chip
find-new-pile
put-down-chip
end

NetLogo jest bardzo zwięzły i łatwy do odczytania. Procedura instalacji losowo rozprowadza wióry i termity (widziana jako żółte łatki i białe ikony ant-podobne odpowiednio w środowisku po kliknięciu przycisku instalacji). Procedura go wykonuje trzy dalsze procedury - szukanie wiórów drewnianych, znajdowanie nowego stosu i układanie zrębków - które definiują zachowanie wszystkich czynników termitów na każdym kleszczu. Kod dla tych trzech procedur można znaleźć w pozostałej części kodu dołączonego do modelu. Przewodnik programowania zawiera podsumowanie kluczowych elementów języka programowania NetLogo. Zapewnia przegląd ważnych funkcji języka i może być użytecznym źródłem dla przykładów programowania. Warto czytać, zwłaszcza gdy zaczynasz od języka. Jednak słownik NetLogo to miejsce, w którym programiści NetLogo spędzają większość czasu i zawierają linki do wszystkich poleceń dostępnych w tym języku. Przewodnik "Transition Guide" opisuje wcześniejsze wersje NetLogo i to, co zmieniło się w ostatnich wersjach, więc jest mniej korzystne dla kogoś uczącego się programowania w NetLogo.

Agenci i środowiska w NetLogo

Spojrzymy teraz na sposób implementacji agentów i środowisk w NetLogo. Technicznie rzecz biorąc, żółwie wdrożone w NetLogo można by sklasyfikować jako "proto-agentów", a nie pełnowymiarowych "agentów", ponieważ nie są one autonomiczne i nie mają wyraźnych możliwości wykrywania (muszą one być zaprogramowane) , chociaż mają charakterystyczne zachowanie w ograniczonym sensie i znajdują się w prymitywnym środowisku 2D. Jednak uznamy, że rozróżnienie proto-agent / agent jest arbitralne i wolimy zamiast tego odnosić się do żółwi jako agentów, tak jak są one opisane w dokumentacji NetLogo, a także dlatego, że mają one potencjał projektowy w celu uzyskania bardziej złożonych właściwości agenta, jeśli są zaprogramowane w bardziej wyrafinowany sposób, taki jak użycie nici dla każdego żółwia i / lub zapewnienie żółwiom większych możliwości wykrywania. Jednym ze sposobów myślenia o nich jest zestaw wstępnie zaprogramowanych "robotów" oprogramowania, nad którymi sprawujemy kontrolę nad programistą. Możemy jawnie zaprogramować zestaw instrukcji lub poleceń, które kontrolują to, co robią, gdy są wykonywane, więc nie ma nic naprawdę odmiennego od standardowego podejścia obiektowego. Potęga NetLogo wynika jednak z łatwości, z jaką umożliwia jednoczesne tworzenie i wykonywanie wielu agentów (w wielu przypadkach setek lub nawet tysięcy). Jak stwierdzono, w NetLogo istnieją cztery typy agentów:

1. żółwie
2. łaty
3. powiązani
4. obserwatorzy

Agenci żółwi to agenci, którzy znajdują się w środowisku i poruszają się w nim. Środowisko 2D składa się z siatki łat, nad którymi mogą się poruszać agenci. Używając analogii ze środowiskiem reallife, możemy pomyśleć, że łaty są kwadratowymi kawałkami ziemi ułożonymi w wzór siatki przypominający bloki na Manhattanie. Agenci powiązani łączą ze sobą dwóch agentów żółwia. Agent obserwujący to pojedynczy agent, który nadzoruje (lub "obserwuje") środowisko i agentów, ale nie ma określonej lokalizacji, takiej jak pozostałe trzy typy agentów. W NetLogo zestaw agentów nazywa się agentsetem. Język ma bogaty zestaw poleceń, które pozwalają nam łatwo ustawić atrybuty dla całego zestawu agentów (takich jak ich kolor, jak w poniższym przykładzie kodu NetLogo). Wbudowane zmienne żółwie, łatki i linki utrzymują zestawy wszystkich żółwi, łatek i łączą agentów, które obecnie istnieją w środowisku. Deweloper ma także możliwość zdefiniowania agentów żółwi i łączników jako nowych ras agentów. Na przykład poniższe polecenie definiuje dwie rasy agentów, lisów i królików:

breed [foxes fox]
breed [rabbits rabbit]
turtles-own [age gender]

Polecenie z żółwiami określa, że wszystkie żółwie (w tym lisy i króliki) posiadają atrybuty wiek i płeć. Atrybuty związane z określoną rasą można zdefiniować za pomocą komendy specyficznej dla rasy - na przykład, lisy-własne i króliki-własne stają się prawowitymi komendami, które mogą być użyte w programie po zdefiniowaniu powyższych poleceń rasy. Nowi żółwi i agenci łączników mogą być stworzeni za pomocą polecenia create-turtles lub przez polecenia specyficzne dla rasy, takie jak create-foxes i create-rabbit. Poniższy kod tworzy 100 lisów i 1000 królików w losowych lokalizacjach w środowisku NetLogo, wszystkie w wieku zerowym, ale z przypadkową płcią:

breed [foxes fox]
breed [rabbits rabbit]
turtles-own [age gender]
to setup
clear-all ;; clear everything
create-foxes 100 [
set age 0
set size 2
set color brown
ifelse random 2 = 0
[set gender "Male"]
[set gender "Female"]
setxy random-xcor random-ycor
]
create-rabbits 1000 [
set age 0
set size 2
set color white
ifelse random 2 = 0
[set gender "Male"]
[set gender "Female"]
setxy random-xcor random-ycor
]
end

Zrzut ekranu przedstawiający wynikowe środowisko pokazano na rysunku



Poniższy kod dostarcza kolejnego przykładu, jak zdefiniować rasę agenta żółwia zwaną all-blacks z czterema atrybutami - name, pos, weight, height i debut - i zainicjować te atrybuty za pomocą wyboru dostarczonych danych

breed [all-blacks all-black]
all-blacks-own [name pos weight height debut]
to initialise-all-blacks
create-all-blacks 1 [set name "Sid Going" set pos "Half-back"
set weight 81 set height 170 set debut 1967]
create-all-blacks 1 [set name "David Kirk" set pos "Half-back"
set weight 73 set height 173 set debut 1983]
create-all-blacks 1 [set name "Justin Marshall" set pos "Half-back"
set weight 95 set height 179 set debut 1995]
create-all-blacks 1 [set name "Piri Weepu" set pos "Half-back"
set weight 94 set height 178 set debut 2004]
create-all-blacks 1 [set name "Grant Batty" set pos "Winger"
set weight 70 set height 165 set debut 1972]
create-all-blacks 1 [set name "John Kirwan" set pos "Winger"
set weight 97 set height 191 set debut 1984]
create-all-blacks 1 [set name "Jonah Lomu" set pos "Winger"
set weight 119 set height 196 set debut 1994]
create-all-blacks 1 [set name "Doug Howlett" set pos "Winger"
set weight 93 set height 185 set debut 2000]
create-all-blacks 1 [set name "Joe Rokocoko" set pos "Winger"
set weight 98 set height 189 set debut 2003]
end

Atrybuty agentów można łatwo zmienić. Na przykład można zmienić tło, ustawiając kolor łaty dla wszystkich poprawek na biały (zamiast domyślnej czerni) w następujący sposób:

ask patches
[set pcolor white] ;; make background full of white patches

Niektóre wbudowane atrybuty poprawek są współrzędnymi określonymi przez pxcor i pycor, a także ich kolorowymi kolorami. Podobnie, żółwie i linki mają wbudowane zmienne xcor, ycor i color. Zauważ, że chociaż agenci łaty nie mogą poruszać się jak agenci żółwia, łatki mają zdefiniowane przez użytkownika atrybuty, a także mają zdolność do kiełkowania agentów (analogia może dotyczyć nowych królików wychodzących z dziury w ziemi). Z tego powodu łaty są uważane za rodzaj agenta, który jest statyczny (pozostaje w jednym miejscu), a nie dynamiczny (ma zdolność poruszania się jak robią to żółwie). Zwróć też uwagę, że rozmiar łatek można zmienić. Programista może zmienić rozmiar, klikając przycisk Ustawienia na ekranie interfejsu. Pojawi się lista ustawień modelu, które określają rozmiar (w liczbie poprawek) środowiska i jego układu współrzędnych, czy środowisko owija się poziomo i / lub pionowo, rozmiar poprawki w pikselach, kształty żółwia, rozmiar czcionki dla etykiet na agentach i to, czy licznik jest widoczny, czy nie. Jako kolejny przykład, poniższy kod rysuje zewnętrzną część pustego labiryntu 2D, który jest wyśrodkowany na współrzędnych (0,0) i ma wejście na środku dna labiryntu i wyjście w środkowym szczycie. Kod wykorzystuje pięć globalnych zmiennych - lewych kolców, prawych kolejek, górnych wierszy, dolnych i wejściowych - które określają liczbę kolumn (poziome łatki) po lewej i prawej stronie linii x = 0, liczbę rzędy (pionowe łatki) powyżej i poniżej linii y = 0 oraz szerokość w łatach wejścia. Wartości tych zmiennych można zmienić na ekranie Interfejsu, jak pokazano na rysunku



; Empty Maze Demo
;
; Demo Pustego Labiryntu
;
; Rysuje pusty labirynt z wejściem na środkowym dole i wyjściem
; na środku góry
; ustaw pusty labirynt na (0,0)
to setup-empty-maze
ca ;; clear everything
ask patches
[
set pcolor white ;; zrób tło pełne białych łat
if (pxcor >= (- left-cols - entrance-cols) and
pxcor <= (- entrance-cols) and pycor = (- below-rows))
[set pcolor blue] ;; rysuje dolną lewą poziomą ścianę na niebiesko
if (pxcor >= (entrance-cols) and
pxcor <= (right-cols + entrance-cols) and pycor = (- below-rows))
[set pcolor blue] ;; rysuje dolną prawą poziomą ścianę na niebiesko
if (pxcor >= (- left-cols - entrance-cols) and
pxcor <= (- entrance-cols) and pycor = (above-rows))
[set pcolor blue] ;; rysuje lewą górną poziomą ścianę na niebiesko
if (pxcor >= (entrance-cols) and
pxcor <= (right-cols + entrance-cols) and pycor = (above-rows))
[set pcolor blue] ;; rysuje lewą górną poziomą ścianę na niebiesko
if (pxcor = (- left-cols - entrance-cols) and
pycor >= (- below-rows) and pycor <= (above-rows))
[set pcolor blue] ;; rysuje lewą pionową ścianę na niebiesko
if (pxcor = (right-cols + entrance-cols) and
pycor >= (- below-rows) and pycor <= (above-rows))
[set pcolor blue] ;; rysuje prawą pionową ścianę na niebiesko
]
end

Dane wyjściowe generowane przez program przedstawiono na rysunku powyżej. Ustawienia to max-pxcor 50, maxpycor 50 i Patch size 3

Rysowanie labiryntów za pomocą Agentów Łaty NetLogo

"Labirynt to celowo myląca seria ścieżek lub przejść prowadzących do określonego punktu i zaprojektowana tak, aby życie było trudne, z dużą ilością fałszywych wiórów, ślepych zaułków i pułapek. Labirynty są bardzo stare - w mitologii greckiej Minotaur został uwięziony w labiryncie - i nadal można go znaleźć w ogrodach wielkich domów, takich jak słynny labirynt w Hampton Court Palace".Juliet i Charles Snape, The Fantastic Book Book. Labirynt żywopłotu w Chevening House, Anglia, ok. 1820, był jednym z pierwszych świadomie zaprojektowanych, by zapewnić bardziej złożoną łamigłówkę i udaremnić zasadę "rąk na ścianie" do rozwiązywania labiryntów. Rysowanie labiryntów wymaga zazwyczaj więcej wysiłku niż proste kod podany w NetLogo Code do rysowania pustego labiryntu. Cytat na górze tego rozdziału odnosi się do Labiryntu Pałacu Hampton Court, słynnego labiryntu ogrodowego w Anglii. Stylizowany widok z lotu ptaka labiryntu bliżej jego rzeczywistego kształtu pokazano na rysunku poniżej . Zamiast rysować na zewnątrz tego labiryntu najpierw i być może wciągnąć do środka w pewien sposób możemy przyjąć inne rozwiązanie. W NetLogo możemy używać łatek do rysowania ścian i określać każdą ścianę tam i z powrotem przez labirynt w sposób zygzakowaty, najpierw definiując wszystkie poziome ściany, a następnie wszystkie pionowe ściany. Kod NetLogo, który wykorzystuje to rozwiązanie do narysowania schematu mapy obiektu Hampton Court Place Maze pokazanego po lewej stronie rysunku poniżej, jest wymieniony w NetLogo Code.



; Demo labiryntu w Hampton Court
;
; Rysuje schematyczną mapę labiryntu Hampton Court
; ustaw labirynt na (0,0)
to setup-row [row colour segments]
foreach segments
[
if pycor = row * row-patches-width and
(pxcor >= col-patches-width * (item 0 ?)) and
(pxcor <= col-patches-width * (item 1 ?))
[set pcolor colour]
]
end
to setup-col [col colour segments]
foreach segments
[
if pxcor = col * col-patches-width and
(pycor >= row-patches-width * (item 0 ?)) and
(pycor <= row-patches-width * (item 1 ?))
[set pcolor colour]
]
end
to setup-hampton-maze
ca ;; clear everything
ask patches
[
if (pxcor >= min-pxcor and pxcor <= max-pxcor and
pycor >= min-pycor and pycor <= max-pycor)
[set pcolor white] ;; zrób tło pełne białych łat
setup-row 5 blue [[-9 10]]
setup-row 4 blue [[-8 -5] [-3 -1] [0 3] [5 9]]
setup-row 3 blue [[-7 -4] [-2 2] [4 8]]
setup-row 2 blue [[-6 -1] [1 4] [5 7]]
setup-row 1 blue [[-3 3] [8 9]]
setup-row 0 blue [[-8 -7] [9 10]]
setup-row -1 blue [[-9 -8]]
setup-row -2 blue [[-8 -7] [-3 0] [1 3]]
setup-row -3 blue [[-4 -1] [2 4] [6 8]]
setup-row -4 blue [[-7 -1] [1 9]]
setup-row -5 blue [[-8 10]]
setup-row -6 blue [[-9 0] [1 10]]
setup-col 10 blue [[-6 5]]
setup-col 9 blue [[-4 -1] [1 4]]
setup-col 8 blue [[-3 1] [2 3]]
setup-col 7 blue [[-2 2]]
setup-col 6 blue [[-4 1]]
setup-col 5 blue [[-3 2]]
setup-col 4 blue [[-3 2] [3 5]]
setup-col 3 blue [[-2 1] [2 4]]
setup-col 1 blue [[-4 -2]]
setup-col 0 blue [[-5 -2] [1 3]]
setup-col -1 blue [[-4 -3] [4 5]]
setup-col -3 blue [[-2 1] [2 4]]
setup-col -4 blue [[-3 2] [3 5]]
setup-col -5 blue [[-4 1]]
setup-col -6 blue [[-3 2]]
setup-col -7 blue [[-4 -3] [-2 0] [1 3]]
setup-col -8 blue [[-5 -2] [0 4]]
setup-col -9 blue [[-6 5]]
]
end

Patrząc na mapę i obraz na powyższym rysunku , jest oczywiste, że mapa nie przedstawia dokładnie prawdziwego labiryntu życia. (Czytelnik może to łatwo zweryfikować za pomocą Google Earth). Mapa jest "schematem", który zniekształca relacje między obiektami istniejącymi w rzeczywistym środowisku życia, które reprezentuje, w podobny sposób, jak Londyńska Mapa Podziemna nie odzwierciedla dokładnie prawdziwych odległości i relacji geograficznych w systemie kolei podziemnej Londynu. Odkształcenia są wyraźnie widoczne, ale ważne jest, aby zdać sobie sprawę, że zniekształcenia są charakterystyczne dla wszystkich map, których celem jest przedstawienie rzeczywistego środowiska życia. Nawet dokładne mapy topograficzne lub orientacyjne będą miały zniekształcenia ze względu na skalę, w wyniku szerokości wymaganej do narysowania każdego z symboli na mapie. Na przykład autostrady rysowane na mapach topograficznych nie są narysowane w skali - gdyby tak było, to w rzeczywistości autostrady musiałyby mieć setki metrów średnicy. Ponadto każda mapa będzie zawierała błędy (i zwykle wiele). Na przykład mapa po lewej stronie na Rysunku 3.7 ma krótką ścianę wystającą pod kątem prostym w połowie wysokości ściany lewej labiryntu, podczas gdy w rzeczywistości żywopłot jest ciągły bez ostrych kątów. Jednak pomimo tych zniekształceń i błędów, mapa może być łatwo wykorzystana jako pomoc w nawigacji - osoby korzystające z mapy mają wiedzę, jak szybko dostać się do centrum labiryntu (celu), nie popełniając błędu. Zauważ, że będziemy używać map jako podstawowego bloku konstrukcyjnego w rozdziale 9 do opisywania wiedzy i koncepcji - dwóch ważnych aspektów budowania agenta ze sztuczną inteligencją. Przeanalizujmy teraz kod w powyższym kodzie NetLogo , który rysuje mapę na rysunku powyższym. Możemy uprościć, definiując najpierw ogólne procedury narysowania linii poziomych lub pionowych, z lukami w nich. Procedury setup_row i setup_col przyjmują cztery parametry jako dane wejściowe - numer wiersza (wiersza) lub kolumny (col), gdzie narysowana jest linia segmentów łatki, szerokość wiersza i szerokość_kolumny, czyli szerokość liczby poprawek określających szerokość zarówno wierszy, jak i kolumn w labiryncie (zachowamy je tak samo dla tego przykładu), a segmenty - listę pozycji początkowych i końcowych, które określają, gdzie każdy segment łat zaczyna się i kończy w tej samej linii. Reszta kodu rysuje każdy wiersz i kolumnę w labiryncie (poziome i pionowe linie, które przedstawiają żywopłoty w labiryncie). Zauważ, że istnieje wiele sposobów na narysowanie labiryntu. W NetLogo nie musimy korzystać z agentów łatek do rysowania - możemy zamiast tego użyć agenta z żółwiami, aby żółw przesunął się bezpośrednio nad liniami żywopłotu, rysując je tak, jak to się dzieje. Ograniczeniem NetLogo jest jednak to, że to co rysuje agent żółwia, nie może być "widziane" przez inne żółwie i łaty - nie mają one zdolności wyczuwania rysunków ani reagowania na nie. Ponieważ chcemy w przyszłości wykorzystać te labirynty aby zademonstrować, w jaki sposób można zaprogramować ucieleśnionego agenta, aby je przeszukać, wymagamy umiejętności, aby inni agenci mogli wyczuć, gdzie są żywopłoty w środowisku wirtualnym. Również przyjęta tutaj metoda rysowania poziomych żywopłotów, po których następują pionowe żywopłoty, nie musi być najskuteczniejsza na pokrytej odległości, ponieważ żółw przemieszcza się dwukrotnie w środowisku 2D. Jednakże, jeśli czynnik żółwia jest widoczny (to znaczy, że żółw jest animowany), zachowanie czynnika żółwia jest łatwo zauważalne dla obserwatora - użyteczna cecha, która pomaga uczynić rozwiązanie łatwiejszym do zrozumienia i debugowania. Rozszerzeniem może być użycie wielu agentów - na przykład jeden żółw może zostać użyty do narysowania poziomych ścian, a drugi do narysowania pionowych. Jeśli każdy agent jest zaimplementowany jako wątek, oba mogą być wykonywane jednocześnie, co zmniejsza o połowę czas wykonania, jeśli liczba poziomych ścieżek jest równa liczbie pionowych ścieżek. Jednak NetLogo nie implementuje agentów żółwia jako osobnych wątków, więc nie ma przewagi przy korzystaniu z wielu agentów w tym przypadku. Labirynt Hampton Court to po prostu połączony labirynt. Ludzki agent, który przyjmuje zachowanie ręki na ścianie, zawsze będzie mógł dostać się do środka labiryntu (celu). Labirynt Chevening House w Anglii zbudowany w 1820 roku był jednym z pierwszych labiryntów, które były wielokrotnie połączone (to znaczy, że w labiryncie jest jedna lub więcej "wysp", które są odizolowane od siebie, całkowicie odłączone od zewnętrznej ściany) . Schematyczną mapę labiryntu pokazano na rysunku



Labirynt został narysowany przy użyciu kodu NetLogo wymienionego w poniższym kodzie NetLogo

to setup-chevening-house-maze
ca ;; wyczyść wszystko
ask patches
[
if (pxcor >= min-pxcor and pxcor <= max-pxcor and
pycor >= min-pycor and pycor <= max-pycor)
[set pcolor white] ;; zrób tło pełne białych łat
setup-row 12 blue[[-11 12]]
setup-row 11 blue [[-10 11]]
setup-row 10 blue [[-9 10]]
setup-row 9 blue [[-8 0] [1 9]]
setup-row 8 blue [[-7 -1] [2 8]]
setup-row 7 blue [[-6 0] [1 7]]
setup-row 6 blue [[-5 0] [1 6]]
setup-row 5 blue [[-4 -1] [2 5]]
setup-row 4 blue [[-3 0] [1 4]]
setup-row 3 blue [[-2 3]]
setup-row 2 blue [[-1 2]]
setup-row 1 blue [[-9 -5] [-4 -2] [3 5] [6 8] [10 11]]
setup-row -0 blue [[-9 -7] [3 5] [6 10]]
setup-row -1 blue [[-1 0] [1 2] [7 9]]
setup-row -2 blue [[-2 0] [1 3]]
setup-row -3 blue [[-3 -1] [1 4]]
setup-row -4 blue [[-4 -2] [2 5]]
setup-row -5 blue [[-5 -3] [2 6]]
setup-row -6 blue [[-6 -3] [1 7]]
setup-row -7 blue [[-7 -2] [0 8]]
setup-row -8 blue [[-8 1] [3 9]]
setup-row -9 blue [[-9 0] [3 10]]
setup-row -10 blue [[-10 -1] [2 11]]
setup-row -11 blue [[-11 0] [1 12]]
setup-col 12 blue [[-11 12]]
setup-col 11 blue [[-10 1] [2 11]]
setup-col 10 blue [[-9 0] [1 10]]
setup-col 9 blue [[-8 -1] [0 9]]
setup-col 8 blue [[-7 -2] [1 8]]
setup-col 7 blue [[-6 -1] [2 7]]
setup-col 6 blue [[-5 0] [1 6]]
setup-col 5 blue [[-4 0] [1 5]]
setup-col 4 blue [[-3 -1] [2 4]]
setup-col 3 blue [[-2 0] [1 3]]
setup-col 2 blue [[-10 -7] [-1 2]]
setup-col 1 blue [[-11 -8] [-6 -1] [4 6] [7 9]]
setup-col 0 blue [[-11 -9] [-7 -1] [4 6] [7 9]]
setup-col -1 blue [[-8 -3] [-1 2]]
setup-col -2 blue [[-7 -4] [-2 0] [1 3]]
setup-col -3 blue [[-3 1] [2 4]]
setup-col -4 blue [[-4 0] [1 5]]
setup-col -5 blue [[-5 6]]
setup-col -6 blue [[-6 0] [2 7]]
setup-col -7 blue [[-7 0] [1 8]]
setup-col -8 blue [[-8 -1] [2 9]]
setup-col -9 blue [[-9 0] [1 10]]
setup-col -10 blue [[-10 11]]
setup-col -11 blue [[-11 12]]
]
end-

przy użyciu tego samego podejścia, co powyżej, do rysowania poziomych zabezpieczeń, a następnie pionowych zabezpieczeń. Jedyną różnicą jest to, że szerokość rzędów łat i szerokości kolumn została wybrana jako dwa razy większa niż globalna wielkość poprawki, aby mapa bardziej odzwierciedlała schematyczne mapy prawdziwego labiryntu, które można znaleźć w Internecie. Jeśli podążymy za wszystkimi ścianami wychodzącymi ze środka labiryntu, okaże się, że te ściany nie są w żaden sposób połączone z zewnętrzną ścianą. W konsekwencji zachowanie "ręka w ścianę" nie będzie już wystarczająco dobre dla rozwiązania labiryntu. Celem tego drugiego przykładowego labiryntu jest zilustrowanie, w jaki sposób zachowanie właściwe dla jednego środowiska może nie być odpowiednie dla innego środowiska (takiego jak nowe środowisko lub kiedy zmieniło się oryginalne środowisko). Aby agent mógł nadal osiągać określony cel, agent musi dostosować (lub nauczyć się), aby poradzić sobie ze zmienionym środowiskiem. Zbadamy zachowanie i istotną rolę, jaką będzie odgrywać później dla autonomicznych agentów

Podsumowanie

Ta sekcja stanowi wprowadzenie do języka programowania NetLogo. NetLogo to przykład typu modelowania opartego na agentach zwanego symulacją ukierunkowaną na agenta, która łączy agentów z symulacją. NetLogo jest łatwy do nauczenia i debugowania, zaprojektowane z myślą o niedoświadczonych programistach.

Ruch

"Zmiana oznacza ruch. Ruch oznacza tarcie. Jedynie w pozbawionej tarcia próżni nieistniejącego abstrakcyjnego świata ruch lub zmiana może nastąpić bez tego tarcia ścierającego się konfliktu. " Saul Alinsky.

Ruch

Ruch jest podstawowym zadaniem wykonywanym przez autonomicznego agenta znajdującego się w otoczeniu. Sposób, w jaki agent przesuwa swoje ciało i sposób, w jaki porusza się po swoim otoczeniu, determinuje wiele jego zachowań. Typy interakcji agent-środowisko i interakcji między agentami możliwe są również w wyniku rodzajów ruchów, które są możliwe dla agenta. W fizyce ruch odnosi się do ciągłej zmiany położenia ciała w wyniku użycia siły lub sił, które są do niego przyłożone. Ciało w ruchu można scharakteryzować przez jego prędkość, przyspieszenie, przemieszczenie i czas. Ciało, które się nie porusza, mówi się, że jest w spoczynku lub nieruchomo (nieruchomo). Ruch jest mierzony (obserwowany) zgodnie z układem odniesienia w oparciu o ruch obserwatora. Nie ma bezwzględnego układu odniesienia - zgodnie z danym układem odniesienia ciało może wydawać się nieruchome, ale porusza się także względem nieskończonej liczby innych ram odniesienia. Dlatego wszystko we wszechświecie można uważać za ciągłe. Ruch jest podstawą wielu powszechnych metafor używanych w ludzkim języku. Nasze zrozumienie jako człowieka wywodzi się z podstawowych pojęć przestrzeni, względnej pozycji, ruchu i ruchu, w tym także z ruchu własnego, który jest związany z naszym fizycznym ucieleśnieniem i usytuowaniem w rzeczywistym świecie. Często wyrażamy i rozumiemy abstrakcyjne pojęcia, których nie możemy dotknąć ani zobaczyć w oparciu o te podstawowe pojęcia.

Ruch agentów żółwia w NetLogo

Programowanie żółwia w NetLogo w celu wykonywania różnych poleceń jest proste i bardzo intuicyjne. Polecenie "pen-up" służy do przesuwania pióra do góry, więc dopóki nie zostanie wywołane polecenie, nic nie zostanie narysowane na ekranie. Metody wielkości pisaka i koloru określają szerokość i kolor pisaka. Polecenie w przód powoduje, że żółw przesuwa się o określoną liczbę kroków w kierunku, w którym jest skierowany, a lewy i prawy powoduje, że żółw obraca się o określony kąt odpowiednio w lewo lub w prawo. Tabela poniżej zawiera listę dostępnych metod

Metoda : Opis

Aby zmienić środowisko

clear-all (ca) : Czyści wszystko w środowisku, w tym wszystkie żółwie, łaty, linki, wykresy i rysunki oraz resetuje zmienne do 0.

clear-drawing : Usuwa wszystkie rysunki wykonane przez agentów żółwia

Do przemieszczania żółwia

forward d or fd d : Przesuwa żółwia przed krokami d w zależności od bieżącego kierunku.

back d or bk d : Powoduje cofnięcie żółwia o krok d na podstawie bieżącego kierunku.

right a or rt a : Włącza żółw w prawo o podany kąt a w stopniach.

left a or lt a : Obróć żółwia o określony kąt a w stopniach.

setxy x y : Przenosi żółwia z bieżącej pozycji do pozycji absolutnej na współrzędnych (x, y) i rysuje linię, jeśli pióro jest opuszczone.

set xcor x : Ustawia współrzędną x żółwia na x (utrzymuj współrzędną y niezmienioną).

set ycor y : Ustawia współrzędną y żółwia na y (zachowaj współrzędną x niezmienioną).

set heading a : S Ustawia kierunek, w którym żółw stoi zwrócony pod kątem ? w stopniach.

move-to agent : Ustawia współrzędne (x, y) na takie same, jak dla agenta.

face agent : Ustawia nagłówek w kierunku agenta.

facexy x y : Ustawia nagłówek na współrzędne (x, y)

Aby powrócić lub ustawić stan żółwia

xcor : Wbudowana zmienna żółwia. Posiada x współrzędną żółwia.

ycor : Wbudowana zmienna żółwia. Zawiera współrzędną żółwia.

heading : Wbudowana zmienna żółwia. Zawiera bieżący kurs żółwia.

towards agent lub towardsxy x y : Podaje nagłówek od bieżącego agenta w kierunku danego agenta lub nagłówek do współrzędnych (x, y).

distance agent lub distancexy x y : Zwraca odległość do żółwia lub łatki lub odległość do współrzędnych (x, y).

show-turtle lub st : Sprawia, że żółw jest widoczny.

hide-turtle lub ht : Sprawia, że żółw jest niewidoczny.

hidden? : Zwraca True, jeśli żółw nie jest widoczny, Fałsz w przeciwnym razie

Aby kontrolować pióro do rysowania

pen-down lub pd : Przesuń pióro tak, aby żółw rysował, gdy się porusza.

pen-up lub pu : Pociągnij pióro tak, aby żółw nie narysował niczego podczas ruchu.

pen-erase lub pe : Pchnij gumkę w dół, aby żółw usunął linie podczas ruchu.

pen-mode : Wbudowana zmienna żółwia. Posiada stan pióra żółwia - wartości są "up", "down" i "erase".

pemn-size : Wbudowana zmienna żółwia. Utrzymuje szerokość pióra żółwia w pikselach.

color : Wbudowana zmienna żółwia. Posiada kolor żółwia lub ogniwa.

Metody zostały pogrupowane w metody związane ze środowiskiem, przemieszczaniem się żółwia, jego stanem i rysunkiem. Te trzy ostatnie grupy metod wpływają lub determinują zachowanie żółwia. Pomimo prostoty projektu, skomplikowane kształty i obrazy są bardzo łatwe do zaprogramowania. Programowanie z grafiką żółwia jest intuicyjne, ponieważ wykorzystuje zorientowaną na agenta pierwszą perspektywę projektowania - wszystko jest rysowane z perspektywy samego żółwia.

Zachowanie i podejmowanie decyzji w zakresie ruchu

Możemy przyjąć perspektywę projektowania, że każde zachowanie agenta może być zdefiniowane lub scharakteryzowane pod względem ruchów, które eksponuje w otoczeniu. Aspekty zachowania agenta obejmują sposób poruszania się agenta, dokąd agent się przemieszcza, kiedy agent decyduje się przenieść, co wybiera agent, i dlaczego agent decyduje się wykonać konkretny ruch związany z podejmowaniem decyzji. Z punktu widzenia projektowania możemy przyjąć analogię przy projektowaniu naszych systemów zorientowanych na agentów, że podejmowanie decyzji to ruch z jednego miejsca do innego otoczenia i jest podobne do ruchu w prawdziwym życiu. Przemieszczanie się w prawdziwych środowiskach wyraźnie prowadzi do zmiany położenia geograficznego. Ruch w środowiskach wirtualnych spowoduje, że stan wewnętrzny środowiska zostanie w jakiś sposób zmieniony (na przykład zmieniana jest wirtualna pozycja bota gry). W oparciu o tę analogię możemy zdefiniować sposób podejmowania decyzji w następujący sposób. Agent przejawia zachowanie przy podejmowaniu decyzji, gdy zdecyduje się przejść wzdłuż jednej konkretnej ścieżki, gdy dostępne są dla niej ścieżki alternatywne. Jest to analogiczne do ruchu w prawdziwym życiu. Możemy również użyć n-wymiarowego środowiska przestrzeni do reprezentowania procesu decyzyjnego w agentach w sposób abstrakcyjny. Możemy rozważyć proces podejmowania decyzji dla agenta jako przechodzenia z jednego stanu wewnętrznego do drugiego, gdzie stan jest reprezentowany jako pojedynczy punkt w przestrzeni n-wymiarowej. Jest to równoważne reprezentowaniu zachowania za pomocą skończonej maszyny stanów (FSM) (zwanej również automatem skończonym lub FSA). FSM jest modelem zachowania z ograniczoną pamięcią wewnętrzną, którą można konceptualizować jako skierowany wykres składający się z wielu stanów (wierzchołków lub węzłów na wykresie), przejść między tymi stanami (krawędzie na wykresie) oraz czynności wykonywane przy wchodzeniu lub wychodzeniu ze stanu lub podczas przejścia. Prosty FSM do opisu zachowania samochodu jest przedstawiony na rysunku poniżej.





Istnieją dwa stany - oznaczone jako "Silnik uruchomiony" i "Silnik stop - oznaczające, kiedy silnik samochodu jest uruchomiony lub zatrzymany, oraz dwie akcje przejścia - oznaczone "Przełącz kluczyk" - w celu przeniesienia FSM z jednego stanu do drugiego. Ograniczymy się do działań, które mają miejsce tylko podczas przemian, aby wzmocnić analogię między podejmowaniem decyzji a ruchem. Możemy myśleć o punkcie w środowisku decyzyjnym agenta, analogicznym do stanu w maszynie o skończonym stanie. Możemy również myśleć o poruszaniu się po ścieżce w środowisku decyzyjnym agenta jako analogii do przejścia i przeprowadzania przejścia działanie w skończonej maszynie stanów. Decyzje, w których agent po osiągnięciu określonego punktu lub stanu nie ma innego wyboru, jak wykonać określone działanie, nazywa się determinizmem. Decyzje, w których agent może dokonać wyboru między zestawem alternatywnych działań, są określane jako niedeterministyczne.

Rysowanie FSM i drzew decyzyjnych za pomocą agentów linków w NetLogo

Możemy używać agentów linków w NetLogo do rysowania FSM. Będziemy także używać podobnego kodu do rysowania drzew decyzyjnych, co stanowi kolejną metodę reprezentowania zachowania. W tym tomie okaże się to przydatne, szczególnie w opisie wykorzystania animacji do zademonstrowania dynamicznego zachowania i do reprezentowania wiedzy. Przykładowy kod do wizualizacji prostego dwustanowego FSM pokazano w kodzie NetLogo.

breed [agents agent]
breed [points point]
directed-link-breed [curved-paths curved-path]
agents-own [location] ;; ma rację
to setup
clear-all ;; wyczyść wszystko
set-default-shape points "circle"
create-points 1 [setxy -15 0 set label "Light off "] ;; punkt 0
create-points 1 [setxy 15 0 set label "Light on "] ;; punkt 1
ask points [set size 5 set color blue]
ask point 0 [create-curved-path-to point 1]
ask point 1 [create-curved-path-to point 0]
ask curved-paths [set thickness 0.5]
set-default-shape curved-paths "curved path"
ask patches [
;; nie pozwól widzowi zobaczyć tych poprawek; służą tylko
;; do wyświetlania etykiet w osobnych wierszach
set plabel-color brown
if (pxcor = 11 and pycor = 8) [set plabel "Move light switch down"]
if (pxcor = 11 and pycor = -8) [set plabel "Move light switch up"]
]
create-agents 1 [
set color lime
set size 5
set location point 0 ;; start od punktu 0
move-to location
]

Zrzut ekranu przedstawiono na rysunku poniżej.



Dwustanowy FSM przedstawia, co się dzieje, gdy światło musi być włączane i wyłączane. W pierwszym stanie światło jest wyłączone, a przejście do drugiego stanu, gdy światło jest włączone, wymaga od agenta wykonania czynności przesunięcia przełącznika światła w dół. Gdy światło jest włączone, wymagane jest przeciwne działanie przełączania światła, aby ponownie powrócić do pierwszego stanu . FSM narysowany przez kod składa się z dwóch stanów oznaczonych odpowiednio "Light off" i "Light on". Stany są reprezentowane jako agenci żółwia, którzy się nie poruszają - to jest mają ustalony punkt w środowisku (stąd te są zdefiniowane jako należące do punktów rasy agenta żółwia.) Są dwa ogniwa, reprezentowane jako zakrzywione ścieżki od pierwszego punktu stanu 0 do drugiego punktu stanu 1, a następnie z powrotem. Te linki są oznaczone jako "Przenieś przełącznik światła w dół" i "Przenieś przełącznik światła w górę" odpowiednio i reprezentują czynność, którą agent musi wykonać, przechodząc z jednego stanu do następnego. Kod definiuje również agenta zwanego agentem żółwia. Możemy użyć tego agenta do animacji FSM przy użyciu kodu wymienionego w NetLogo Code , pokazując, w jaki sposób agent może poruszać się w obie strony między dwoma stanami.

to go
ask links [ set thickness 0.5 ]
ask agents [
let new-location one-of [out-link-neighbors] of location
;; zmień grubość łącza, które przekroczę
ask [link-with new-location] of location [ set thickness 1.1 ]
face new-location
move-to new-location
set location new-location
]
tick
end

Kod działa poprzez wybranie jednego z out-outów bieżącego stanu odwiedzanego przez agenta żółwia (w tym przykładzie zawsze będzie tylko jeden link wychodzący). Następnie program zwiększa grubość łącza, do którego wkrótce się przeniesie, a agent znajdzie się w nowej lokalizacji, a następnie przeniesie się do niego. Bardziej złożony przykład FSM pokazano na rysunku



FSM modeluje etapy cyklu życia, które ludzie przechodzą w swoim życiu, i opiera się na modelu zaproponowanym przez Jobbera. (Model Jobbera działa od lewej do prawej, podczas gdy poniższy model przebiega od góry do dołu, aby zmieścić się w granicach środowiska graficznego 2D NetLogo). W modelu osoba zaczyna się na etapie "Pojedynczy, w domu", a następnie może przejść do etapu "Młody, na swoim" lub etapu "Młoda, para, bez dzieci". Stamtąd osoba może przejść do wielu dalszych etapów, ostatecznie kończąc na etapie "Samotny, na emeryturze" na dole. Życie to nie tylko linearny postęp. Celem tego modelu jest zrozumienie, jak to zrobić. Model NetLogo użyty do wytworzenia tego FSM ożywia model, tworząc liczbę agentów dla każdego tiknięcia (suwak pokazany w lewym górnym rogu Figury 3 może być użyty do kontrolowania zmiennej "narodziny-każdy-tyk", na figurze to zostało ustawione w 2). Każdy agent przechodzi następnie z jednego stanu do drugiego - groty koloru wapna narysowane w niektórych stanach pokazują ich bieżącą lokalizację. Agenci losowo dokonują wyboru, gdy dostępnych jest więcej niż jedno przejście wychodzące. Wykres po lewej pokazuje, jak ogólna populacja (oznaczona "Wszystkie") zmienia się w zależności od kleszczy. Na działce pokazane są również aktualne liczby agentów zlokalizowanych na etapie "Młodzi, rodzice" oraz na etapach "Samotni, emeryci". Drzewo decyzyjne jest często używane do reprezentowania zachowań decyzyjnych. Drzewo to skierowany wykres bez pętli w sieci, z tylko jedną ścieżką między dwoma węzłami i z każdym węzłem mającym jeden lub więcej węzłów podrzędnych, ale pojedynczy węzeł nadrzędny lub węzeł główny, bez żadnego rodzica. Liście drzewa są węzłami bez ścieżek wychodzących. W drzewie decyzyjnym podejmowanie decyzji przez agenta rozpoczyna się od węzła głównego drzewa i wybiera ścieżki wychodzące w oparciu o konkretną decyzję związaną z bieżącym węzłem i trwa do momentu, aż zostaną osiągnięte liście drzewa. Liść, który jest osiągnięty, zwykle reprezentuje w pewien sposób wynik podjętych decyzji - na przykład, może być użyty do klasyfikacji, gdzie drzewo decyzyjne działa w podobny sposób do popularnej gry towarzyszącej Twenty Questions (np. przez postacie z powieści Charlesa Dickensa "A Christmas Carol"). W tej grze pierwszy gracz musi odgadnąć obiekt - zwykle zwierzęcy, roślinny lub mineralny - o którym drugi gracz myśli. Pierwszy gracz może zadać do dwudziestu pytań dotyczących danego obiektu, podczas gdy drugi gracz musi podać tylko odpowiedzi "Tak" lub "Nie". Pierwszy gracz musi opracować odpowiednie pytania, aby wystarczająco zawęzić obszar poszukiwań, aby odgadnąć, o co chodzi w danym obiekcie, zanim użyje swoich dwudziestu pytań, w przeciwnym razie gra zostanie utracona. Przykład drzewa decyzyjnego pokazano na rysunku poniżej



Tego drzewa decyzyjnego można używać do odgadywania ptaków nowozelandzkich. W grze Dwadzieścia pytań może to być poprzedzone zestawem ośmiu pytań i odpowiedzi w następujący sposób: "Czy to zwierzę?" [Tak], "Czy to ssak?" [Nie] "Czy to ptak?" [Tak], "Czy to ptak z półkuli północnej?" [Nie], "Czy to ptak afrykański czy południowoamerykański?" [Nie], "Czy to ptak Australasian?" [Tak], "Czy to ptak australijski? ? "[Nie]," Czy to ptak nowozelandzki? "[Tak]. Drzewo decyzyjne zadaje kolejne cztery pytania do odgadnięcia między ośmioma nowozelandzkimi ptakami wymienionymi na dole drzewa. Możemy użyć kodu NetLogo podobnego do tego, który został opracowany do rysowania FSM, aby także rysować drzewa decyzyjne. Każdy węzeł w drzewie może być reprezentowany w podobny sposób do stanu w FSM, ze ścieżkami między węzłami reprezentowanymi przez przejścia między linkami. W kodzie pokazanym w NetLogo Code poniżej

breed [agents agent]
breed [points point]
directed-link-breed [straight-paths straight-path]
agents-own [location] ;; ma rację
points-own [question] ;; to jest pytanie związane z węzłem
straight-paths-own [answer] ;; ścieżki przejścia definiują odpowiedzi na pytanie do skonfigurowania
clear-all ;; wyczyść wzystko
set-default-shape points "circle 2"
create-points 1 [setxy 5 35 set question "Czy ptak lata?"]
;; punkt 0, level 0 (root)
create-points 1 [setxy -25 25 set question "Czy to papuga?"]
;; punkt 1, level 1
create-points 1 [setxy 35 25 set question "Czy ptak wyginął?"]
;; punkt 2, level 1
create-points 1 [setxy -40 15 set question "Ptak alpejski?"]
;; punkt 3, level 2
create-points 1 [setxy -10 15 set question "Pokrzewka"]
;; punkt 4, level 2
create-points 1 [setxy 20 15 set question "Czy to jest duże?"]
;; punkt 5, level 2
create-points 1 [setxy 50 15 set question "Długi dziób?"]
;; punkt 6, level 2
create-points 1 [setxy -50 5 set question "Kea?"]
;; punkt 7, level 3
create-points 1 [setxy -30 5 set question "Kaka?"]
;; punkt 8, level 3
create-points 1 [setxy -20 5 set question "Tui?"]
;; punkt 9, level 3
create-points 1 [setxy 0 5 set question "Pukeko?"]
;; punkt 10, level 3
create-points 1 [setxy 10 5 set question "Moa?"]
;; punkt 11, level 3
create-points 1 [setxy 30 5 set question "Huia?"]
;; punkt 12, level 3
create-points 1 [setxy 40 5 set question "Kiwi?"]
;; punkt 13, level 3
create-points 1 [setxy 60 5 set question "Weka?"]
;; punkt 14, level 3
ask patches [
;; nie pozwól widzowi zobaczyć tych poprawek; służą tylko do
;; wyświetlania etykiet w osobnych wierszach
if (pxcor = 1 and pycor = 35) [set plabel [question] of point 0]
if (pxcor = -29 and pycor = 25) [set plabel [question] of point 1]
if (pxcor = 30 and pycor = 25) [set plabel [question] of point 2]
if (pxcor = -44 and pycor = 15) [set plabel [question] of point 3]
if (pxcor = -14 and pycor = 15) [set plabel [question] of point 4]
if (pxcor = 16 and pycor = 15) [set plabel [question] of point 5]
if (pxcor = 46 and pycor = 15) [set plabel [question] of point 6]
if (pxcor = -48 and pycor = 0) [set plabel [question] of point 7]
if (pxcor = -27 and pycor = 0) [set plabel [question] of point 8]
if (pxcor = -18 and pycor = 0) [set plabel [question] of point 9]
if (pxcor = 4 and pycor = 0) [set plabel [question] of point 10]
if (pxcor = 12 and pycor = 0) [set plabel [question] of point 11]
if (pxcor = 32 and pycor = 0) [set plabel [question] of point 12]
if (pxcor = 42 and pycor = 0) [set plabel [question] of point 13]
if (pxcor = 63 and pycor = 0) [set plabel [question] of point 14]
]
ask points [set size 5 set color blue]
ask point 0 [create-straight-path-to point 1]
ask point 0 [create-straight-path-to point 2]
ask point 1 [create-straight-path-to point 3]
ask point 1 [create-straight-path-to point 4]
ask point 2 [create-straight-path-to point 5]
ask point 2 [create-straight-path-to point 6]
ask point 3 [create-straight-path-to point 7]
ask point 3 [create-straight-path-to point 8]
ask point 4 [create-straight-path-to point 9]
ask point 4 [create-straight-path-to point 10]
ask point 5 [create-straight-path-to point 11]
ask point 5 [create-straight-path-to point 12]
ask point 6 [create-straight-path-to point 13]
ask point 6 [create-straight-path-to point 14]
ask straight-paths [set label-color lime]
ask straight-path 0 1 [set answer "Yes" set label answer]
ask straight-path 0 2 [set answer "No" set label answer]
ask straight-path 1 3 [set answer "Yes" set label answer]
ask straight-path 1 4 [set answer "No" set label answer]
ask straight-path 2 5 [set answer "Yes" set label answer]
ask straight-path 2 6 [set answer "No" set label answer]
ask straight-path 3 7 [set answer "Yes" set label answer]
ask straight-path 3 8 [set answer "No" set label answer]
ask straight-path 4 9 [set answer "Yes" set label answer]
ask straight-path 4 10 [set answer "No" set label answer]
ask straight-path 5 11 [set answer "Yes" set label answer]
ask straight-path 5 12 [set answer "No" set label answer]
ask straight-path 6 13 [set answer "Yes" set label answer]
ask straight-path 6 14 [set answer "No" set label answer]
;; pytaj punkty [stwórz ścieżkę z jednym z innych punktów]
;; ułóż go tak, aby linki się nie nakładały
ask straight-paths [ set thickness 0.5 ]
a
create-agents 1 [
set color lime
set size 5
set location point 0 ;; start at point 0
move-to location
]
ask links [ set thickness 0.5 ]
end

jest piętnaście stanów reprezentowanych przez punkty agenta żółwia od 0 do punktu 14, które definiują węzły w drzewie i czternaście przejść pośrednich, które definiują ścieżki między węzłami. Tak jak poprzednio, kod definiuje agenta zwanego agentem agenta żółwia, a my możemy również użyć tego agenta, aby pokazać, w jaki sposób drzewo decyzyjne jest wykonywane w zależności od decyzji podjętych przy użyciu kodu wymienionego w poniższym kodzie NetLogo.

to go
ask agents [
let neighbours [out-link-neighbors] of location
let user-question [question] of location
let answers [] ;; all the answers for current node
let answers-points []
;; (punkty, do których agent powinien przejść w zależności od odpowiedzi)
let parent-point location
ask [out-link-neighbors] of location [
let this-link in-link-from parent-point
let this-answer [answer] of this-link
set answers fput this-answer answers
set answers-points fput self answers-points
]
ifelse empty? answers
;; jesteśmy w węźle liścia
[ let user-answer user-one-of user-question ["No" "Yes"]
ifelse user-answer = "Yes"
[ user-message "Excellent! Let's try another bird."]
[ user-message "Sorry, I cannot guess what the bird is."
user-message "Let's try another bird." ]
set location point 0 ;; Go back to the beginning
ask links [ set thickness 0.5 ]
;; (zresetuj przejścia, aby nie wyświetlała się wybrana ścieżka)
]
;;w przeciwnym razie jesteśmy w węźle wewnętrznym
[ let user-answer user-one-of user-question answers
let pos position user-answer answers
let new-location item pos answers-points
;; zmień grubość łącza, które skrzyżuję, aby pokazać
;; wybraną ścieżkę
ask [link-with new-location] of location [ set thickness 1.1 ]
face new-location
move-to new-location
set location new-location
]
]
tick
end

Kod działa poprzez wybranie łącza wyjściowego, które odpowiada odpowiedzi udzielonej przez odpowiedź użytkownika na pytanie związane z bieżącym stanem odwiedzanym przez agenta żółwia. Jeśli zostanie osiągnięty węzeł liścia i przypuszczenie jest poprawne, program odpowiada komunikatem "Excellent! Spróbujmy innego ptaka". "W przeciwnym razie odpowiada wiadomościami użytkownika" Przepraszam, nie mogę odgadnąć, co to jest ptak. "I" Spróbujmy innego ptaka. Drzewa decyzyjne i FSM to dwa sposoby reprezentowania zachowania autonomicznych agentów. W powyższych przykładach kodu NetLogo, jeśli postrzegamy zachowanie jako ruch przeprowadzony w abstrakcyjnym środowisku, to związek między ruchem a zachowaniem jest jasny. Ramka odniesienia lub punkt obserwacji obserwatora jest zatem ważnym aspektem zachowania, który należy wziąć pod uwagę. Na przykład, jeśli agent ma zdolność podejmowania decyzji, to ma pewną autonomię i dlatego ma możliwość poruszania się. Istnieją różne rodzaje zachowań, takie jak komunikacja, wyszukiwanie i rozumowanie, które chcemy zbadać. Chcemy widzieć, że ruch agentów w środowisku jest wspólnym elementem wszystkich tych zachowań.

Animacja komputerowa

Animacja komputerowa to proces manipulowania wyświetlanymi obrazami, aby stworzyć iluzję ruchu. Złudzenie optyczne jest spowodowane zjawiskiem oka zwanym "uporczywością widzenia", w którym oko zachowuje wrażenie obrazu przez krótki czas po jego zniknięciu. Animacja komputerowa wykorzystuje różnorodne techniki. Tradycyjne podejście polega na pokazaniu kolejnych obrazów z każdym obrazem nieznacznie różniącym się od jednego obrazu do drugiego. Animacja komputerowa jest ważna dla badań nad sztuczną inteligencją, ponieważ może służyć nie tylko do tworzenia symulacji agentów komputerowych w celu sprawdzenia wiarygodności ich zachowania w środowiskach wirtualnych, ale także do tworzenia modeli umożliwiających przewidywanie zachowania agentów rzeczywistych, takich jak ludzie i roboty. W powyższych przykładach NetLogo zastosowaliśmy już podstawowe techniki animacji komputerowej, aby podkreślić związek między ruchem a zachowaniem



Biblioteka modeli NetLogo udostępnia model przykładu Animacja kształtu, aby zilustrować, jak używać kształtów do tworzenia animacji. Edytor kształtów żółwi został użyty do stworzenia dziewięciu różnych kształtów osób i szesnastu różnych kształtów kwiatów. Model działa poprzez sukcesywne pokazywanie różnych kształtów z jednej ramki do drugiej. Zapewnia to prymitywną formę animacji podobną do tej, która jest tworzona przy użyciu podręcznego podręcznika (zwanego także flip book), często używanego w ilustrowanych książkach dla dzieci, które zawierają serię obrazów, które zmieniają się stopniowo z jednej strony na drugą i które stają się animacją, kiedy szybko się zmienia.



Kod modelu znajduje się poniżej w Kodzie NetLogo. Model definiuje dwatypyy - kwiaty i osoby. Po naciśnięciu przycisku Go program wywołuje procedurę animacji wielokrotnie z prędkością określoną przez zmienną globalną secinds-per-frame. Animowana procedura najpierw wywołuje polecenie move-person , która po prostu wybiera następny kształt osoby do wyświetlenia i przesuwa się do przodu o niewielką ilość, następnie wywołuje procedurę age-flower, który ustawia kształt każdego żółwia kwiatowego do następnego kształtu w sekwencji, a następnie w końcu kiełkuje nowy kwiat 20% czasu wywołania procedury.

breed [ flowers flower ]
breed [ people person ] ;; putting people last ensures people appear
;; przed kwiatami w widoku
people-own [frame] ;; zakres od 1 do 9
flowers-own [age] ;; zakres od 1 do 16
to setup ;; wykonywane po naciśnięciu przycisku SETUP
clear-all ;; usuń wszystkie łatki i żółwie
create-people 1 [
set heading 90 ;; tj. w prawo
set frame 1
set shape "person-1"
]
end
to go
every seconds-per-frame [
animate
tick
]
end
to animate
move-person
ask flowers [ age-flower ]
if random 100 < 20
[ make-flower ]
end
to move-person
ask people [
set shape (word "person-" frame)
forward 1 / 20
;; Edytor kształtów ma siatkę podzieloną na 20 kwadratów, które przy ustawieniu
;; rysunek wykonany dla użytecznych punktów odnoszących się do nogi i buta, do
;; sprawiają, że stopa przesuwa się o jeden kwadrat do tyłu
;; w kontakcie z ziemią (w stosunku do osoby), ale
;; z prędkością względną 0, gdy porusza się do przodu o 1/20 przesunięcia w przód
;; załatać każdą ramkę
set frame frame + 1
if frame > 9
[ set frame 1 ] ;; wróć do początku cyklu klatek animacji
]
end
to age-flower ;; procedura kwiatowa
set age (age + 1)
; wiek służy do śledzenia, ile lat ma kwiat
;; każda starsza roślina jest nieco wyższa z odrobiną
;; większe liście i kwiat.
if (age >= 16) [ set age 16 ]
;; mamy tylko 16 klatek animacji, więc przestań mieć 16 lat6
set shape (word "flowexr-" age)
end
to make-flower
;; jeśli na każdej łatce jest kwiat, zabij ich wszystkich
;; i zacząć od nowa
if all? patches [any? flowers-here]
[ ask flowers [ die ] ]
;; teraz, gdy jesteśmy pewni, że mamy miejsce, w rzeczywistości zrobimy nowy kwiat
ask one-of patches with [not any? flowers-here] [ sprout 1 [
set breed flowers
set shape "flower-1"
set age 0
set color one-of [magenta sky yellow]
]
]
end

Jako kolejny przykład, poniższy kod NetLogo ilustruje, w jaki sposób zapewnić iluzję ludzkiej postaci stick idącej po ekranie. Program polega na ciągłym losowaniu sześciu nieznacznie różnych figurek, z których każda różni się tylko pozycją dłoni i nóg.



breed [paths path] ;; żółwie, które rysują kończyny i prostą ciała
;; postać jako połączona ścieżka
breed [circle-paths circle-path] ;; do rysowania głowy
to setup
clear-all
create-paths 5 [initialize-paths] ;; środki do rysowania ścieżek dla czterech kończyn
;; (dwie nogi, dwie ręce) oraz ciało
set-default-shape paths "circle" ;; to jest kształt żółwia dla
;; rysowanie ścieżki
ifelse forward-movement-increment > 0
[draw-stick-figure -56 0 [160 7 170 7] [190 7 200 7] [165 7 130 5]
[19 7 130 5] [0 0 0 12]]
;;jeszcze
[draw-stick-figure 56 0 [160 7 170 7] [190 7 200 7] [165 7 130 5]
[195 7 130 5] [0 0 0 12]]
end
to initialize-paths
pen-up
set size 0
set pen-size 4
end
to initialize-circle-paths
pen-up
set size 0
set pen-size 8
end
to go
let frame 1
let xpos forward-movement-increment
ifelse forward-movement-increment > 0
[set xpos xpos - 56]
;;jeszcze
[set xpos xpos + 56]
while [xpos > -57 and xpos < 57]
[
if clear-display-in-between
[clear-drawing]
let front-leg item (frame mod 6) [[160 7 170 7] [170 7 180 7]
[180 7 190 7] [190 7 200 7] [180 7 190 7] [170 7 180 7]]
let back-leg item (frame mod 6) [[190 7 200 7] [180 7 190 7]
[170 7 180 7] [160 7 170 7] [170 7 180 7] [180 7 190 7]]
let front-arm item (frame mod 6) [[165 7 130 5] [173 7 125 5]
[187 7 125 5] [195 7 130 5] [187 7 125 5] [173 7 125 5]]
let back-arm item (frame mod 6) [[195 7 130 5] [187 7 125 5]
[173 7 125 5] [165 7 130 5] [173 7 125 5] [187 7 125 5]]
let body [0 0 0 12] ;; body does not change orientation
draw-stick-figure xpos 0 front-leg back-leg front-arm back-arm body
set frame frame + 1
set xpos xpos + forward-movement-increment
tick
]
end
to draw-limb [limb-color top-x top-y specs]
;; rysuje kończynę dla sylwetki kija zgodnie ze specyfikacjami
;; góra kończyny jest na współrzędnych top-x, top-y
;; złącze środkowe jest rysowane w nagłówku [specyfikacja pozycji 0] o długości
;; [specyfikacja pozycji 1]
;; spód kończyny jest rysowany w nagłówku [specyfikacja pozycji 2] od złącza z
;; długość [specyfikacja pozycji 3]
let dir-to-joint item 0 specs
let joint-length item 1 specs
let dir-to-bot item 2 specs
let bot-length item 3 specs
pen-up
set color limb-color
set size 1.5
setxy top-x top-y
pen-down
stamp
if joint-length > 0 [
set heading dir-to-joint
forward joint-length
stamp
]
set heading dir-to-bot
forward bot-length
stamp
pen-up
end
to draw-stick-figure [xpos ypos front-leg back-leg front-arm back-arm body]
;; narysuj figurę w następującej kolejności, tak aby przednia noga
;; a ramiona pojawiają się przed tylną nogą i rękami
ask path 0 [draw-limb gray xpos ypos back-leg] ;; tylna noga
ask path 3 [draw-limb gray xpos ypos + 12 back-arm] ;; tylen ramię
ask path 1 [draw-limb white xpos ypos front-leg] ;; przednia ręka
ask path 2 [draw-limb white xpos ypos body] ;; ciało
ask path 4 [draw-limb white xpos ypos + 12 front-arm] ;; przednie ramie
create-circle-paths 1 [initialize-circle-paths]
set-default-shape circle-paths "circle 2"
ask circle-path 5 [setxy xpos 15 set size 6 set color white stamp]
end
Program wykorzystuje dwa typy żółwi do rysowania ścieżek, jedną za pomocą linii prostych do rysowania kończyn i ciała, a drugą za pomocą okrągłej ścieżki do rysowania głowy. Kod opiera się na dwóch podstawowych procedurach - draw-limb i l draw-stick-figure. Procedura draw-limb służy do rysowania kończyny, ręki lub nogi, poprzez narysowanie ścieżki składającej się z trzech punktów - punktów początkowych, środkowych i końcowych - z dwiema liniami prostymi łączącymi punkt środkowy z pozostałymi dwoma punktami. Parametr limb-color służy do określenia, jaki kolor rysowane są punkty i linie. Można go użyć do nadania głębi figurze przy użyciu jaśniejszego koloru (na przykład white) dla kończyn przednich i jaśniejszego koloru dla kończyn tylnych (gray). Dla wygody procedura jest również stosowana jako rysunek ciała jako pojedynczej linii. Procedura draw-stick-figure rysuje figurkę, najpierw rysując tylną nogę i ramię, a następnie przednią nogę, następnie ciało i przednie ramię, a na końcu głowę. W procedurze głównej go wielokrotnie powtarzana jest procedura draw-stick-figure z sześcioma różnymi specyfikacjami, które określają nieco inne pozycje kończyn. Model Stick Figure Animation idzie dalej i pozwala użytkownikowi tworzyć wiele figurek i przemieszczać je tak, jak pokazano na rysunku 4.8. Program pozwala użytkownikowi zarejestrować migawkę ekranu jako "ramkę", a następnie odtworzyć wszystkie klatki na raz w celu utworzenia sekwencji animacji.



Model działa poprzez nagrywanie klatek w nowatorski sposób. Zamiast przechowywać informacje o żółwiach i linkach w każdej klatce osobno, tworzone są nowe kopie żółwia i agentów linków, a stare kopie są następnie ukrywane przed przeglądarką. Innymi słowy, wszystkie stare ramki nadal istnieją w środowisku - użytkownik po prostu nie widzi ich wszystkich. Powiązany z każdym agentem jest dodatkowa informacja do przechowywania numeru klatki podczas jej nagrywania. To jest następnie używane do określenia, kiedy każdy agent powinien być wizualizowany podczas sekwencji animacji. Sposób wykonania tej czynności przedstawiono w kodzie NetLogo

breed [points point] ; punkty związane z postacią prostej
breed [heads head] ; dla rysowania głowy
breed [sides side] ; cztery boki kwadratu wyboru
turtles-own
[ frame ; numer klatki żółw jest powiązany z
child ] ; kopią żółwia dla następnej klatki
links-own [link-frame] ; liczba ramek, z którymi link jest powiązany
globals
[ frames ; ile ramek do tej pory
selected ] ; zestaw agenta aktualnie wybranych obiektów
to start-recording
clear-all
set frames 0 ; jak dotąd brak ramek
set-default-shape points "circle" ; to jest kształt punktów
set-default-shape heads "circle 2"
;aki jest kształt głowy postaci
set-default-shape sides "line"
; jest to kształt boków wybranego regionu
;; początkowo nie wybrano żadnych żółwi
set selected no-turtles
end
to record-this-frame
; rejestruje bieżącą „ramkę”, kopiując wszystkich agentów i łącza,
; czyniąc ich wszystkich niewidocznymi, a następnie zwiększając ich liczbę klatek
let this-child nobody
let that-child nobody
let this-colour white
let this-thickness 1
let this-frame 0
ask turtles with [frame = frames]
[ ; nagraj wszystkie żółwie w tej ramce dla potomności
hatch 1 ; zrób nową kopię tego żółwia na następną klatkę
[ set frame frames + 1
set this-child self ]
set child this-child
hide-turtle ; uczyń starą kopię niewidoczną
]
ask turtles with [frame = frames]
[ ; nagraj również wszystkie ich linki dla potomności
set this-child child
ask my-links
[ ; skopiuj ten link
set that-child [child] of other-end
set this-colour color
set this-thickness thickness
ask this-child ; zrób nową kopię tego linku do następnej klatki
[ setup-link that-child this-colour this-thickness (frames + 1) ]
hide-link ; uczyń starą kopię niewidoczne
]
]
set frames frames + 1
end
to setup-link [ this-turtle colour this-thickness this-frame ]
; do skonfigurowania łącza
create-link-with this-turtle
[
set link-frame this-frame
set thickness this-thickness
set color colour
]
end
to play-frames
; tworzy animację, odtwarzając wszystkie klatki, które zostały
; zarejestrowane jako niewidzialne żółwie i linki
let this-frame 0
while [this-frame <= frames]
[ ; wyświetl wszystkie klatki po kolei
ask turtles [ hide-turtle ] ; najpierw ukryj wszystkie żółwie
ask links [ hide-link ] ; ukryj również połączonych
ask turtles with [frame = this-frame]
[ show-turtle ]
ask links with [link-frame = this-frame]
[ show-link ]
display
wait frame-delay
set this-frame this-frame + 1
] end

Kod definiuje trzy typy agentów: points, określające, gdzie ręce, łokcie, stopy, kolana, szyja i dół są dla postaci; head, do określenia, gdzie jest głowa; i sides, używane do wybierania agentów żółwia podczas edycji. Następnie definiuje trzy procedury związane z przyciskami start-recording, record-frame i play-frames w lewym górnym rogu interfejsu modelu. Wszyscy agenci żółwie (tj. głowy i punkty) posiadają dwie zmienne: frame, która jest numerem ramki podczas tworzenia obiektu; i child, które jest używane przez procedurę record-this-frame, aby pomóc w kopiowaniu powiązań między agentami żółwia. W efekcie jest to wskaźnik od napastnika do agenta podrzędnego, gdy agenci i łącza są kopiowane podczas tej procedury. Służy do zapewnienia powiązań między agentami potomnymi równolegle do łączy między agentami macierzystymi po ich skopiowaniu. Macierzyści agenci stają się niewidzialni. Procedura play-frames wykonuje następnie animację, zwiększając liczbę klatek i wyświetlając tylko tych agentów i łącza, które mają bieżący numer klatki, podczas gdy wszystko inne staje się niewidoczne. Chociaż kod dla tego jest stosunkowo prosty, nie jest to najbardziej efektywny sposób wykonywania animacji - cyklicznie przechodzi przez wszystkich agentów z każdej klatki, co może spowolnić animację, jeśli liczba agentów i ramek jest duża. Opóźnienie jest również dodawane w celu spowolnienia animacji - można to kontrolować za pomocą suwaka frame-delay w interfejsie modelu. Procedura start_recording po prostu usuwa środowisko, ustawia domyślne kształty dla każdego z agentów i ustawia zmienną globalną selected na pusty zestaw agentów żółwi. Ta zmienna jest używana podczas edycji, gdy mysz jest kliknięta lub przeciągnięta, aby pokazać, które żółwie zostały wybrane do przemieszczania się lub do usunięcia. Kod do tego można znaleźć w modelu, podążając za linkiem URL poniżej. Zwróć uwagę, że ten model używa tego samego kodu, co w przypadku mapy.

Animowane mapowanie i symulacja

Celem map jest przedstawienie sposobu reprezentowania tego, co istnieje w środowisku. Wiele map, takich jak mapy topograficzne, to statyczne reprezentacje środowiska - reprezentują tylko obiekty, których położenia się nie zmieniają. Jednak środowiska są zwykle dynamiczne z punktu odniesienia obserwatora, gdzie pozycje agentów i obiektów zmieniają się stale wraz z upływem czasu. Oczywiście, potrzebujemy jakiejś metody reprezentowania agentów i obiektów w ruchu, jeśli chcemy odpowiednio reprezentować środowisko, kiedy je mapujemy. Jednym z rozwiązań opracowanych od 1950 roku jest "animowane mapowanie", które łączy animację komputerową z mapowaniem. Animację można zdefiniować jako szybkie wyświetlanie obrazów 2D lub 3D w celu stworzenia iluzji scen ruchu. W mapowaniu animowanym mapa służy do reprezentowania statycznych relacji istniejących w środowisku, a następnie nakładana jest na animację w celu odzwierciedlenia zmian zachodzących w środowisku w czasie. Wizualizacja umożliwia oglądanie historycznych wydarzeń i zmianę skali czasowej - albo poprzez przyspieszenie animacji, aby była szybsza niż w czasie rzeczywistym, albo poprzez jej spowolnienie. Zmieniając sekwencję zdarzeń i wypróbowując różne scenariusze (to znaczy pytając pytania typu "co jeśli", takie jak "co by się stało, gdyby do tego doszło ...?"), Wizualizacja bardziej przenosi się w symulację niż odwzorowywanie. Rola symulacji polega na naśladowaniu lub modelowaniu systemów naturalnych lub ludzkich lub na określeniu możliwych konsekwencji zestawu działań wykonywanych przez agentów lub możliwych przyszłych pozycji obiektów w ruchu. Główną rolą mapowania jest reprezentowanie jak najbliższej istniejącej relacji środowiskowej, ale kolejną rolą jest wykorzystanie jej do przewidywania, co może nastąpić w przyszłości za pomocą symulacji. Niektóre przykłady animowanego mapowania to wizualizacja spadku Arktyki Lodowiec i Lodowa Grenlandia w ostatnich latach, rozprzestrzenianie się cywilizacji i wzrost populacji w ciągu ostatnich dwóch stuleci, oraz przewidywane ścieżki huraganów, jak często są pokazywane na kanałach pogodowych. Animacja zapewnia możliwość dodania kolejnego wymiaru czasu, który jest trudny do przedstawienia na mapach statycznych, i obejmuje zmienne, takie jak czas trwania, szybkość zmiany i jej położenie, zdarzenia kolejności, czas wystąpienia zmian, częstotliwość i synchronizacja. Korzystanie z animowanych map w Internecie zwiększa się, gdy użytkownik ma możliwość obserwowania, jak zmiany zachodzą w czasie i gdzie użytkownik może również manipulować różnymi parametrami, takimi jak punkt widzenia, szybkość zmian i typ danych wizualizowanych. . Biblioteka modeli w NetLogo zawiera również przykłady animowanego mapowania. Model Wielkiego Kanionu symuluje opady na wschodnim krańcu Wielkiego Kanionu (gdzie Kanion Szalonego Dziadka i Saddle Canyon spotykają się, tworząc Kanion Tapeats). Każda łata w symulowanym środowisku odpowiada obszarowi około 32 m na każdej stronie i jest oparta na danych z National Elevation Dataset dostępnego pod adresem http://seamless.usgs.gov. Na rysunku poniżej pokazano dwa zrzuty ekranu po tym, jak model w oddzielnych symulacjach wykonano odpowiednio dla 50 tików i 100 tików, przy oporze ustalonym na 10 kropli na zaznaczenie. Symulacja reprezentuje wyższe poziomy w lżejszych kolorach i niższych rzędach w ciemniejszych kolorach. jak krople deszczu płyną od jaśniejszej do ciemniejszej, i zacznij tworzyć kałuże wody w miejscach, gdzie niższa kraina jest otoczona wyższym lądem.



Kolejnym modelem NetLogo, który wykorzystuje animowane mapowanie, jest model Continental Divide. Celem tego modelu jest wykazanie, w jaki sposób dzieli się kontynentalny kontynent, oddzielający kontynent od tego, w jaki sposób deszcz w oddzielnych regionach wpływa do dwóch zbiorników wodnych. Przykładem użytym w symulacji jest kontynent północnoamerykański, a dwa zbiorniki wodne to oceany Pacyfiku i Atlantyku. Rysunek 4.10 pokazuje cztery zrzuty ekranu przy różnych tikach - przy 0 kleszczach (górny lewy), 407 kleszczach (prawy górny róg), 791 tyknięć (lewy dolny róg) i 1535 tyknięć (prawy dolny róg). W symulacji model jest inicjowany za pomocą mapy elewacji, a następnie oba oceany wzrastają przyrostowo, a dwie równiny zalewowe stopniowo zbliżają się ku sobie wzajemnie na kontynencie, aż ostatecznie zderzają się ze sobą. Tam, gdzie zderzają się ze sobą, jest miejsce podziału kontynentalnego. Animowane mapowanie i symulacja również dają możliwość przedstawienia wiedzy, która jest bardziej zbliżona do usytuowania i realizacji w Sztucznej Inteligencji przyjętej u nas. Dalsze szczegóły tego znajdują się w części 9. W następnych kilku częściach będziemy również badać, w jaki sposób możemy uzyskać podstawowych agentów w NetLogo, aby wykonywać animowane ruchy i ruchy w prostych środowiskach 2D oraz tworzyć animowane labirynty. Przykłady z labiryntu zostaną wykorzystane w kolejnych rozdziałach, aby pomóc w wyjaśnieniu ważnych typów zachowań agenta, takich jak wyszukiwanie. Ponadto wszystkie modele NetLogo opisane w tych książkach i znalezione w Bibliotece modeli można uznać za przykłady animowanego mapowania i symulacji



Podsumowanie

Podkreślono znaczenie przepływu dla położonych agentów. Z perspektywy projektowania możemy scharakteryzować zachowanie agenta i podejmowanie decyzji z punktu odniesienia obserwatora w kategoriach ruchów, które on eksponuje. Jeśli mamy mapować środowiska i zachowania w celu zaprojektowania zorientowane na agenta systemy sztucznej inteligencji, a następnie ruch musi zostać uwzględniony. Animacja map przedstawia jeden ze sposobów osiągnięcia tego. Podsumowanie ważnych pojęć, które należy wyciągnąć z tego rozdziału, pokazano poniżej:

•  *Ruch dla agenta dotyczy tego, w jaki sposób agent porusza swoim ciałem i jak wybiera poruszanie się po środowisku.
•  *Ruch odnosi się do ciągłej zmiany położenia ciała w wyniku przyłożonych sił. Ruch jest obserwowany od
•  szczególny układ odniesienia. Wszystko jest w ciągłym ruchu w stosunku do nieskończonej liczby ram odniesienia.
•  *Zachowanie usytuowanego agenta można scharakteryzować pod względem ruchu i ruchu w otoczeniu.
•  *Animacja komputerowa opiera się na zjawisku oka zwanym "uporczywością widzenia", aby zapewnić iluzję ruchu.
•  *Animowane mapy i symulacja są przydatnymi narzędziami do reprezentowania i wizualizacji dynamicznych środowisk

Ucieleśnienie

"Nigdy tak naprawdę nie rozumiesz osoby, dopóki nie rozważasz rzeczy z jego punktu widzenia - dopóki nie wejdziesz w jego skórę i nie przejdziesz przez nią. "Atticus Finch w "Zabić drozda" Harper Lee. 1960. "Zasada koordynacji czuciowo-ruchowej stwierdza, że wszelkie inteligentne zachowanie (na przykład percepcja, kategoryzacja, pamięć) ma być rozumiane jako koordynacja sensoryczno-ruchowa ... Zasada ma dwa główne aspekty. Pierwszy dotyczy przykładu wykonania. Percepcja, kategoryzacja i pamięć, procesy, które do tej pory były postrzegane tylko z perspektywy przetwarzania informacji, muszą być teraz interpretowane z perspektywy obejmującej procesy sensoryczne i motoryczne ... Praktyczna realizacja odgrywa ważną rolę w tej koordynacji ... Drugim i bardziej szczegółowym punktem tej zasady jest to, że poprzez koordynację zmysłowo-ruchową ucieleśnione czynniki mogą strukturować swój wkład i tym samym wywoływać regularności, które znacznie upraszczają uczenie się. "Strukturyzacja danych wejściowych" oznacza, że poprzez interakcję z otoczeniem generowane są dane sensoryczne, które nie są po prostu dane." Rolf Pfeifer i Christian Scheier.

Nasze ciało i nasze zmysły

Podobnie jak w przypadku ruchu w poprzedniej części, nasze ciało, umysł i zmysły stanowią podstawę wielu powszechnych metafor używanych w ludzkim języku. Nasze zrozumienie jako człowieka wywodzi się z podstawowych pojęć związanych z naszym fizycznym ucieleśnieniem w realnym świecie i zmysłów, których używamy, aby je postrzegać. Często wyrażamy i rozumiemy abstrakcyjne pojęcia, których nie możemy bezpośrednio wyczuć na podstawie tych podstawowych pojęć. Tradycyjnie, stosując klasyfikację najpierw przypisaną Arystotelesowi, za pięć głównych zmysłów uważa się za wzrok, słuch, węch, smak i dotyk. Czasami ludzie odnoszą się również do "szóstego zmysłu" (czasami nazywanego także pozazmysłową percepcją lub ESP) - możemy uznać to określenie za metaforę, którą ludzie używają w języku naturalnym do opisu nieświadomych procesów myślowych w terminach innego sensu. Błędem jest uważanie "szóstego zmysłu" za rzeczywiste, ponieważ istnieje bardzo mało naukowych dowodów na poparcie tego. Jednak nasze ciała faktycznie mają o wiele więcej niż tylko pięć podstawowych zmysłów, jak pokazuje wybór poniżej

Zmysł : Opis

Wzrok(widzenie) : Zdolność oka do wykrywania fal elektromagnetycznych. Mogą to w rzeczywistości być dwa lub trzy zmysły jako różne recptory które służą do wykrywania koloru i jasności oraz głębokości percepcji (stereopsis) może być funkcją poznawczą mózgu (to znaczy post-sensorycznego).

Słuch (przesłuchanie) : Zdolność ucha do wykrywania wibracji spowodowanych dźwiękiem.

Zapach (węch) : Zdolność nosa do wykrywania różnych cząsteczek zapachu.

Smak : Zdolność języka do wykrywania właściwości chemicznych substancji takich jak żywność.Może to być pięć lub więcej różnych zmysłów, ponieważ do wykrywania służą różne receptory słodki, kwaśny, słony i gorzki smak.

Dotyk (mechanorecepcja) : Zdolność zakończenia nerwów, zwykle w skórze, do reagowania na zmiany ciśnienia (na przykład, jak jest twardy, czy trwa lub czyści się).

Ból (nocycepcja) : Zdolność odczuwania uszkodzenia lub uszkodzenia tkanki. Istnieją trzy rodzaje receptorów bólu - w skórze (skórne), w stawach i kościach (somatyczne) i w ciele narządy (trzewne).

Równowaga (ekwilibriocepcja) : Zdolność układu błędnika przedsionkowego w uszach wewnętrznych do wyczuwania ciała ruch, kierunek i przyspieszenie oraz utrzymanie równowagi. Są dwa oddzielne zmysły zaangażowane, aby wykryć moment pędu i przyspieszenie liniowe (a także grawitację).

Propriocepcja (zmysł kinestetyki) : Zdolność do bycia świadomym względnych pozycji części ciała (takich jak gdzie ręka jest w stosunku do nosa nawet przy zamkniętych oczach).

Poczucie czasu : Zdolność części mózgu do śledzenia czasu, na przykład dobowego (dziennego) rytmy lub krótkoterminowy (ultrasyjski) czasomierz.

Poczucie temperatury (termocepcja) : Zdolność skóry i wewnętrznych przejść skórnych do wykrywania ciepła i jego braku ciepło (na zimno).

Zmysły wewnętrzne (interocepcja) : Zmysły wewnętrzne, które są pobudzane z wnętrza ciała z licznych receptorów w narządy wewnętrzne (takie jak płucne receptory rozciągające znajdujące się w płucach, które kontrolują częstość oddechów i inne wewnętrzne receptory związane z rumieńcem, połykaniem, wymioty, rozszerzenie naczyń krwionośnych, rozszerzenie gazu w przewodzie pokarmowym i odruch wymiotny podczas jedzenia, na przykład).

Kilka cech autonomicznych agentów

Z perspektywy projektowania możemy uznać każdego agenta za w pewien sposób ucieleśniony, używając zmysłów, aby uzyskać informacje o jego otoczeniu. Możemy zdefiniować wykonanie w następujący sposób. Autonomiczny agent jest ucieleśniony poprzez jakąś manifestację, która pozwala mu wyczuć jego otoczenie. Jego ucieleśnienie dotyczy jego fizycznego ciała, które wykorzystuje do poruszania się po swoim otoczeniu, jego czujników, które wykorzystuje do uzyskiwania informacji o sobie w stosunku do środowiska i jego mózgu który wykorzystuje do przetwarzania informacji zmysłowych. Agent istnieje jako część środowiska, a jego percepcja i działania są określane przez sposób, w jaki współdziała on ze środowiskiem i innymi agentami poprzez jego realizację w dynamicznym procesie. Wcielenie agenta może polegać na fizycznej manifestacji w rzeczywistym świecie, takim jak człowiek, robot przemysłowy lub pojazd autonomiczny, lub może mieć symulowaną lub sztuczną manifestację w środowisku wirtualnym. Jeśli zajmuje się wyłącznie abstrakcyjnymi informacjami, na przykład agentem indeksowania stron WWW, takim jak Googlebot, to jego środowisko można z perspektywy projektowania reprezentować jako przestrzeń n-wymiarową, a jego możliwości wykrywania odnoszą się do ruchu wokół tej przestrzeni. Podobnie, rzeczywiste środowisko dla czynnika ludzkiego lub zrobotyzowanego może być uważane za przestrzeń n-wymiarową, a ucieleśnienie agenta odnosi się do jego zdolności do uzyskiwania informacji o rzeczywistym środowisku podczas poruszania się. Możemy uważać ciało agenta za zmysłowe urządzenie do przechwytywania danych wejściowych. Na przykład zmysły w ludzkim ciele są dyktowane przez jego ucieleśnienie - to znaczy, że całe ciało ma wiele czujników, które występują w całym ciele, umożliwiając naszemu umysłowi uzyskanie "obrazu" całego ciała, gdy oddziałuje ono na środowisko . Pfeiffer i Scheier podkreślają ważną rolę, jaką musi spełniać ucieleśnienie i koordynacja sensoryczno-motoryczna w określaniu inteligentnego zachowania. Craig Reynolds opisuje dalsze cechy autonomicznych czynników, które można wykorzystać do rozróżnienia różnych klas autonomicznych czynników, takich jak usytuowanie i zachowanie reaktywne. Możemy zdefiniować usytuowanie w następujący sposób. Autonomiczny agent znajduje się w swoim środowisku, dzieląc się nim z innymi agentami i obiektami. Dlatego jego zachowanie jest określane z perspektywy pierwszoosobowej przez jego interakcje między agentami oraz interakcje między agentami. Autonomous agents wykazują a zakres zachowań, od czysto reaktywnych do bardziej deliberatywnych lub kognitywnych. Mówi się, że autonomiczny agent znajduje się w środowisku współdzielonym przez innych agentów i / lub innych obiekty. Agent może być wyizolowany samodzielnie, na przykład agent wyszukiwania danych wyszukujący wzorce w bazie danych znajdującej się w abstrakcyjnej n-wymiarowej przestrzeni reprezentującej środowisko bazy danych. Umieszczony agent może mieć wiele zachowań, od czysto reaktywnych, gdy czynnik jest regulowany przez bodziec, który otrzymuje od swoich zmysłów, po funkcje poznawcze, gdzie agent rozważa bodziec, który otrzymuje i decyduje o odpowiednich działaniach. Przy czysto reaktywnym podejściu agent nie musi utrzymywać reprezentacji środowiska - środowisko jest własną bazą danych, którą może po prostu "sprawdzić", bezpośrednio z nią współpracując. Z kolei agent poznawczy używa reprezentacji tego, co dzieje się w środowisku, aby podejmować decyzje. Reynolds zauważa, że kombinacje atrybutów zawartych, usytuowanych i reaktywnych definiują odrębne klasy autonomicznych czynników, z których niektóre przedstawiono w tabeli poniżej. Jednak, w przeciwieństwie do Reynoldsa, będziemy uważać, że wszyscy agenci znajdują się w jakimś środowisku (czy jest to rzeczywiste, wirtualne lub abstrakcyjne środowisko, reprezentowane przez jakąś n-wymiarową przestrzeń) i ucieleśnione dzięki zdolności do odczuwania i interakcji ze swoim środowiskiem w w jakiś sposób, jawnie lub niejawnie

Typ agenta : Opis : Przykład (y)

Ludzie i inni prawdziwi,żywi ,agenci : Organiczne byty, które istnieją w realnym świecie. :My sami; stworzenia biologiczne.

Rzeczywiste autonomiczne roboty : Urządzenia mechaniczne, które znajdują się w prawdziwym świecie. : Roboty w fabryce samochodów; pojazdy autonomiczne (AV).

Prawdziwe półautonomiczne roboty : Urządzenia mechaniczne, które są częściowo autonomiczne, a częściowo obsługiwany przez ludzie, usytuowani w prawdziwym świecie. : Roboty marsjańskie, Spirit i Opportunity; Roboty do usuwania bomb.

Agenci wirtualni : Prawdziwi agenci, którzy znajdują się w wirtualnym świecie. : Nieodtwarzane postacie (NPC) w grach komputerowych

Wirtualni pół-autonomiczni agenci : Środki częściowo autonomiczne, oraz częściowo obsługiwany przez ludzi, usytuowany w świecie wirtualnym : Awatary; strzelanki pierwszoosobowe w gry komputerowe; agenci w sportowych grach symulacyjnych

Symulowani agencji : Agenci, którzy są badani metodami obliczeniowymi, symulacja usytuowana w wirtualnym świecie. : Symulacje sztucznego życia; symulacje robotów.

Dodanie możliwości wykrywania do Turtle Agents w NetLogo

Możemy zaprojektować agentów żółwi NetLogo wprowadzone w poprzedniej części, aby uwzględnić możliwości wykrywania za pomocą wcielonej, usytuowanej perspektywy projektowania. Jednym z powodów tego jest to, że chcielibyśmy użyć agentów żółwia do przeszukiwania labiryntów (a nie tylko ich narysowania), aby zademonstrować zachowanie podczas wyszukiwania za pomocą animowanych technik mapowania. Wyszukiwanie jest ważnym procesem, który agent musi wykonać, aby odpowiednio wykonywać wiele zadań. Jednak zanim agent będzie mógł wyszukiwać, musi najpierw mieć możliwość wykrywania obiektów i innych agentów istniejących w środowisku w celu znalezienia obiektu lub agenta, którego szuka. Bez trudu moglibyśmy zastosować bezcielesne rozwiązanie do wyszukiwania w labiryncie. W tym podejściu agent żółwia przeprowadzający wyszukiwanie po prostu podąża ścieżkami, których ruch został wstępnie zdefiniowany w programie (podobnie jak w modelach rysunkowych labiryntu). Alternatywne, ucieleśnione podejście polega na tym, że agent żółwia jest zaprogramowany z możliwością "patrzenia" w środowisko labiryntu, interpretowania tego, co "widzi", a następnie wybierania ścieżki, którą chce podążać, nie ograniczając się do wstępnie zdefiniowanych ścieżek które były wymagane do rozwiązania bezcielesnego. Łatwo zaprogramowane funkcje wykrywania często spotykane w animacjach komputerowych i silnikach gier komputerowych opierają się na detekcji bliskości. Tutaj agent "wyczuwa", czy w pobliżu znajduje się obiekt, a następnie decyduje o odpowiednim zachowaniu w odpowiedzi. Model Look Ahead Example, który jest dostarczany wraz z biblioteką modeli NetLogo, implementuje agentów żółwia z podstawową formą wykrywania bliskości, skutecznie symulując elementarną formę widzenia, przez co agenci "patrzą" przed siebie na niewielką odległość w kierunku podróży, zanim zaczną się poruszać . Proces patrzenia w przyszłość pozwala każdemu agentowi żółwia określić, co znajduje się przed nim, a następnie, w razie potrzeby, zmienić jego kierunek. Zrzut ekranu modelu pokazano na rysunku



Na obrazie pokazano pięć agentów żółwi podążających różnymi ścieżkami, jak przedstawiają to czerwone linie zygzakowate, z grotem strzałki wskazującym aktualną pozycję żółwia i wskazującą aktualny kierunek podróży. Kiedy żółw wykryje przeszkodę przed nim, zmieni swój kierunek na nowy losowy nagłówek. Kod modelu przedstawiono w kodzie NetLogo

;; Ta procedura konfiguruje łatki i żółwie
to setup
;; Wyczyść wszystko.
clear-all
;; Spowoduje to utworzenie „szachownicy” z niebieskimi łatami. Co trzeci patch
;; będzie niebieski (pamiętaj, że modulo daje resztę podziału).
ask patches with [pxcor mod 3 = 0 and pycor mod 3 = 0]
[ set pcolor blue ]
;; To sprawi, że najbardziej zewnętrzne łaty będą niebieskie. Ma to na celu zapobieganie
;; żółwie z owijania na całym świecie. Zauważ, że używa liczby
;; łatki sąsiada zamiast lokalizacji. To jest lepsze, ponieważ to ;; pozwoli ci zmienić zachowanie żółwi poprzez zmianę
;; kształtu świata (i jest mniej podatny na pomyłki)
ask patches with [count neighbors !
[ set pcolor blue ]
;; Spowoduje to utworzenie żółwi na losowo wybranej liczbie żółwi
;; czarne łaty.
ask n-of number-of-turtles (patches with [pcolor = black])
[
sprout 1
[ set color red ]
]
end
;; Ta procedura powoduje ruch żółwi
to go
ask turtles
[
;; Ten ważny warunek określa, czy mają zamiar wejść do
;; niebieska łatka. To pozwala nam podjąć decyzję, co robić PRZED
;; żółw wchodzi w niebieską plamę. To dobry sposób na symulację obrazu ;; ściana lub bariera, na którą żółwie nie mogą się poruszać. Zauważ, że nie

;; użyj jakichkolwiek informacji o kursie lub pozycji żółwia. Pamiętaj,
;; łatka z wyprzedzeniem 1 to łatka, na której byłby żółw, gdyby się poruszył ;; naprzód 1 w bieżącym nagłówku.
ifelse [pcolor] of patch-ahead 1 = blue
[ lt random-float 360 ] ;; We see a blue patch in front of us. Turn a
;; losowa ilość
[ fd 1 ] ;; W przeciwnym razie przejście do przodu jest bezpieczne.
]
tick
end

Jeśli uruchomimy model dłużej (400 cykli lub więcej) przy zmiennej liczbie żółwi ustawionej na 50 zamiast 5, wówczas czerwone ścieżki szybko pokrywają większość pustej przestrzeni w otoczeniu, jak pokazano na rysunku



Ten przykład pokazuje, jak stosunkowo skromna liczba agentów o bardzo ograniczonych możliwościach wykrywania wciąż może bardzo szybko całkowicie pokryć całe środowisko. Taka zdolność do grupy prawdziwych agentów jest często bardzo użyteczną cechą, na przykład owady, takie jak mrówki, które muszą znaleźć źródła pożywienia. Z punktu widzenia obserwatora podczas uruchamiania modelu można łatwo dojść do błędnego wniosku, że agenci celowo przeszukują swoje środowisko, ale analiza kodu NetLogo ujawnia, że agenci w tym przykładzie są po prostu bardziej reaktywni niż poznawczy - oni nie celowo przeszukuj otoczenie, ale w wyniku ich prostego, połączonego zachowania, osiągnij taki sam efekt, jaki osiągają agenci o bardziej świadomym zachowaniu w wyszukiwaniu dzięki ich zdolności do koordynowania i łączenia wyników. Dzięki detekcji bliskości możemy również symulować czujniki do "dotykania" i "patrzenia". Model Ściana po przykładzie w Bibliotece modeli NetLogo przybliża akcję dotykania agenta, ściśle śledząc obiekt w środowisku. Zrzut ekranu modelu pokazano na rysunku.



Ścieżki żółwi są pokazane na rysunku, ponieważ w interfejsie modelu wybrano przycisk przewijania. Zachowanie agenta żółwia jest nazywane "ścianą", ponieważ jest analogiczne do prawdziwego agenta utrzymującego bliski kontakt z zewnętrzną stroną budynku podobną do ręki na ścianie zachowanie labiryntów. Widoczne na obrazie środowisko 2D NetLogo można traktować jako mapę, która zapewnia widok z lotu ptaka na wyimaginowane środowisko 3D zawierające budynki, a krawędzie obiektów na obrazie reprezentują zewnętrzne ściany budynku. Na obrazie niebieskie żółwie podążają za prawą ścianą, podczas gdy zielone żółwie podążają za lewą ścianą. Żółwie wolą zachować ścianę, którą podążają po określonej stronie ciała - dla niebieskich żółwi wolą prawą stronę; zielone żółwie wolą lewą stronę. Kod modelu jest pokazany w NetLogo Code

turtles-own [direction] ;; 1 podąża za prawą ścianą,
;; -1 podąża za ścianą po lewej stronie
to setup
clear-all
;; stwórz losowe ściany, za którymi podążą żółwie.
;; szczegóły nie są ważne
ask patches [ if random-float 1.0 < 0.04 [ set pcolor brown ] ]
ask patches with [pcolor = brown]
[ ask patches in-radius random-float 3 [ set pcolor brown ] ]
ask patches with [count neighbors4 with [pcolor = brown] = 4]
[ set pcolor brown ]
;; teraz zróbcie żółwie. SPROUT stawia żółwie na środkach łat
ask n-of 40 patches with [pcolor = black] [
sprout 1 [
if count neighbors4 with [pcolor = brown] = 4
[ die ] ;; trapped!
set size 2 ;; większe żółwie są lepiej widoczne
set pen-size 2 ;; grubsze linie są lepiej widoczne
face one-of neighbors4 ;; twarzą na północ, południe, wschód lub zachód
ifelse random 2 = 0
[ set direction 1 ;; podążaj za prawą ścianą
set color blue ]
[ set direction -1 ;; podążaj za lewą ścianą
set color green ]
]
]
end
to go
ask turtles [ walk ]
tick
end
to walk ;; procedura żółwia
;; obroć w prawo jeśli konieczne
if not wall? (90 * direction) and wall? (135 * direction)
[ rt 90 * direction ]
;; w razie potrzeby skręć w lewo (czasami więcej niż raz)
while [wall? 0] [ lt 90 * direction ]
;; ruszaj naprzód
fd 1
end
to-report wall? [angle] ;; turtle procedure
;; zwróć uwagę, że kąt może być dodatni lub ujemny. jeśli kąt jest równy ;; pozytywne, żółw wygląda dobrze. jeśli kąt jest ujemny,
;; żółw wygląda w lewo.
report brown = [pcolor] of patch-right-and-ahead angle 1
end

Procedura chodzenia określa chodzenie agentów żółwia. Każdy agent ma zmienną kierunku, która definiuje stronę, którą woli utrzymać na ścianie. Jeśli po preferowanej stronie nie ma ściany, ale po tej stronie znajduje się ściana, to żółw musi zwrócić się do preferowanej strony aby nie zgubić ściany. Jeśli ściana znajduje się bezpośrednio z przodu, to żółw przesuwa się zawsze w stronę przeciwną do preferowanej strony, aż znajdzie przed sobą otwartą przestrzeń, w której może się przesunąć do przodu. Zarówno model Look Ahead Example jak i Wall Following demonstrują wspólny modus operandi dla ucieleśnionych, usytuowanych agentów, który składa się z pierwszego wykrywania, po którym następuje selekcja i wykonanie zachowania. Ten modus operandi jest jedną z możliwych metod działania dla czynnika reaktywnego, który polega na tym, że agent najpierw wyczuwa, co dzieje się w środowisku, a następnie decyduje się wykonywać określone zachowania w oparciu o to, co wyczuwa. W przypadku modelu Look Ahead Example agent żółwia najpierw wyczuwa, czy jest przed nami niebieska łata, a następnie wybiera pomiędzy obracaniem a poruszaniem się do przodu w oparciu o to, czego się dowie. W przypadku modelu Wall Following Example agent najpierw wyczuwa, czy stracił ścianę i reaguje, obracając, jeśli to konieczne. Wtedy agent wielokrotnie wyczuwa, czy przed nim jest ściana, a następnie się obraca, aż wreszcie wyczuwa, że nie ma już przed nią ściany, po której porusza się do przodu. Aparatura sensoryczna czynnika jest ważnym czynnikiem przy określaniu możliwego wyniku zachowania agenta. Jeśli agent nie ma możliwości wykrywania, nie ma możliwości reagowania na jego otoczenie. Podobnie, jeśli możliwości wykrywania są pod pewnymi względami ograniczone, agent nie będzie w stanie odpowiadać zdarzeniom, które występują w środowisku, które wykracza poza zakres lub zakresy, które może wykryć. Na przykład, dla wzroku, koty mogą widzieć w słabym świetle ze względu na specjalne mięśnie oka, niektóre węże mają specjalne narządy i nietoperze mają czujniki węzłowe, które pozwalają im wykryć światło podczerwone, a niektóre ptaki widzą w ultrafiolecie do 300 nanometrów. Natomiast ludzie mają węższy zakres widzenia niż te przykłady, które ograniczają i definiują naszą zdolność reagowania na to, co widzimy. Interakcja między agentem a środowiskiem ma również ważną rolę do odegrania w określaniu tego, co agent wyczuwa. Zostało to zilustrowane za pomocą przykładowego modelu linii widzenia w bibliotece modeli NetLogo. Zrzut ekranu modelu pokazano na rysunku



Obraz pokazuje niektórych agentów żółwi poruszających się po losowych nagłówkach, a ich obecna linia wzroku jest narysowana kropkami w tym samym kolorze, co kolor agenta. Środowisko jest wirtualną reprezentacją krajobrazu, z wykorzystaniem reprezentacji często używanej w grafice komputerowej nazywanej mapą wysokości. Zielone cieniowanie każdego łaty odzwierciedla jego wysokość - im jaśniejsze cieniowanie, tym wyższa jest wysokość łaty. Na przykład znaczący pik występuje w lewym dolnym rogu środowiska 2D; ciemnozielony obszar natychmiast po prawej stronie szczytu wskazuje głęboką depresję. Linia wzroku jest obliczana z perspektywy pierwszej osoby każdego agenta. Biorąc pod uwagę aktualny kurs i lokalizację agenta, linia prosta jest wyświetlana do przodu, określając, czy łatki przed agentem nie są zasłaniane przez nic na wyższych wysokościach po drodze. W lewej ręce figury przedstawiono wykres tego, co pomarańczowy agent może "zobaczyć" przed nim. Prawie lewa pionowa kolumna na wykresie pokazuje wysokość łaty, na której stoi pomarańczowy agent. Pionowe kolumny po prawej stronie pokazują elewacje łat z przodu agenta zgodnie z jego aktualną pozycją. Ponieważ kolejne dwie poprawki są niższe od aktualnej wysokości agenta, zostały one pomalowane na kolor pomarańczowy, aby wskazać, że agent będzie w stanie "zobaczyć" tę część terenu. Widok trzeciej łatki jest jednak zasłonięty przez wyższą elewację drugiego plastra, więc kolor ten jest czarny, co oznacza, że agent nie będzie w stanie "spojrzeć" bezpośrednio na tę część krajobrazu. Podobnie, oglądanie tego, co jest na czwartej i szóstej łatce, jest możliwe, ponieważ nie są zasłaniane przez wyższe wysokości jakichkolwiek pośrednich łat, ale pozostałe łatki są zasłonięte od linii wzroku. Jako analogię do rzeczywistej sytuacji, rozważ człowieka próbującego zlokalizować punkt kontrolny (np. czerwoną flagę) w biegu na orientację w terenie wydm piaszczystych. Często czerwona flaga będzie zasłonięta z linii wzroku osoby, dopóki osoba nie znajdzie się dość blisko flagi, szczególnie jeśli jest ona umieszczona w zagłębieniu. Jednakże, gdy osoba porusza się w terenie zbliżając się do flagi, stanie się widoczna, gdy dana osoba osiągnie punkt widokowy, który nie ma interweniujących wzniesień lub wyższych nachylonych terenów blokujących widok. Ten przykład ilustruje znaczenie wykorzystania usytuowanej z perspektywy pierwszoosobowej perspektywy do projektowania ucieleśnionych agentów. Wynikowe zachowanie agentów jest bardziej wiarygodne z punktu odniesienia obserwatora, a interakcja agent-środowisko dodaje do realizmu. Kod modelu jest pokazany w NetLogo Code

breed [walkers walker]
breed [markers marker]
patches-own [elevation]
to setup
ca
set-default-shape markers "dot"
;; ustaw teren
ask patches [ set elevation random 10000 ]
repeat 2 [ diffuse elevation 1 ]
ask patches [ set pcolor scale-color green elevation 1000 9000 ]
create-walkers 6 [
set size 1.5
setxy random-xcor random-ycor
set color item who [orange blue magenta violet brown yellow]
mark-line-of-sight
]
end
to go
;; pozbyć się wszystkich starych markerów
ask markers [ die ]
;; move the walkers
ask walkers [
rt random 10
lt random 10
fd 1
mark-line-of-sight
]
;;nakreślić tylko pomarańczowe urządzenie
ask walker 0 [ plot-line-of-sight ]
tick
end
to mark-line-of-sight ;; procedura chodzika
let dist 1
let a1 0
let c color
let last-patch patch-here
;; powtarzaj wszystkie łatki
;; zaczynając od łaty bezpośrednio przed nami ;; przechodząc przez MAKSYMALNĄ WIDOCZNOŚĆ
while [dist <= maximum-visibility] [
let p patch-ahead dist
;; jeśli patrzymy ukośnie w poprzek ;; łatka jest możliwe, że dostaniemy
;; ta sama łatka dla odległości x i x + 1
;; ale nie musimy sprawdzać ponownie
if p != last-patch [
;; znajdź kąt między pozycją żółwia
;; i na górze łaty.
let a2 atan dist (elevation - [elevation] of p)
;; jeśli kąt ten jest mniejszy niż kąt w kierunku
;; ostatnia widoczna łatka nie ma bezpośredniej linii od żółwia
;; do danej łatki, która nie jest zasłonięta przez inną
;; łata.
if a1 < a2
[ ask p [ sprout-markers 1 [ set color c ] ]
set a1 a2 ]
set last-patch p
]
set dist dist + 1
]
end

W głównej metodzie, agenci żółwie wykonują małą losową prawą, a następnie lewą turę (zmieni to lekko ich nagłówek), przesuwają się do przodu o 1 stopień, a następnie wyznaczają linię wzroku, wykonując procedurę mark-line-of-sight. Procedura ta przechodzi przez wszystkie łatki przed agentem do maksymalnej odległości zdefiniowanej przez zmienną interfejsu maximum-visibility. Dla każdej odrębnej łatki wzdłuż linii bieżącego nagłówka agenta, najpierw znajduje kąt między położeniem żółwia a wierzchołkiem łaty. Jeśli kąt do ostatniej widocznej łaty jest mniejszy niż ten kąt, to jej widok łaty nie jest zatkany i rysuje znacznik w środowisku, aby pokazać, że widzi dany patch. Zakres widzenia można rozszerzyć aby obejmował stożek zamiast pojedynczej linii za pomocą wbudowanego reportera in-cone NetLogo. Ten reporter zgłasza zestaw agentów, które mieszczą się w stożku widzenia zdefiniowanym przez parametry odległości i kąta patrzenia. Stożek skupia się wokół bieżącego kursu żółwia. Jeśli kąt wynosi 360 °, wyniki są równoważne z promieniem leżącym w polu widzenia. Model Vision Cone Example dostarczony przez bibliotekę modeli NetLogo demonstruje użycie tego reportera, jak pokazują zrzuty ekranu na rysunku



Lewy zrzut ekranu na rysunku został uzyskany w wyniku ustawienia zmiennej Interfejsu vision-radius na 50 i vision-angl na 40; prawy zrzut ekranu został uzyskany przez ustawienie tych zmiennych odpowiednio na 20 i 360. Kod tego modelu przedstawiono w kodzie NetLogo.

breed [ wanderers wanderer ] ;; duży czerwony żółw, który się porusza
breed [ standers stander ] ;; małe szare żółwie, które po prostu tam stoją
to setup
clear-all
;; zrobić tło wielu losowo rozrzuconych obrazów ;; stacjonarne szare żółwie
create-standers 6000
[
setxy random-xcor random-ycor
set color gray
]
;; zrób jednego wielkiego czerwonego żółwia, który będzie się poruszał
create-wanderers 1
[
set color red
set size 15
]
;; uczynić początkowo stożek wizji
go
end
to go
ask standers [ set color gray ]
ask wanderers
[
rt random 20
lt random 20
fd 1
;; mógłby użyć tutaj IN-CONE-NOWRAP zamiast IN-CONE
ask standers in-cone vision-radius vision-angle
[
set color white
]
]
tick
end

Model wykorzystuje dwa typy agentów - typu wanderer dla dużego czerwonego agenta, który bada otoczenie z jego siłą widzenia, jak pokazano na zrzutach ekranu i typ stander, która służy do narysowania 6000 losowo rozmieszczonych szarych agentów w środowisku w procedurze instalacji. W metodzie głównej, tak jak w przypadku przykładu Line of Sight, agenci żółwi wykonują małe losowe prawo, następnie lewy obrót, a następnie krok 1 w przód. Następnie ustawienie koloru wszystkich kolumn w stożku widzenia, zdefiniowanych przez zmienne vision-radius i vision-angle, pokazuje ich aktualne pole widzenia. Wyczuwanie w agentach nie musi ograniczać się do tradycyjnych zmysłów, takich jak widzenie lub dotyk. Na przykład, równowaga równowagi lub równowaga w połączeniu z innymi zmysłami, takimi jak system wzrokowy i propriocepcja, pozwalają ludziom i zwierzętom uzyskać informacje o ich pozycji ciała w stosunku do najbliższego otoczenia. Wrażanie może obejmować wykrycie dowolnego aspektu środowiska, takiego jak obecność, nieobecność lub zmiana w danym atrybucie. Dzięki temu agent może śledzić gradient w środowisku związanym z atrybutem. Na przykład, przydatny sens dla prawdziwych agentów to zdolność do wykrywania zmian w elewacji, aby móc w razie potrzeby kierować się w górę lub w dół. Przykład modelu Hill Climbing w bibliotece modeli NetLogo pokazuje, w jaki sposób można wdrożyć taki sens. Zrzut ekranu modelu pokazano na rysunku , a kod pokazano w NetLogo Code





turtles-own
[
peak? ;; wskazuje, czy żółw osiągnął „szczyt”,
;; to znaczy, że nie może już iść „pod górę” z miejsca, w którym stoi
]
to setup
clear-all
;; zrobić krajobraz ze wzgórzami i dolinami
ask n-of 100 patches [ set pcolor 120 ]
;; lekko wygładzić krajobraz
repeat 20 [ diffuse pcolor 1 ]
;; umieśćcie żółwie na centrach łat w krajobrazie
ask n-of 800 patches [
sprout 1 [
set peak? false
set color red
pen-down
]
]
end
to go
;; zatrzymaj się, gdy wszystkie żółwie osiągną szczyt
if all? turtles [peak?]
[ stop ]
ask turtles [
;; pamiętaj, gdzie zaczęliśmy
let old-patch patch-here
;; aby użyć UPHILL, żółwie określają zmienną łatki
uphill pcolor
;; czy wciąż jesteśmy tam, gdzie zaczęliśmy? jeśli tak, nie zrobiliśmy tego ;; ruszaj się, więc musimy być na szczycie
if old-patch = patch-here [ set peak? true ]
]
tick
end

Zrzut ekranu pokazuje agenty żółwia, które rozpoczynają się w przypadkowych miejscach, a następnie przesuwają się stopniowo w górę do najwyższego lokalnego punktu w ich bezpośrednim otoczeniu (tj. W kierunku łat z najjaśniejszym cieniowaniem). Ponieważ pojedynczy punkt wysoki służy jako najwyższy punkt dla wielu otaczających łat, powoduje to, że ścieżki agentów łączą się w liniowe wzory linii, jak pokazano na rysunku. Pionowa linia na lewo od figury przedstawia na przykład wierzchołek ridgeline w środowisku 2D. Jako analogię do prawdziwych agentów ludzkich, możemy wyobrazić sobie, że wielu piechurów wspinało się z różnych pozycji startowych w górę grzbietu, a kiedy dotrą do linii grzbietowej, wszystkie kończą się po jednej ścieżce na szczyt. Model wykorzystuje polecenie uphill w NetLogo, które kieruje agenta do przeniesienia do sąsiedniej łaty, która ma najwyższą wartość dla konkretnej zmiennej łatki. Zmienna w tym przypadku jest łatka color. Metoda go każe każdemu żółwiowi kierować się w kierunku do góry, dopóki nie będzie to już możliwe, w którym to przypadku zmienna peak żółwia? jest ustawiona na true, aby wskazać, że żółw osiągnął szczyt. Kiedy wszystkie żółwie osiągną szczyt, wtedy nie jest już wykonywane żadne przetwarzanie. Pokazuje, jak różne zachowania żółwi "eksplorują" pusty labirynt. Działanie Hand On The Wall powoduje, że agent żółwia podąża za lewą ścianą lub prawą ręką (jak na rysunku), w zależności od losowego wyboru, jaki agent wykonuje zaraz po wejściu do labiryntu. Agent żółwia bardzo szybko dotrze do wyjścia z labiryntu na szczycie. Natomiast zachowanie Random Forward 0 spowoduje, że agentowi żółwia nigdy nie uda się znaleźć wyjścia do labiryntu. Będzie on wielokrotnie podążał za ścianami w kierunku przeciwnym do ruchu wskazówek zegara (jak na rysunku), jeśli agent obraca się natychmiast po pierwszym wejściu do labiryntu lub w kierunku zgodnym z ruchem wskazówek zegara, jeśli najpierw skręca w lewo. Jednak nigdy nie zdoła wydostać się z nieskończonej pętli, w której jest uwięziony. Taki bezowocny wynik jest typowy dla czynnika reaktywnego. Nie może dojść do wniosku, że źle się dzieje, a następnie odpowiednio dostosować swoje zachowanie, aby osiągnąć pożądany stan - po prostu reaguje. Z punktu widzenia obserwatora bezowocność zachowania jest mniej widoczna niż w przypadku pozostałych dwóch zachowań zaimplementowanych w modelu, ponieważ wydaje się, że agent ma jakiś plan, powtarzając te same kroki w kółko. (To oczywiście byłoby błędne założenie, agent nie ma żadnego planu). Jednak agenci wykonujący dwa pozostałe zachowania wykazują podobny do siebie wzór, że "bezmyślnie" migoczą wokół otoczenia w pozornie bez celu, losowo, w przeciwieństwie do małego ptaka lub ćmy (jak w przypadku zachowania Random Forward 2). w realnym życiu lub mucha wielokrotnie uderzająca o zamknięte okno (jak w przypadku zachowania Random Forward 1). Oba mogą być frustrujące, ponieważ oba mogą dotrzeć do wyjścia z wystarczającą ilością czasu, ale często, gdy zbliżają się do wyjścia, mogą udać się całkowicie w niewłaściwym kierunku. Rysunek pokazuje, jak różne zachowania żółwi badają Labirynt Pałacu Hampton Court.



Hand On The Wall Behaviour doskonale nadaje się do tego środowiska, ponieważ agent żółwia wykonujący takie zachowanie zawsze osiągnie cel będący centrum labiryntu, niezależnie od tego, czy agent najpierw wybrał skręt w lewo, czy w prawo (jak pokazano na rysunku). ). Z kolei zachowanie Random Forward 0 spowoduje, że agentowi uda się tylko odkryć pierwszą trzecią część labiryntu, ponieważ nie może on skręcić w prawo lub w lewo w połowie korytarza. Pozostałe dwa zachowania spowodują w końcu sukces dla agentów, którzy je wykonują, ale wymaga to czasu i wysiłku ze strony agentów i ogromnego szczęścia. Rysunek 5.10 pokazuje, jak różne zachowania żółwi badają labirynt Chevening House.



W The Wall Behaviour ten czas nie jest dobrze dopasowany do tego środowiska, ponieważ labirynt został zaprojektowany specjalnie w celu udaremnienia takiego zachowania. Natomiast zachowanie Random Forward 0 może z powodzeniem zakończyć labirynt w niektórych przypadkach, podczas gdy w poprzednim labiryncie zawsze kończyło się niepowodzeniem. To pokazuje, jak środowisko odgrywa kluczową rolę w określaniu sukcesu (lub jego braku) agentów o różnych zachowaniach. Zachowanie się jednak nad wszystkim nie jest zbyt skuteczne, ponieważ przez większość czasu agent zostaje uwięziony, bez końca odbijając się od centrum labiryntu. Pozostałe dwa zachowania ponownie dają sukces agentom, którzy je wykonują, ale to wymaga czasu i wysiłku (i szczęścia) ze strony agentów. Alternatywną możliwością wykonania pojedynczego zachowania jest połączenie dwóch lub więcej zachowań. Jest to bardzo łatwe do przetestowania w modelu Mazes - po prostu wybierz inne zachowanie, używając selektora turtle-behaviour w interfejsie podczas wykonywania programu. Na przykład dla w prawym dolnym rogu trzeciego rysunku, początkowe zachowanie zostało ustawione na Random Forward 0, a następnie w odpowiednim czasie (aby pomóc agentowi żółwia dotrzeć do środka labiryntu), zachowanie zostało zmienione na Hand On The Wall . Ta kombinacja zachowań jest zwykle bardziej skuteczna niż jakiekolwiek pojedyncze zachowanie, nawet jeśli przełączanie odbywa się losowo, ponieważ Hand On The Wall jest najbardziej skuteczny w robieniu postępu, ale wymaga czasowego wyłączenia, aby umożliwić agentowi w pewnym momencie przeskocz na wyspę pośrodku labiryntu. Z tego można wyciągnąć wnioski, że połączone zachowania mogą być bardziej skuteczne niż pojedyncze zachowanie, a to może stać się konieczne, gdy zmieni się otoczenie, jeśli agent chce zachować skuteczność w danym zadaniu

Ucieleśnione, położone poznanie

Sposób, w jaki proste reaktywne środki żółwiowe w modelu Mazes powyżej poruszają się wokół labiryntów, można porównać do wyników dla agentów zachowujących się poznawczo - czyli agentów, którzy wiedzą, że muszą dotrzeć do centrum lub wyjścia z labiryntu i którzy są w stanie rozpoznają, kiedy dotarli do miejsca w labiryncie, które ma wiele ścieżek do przeszukania. Innymi słowy, mają zdolność rozpoznania, że istnieje wybór, gdy wybór pojawia się w środowisku (np. kiedy agent osiąga skrzyżowanie w labiryncie). Ten akt rozpoznania jest podstawową częścią poznania, a także zasadniczą częścią poszukiwań. Jest to związane z sytuacją, w której znajduje się agent, sposobem poruszania się jego ciała i interakcji ze środowiskiem. Jest to również związane z tym, co dzieje się w środowisku zewnętrznym i / lub co dzieje się z innymi agentami w tym samym środowisku, jeśli takie istnieją. Tradycyjne podejście do poznania zajmuje punkt widzenia przetwarzania informacji, że percepcja i układy ruchowe są urządzeniami wejściowymi i wyjściowymi. Na przykład jedna konkretna metoda charakteryzowania Poznania jest jak cykl "zmysł - myśl - działanie": najpierw agent postrzega coś (zmysł), potem przetwarza to, co postrzega (myśli), potem wykonuje działanie (akt). Ostatnie badania dotyczące ucieleśnionych nauk kognitywnych zakwestionowały jednak takie uproszczone podejście do charakteryzowania zachowań poznawczych i kładą większy nacisk na dynamiczne oddziaływanie ciała z otoczeniem poprzez koordynację czuciowo-ruchową. Alternatywne podejście, zwane ucieleśnionym, usytuowanym poznaniem, zakłada, że wszystkie aspekty poznania agenta kształtowane są przez interakcję ciała agenta ze środowiskiem, w którym się znajduje, oraz z innymi czynnikami, które współistnieją w tym środowisku. W tym podejściu ciało i umysł pośrednika oddziałują jednocześnie ze sobą i ze środowiskiem. Nie ma wewnętrznych reprezentacji, które charakteryzowałyby ruchy agenta i jego ciała jako oddzielnych i odrębnych zdarzeń w "sensie - myśl - działaniu". Zamiast tego, odczuwanie, myślenie i działanie zachodzą i wpływają na siebie jednocześnie. W rezultacie wszystkie aspekty poznania, takie jak kategorie, pojęcia, idee i myśli oraz wszystkie aspekty zachowań poznawczych, takie jak podejmowanie decyzji, wyszukiwanie, planowanie i uczenie się, są kształtowane przez interakcję między umysłem, ciałem i otoczeniem. Wcielona, usytuowana perspektywa poznania jest metodą de rigueur dla pola ucieleśnionej naukikognitywnej. Zostało to przyjęte na przykład przez badaczy z dziedziny językoznawstwa opartych na wczesnej pracy Lakoffa i Johnsona, które uwypukliło znaczenie metafory pojęciowej w ludzkim języku i która pokazała, jak jest ona powiązana z naszym postrzeganiem poprzez nasz wcielenie i fizyczne uziemienie. . Jest również szeroko stosowany w robotyce, wynikającej z przełomowych prac Rodneya Brooksa w tej dziedzinie, którzy twierdzą, że maszyny muszą być fizycznie uziemione w świecie rzeczywistym poprzez zmysłowe i motoryczne umiejętności poprzez ciało. Dzieło to dzieli inteligencję na warstwy zachowań, które opierają się na fizycznym usytuowaniu agenta w jego otoczeniu i dynamicznej reakcji z nim. Takie podejście zyskało popularność także w innych obszarach, takich jak animacja behawioralna i inteligentni agenci wirtualni.

Podsumowanie i dyskusja

Ciało agenta odgrywa kluczową rolę w poznaniu. Sposób, w jaki ciało agenta wchodzi w interakcje i znajduje się w jego otoczeniu w połączeniu z jego systemami wykrywania i motorycznymi, determinuje wiele jego zachowań. Może wydawać się oczywiste, że autonomiczne czynniki mają ciało i znajdują się w otoczeniu, ale z perspektywy projektowania nie można zaniżać znaczenia projektowania inteligentnego zachowania opartego na tych atrybutach; na przykład użycie perspektywy projektowania z perspektywy pierwszej osoby zmusza projektanta do rozważenia aspektów z punktu widzenia agenta, zamiast narzucania projektu z zewnętrznego punktu widzenia. Tradycyjne podejście do charakteryzowania poznania - cyklu "sensu - myślenia - aktu" zakłada, że poznawanie odbywa się w oddzielnych odczuciach, myślach i zachowaniach aktorskich. Chociaż podejście to jest odpowiednie do projektowania prostych środków reaktywnych, ma ono ograniczenia przy projektowaniu agentów wykazujących inteligentne zachowanie. Podkreśla się alternatywne podejście, zwane ucieleśnionym, usytuowanym poznaniem jednoczesne odczuwanie, myślenie i działanie. W niniejszym rozdziale przedstawiono wiele modeli w NetLogo, aby zademonstrować różne aspekty dotyczące wdrażania ucieleśnionych, usytuowanych agentów. Agenty wymagają jakiegoś sposobu wyczuwania świata, a modele pokazały, w jaki sposób można symulować różne zmysły, takie jak: wzrok (przykład z wyprzedzeniem, przykład z linią wzroku i modele z przykładem stożka widzenia); i dotknij (model Wall Po przykładach). Agenci nie muszą ograniczać się do tradycyjnego ludzkiego sensu. Mogą również używać zmysłów dostosowanych do rozpoznawania zmian w otoczeniu, takich jak podniesienie terenu (model Hill Climbing Example) lub chemikalia wprowadzone do otoczenia (model Ants). Środowisko wyraźnie ma ważną rolę do odegrania w określaniu zachowania agenta w tych przykładach, ale może również wpływać na to, co agent jest w stanie wyczuć w oparciu o sytuację; na przykład dla modelu linii wzroku teren określa, co jest widoczne dla agenta w dynamicznym procesie, który jest związany z bieżącą lokalizacją i ruchem agenta; w przypadku modelu Mazes niektóre czynniki zostają uwięzione, ponieważ ich odczuwane zachowanie pomija sensowną ścieżkę. Jednakże dwa ważne aspekty ucieleśnionego, usytuowanego poznania nie zostały wykazane przez żaden z tych modeli. Po pierwsze, aby realistyczne i wiarygodne zachowanie rozwijało się w pełnych, położonych wirtualnych agentach, ymagana jest fizyczna symulacja ciała agenta i sposób, w jaki współdziała on ze środowiskiem wirtualnym. Po drugie, aby poznanie mogło mieć miejsce w zdrowym tego słowa znaczeniu, agent powinien świadomie przetwarzać informacje zmysłowe, podejmować decyzje, zmieniać swoje preferencje i stosować dowolną istniejącą wiedzę, jaką może mieć podczas wykonywania zadania lub procesu myślenia umysłowego; innymi słowy, wiedzą, co robią. Podsumowanie ważnych pojęć, które należy wyciągnąć z tego rozdziału, pokazano poniżej:

•  *Realizacja dla autonomicznego agenta dotyczy ciała, z którego korzysta agent, do poruszania się, odczuwania i interakcji ze środowiskiem.
• " *Usytuowanie dotyczy autonomicznego agenta znajdującego się w otoczeniu z innymi agentami i obiektami, a jego zachowanie zależy od tego, co dzieje się w środowisku.
•  *Reaktywne zachowanie dotyczy agenta reagującego bez świadomej myśli na zdarzenie, które ma miejsce. Natomiast zachowania poznawcze wymagają bardziej deliberatywnego podejścia - agent świadomie przetwarza informacje zmysłowe, podejmuje decyzje, zmienia swoje preferencje i stosuje dowolną istniejącą wiedzę, jaką może mieć podczas wykonywania zadania lub procesu myślowego myślenia.
•  *Cykl "zmysł - myśl - akt" odnosi się do szczególnego modus operandi dla autonomicznego czynnika wykazującego inteligentne zachowanie. Cykl ten polega na tym, że agent stosuje kolejno trzy zachowania: agent najpierw wyczuwa, co dzieje się w środowisku, a następnie zastanawia się, co mówią jego zmysły, w tym decyduje, co robić dalej, a następnie robi to, co postanowił zrobić. w oparciu o odpowiednie działania.
•  *Wcielona, usytuowana perspektywa poznania zakłada, że wszystkie aspekty poznania agenta kształtowane są przez interakcję ciała agenta ze środowiskiem, w którym się znajduje. Wyczuwanie, myślenie i działanie odbywa się jednocześnie i w połączeniu ze sobą, a nie osobno

Wykonanie zadań w sposób reaktywny bez poznania

Czy agent może wykonać niełatwe zadanie, nie wiedząc, że je wykonuje? Innymi słowy, czy agent może "rozwiązać" problem bez poznawczo bycia świadomym, że rozwiązuje problem? Aby odpowiedzieć na to pytanie, najpierw musimy zapytać, co rozumiemy przez "poznawczo bycie świadomym". Poznanie odnosi się do procesów umysłowych czynnika inteligentnego, naturalnego lub sztucznego, takich jak rozumienie, rozumowanie, podejmowanie decyzji, planowanie i uczenie się. Można ją również zdefiniować w szerszym znaczeniu, łącząc ją z aktem mentalnym poznania lub rozpoznania agenta w odniesieniu do myśli, którą on myśli lub działania, które wykonuje. Tak więc zachowanie poznawcze zachodzi, gdy agent świadomie przetwarza swoje myśli lub działania. Zgodnie z tą definicją, autonomiczny agent wykazuje zachowania poznawcze, jeśli świadomie przetwarza informacje zmysłowe, podejmuje decyzje, zmienia swoje preferencje i stosuje dowolną istniejącą wiedzę, jaką może mieć podczas wykonywania zadania lub procesu myślowego myślenia. Poznanie wiąże się również z percepcją. Postrzeganie agenta jest mentalnym procesem uzyskiwania zrozumienia lub świadomości informacji zmysłowych. Powróćmy teraz do pytania postawionego na początku tego rozdziału. Rozważ zdolność owada do żerowania na jedzenie. Mrówki, na przykład, mają możliwość szybkiego znalezienia źródeł pożywienia, ale robią to wyczuwając zapach chemiczny ustanowiony przez inne mrówki, a następnie odpowiednio reagują, stosując mały zestaw zasad. Pomimo, że nie są poznawczo świadomi tego, co robią, osiągają cel, jakim jest pełne zbadanie środowiska, sprawne lokalizowanie pobliskich źródeł żywności i powrót do gniazda. Model Ants dostępny w bibliotece modeli NetLogo symuluje jeden ze sposobów, w jaki może się to zdarzyć. Zrzut ekranu modelu pokazano na rysunku



Pokazuje kolonię mrówek rozproszonych w całym środowisku, a jej gniazdo jest pokazane przez purpurowy obszar w środku obrazu. Początkowo istniały trzy źródła pożywienia, ale na tym etapie symulacji poprzednie dwa zostały już pochłonięte, a pozostałe źródło żywności zostało znalezione i jest w trakcie zbierania w celu powrotu do gniazda. Biało-zielony zacieniony region przedstawia, jak dużo chemicznego zapachu zostało obciążone w środowisku, a biały przedstawia największa ilość. Kod części modelu definiującej zachowanie mrówek jest przedstawiony w kodzie NetLogo

patches-own [
chemical ;; ilość chemikaliów na tej łatce
food ;; ilość jedzenia na tej łatce (0, 1 lub 2)
nest? ;; prawda na łatach gniazd, fałsz gdzie indziej
nest-scent ;; liczba, która jest bliżej gniazd
food-source-number ;; numer (1, 2 lub 3) w celu identyfikacji źródeł żywności
]
to recolor-patch ;; procedura łatania
;; nadaj kolor gniazdom i źródłom pokarmu
ifelse nest?
[ set pcolor violet ]
[ ifelse food > 0
[ if food-source-number = 1 [ set pcolor cyan ]
if food-source-number = 2 [ set pcolor sky ]
if food-source-number = 3 [ set pcolor blue ] ]
;; kolor skali, aby pokazać stężenie chemiczne
[ set pcolor scale-color green chemical 0.1 5 ] ]
end
to go ;; przycisk na zawsze
ask turtles
[ if who >= ticks [ stop ] ;; opóźnić początkowy odlot
ifelse color = red
[ look-for-food ] ;; nie niosąc jedzenia? Szukaj tego
[ return-to-nest ] ;; niosącego jedzenie? zabierz go z powrotem do gniazda
wiggle
fd 1 ]
diffuse chemical (diffusion-rate / 100)
ask patches
[ set chemical chemical * (100 - evaporation-rate) / 100
;; powoli odparuj chemikalial
recolor-patch ]
tick
do-plotting
end
to return-to-nest ;; procedura żółwia
ifelse nest?
[ ;; upuść jedzenie i idź dalej
set color red
rt 180 ]
[ set chemical chemical + 60;; upuść trochę chemikaliów
uphill-nest-scent ] ;; zmierzaj w kierunku największej wartości zapachu gniazdat
end
to look-for-food ;; procedura żółwia
if food > 0
[ set color orange + 1 ;;odebrać jedzenie
set food food - 1 ;; zmniejsz źródło żywności
rt 180 ;; i odwróć się
stop ]
;; idź w kierunku, w którym zapach chemiczny jest najsilniejszy
if (chemical >= 0.05) and (chemical < 2)
[ uphill-chemical ]
end
;; wąchaj w lewo iw prawo i idź tam, gdzie jest najsilniejszy zapach
to uphill-chemical ;; procedura żółwia
let scent-ahead chemical-scent-at-angle 0
let scent-right chemical-scent-at-angle 45
let scent-left chemical-scent-at-angle -45
if (scent-right > scent-ahead) or (scent-left > scent-ahead)
[ ifelse scent-right > scent-left
[ rt 45 ]
[ lt 45 ] ]
end
;; wąchaj w lewo iw prawo i idź tam, gdzie jest najsilniejszy zapach
to uphill-nest-scent ;; turtle procedure
let scent-ahead nest-scent-at-angle 0
let scent-right nest-scent-at-angle 45
let scent-left nest-scent-at-angle -45
if (scent-right > scent-ahead) or (scent-left > scent-ahead)
[ ifelse scent-right > scent-left
[ rt 45 ]
[ lt 45 ] ]
end
to wiggle ;; procedura żółwia
rt random 40
lt random 40
if not can-move? 1 [ rt 180 ]
end
to-report nest-scent-at-angle [angle]
let p patch-right-and-ahead angle 1
if p = nobody [ report 0 ]
report [nest-scent] of p
end
to-report chemical-scent-at-angle [angle]
let p patch-right-and-ahead angle 1
if p = nobody [ report 0 ]
report [chemical] of p
end

Pełną listę kodów można znaleźć, wybierając model Mrówki z Biblioteki modeli, a następnie klikając przycisk Procedure u góry interfejsu NetLogo. Każdy agent łatki ma wiele zmiennych związanych z nim - na przykład, chemical przechowują ilość substancji chemicznych, którą mrówki ułożyły na wierzchu, a nest-scent odzwierciedla, jak blisko jest łatka do gniazda. Procedura recolor-patch pokazuje, jak kolor plastra jest zmieniany zgodnie z ilością nałożonego związku chemicznego. Procedura go określa zachowanie mrówek. Jeśli mrówka nie będzie jadła, będzie szukała pożywienia (wykonując procedurę look-for-food), w przeciwnym razie zabierze żywność z powrotem do gniazda (wykonując procedurę return-to-nest). Gdy agent wraca do gniazda, upuszcza substancję chemiczną, która się porusza. Mrówki używają węchu, aby wirtualnie "powąchać" ten związek chemiczny, aby poprowadzić go w kierunku źródła pożywienia. Ponieważ coraz więcej mrówek przenosi żywność z powrotem gniazdo wzmacnia siłę substancji chemicznej, ale ta choroba również ulega rozproszeniu w miarę upływu czasu, ponieważ siła substancji chemicznej zmniejsza się w każdym teście w procedurze go. Dwie procedury uphill-chemical i uphill-nest-scent określają reaktywne zachowania mrówek podążając za chemicznym zapachem źródła pokarmu i wracając do gniazda. Mrówki zasadniczo stosują podobne zachowanie do agentów żółwi wspinaczkowych na powyższym modelu Hill Climbing przykład (który jest zgodny z gradientem zdefiniowanym przez zmienną pcolor w odniesieniu do terenu w środowisku 2D). Z kolei czynniki przeciw mrówkom w modelu Ants podążają za gradientem zdefiniowanym przez zmienną zmienną chemical, jeśli szukają pożywienia i wracają wzdłuż gradientu zdefiniowanego przez zmienny nest-scent, jeśli wracają do gniazda. Robią to przez "wąchanie" najpierw w lewo, potem w prawo, a następnie podążanie ścieżką z najsilniejszym zapachem. Procedura poruszania zapewnia element losowy ruchowi mrówek, co zapewnia, że będą one bardzo skuteczne w badaniu całego środowiska, podobnie jak czynniki żółwia w Przykładzie 2 Look Ahead. W tym przykładzie wielu agentów zatrudniających proste zachowanie reaktywne jest w stanie wykonać nietrywialne zadanie, po prostu jako skutek uboczny ich wzajemnej interakcji ze środowiskiem. Gdyby pojedynczy agent miał wykazywać tę samą zdolność - w pełni odkrywać swoje środowisko dla jedzenia i odnajdywać drogę powrotną do domu, gdy tylko znajdzie jakieś - wtedy my jako obserwatorzy moglibyśmy przypisać pewien stopień inteligencji agentowi. Mrówki używają formy zbiorowej inteligencji - inteligencja pochodzi z kolektywnego wyniku wielu agentów współdziałających ze sobą. Jest także możliwe, aby pojedynczy agent reaktywny (a nie zbiór agentów) pomyślnie ukończył nietrywialne zadanie bez wiedząc, że to robi? Na przykład, czy pojedynczy agent może przejść przez labirynt przez zastosowanie prostego zachowania reaktywnego, gdy nie jest w stanie rozpoznać, że istnieją alternatywne ścieżki do zbadania? Opracowano model o nazwie Mazes, aby pokazać, jak to jest możliwe. Zrzuty ekranu tego modelu pokazano na trzech rysunkach . Pokazują żółwie używające prostych zachowań reaktywnych do poruszania się po trzech labiryntach zdefiniowanych w Części 3 - pusty labirynt, Labirynt Pałacu Hampton Court i labirynt Chevening House. Zwróć uwagę, że musimy uważać, jak omawiamy zachowanie i działania agenta żółwia w modelu. Nie możemy powiedzieć, że agent "eksploruje" labirynt - eksploracja zakłada pewien stopień woli ze strony agenta prowadzącego eksplorację. Podobnie, nie możemy powiedzieć, że agent "rozwiązał" labirynt, kiedy dotarł do centrum lub doszedł do wyjścia. Rozwiązywanie wymaga poznania - czyli rozpoznania danego zadania. Wszystko, co możemy powiedzieć, to to, że agent porusza się po labiryncie, a dzięki temu udaje mu się osiągnąć pewien stan (np. centrum lub wyjście) jako efekt uboczny jego zachowania. Model zapewnia selektor interfejsów o nazwie zachowanie żółwia, które pozwala nam zdefiniować reaktywne zachowanie agenta żółwia, gdy porusza się po labiryncie. Są zdefiniowane cztery zachowania: Hand On the Wall, Random Forward 0, Random Forward 1 i Random Forward 2. Kod NetLogo definiujący te zachowania jest pokazany w kodzie NetLogo

to walk ;; procedura żółwiaturtle procedure
;; w razie potrzeby skręć w prawo
ifelse set-pen-down [ pen-down ] [ pen-up ]
if count neighbors4 with [pcolor = blue] = 4
[ user-message "Trapped!"
stop ]
let xpos [goal-x] of maze 0
if xcor >= xpos and xcor <= xpos + [goal-width] of maze 0 and
ycor = [goal-y] of maze 0
[ ifelse [goal-type] of maze 0 = "Exit"
[ user-message "Found the exit!" ]
[ user-message "Made it to the centre of the maze!" ]
stop ]
if (turtle-behaviour = "Hand On The Wall") [behaviour-wall-following]
if (turtle-behaviour = "Random Forward 0") [behaviour-random-forward-0]
if (turtle-behaviour = "Random Forward 1") [behaviour-random-forward-1]
if (turtle-behaviour = "Random Forward 2") [behaviour-random-forward-2]
end
t′to-report wall? [angle dist]
;; zwróć uwagę, że kąt może być dodatni lub ujemny. jeśli kąt jest równy ;; pozytywne, żółw wygląda dobrze. jeśli kąt jest ujemny,
;; żółw wygląda w lewo.
let patch-color [pcolor] of patch-right-and-ahead angle dist
report patch-color = blue or patch-color = sky
; niebieski, jeśli jest to ściana, niebo, jeśli jest to zamknięte wejście
end
to behaviour-wall-following
; klasyczne zachowanie „na ścianie”
if not wall? (90 * direction) 1 and wall? (135 * direction) (sqrt 2)
[ rt 90 * direction ]
;; ściana prosto: w razie potrzeby skręć w lewo (czasami więcej niż raz)
while [wall? 0 1] [ lt 90 * direction]
;; ruszaj naprzód
fd 1
end
to behaviour-random-forward-0
; przesuwa się do przodu, chyba że jest ściana, a następnie próbuje skręcić w lewo, a następnie w prawo
; następnie losowo zamienia się w ostateczność
if wall? 0 1
[ ifelse wall? 90 1
[ lt 90 ]
[ ifelse wall? 270 1
[ rt 90 ]
[ ifelse random 2 = 0 [lt 90] [rt 90] ]]]
;; ruszaj naprzód
fd 1
end
to behaviour-random-forward-1
; porusza się głównie w liniach prostych
ifelse wall? 0 1
[ bk 1 ]
;jeszcze
[ let r random 20
ifelse r = 0
[ if not wall? 90 1 [rt 90 fd 1] ]
;jeszcze
[ ifelse r = 1
[ if not wall? 270 1 [lt 90 fd 1] ]
[ let f random 5
while [not wall? 0 1 and f > 0]
[ fd 1
set f f - 1]]]]
end
to behaviour-random-forward-2
; porusza się w przypadkowych małych krokach
let r random 3
ifelse r = 0
[ if not wall? 90 1 [rt 90 fd 1] ]
[ ifelse r = 1
[ if not wall? 270 1 [lt 90 fd 1] ]
[ if not wall? 0 1 [fd 1] ]]
end

Procedura walk określa sposób poruszania się agenta żółwia w labiryncie. Agent ma możliwość wyczucia, czy w pobliżu znajduje się wall (wykorzystująca prymitywny zmysł oparty na detekcji bliskości), a to jest zdefiniowane przez wall? reporter w kodzie. Kod definiuje następnie cztery różne rodzaje zachowań. Procedura behaviour-wall-following określa klasyczne zachowanie "ręka na ścianie" - agent próbuje trzymać rękę na ścianie podobnej do agentów żółwia w poniższym przykładzie. W przypadku procedury behaviour-random-forward-0 agent żółwia najpierw wyczuwa, czy jest ściana, a następnie próbuje skręcić w lewo, a potem w prawo, a następnie losowo zmienia się w ostateczności przed przejściem do przodu o 1 stopień. W przypadku procedury behaviour-random-forward-1 agent żółwia przemieszcza się głównie w linii prostej, chyba że jest zablokowany przez ścianę. W procedurze behaviour-random-forward-2 agent żółwia przemieszcza się losowo małymi krokami. Definicje tych zachowań są stosunkowo proste, ale niektóre z nich są bardzo złożone ruchy w wyniku. Nigdzie jednak w definicjach nie ma żadnego poznania ze strony agenta - agent realizujący te zachowania świadomie nie robi tego świadom, wiedząc, że pewne działanie lub działania doprowadzą do pożądanego rezultatu.