An open API service indexing awesome lists of open source software.

https://github.com/steciuk/alhe-connect-dots


https://github.com/steciuk/alhe-connect-dots

Last synced: 7 months ago
JSON representation

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 generacji

Aby 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`