Implementacja algorytmu przewidującego położenie optimum funkcji na podstawie stopniowego odrzucania kolejnych punktów środkowych zbioru punktów próbkującego daną przestrzeń.
- Dana jest populacja
N
punktówP0={x1, x2, … xN}
w przestrzeni d-wymiarowej;N>d
- Dla każdego z punktów mamy obliczone wartości funkcji celu
{q1, q2, … qN}
- Maksymalizujemy funkcję
q
- Powtarzamy następujące kroki do momentu, gdy liczebność zbioru Pi spadnie do wartości d
- Wyznaczamy punkt ci będący punktem środkowym zbioru
Pi
- Znajdujemy punkt
xw
dla którego wartość funkcjiqw
jest najmniejsza w zbiorzePi
- zbiór
Pi+1
powstaje poprzez usunięcie punktuxw
ze zbioruPi
- Wyznaczamy punkt ci będący punktem środkowym zbioru
W ten sposób mamy zdefiniowany ciąg punktów ci
który przetwarzamy w następujący sposób:
Dla każdej współrzędnej punktów ci
analizujemy jej ciąg wartości. Propozycja na dziś jest taka, że konstruujemy funkcję ci(i)
, robimy regresję liniową względem i, po czym odczytujemy wartość ci(Nd)
. Wartość tę traktujemy jako estymator położenia optimum lokalnego.
Otrzymane punkty środkowe wykorzystujemy do wyliczenia regresji liniowych, dla każdego wymiaru oddzielnie.
Regresje przewidują wartość współrzędnej od procenta niewykorzystanych punktów środkowych.
Przewidywana wartość danej współrzędnej optimum jest równa wartości wyrazu wolnego regresji liniowej, w tym wymiarze.
W sytuacji, gdy procent niewykorzystanych punktów wynosi 0, wartość predykcji jest równa wartości wyrazu wolnego regresji.
Na potrzeby ewaluacji algorytmu, przeprowadzaliśmy oddzielną estymację optimum poprzez obliczenie średniej arytmetycznej punktów środkowych.
Co jest równoważne policzeniu regresji liniowej bez uzależnienia od jakiejkolwiek zmiennej.
Taki zabieg pozwala na ocenę, na ile sensowne jest wykorzystywanie procenta niewykorzystanych punktów do predykcji optimum.
- Przejdź do folderu projektu
- Zainstaluj wymagane biblioteki (
pip install -r requirements.txt
)
Generuje n d-wymiarowych punktów z współrzędnymi w o rozkładzie U[BOTTOM, TOP]
.
Oblicza wartość funkcji q(X)
zdefiniowanej w config.py
w punkcie o zadanych współrzędnych.
Zapisuje otrzymane wyniki w pliku o nazwie file-name.csv
w folderze ./data
.
Wynik zapisywany jest w wierszach w postaci:
x1, x2, x3, ..., xd, q(X)
generate_points.py [-n N] [-d D] [-b BOTTOM] [-t TOP] file-name
N
- liczba punktów do wygenerowaniaD
- wymiarowość punktówBOTTOM
- minimalna współrzędna generowanych punktówTOP
- maksymalna współrzędna generowanych punktówfile-name
- nazwa pliku do którego mają zostać zapisane wyniki generacji
Aby dowiedzieć się o użyciu modułu generującego punkty użyj komendy:
python3 generate_points.py -h
Wczytuje informacje o punktach z pliku file-name.csv
z katalogu ./data
Oblicza punkty środkowe zbioru wczytanych punktów powstałe w wyniku iteracyjnego odrzucania punktu o najniższej wartości funkcji celu.
Przewiduje pozycję optimum przy użyciu regresji liniowej oraz przy użyciu uśredniania punktów środkowych.
Rysuje wykresy, przedstawiające błąd predykcji.
Wszystkie wygenerowane wykresy zapisywane są do folderu ./plots
python3 connect_dots.py file-name
Aby dowiedzieć się więcej użyj komendy:
python3 connect-dots.py -h