Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Felix 26. 03. 2017, 22:05:23

Název: Lokalizace robota pomocí částicového filtru
Přispěvatel: Felix 26. 03. 2017, 22:05:23
Zdravím, řeším konkrétní problém lokalizace robota, podle normálního rozdělení počítám pravděpodobnosti částic (řádově tisíce), jenže po vynásobení dostanu nulu (logicky, součin tisíců malých floatů na počítači se tak chová). Poradí někdo nějaký způsob, jak tento problém obejít, kromě použití knihovny počítající s libovolnou přesností, což by pochopitelně neprošlo kvůli výkonu?
Název: Re:Lokalizace robota pomocí částicového filtru
Přispěvatel: Kit 26. 03. 2017, 22:41:56
Místo násobení používej součet logaritmů. To ti jen tak nepodteče.
Název: Re:Lokalizace robota pomocí částicového filtru
Přispěvatel: Ivan Nový 26. 03. 2017, 22:49:08
Zdravím, řeším konkrétní problém lokalizace robota, podle normálního rozdělení počítám pravděpodobnosti částic (řádově tisíce), jenže po vynásobení dostanu nulu (logicky, součin tisíců malých floatů na počítači se tak chová). Poradí někdo nějaký způsob, jak tento problém obejít, kromě použití knihovny počítající s libovolnou přesností, což by pochopitelně neprošlo kvůli výkonu?

Sečtěte logaritmy těch floatů a výsledek převeďte zpět, v Pythonu takto
Kód: [Vybrat]
result = exp(sum(log(p) for p in floats))
Název: Re:Lokalizace robota pomocí částicového filtru
Přispěvatel: Kit 26. 03. 2017, 23:00:12
Sečtěte logaritmy těch floatů a výsledek převeďte zpět, v Pythonu takto
Kód: [Vybrat]
result = exp(sum(log(p) for p in floats))

Převedením zpět funkcí exp() dostane zase nulu. Domnívám se, že zpětný převod je stejně zbytečný.
Název: Re:Lokalizace robota pomocí částicového filtru
Přispěvatel: Ivan Nový 26. 03. 2017, 23:07:42
jo, to by mohlo být.
Název: Re:Lokalizace robota pomocí částicového filtru
Přispěvatel: gll 27. 03. 2017, 14:59:07
Sečtěte logaritmy těch floatů a výsledek převeďte zpět, v Pythonu takto
Kód: [Vybrat]
result = exp(sum(log(p) for p in floats))

Převedením zpět funkcí exp() dostane zase nulu. Domnívám se, že zpětný převod je stejně zbytečný.

pro zpětný převod můžeš ten výsledek převézt na decimal

Kód: [Vybrat]
from decimal import Decimal
result = exp(sum(log(p) for p in floats))
Decimal(result).exp()
Název: Re:Lokalizace robota pomocí částicového filtru
Přispěvatel: gll 27. 03. 2017, 15:02:24
Sečtěte logaritmy těch floatů a výsledek převeďte zpět, v Pythonu takto
Kód: [Vybrat]
result = exp(sum(log(p) for p in floats))

Převedením zpět funkcí exp() dostane zase nulu. Domnívám se, že zpětný převod je stejně zbytečný.

pro zpětný převod můžeš ten výsledek převézt na decimal

Kód: [Vybrat]
from decimal import Decimal
result = exp(sum(log(p) for p in floats))
Decimal(result).exp()

oprava:

Kód: [Vybrat]
from decimal import Decimal
result = sum(log(p) for p in floats)
Decimal(result).exp()
Název: Re:Lokalizace robota pomocí částicového filtru
Přispěvatel: Pavouk106 27. 03. 2017, 15:36:58
Šlo by mi v několika větách říct, o čem tady mluvíte? Asi by mě to i mohlo zajímat, ale jsem momentálně úplně mimo... Díky!
Název: Re:Lokalizace robota pomocí částicového filtru
Přispěvatel: robotron 27. 03. 2017, 15:53:18
Šlo by mi v několika větách říct, o čem tady mluvíte? Asi by mě to i mohlo zajímat, ale jsem momentálně úplně mimo... Díky!

Svesticky z moji zahradky:

a) casticovej filtr (nuda, ale vic k tematu): https://www.youtube.com/watch?v=btfIka02h5c
b) Kalmanuv filtr (holywoodske efekty z Gimpu, ale OT alg): https://www.youtube.com/watch?v=Di4yG6ZRV3k
Název: Re:Lokalizace robota pomocí částicového filtru
Přispěvatel: zboj 27. 03. 2017, 15:53:34
Šlo by mi v několika větách říct, o čem tady mluvíte? Asi by mě to i mohlo zajímat, ale jsem momentálně úplně mimo... Díky!
Je to v subjektu a na Wikipedii, v podstatě jde o statistickou metodu Monte Carlo pro nalezení pózy robota na mapě.