Skip to content
Snippets Groups Projects
discrete_resolver.py 1.55 KiB
"""
DBResolver solves a discretized version of the conflict resolution problem.
"""

from guided_mrmp.conflict_resolvers.subproblems import SubproblemPlacer
from guided_mrmp.conflict_resolvers.subproblems.subproblem_og import Subproblem, find_subproblem, query_library

class DiscreteResolver():
    def __init__(self, conflict, all_robots, starts, goals, conflicts, grid, lib_2x3, lib_3x3, lib_2x5):
        """
        inputs:
            - conflicts (list): list of all conflicts
            - all_robots (list): list of all robots
            - dt (float): time step
        """
        self.conflict = conflict
        self.conflicts = conflicts
        self.all_robots = all_robots
        self.grid = grid # obstacle map

        self.starts = starts
        self.goals = goals

        self.lib_2x3 = lib_2x3
        self.lib_3x3 = lib_3x3
        self.lib_2x5 = lib_2x5

    def find_subproblem(self):
        conflicts, subproblem = find_subproblem(self.conflict, self.conflicts, [],self.all_robots, self.starts, self.goals, self.grid, True, True)
        return subproblem
    
    def solve_subproblem(self,s):
        sol = query_library(self.grid,s, self.lib_2x3, self.lib_3x3, self.lib_2x5)

        final_sol = []

        for r in range(len(self.starts)):
            this_sol = sol[r]
            final_this_sol = []
            for i in range(len(this_sol)):
                if this_sol[i] != [-1,-1]:
                    final_this_sol.append(s.get_world_coordinates(this_sol[i][0], this_sol[i][1]))
            final_sol.append(final_this_sol)

        return final_sol