Lokalizace robota pomocí částicového filtru

Felix

Lokalizace robota pomocí částicového filtru
« kdy: 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?


Kit

Re:Lokalizace robota pomocí částicového filtru
« Odpověď #1 kdy: 26. 03. 2017, 22:41:56 »
Místo násobení používej součet logaritmů. To ti jen tak nepodteče.

Ivan Nový

Re:Lokalizace robota pomocí částicového filtru
« Odpověď #2 kdy: 26. 03. 2017, 22:49:08 »
Citace od: Felix kdy 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?

Sečtěte logaritmy těch floatů a výsledek převeďte zpět, v Pythonu takto

result = exp(sum(log(p) for p in floats))

Kit

Re:Lokalizace robota pomocí částicového filtru
« Odpověď #3 kdy: 26. 03. 2017, 23:00:12 »
Citace od: Ivan Nový kdy 26. 03. 2017, 22:49:08
Sečtěte logaritmy těch floatů a výsledek převeďte zpět, v Pythonu takto

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ý.

Ivan Nový

Re:Lokalizace robota pomocí částicového filtru
« Odpověď #4 kdy: 26. 03. 2017, 23:07:42 »
jo, to by mohlo být.


gll

Re:Lokalizace robota pomocí částicového filtru
« Odpověď #5 kdy: 27. 03. 2017, 14:59:07 »
Citace od: Kit kdy 26. 03. 2017, 23:00:12
Citace od: Ivan Nový kdy 26. 03. 2017, 22:49:08
Sečtěte logaritmy těch floatů a výsledek převeďte zpět, v Pythonu takto

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


from decimal import Decimal
result = exp(sum(log(p) for p in floats))
Decimal(result).exp()

gll

Re:Lokalizace robota pomocí částicového filtru
« Odpověď #6 kdy: 27. 03. 2017, 15:02:24 »
Citace od: gll kdy 27. 03. 2017, 14:59:07
Citace od: Kit kdy 26. 03. 2017, 23:00:12
Citace od: Ivan Nový kdy 26. 03. 2017, 22:49:08
Sečtěte logaritmy těch floatů a výsledek převeďte zpět, v Pythonu takto

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


from decimal import Decimal
result = exp(sum(log(p) for p in floats))
Decimal(result).exp()


oprava:


from decimal import Decimal
result = sum(log(p) for p in floats)
Decimal(result).exp()

Pavouk106

  • *****
  • 2 400
Re:Lokalizace robota pomocí částicového filtru
« Odpověď #7 kdy: 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!
  • Jabber: pavouk106@gmail.com

robotron

Re:Lokalizace robota pomocí částicového filtru
« Odpověď #8 kdy: 27. 03. 2017, 15:53:18 »
Citace od: Pavouk106 kdy 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!

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

zboj

  • *****
  • 1 507
Re:Lokalizace robota pomocí částicového filtru
« Odpověď #9 kdy: 27. 03. 2017, 15:53:34 »
Citace od: Pavouk106 kdy 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!
Je to v subjektu a na Wikipedii, v podstatě jde o statistickou metodu Monte Carlo pro nalezení pózy robota na mapě.