====== 7.7 Extensions to the Maximum-Flow Problem ====== \\ ===== The Problem: Circulations with Demands ===== * Directed graph G = (V, E) * Edge capacities c(e), e ∈ E * Node supply and demands d(v), v ∈ V: * If d(v) > 0: node v has demand of d(v) flow--> The node is a sink and wishes to receive d(v) units more flow than it sends out * If d(v) < 0: The node v has a supply of -d(v)--> The node is a source and wishes to send out -d(v) units more flow than it receives * If d(v) = 0: Then the node is neither a source nor a sink. * A circulation is a function that satisfies: * For each e ∈ E: 0 ≤ f(e) ≤ c(e) (capacity condition) * For each v ∈ V: fin(v) - fout(v) = d(v)(Demand conditions) * Feasibility Problem: We want to know if there exists a circulation that satisfies the just-mentioned conditions * If there exists a feasible circulation with demands {d(v)}, then ∑v d(v) =0\\ \\ ===== Designing And Analyzing an Algorithm for Circulations ===== \\ * The problem of finding feasible circulation can be reduced to the problem of finding a maximum s-t flow in a different network. * Add new source s and sink t * For each v with d(v) < 0, add edge (s, v) with capacity -d(v) * For each v with d(v) > 0, add edge (v, t) with capacity d(v) * ∑v:d(v)>0d(v) = ∑v:d(v)< 0-d(v). Let's call this common value D. * Claim: G has circulation iff G' has max flow of value D * Given (V, E, c, d), there //does not exist// a circulation iff there exists a node partition (A, B) such that: * Σv∈B d(v) > cap(A, B) => demand by nodes in B exceeds supply of nodes in B + max capacity of edges going from A --> B\\ \\ ===== The Problem: Circulations with Demands And Lower Bounds ===== \\ * In many problems, not only do we want to satisfy demands at various nodes, but we also want to enforce the flow to make use of certain edges. * That's why we need to place //lower bounds// on edges as well as the //upper bounds// restricted by the capacities * Feasible circulation * Directed graph G = (V, E) * Edge capacities c(e) and lower bounds l(e)(Force flow to use certain edges), e ∈ E * Node supply and demands d(v), v ∈ V * A circulation is a function that satisfies: * For each e ∈ E: 0 ≤ l(e) ≤ f(e) ≤ c(e) (capacity) * For each v ∈ V: fin(v) - fout(v) = d(v)(conservation) * Goal: Decide whether or not there exists a feasible circulation(the circulation that satisfies the above conditions)\\ \\ ===== Designing And Analyzing an Algorithm with Lower Bounds ==== \\ * Strategy: Reduce the problem to the one of finding a circulation with demands but no lower bounds, which can in turn be reduced to the Maximum-Flow Problem. * How to proceed?: * On each edge, we need to send at least l(e) units of flow. * Update demands of both endpoints\\ \\ I give this section a 7/10.