vjache / bellman

Simple value iteration algorithm.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

BELLMAN

Библиотека для поиска оптимального пути в лабиринте задаваемом клетками и стоимостью переходов между ними.

Это простейшая реализация алгоритма ValueIteration в основе которого лежат уравнения Белмана.

Example

Конфигурация лабиринта задается в файле bellman/config, ввиде весов переходов между позициями. Веса должны быть отрицательными если по смыслу перехо затруднён (стена):

class Config:
    ...
    edges = {
        ('a1', 'a2'): -46.,
        ('a4', 'b4'): -100.,
        ('a3', 'b3'): -100.,
        ('a2', 'b2'): -100.,
        ('b4', 'b5'): -100.,
        ('c4', 'c5'): -100.,
        ('d4', 'd5'): -100.,
        ('e4', 'e5'): -100.,
        ('f4', 'f5'): -100.,
        ('g3', 'g4'): -100.,
        ('f3', 'f4'): -100.,
        ('e3', 'e4'): -100.,
        ('d3', 'd4'): -100.,
        ('c3', 'c4'): -100.,
        ('b2', 'b3'): -100.,
        ('c2', 'c3'): -100.,
        ('d2', 'd3'): -100.,
        ('e2', 'e3'): -100.,
        ('f2', 'f3'): -100.,
        ('e1', 'f1'): -100.,
        ('f2', 'g2'): -100.,
        ('d2', 'e2'): -100.,
        ('c1', 'd1'): -100.,
    }
    ...

Задав конфигурацию, можно вычислить путь:

from bellman.path_finder import find_path

# вычислим путь из позиции 'a3'  в позицию 'f2' при том что 
# начальная ориентация робота есть 'f':
path = find_path('a3f', 'f2', debug=True)
print('План действий:')
print(path)

вывод в терминал будет следующим:

      a   b   c   d   e   f   g

    #   #   #   #   #   #   #   #
1               |       | .   .  
    # - #   #   #   #   #   #   #
2       |           |     . | .  
    #   # - # - # - # - # - #   #
3---> . | .   .   .   .   .   .  
    #   #   # - # - # - # - # - #
4     . | .   .   .   .   .   .  
    #   # - # - # - # - # - #   #
5     .   .   .   .   .   .   .  
    #   #   #   #   #   #   #   #

['a3f', 'r', 'a3r', 'f', 'a4r', 'f', 'a5r', 'l', 'a5f', 'f', 'b5f', 'f', 'c5f', 'f', 'd5f', 'f', 'e5f', 'f', 'f5f', 'f', 'g5f', 'l', 'g5l', 'f', 'g4l', 'l', 'g4b', 'f', 'f4b', 'f', 'e4b', 'f', 'd4b', 'f', 'c4b', 'f', 'b4b', 'r', 'b4l', 'f', 'b3l', 'r', 'b3f', 'f', 'c3f', 'f', 'd3f', 'f', 'e3f', 'f', 'f3f', 'f', 'g3f', 'l', 'g3l', 'f', 'g2l', 'f', 'g1l', 'l', 'g1b', 'f', 'f1b', 'l', 'f1r', 'f', 'f2r']
План действий:
['r', 'f', 'f', 'l', 'f', 'f', 'f', 'f', 'f', 'f', 'l', 'f', 'l', 'f', 'f', 'f', 'f', 'f', 'r', 'f', 'r', 'f', 'f', 'f', 'f', 'f', 'l', 'f', 'f', 'l', 'f', 'l', 'f']

About

Simple value iteration algorithm.

License:Other


Languages

Language:Python 100.0%