SOTA.py 文件源码

python
阅读 23 收藏 0 点赞 0 评论 0

项目:SOTA-Py 作者: mehrdadn 项目源码 文件源码
def prepare(self, isrc, tbudget, preallocate_aggressively, prediscretize, stderr=None):
        # preallocate_aggressively = {-1: minimize dynamic memory usage, 0: minimize initialization latency, 1: maximize speed}
        network = self.network
        if stderr is not None: tprev = timeit.default_timer(); print_("Computing optimal update order...", end=' ', file=stderr)
        ibudget = int(discretize_up(numpy.asarray([tbudget], float), self.discretization))
        (stack, _, visited_iedges, end_itimes) = dijkstra(network, False, isrc, self.timins, True, ibudget, self.min_itimes_to_dest)
        eused = numpy.flatnonzero((0 <= visited_iedges) & (visited_iedges <= ibudget)).tolist()
        self.end_itimes = end_itimes.tolist()
        if stderr is not None: print_(int((timeit.default_timer() - tprev) * 1000), "ms", file=stderr); del tprev

        if prediscretize:
            if stderr is not None: tprev = timeit.default_timer(); print_("Discretizing edges...", end=' ', file=stderr)
            for eiused, tidist in zip(eused, network.discretize_edges(
                list(map(network.edges.hmm.__getitem__, eused)),
                list(map(network.edges.tmin.__getitem__, eused)),
                self.discretization,
                suppress_calculation=self.suppress_calculation
            )):
                self.cached_edges_tidist[eiused] = tidist
            if stderr is not None: print_(int((timeit.default_timer() - tprev) * 1000), "ms", file=stderr); del tprev

        if preallocate_aggressively >= 0:
            # uv[i][t] should be the probability of reaching the destination from node i in <= t steps (so for T = 0 we get uv[idst] == [1.0])
            # Rationale: uv[i] should be the convolution of edge[i,j] with uv[j], with no elements missing.
            for i in xrange(len(self.min_itimes_to_dest)):
                m = max(self.end_itimes[i] - self.min_itimes_to_dest[i], 0)
                self.uv[i].ensure_size(m, preallocate_aggressively > 0)
            for eij in eused:
                m = max(self.end_itimes[network.edges.begin[eij]] - (self.timins[eij] + self.min_itimes_to_dest[network.edges.end[eij]]), 0)
                self.ue[eij].ensure_size(m, preallocate_aggressively > 0)
                self.we[eij].ensure_size(m, preallocate_aggressively > 0)
        return (stack, eused, ibudget)
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号