https://github.com/steciuk/alhe-connect-dots
https://github.com/steciuk/alhe-connect-dots
Last synced: 7 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/steciuk/alhe-connect-dots
- Owner: steciuk
- Created: 2021-04-14T20:14:11.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2021-06-15T15:28:04.000Z (over 4 years ago)
- Last Synced: 2025-01-06T20:25:45.583Z (9 months ago)
- Language: Python
- Size: 2.89 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Connect-dots
## 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ń.### Opis algorytmu
- Dana jest populacja `N` punktów `P0={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
1. Wyznaczamy punkt ci będący punktem środkowym zbioru `Pi`
2. Znajdujemy punkt `xw` dla którego wartość funkcji `qw` jest najmniejsza w zbiorze `Pi`
3. zbiór `Pi+1` powstaje poprzez usunięcie punktu `xw` ze zbioru `Pi`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.### Przed uruchomieniem
1. Przejdź do folderu projektu
2. Zainstaluj wymagane biblioteki (`pip install -r requirements.txt`)### Generacja punktów
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)`
#### Użycie:
`generate_points.py [-n N] [-d D] [-b BOTTOM] [-t TOP] file-name`
- `N` - liczba punktów do wygenerowania
- `D` - wymiarowość punktów
- `BOTTOM` - minimalna współrzędna generowanych punktów
- `TOP` - maksymalna współrzędna generowanych punktów
- `file-name` - nazwa pliku do którego mają zostać zapisane wyniki generacjiAby dowiedzieć się o użyciu modułu generującego punkty użyj komendy:
`python3 generate_points.py -h`### Connect-dots
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`
#### Użycie:
`python3 connect_dots.py file-name`
Aby dowiedzieć się więcej użyj komendy:
`python3 connect-dots.py -h`