Inteligencja obliczeniowa Laboratorium 2: Algorytmy genetyczne

Podobne dokumenty
Inteligencja obliczeniowa Laboratorium 2: Algorytmy genetyczne

Znajdowanie wyjścia z labiryntu

Zadanie 5 - Algorytmy genetyczne (optymalizacja)

Metoda tabel semantycznych. Dedukcja drogi Watsonie, dedukcja... Definicja logicznej konsekwencji. Logika obliczeniowa.

Funkcje wymierne. Funkcja homograficzna. Równania i nierówności wymierne.

2.1. Duszek w labiryncie

Zadanie 3 Oblicz jeżeli wiadomo, że liczby 8 2,, 1, , tworzą ciąg arytmetyczny. Wyznacz różnicę ciągu. Rozwiązanie:

Ruch jednostajnie zmienny prostoliniowy

Funkcja liniowa - podsumowanie

Definicja i własności wartości bezwzględnej.

Złożoność obliczeniowa

Zadania laboratoryjne i projektowe - wersja β

Funkcja kwadratowa. f(x) = ax 2 + bx + c,

Przekształcanie wykresów.

2 Arytmetyka. d r 2 r + d r 1 2 r 1...d d 0 2 0,

Excel zadania sprawdzające 263

ZADANIA Z KINEMATYKI

Technologie Informacyjne Mechatronika 2012/2013 Algorytmy. Podstawy programowania

Przetwarzanie sygnałów

Ćwiczenie 3. Iteracja, proste metody obliczeniowe

Podstawy Programowania C++

METODY DOWODZENIA TWIERDZEŃ I AUTOMATYZACJA ROZUMOWAŃ

Funkcja kwadratowa. f(x) = ax 2 + bx + c = a

1 Podstawy c++ w pigułce.

Metoda Tablic Semantycznych

Rozpoznawanie obrazu. Teraz opiszemy jak działa robot.

Wprowadzenie do Scilab: funkcje i wykresy

Projekty zaliczeniowe Podstawy Programowania 2012/2013

Otrzymaliśmy w ten sposób ograniczenie na wartości parametru m.

Uproszczony opis obsługi ruchu w węźle IP. Trasa routingu. Warunek:

SKRYPTY. Zadanie: Wyznaczyć wartość wyrażenia arytmetycznego

Algorytm i złożoność obliczeniowa algorytmu

Wstęp do Programowania Lista 1

Badanie zależności położenia cząstki od czasu w ruchu wzdłuż osi Ox

Elementy logiki. Wojciech Buszkowski Wydział Matematyki i Informatyki UAM Zakład Teorii Obliczeń

1. Algorytmy przeszukiwania. Przeszukiwanie wszerz i w głąb.

Algorytm selekcji Hoare a. Łukasz Miemus

Wprowadzenie do MS Excel

Adam Meissner SZTUCZNA INTELIGENCJA Problem spełnialności (SAT)

FUNKCJA LINIOWA - WYKRES

Obliczenia iteracyjne

Rozdział 6 PROGRAMOWANIE WYPUKŁE I KWADRATOWE

Naszym zadaniem jest rozpatrzenie związków między wierszami macierzy reprezentującej poziomy ekspresji poszczególnych genów.

Mathcad c.d. - Macierze, wykresy 3D, rozwiązywanie równań, pochodne i całki, animacje

Zadanie Wstaw wykres i dokonaj jego edycji dla poniższych danych. 8a 3,54 8b 5,25 8c 4,21 8d 4,85

Optymalizacja systemów

Barycentryczny układ współrzędnych

POMIARY WIDEO W PROGRAMIE COACH 5

Ćwiczenie 1. Wprowadzenie do programu Octave

1 Metody rozwiązywania równań nieliniowych. Postawienie problemu

Skrypt 19. Trygonometria: Opracowanie L3

PROBLEM: SORTOWANIE PRZEZ ODWRÓCENIA METODA: ALGORYTMY ZACHŁANNE

Ćwiczenie 1. Wprowadzenie do programu Octave

Maple i wykresy. 1.1 Najpierw należy się zalogować. Jak to zrobić zostało opisane w moim poprzednim tutorialu.

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać

Metody iteracyjne rozwiązywania układów równań liniowych (5.3) Normy wektorów i macierzy (5.3.1) Niech. x i. i =1

ZAJĘCIA 25. Wartość bezwzględna. Interpretacja geometryczna wartości bezwzględnej.

1 Programowanie w matlabie - skrypty i funkcje

Egzamin ustny z matematyki semestr II Zakres wymaganych wiadomości i umiejętności

Programowanie - wykład 4

Optymalizacja systemów

Analiza zależności liniowych

Budowa i generowanie planszy

Propozycje rozwiązań zadań otwartych z próbnej matury rozszerzonej przygotowanej przez OPERON.

Programowanie dynamiczne cz. 2

Układy VLSI Bramki 1.0

1. Opis okna podstawowego programu TPrezenter.

0 + 0 = 0, = 1, = 1, = 0.

Modelowanie rynków finansowych z wykorzystaniem pakietu R

Arkusz kalkulacyjny Excel

FUNKCJA KWADRATOWA. Zad 1 Przedstaw funkcję kwadratową w postaci ogólnej. Postać ogólna funkcji kwadratowej to: y = ax + bx + c;(

FUNKCJA KWADRATOWA. 1. Definicje i przydatne wzory. lub trójmianem kwadratowym nazywamy funkcję postaci: f(x) = ax 2 + bx + c

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

Andrzej Wiśniewski Logika I Materiały do wykładu dla studentów kognitywistyki. Wykład 9. Koniunkcyjne postacie normalne i rezolucja w KRZ

Problemy optymalizacyjne - zastosowania

Przewodnik dla każdego po: Dla każdego coś miłego Microsoft Excel 2010

Interpolacja. Marcin Orchel. Drugi przypadek szczególny to interpolacja trygonometryczna

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Samodzielnie wykonaj następujące operacje: 13 / 2 = 30 / 5 = 73 / 15 = 15 / 23 = 13 % 2 = 30 % 5 = 73 % 15 = 15 % 23 =

SYSTEMY LICZBOWE. Zapis w systemie dziesiętnym

Laboratorium 1b Operacje na macierzach oraz obliczenia symboliczne

FUNKCJE. Kurs ZDAJ MATURĘ Z MATEMATYKI MODUŁ 5 Teoria funkcje cz.1. Definicja funkcji i wiadomości podstawowe

Lekcja 2. Pojęcie równania kwadratowego. Str Teoria 1. Równaniem wielomianowym nazywamy równanie postaci: n

Metody numeryczne Laboratorium 2

Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami

Zestaw 2: Zmienne losowe. 0, x < 1, 2, 2 x, 1 1 x, 1 x, F 9 (x) =

A. 1 C B. 0 C C. 1 C D. 0,5 C

Przykładowe rozwiązania

Wykład z modelowania matematycznego. Zagadnienie transportowe.

Arytmetyka komputera. Na podstawie podręcznika Urządzenia techniki komputerowej Tomasza Marciniuka. Opracował: Kamil Kowalski klasa III TI

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41

1 Podstawy c++ w pigułce.

Rozdział 4 KLASY, OBIEKTY, METODY

SYSTEMY LICZBOWE 275,538 =

Funkcje wymierne. Jerzy Rutkowski. Działania dodawania i mnożenia funkcji wymiernych określa się wzorami: g h + k l g h k.

, h(x) = sin(2x) w przedziale [ 2π, 2π].

Opracował: mgr inż. Marcin Olech

Zapis liczb binarnych ze znakiem

Złożoność obliczeniowa zadania, zestaw 2

Transkrypt:

Inteligencja obliczeniowa Laboratorium 2: Algorytmy genetyczne Zadanie 1 (1 pkt) W problemie plecakowym pytamy, jakie przedmioty wziąć do plecaka o ograniczonej objętości, by ich wartość była najwyższa. Załóżmy, że jedziemy na obóz, ale w plecaku zmieścimy przedmioty o łącznej wadze 20. Do wyboru mamy nastepujące przemioty: ITEM SURVIVALPOINTS WEIGHT pocketknife 10.00 1.00 beans 20.00 5.00 potatoes 15.00 10.00 unions 2.00 1.00 sleeping bag 30.00 7.00 rope 10.00 5.00 compass 30.00 1.00 Jakie przedmioty należy wziąć? Korzystając z pakietu R i poniższych wskazówek rozwiąż ten problem za pomocą algorytmu genetycznego. a) Instalacja (jednorazowo) i załadowanie biblioteki install.packages("genalg") library(genalg) b) Dodawanie zbioru danych i limitu plecaka dataset <- data.frame( item = c("pocketknife", "beans", "potatoes", "unions", "sleeping bag", "rope", "compass"), survivalpoints = c(10, 20, 15, 2, 30, 10, 30), weight = c(1, 5, 10, 1, 7, 5, 1)) weightlimit <- 20 c) Chromosomy (rozwiązania) to ciągi 7-bitów. Dla każdego z 7 przedmiotów wybieramy 0 (nie bierzemy tego przedmiotu) lub 1 (bierzemy ten przedmiot do plecaka). Jakim przedmiotom odpowiada ciąg 1001100? Ile są warte wszystkie przedmioty? Sprawdź za pomocą poniższych komend. chromosome = c(1, 0, 0, 1, 1, 0, 0) dataset[chromosome == 1, ] cat(chromosome %*% dataset$survivalpoints)

d) Najważniejszy etap to zdefiniowanie funkcji fitness. Sprawdza i zwraca ile ważą przedmioty dla rozwiązania x. Jeśli przekroczyły limit plecaka to zwraca 0. fitnessfunc <- function(x) { current_solution_survivalpoints <- x %*% dataset$survivalpoints current_solution_weight <- x %*% dataset$weight } if (current_solution_weight > weightlimit) return(0) else return(-current_solution_survivalpoints) e) Definiujemy algorytm genetyczny wprowadzając odpowiednie parametry i uruchamiamy go. Jakie jest najlepsze rozwiązanie? GAmodel <- rbga.bin(size = 7, popsize = 200, iters = 100, mutationchance = 0.01, elitism = T, evalfunc = fitnessfunc) summary(gamodel, echo=true) f) Sprawdź co dzieje się jeśli wywołasz komendę GAmodel w konsoli. Z jakich części składa się klasa? Co to jest GAmodel$mean i Gamodel$best? W której iteracji (pokoleniu) znaleziono już najlepsze rozwiązanie? g) Chcemy zwizualizować działanie algorytmu na wykresie. Wywołaj komendę plot(gamodel). Co przedstawia wykres? h) Niestety na wykresie pojawiają się ujemne wartości oceny chromosomów podczas gdy powinny być dodatnie. Zrób kopię modelu: GAmodel2 <- GAmodel Zmodyfikuj GAmodel2 tak aby wartości były dodatnie i przedstaw go na wykresie. i) Nad powyższym wykresem nie mieliśmy wiele kontroli. Spójrz na poniższe rozwiązanie korzystające z paczki ggplot2 i animation. Rozwiązanie to tworzy funkcję animate_plot, która rysuje wykres z legendą, automatycznie zmieniając wartości fitness na dodanie (gdzie?). install.packages("ggplot2") library(ggplot2) iter<-100 animate_plot <- function() { for (i in seq(1, iter)) { temp <- data.frame(iteracja = c(seq(1, i), seq(1, i)), Legenda = c(rep("średnia", i), rep("najlepsza", i)), WartoscFitness = c(-gamodel$mean[1:i], -GAmodel$best[1:i])) pl <- ggplot(temp, aes(x = Iteracja, y = WartoscFitness, group = Legenda, colour = Legenda)) + geom_line() + scale_x_continuous(limits = c(0, iter)) print(pl) }

} animate_plot() *j) Opcjonalnie: spróbuj zapisać wykres do pliku GIF, korzystając z paczki animation. Być może będzie konieczne doinstalowanie do linuxa/windowsa paczki ImageMagick. install.packages("animation") library(animation) savegif(animate_plot(), interval = 0.1) k) Korzystając z funkcji system.time() albo Sys.time zbadaj jak długo trwało działanie algorytmu genetycznego (tzn. jak długo trwa wywołanie komendy GAmodel <- rgba.bin(...)) Zadanie 2 (3 pkt) Twoim zadaniem jest wykorzystać algorytm genetyczny (jak w zadaniu 1, punkty b-f) do znajdowania drogi w labiryncie, następnie zbadać go (jak w zadaniu 1, punkty g-k). Skorzystaj z poniższego labiryntu zakodowanego jako macierz dwuwymiarowa 11 x 8 kratek: #,#,#,#,#,#,#,#,#,#,# #,S,_,_,_,#,_,_,_,_,# #,_,#,#,_,_,_,#,#,_,# #,_,#,#,#,_,#,#,#,_,# #,_,_,_,#,_,_,_,#,#,# #,_,#,_,#,_,#,_,_,_,# #,_,#,_,#,_,_,_,#,X,# #,#,#,#,#,#,#,#,#,#,# Krzyżyki # oznaczają ścianę labiryntu. Nie można na nie wchodzić. Podkreślniki oznaczają puste pole, po którym można chodzić. S oznacza punkt startowy, a X punkt docelowy. Naszym zadaniem jest przejść od punktu S do punktu X jedynie po pustych polach poruszając się w 4 standardowe kierunki świata. Należy sobie odpowiedzieć na dwa bardzo ważne pytania: 1) Co będzie chromosomem (rozwiązaniem)? Jak je zakodować i jaką ma mieć długość? 2) Jak zmierzymy czy dany chromosom jest dobrym rozwiązaniem? Jak ma działać funkcja fitness? Zanim rzucisz okiem na podpowiedzi poniżej, zastanów się nad oboma pytaniami. Ad. 1) Rozwiązanie to droga przejścia przez labirynt. Ponieważ możemy poruszać się w cztery strony to rozwiązaniem będzie sekwencja ruchów (prawo, lewo, góra, dół) np. PPPDPPGL Owe kierunki można zakodować jako dwa bity np. (G=00,P=01,D=11,L=10). Wówczas mamy: 0101011101010010. Liczbę ruchów (długość chromosomu) można spróbować ustalić na około długość+szerokość labiryntu (czasem potrzebne są korekty). My ustalmy jednak na 13 ruchów, czyli 26 bitów. Uwaga! Zmiana kodowania na zerojedynkowe nie jest konieczna, ale to standard, więc jest mile

widziana. Ad. 2) By sprawdzić czy rozwiązanie jest dobre, należy je zasymulować na labiryncie. Wykonujemy po kolei ruchy z chromosomu. W momencie gdy uderzamy w ścianę (najeżdżamy na #), kończymy poruszanie się i mierzymy jak daleko zaszliśmy. Im bliżej X jesteśmy, tym lepiej. Można zmierzyć odległość od X, i zwrócić ją jako wartość funkcji fitness. Jeśli X ma współrzędne (9,6), a my rozbiliśmy się na ścianie (5,1) to jak zmierzyć odległość? Zastosuj metrykę taksówkową lub euklidesową. Jesli dotarliśmy do X bez wchodzenia na ścianę to kończymy działanie i zwracamy najlepszą wartość (czyli w naszym przypadku 0). Funkcję można dodatkowo ulepszyć: Patrzymy na początkowe ruchy z rozwiązania. Zaczynamy od S i patrzymy jak daleko zaszliśmy (mierząc odległość od X). Patrzymy na ruchy końcowe (od końca). W tym celu poruszamy się od X rozpatrując odwrócone wersje tych ruchów. Patrzymy jak daleko zajdziemy w stronę S (mierządz odległość uderzenia w ścianę od S). Rozpatrujemy średnią obu wartości (zaokrągloną w górę). *Zadanie 3 (dla chętnych, 2 dodatkowe punkty) Przypomnij sobie jaką postać ma formuła logiczna w koniunkcyjnej postaci normalnej o klauzalach co najwyżej długości 3 (w skrócie: 3-CNF). Czy poniższa formuła o 7 klauzulach w postaci 3-CNF jest spełnialna (tzn. czy istnieje podstawienie zerojedynkowe, które da na wyjściu prawdę)? φ = ( x 1 x 2 x 4 ) ( x 2 x 3 x 4 ) (x 1 x 3 x 4 ) (x 1 x 2 x 4 ) (x 2 x 3 x 4 ) ( x 1 x 3 x 4 ) (x 1 x 2 x 3 ) Sprawdź dla podstawienia x 1 =1, x 2 =0, x 3 =1, x 4 =1 oraz dla podstawienia x 1 =1, x 2 =1, x 3 =1, x 4 =1. Na stronie http://people.sc.fsu.edu/~jburkardt/data/cnf/cnf.html (a także na stronie http://www.cs.ubc.ca/~hoos/satlib/benchm.html) znajdują się spakowane zakodowane formuły 3- CNF w formacie dimcas cnf, wraz z objaśnieniem formatu. Powyższa formuła φ w danym formacie byłaby tabelą postaci: -1 2 4 0-2 3 4 0 1-3 4 0 1-2 -4 0 2-3 -4 0-1 3-4 0 1 2 3 0 Widać, że indeksy iksów odpowiadają numerom w tabeli, a minusy odpowiadają negacji. Problem 3-SAT, który odpowiada na pytanie czy dana formuła 3-CNF jest spełnialna? jest NP-

zupełny, dlatego nie istnieją efektywne algorytmy rozwiązujące ten problem w wielomianowym czasie. Można spróbować za to rozwiązać ten problem za pomocą algorytmu genetycznego. Korzystając z pakietu R i biblioteki genalg znajdź podstawienie dla formuły z treści zadania, a następnie również dla jednej z formuł z zamieszczonych na wcześniej wymienionych stronach. Podpowiedzi: a) chromosomem będzie podstawienie do formuły, więc trzeba wiedzieć ile zmiennych ma formuła (czy ta informacja jest w formacie dimacs cnf?) b) funkcją fitness jest liczba klauzul spełnionych po zastosowaniu podstawienia, czyli dla naszego przykładu fitness(φ, [1,0,1,1]) = 6 fitness(φ, [1,1,1,1]) = 7 ( φ spełnialna, [1,1,1,1] to idealne podstawienie, każde 7 klauzul zwraca 1)