Lista-2

by Jerry Sky



Celem listy jest praktyczne przećwiczenie metaheurystyk opartych na symulowanym wyżarzaniu. Dobór parametrów (np. temperatura początkowa, tempo wychładzania czy też poziom akceptacji) należy do autora programu. W czasie rozwiązywania listy autor powinien rozpoznać jaki wpływ na działanie programu (czas działania, wymagania pamięciowe, osiągany rezultat, podatność na utknięcia w lokalnym minimum, … ) mają poszczególne parametry.

Zadanie 1

Napisz program, który za pomocą symulowanego wyżarzania znajdzie minimum funkcji Salomona zadanej wzorem f(x)=1cos(2πi=14xi2)+0.1i=14xi2 f(\overline{x}) = 1 - \cos\left( 2\pi\sqrt{\sum_{i=1}^{4}x_i^2} \right) + 0.1\sqrt{\sum_{i=1}^{4}x_i^2} In: Piątka liczb całkowitych t x1 x2 x3 x4 oddzielonych spacją.
t – maksymalna liczba sekund, która może wykonywać się program w tym uruchomieniu, x=x = ((x1, x2, x3, x4)) – jest rozwiązaniem początkowym (podane liczby zawsze są całkowite, program natomiast może je interpretować jako dowolny typ liczbowy).

Out: 5 liczb typu double oddzielonych spacją, z czego cztery pierwsze to x\overline{x}, natomiast piąta to wartość odpowiedniej funkcji w punkcie x\overline{x}.

code

Zadanie 2

Napisz program, który dla przedstawionej macierzy liczb całkowitych (zakres wartości między 00 a 255255, można przyjąć typ uint8 lub odpowiednik) MM, znajdzie najbliższą macierz MM', spełniającą poniższe ograniczenia

In: Dane wejściowe składać się będą z n+1n+1 linii. W pierwszej linii będą umieszczone, oddzielone spacją liczby całkowite t, nn, mm, kk, gdzie t jest limitem czasu, jak w zadaniu 1, natomiast nn i mm oznaczają wymiary macierzy początkowej MM, a kk jest parametrem odpowiadającym za rozmiar bloków w macierzy wynikowej MM'. W kolejnych nn liniach będą znajdowały się wartości kolejnego wiersza macierzy (dokładnie mm liczb oddzielonych spacjami). Przykładowe dane wejściowe można znaleźć tu i tutaj.

Out: Na standardowym wyjściu znaleźć się powinna jedynie odległość pomiędzy MM a MM'. Na standardowym wyjściu błędów powinna być jedynie macierz MM', przedstawiona jako nn wierszy, w każdym dokładnie mm liczb całkowitych z określonego przedziału, oddzielonych spacją.

code

Zadanie 3

Napisz program, który będzie symulował poruszanie się agenta po kracie (wycinek Z2\mathbb{Z}^2). Celem jest dotarcie agenta do wyznaczonego punktu, przy założeniach, że w każdym kroku może poruszyć się o 11 w lewo, o 11 w prawo, o 11 w górę albo o 11 w dół. Program powinien za pomocą symulowanego wyżarzania generować kolejne sekwencje kroków, tak by dotarcie do celu zajęło jak najmniej rund. Jeśli agent dotrze do celu przed wykonaniem wszystkich kroków, liczymy liczbę wykonanych kroków, jeśli po wykonaniu całej wygenerowanej sekwencji kroków, agent nie dotarł do celu - kontynuuje z miejsca, w którym wylądował a długość wykonanej sekwencji wlicza się do bieżącego rozwiązania albo zaczyna nową iterację.

In: Dane wejściowe składać się będą z n+1n+1 linii. W pierwszej linii będą umieszczone, oddzielone spacją liczby całkowite t, nn i mm, gdzie t jest limitem czasu, jak w zadaniu 1, natomiast nn i mm oznaczają wymiary kraty (odpowiednio liczba wierszy i kolumn w labiryncie, który będzie chciał opuścić agent). W kolejnych nn liniach będą znajdowały się cyfry tworzące labirynt. Między cyframi nie będzie spacji. Możliwe cyfry:

Uwaga: Agent nie zna swojej pozycji początkowej, ani pozycji celu. Można założyć, że agent potrafi rozpoznać rodzaj pola (cyfrę) swoich czterech sąsiadów oraz, że zna nn oraz mm. Przykładowe dane wejściowe można znaleźć tu, tutaj i tutaj. Przykłady z listy pierwszej są również prawidłowymi przykładami dla listy 2.

Out: Na standardowym wyjściu znaleźć się powinna jedynie łączna liczba kroków kk od pozycji startowej do celu, wykonana w wybranym rozwiązaniu. Ostatnią linią na standardowym wyjściu błędów powinien być kk-elementowy ciąg znaków U, D, R, L oznaczający kolejne wybrane kierunki w rozwiązaniu, gdzie litery kodują odpowiednio krok w górę, krok w dół, krok w prawo i krok w lewo.

code