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 testsTesty 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 PythonuNepoužívejte pyximport.
Termín odevzdání je u této úlohy klasicky v pondělí (včetně) za 12 dní.