def get_outflow(self, v, w, t): """ :param v: tail of edge :param w: head of edge :param t: time :return: f_(v,w)^-(t), i.e. outflow rate of e=(v,w) at time t (picking the newest value) """ if Utilities.is_eq_tol(t, 0): return 0 for wTimeLower, wTimeUpper in self.network[v][w]['outflow']: if Utilities.is_between_tol(wTimeLower, t, wTimeUpper): # t lies between l_w(theta_k) and l_w(theta_k+1) lastOutflow = self.network[v][w]['outflow'][(wTimeLower, wTimeUpper)] return lastOutflow
def get_cumulative_outflow(self, v, w, t): """ :param v: tail of edge :param w: head of edge :param t: time :return: F_(v,w)^-(t) """ if Utilities.is_leq_tol(t, 0): return 0 for timeInterval, outflowVal in reversed( self.network[v][w]['outflow'].items()): wTimeLower, wTimeUpper = timeInterval if Utilities.is_between_tol(wTimeLower, t, wTimeUpper): # This is the interval in which t lies return self.network[v][w]['cumulativeOutflow'][ wTimeLower] + outflowVal * (t - wTimeLower)