BeeClust swarming algorithm with Python’s NumPy with Cython speedup.
Vaším úkolem za 5 bodů je zrychlit pomocí Cythonu úkol ze cvičení na NumPy tak, aby zvládal řešit i simulaci o rozměrech cca tisíc × tisíc na moderním počítači (srovnatelném s těmi ve školní učebně) v rozumném čase. Za 10 sekund by měl být schopen 20× spočítat heatmap
či 20× spočítat swarms
či 20× provést tick()
.
Úkol musí splňovat všechny náležitosti z úlohy na NumPy + podmínku na čas.
Pokud teprve začínáte, můžete použít naše řešení minulé úlohy.
ℹ️
|
Předpokladem pro úspěšné splnění úlohy je, že vaše algoritmy jsou „rozumně rychlé“ ze své podstaty. Cython může váš program zrychlit, ale pouze řádově, např. algoritmus s exponenciálním časem bude mít stále exponenciální čas. Před zrychlováním pomocí Cythonu důrazně doporučujeme zjistit, nakolik se vaše stávající implementace časově liší od té naší, a v případě velikých rozdílů se naší implementací přinejmenším inspirovat. |
Součástí zadání jsou opět testy ve složce tests
a jsou doplněny o testy rychlosti
dle zadání úkolu na Cython.
Testy rychlosti můžete zakázat pomocí přepínače -k "not speed"
,
nebo naopak povolit jen je pomocí -k speed
.
Pro spuštění testů nainstalujte do virtuálního prostředí balíky pytest
, pytest-timeout
a numpy
.
Žádný speciální setup není vyžadován.
Testy trvají řádově nižší jednotky vteřin, pokud se vaše algoritmy nezacyklí.
$ python -m pytest -v tests
Testy si můžete zkopírovat k sobě do repozitáře, považujte je za Public Domain. Některé testy obsahují vysvětlující komentář.
Testy musí jít spustit z kořenového adresáře vašeho repozitáře a všechny musí projít. Je to podmínka nutná (nikoli však dostačující) k získání maximálního počtu bodů.
Odkaz na repozitář s aplikací nám pošlete e-mailem.
Pro odevzdání v repozitáři (jiný než pro filabel
a pandas
) nastavte tag v0.2
.
Následující příkazy musí po instalaci závislostí z requirements.txt
fungovat:
$ python setup.py build_ext -i # sestaví modul napsaný v Cythonu
$ python -m pytest -v tests # pustí testy
$ python -c 'from beeclust import BeeClust; BeeClust(...)' # lze importovat a použít z Pythonu
Nepoužívejte pyximport
.
Termín odevzdání je u této úlohy klasicky v pondělí (včetně) za 12 dní.