I want to solve the Group Closeness Centrality problem where the input is a graph $G=(V,E)$ and integer $k$ and we want to find a vertex set $S$ of size $k$ minimizing the total distance of the vertices in $V\setminus S$ to $S$. Here, the distance of a vertex $v$ to $S$ is defined as the length of a shortest path starting in $v$ and ending at some vertex of $S$.
I am using an ILP formulation with binary variables $x_{v,d}$ where $x_{v,d}=1$ if vertex $v$ has distance $d$ to $S$ and $d\in \{1,\ldots, diam(G)\}$. Here, $diam(G)$ is the diameter of $G$, the length of longest shortest path in $G$.
The objective function is
$$\sum_{v\in V}\;\sum_{d\in \{1,\ldots,diam(G)\}} d\cdot x_{v,d}.$$ The constraints are
- $\sum_{v\in V} x_{v,0} = k$,
- $\sum_{d\in \{0,\ldots,diam(G)\}} x_{v,d}=1\, \forall {v\in V}$,
- $x_{v,d}\le \sum_{u\in N_d(v)} x_{u,0}\, \forall {v\in V}\, \forall {d\in \{1,\ldots,diam(G)-1\}}$.
The first constraint ensures that we select $k$ vertices, the second that the distance to $S$ is well-defined. The third constraint ensures that for $v$ to have distance $d$ to $S$, we must select a vertex in the $d$-neighborhood of $v$.
I am looking at improved formulations and I want to use an approach where for every vertex we do not consider variables $x_{v,d}$ for all $d\in \{0,\ldots, diam(G)\}$ but only for values $d\in \{0,\ldots, d(v)\}$, for some value $d(v)$.
Initially, $d(v)=2$ for all $v\in V$. Now this means that if we select a vertex, then it contributes 0 to the objective, if we select a neighbor, then it contributes 1, and otherwise, we get a contribution of 2. Now if we find a solution where every vertex contributes 1 (i.e. if $G$ has a dominating set of size $k$), then we are done. Otherwise, we find a vertex $v$ that contributes $2$ and increase the $d(v)$-value for this vertex. More precisely, we add a further variable $x_{v,d(v)}$ and the corresponding constraint, and afterwards increase $d(v)$ by one.
After this long explanation, here are my questions:
- Is it appropriate to call this approach column generation or does it have another name?
- When I implement this (hopefully) improved formulation in CPLEX, is it necessary to solve the main problem from scratch after adding a variable, or is there some way of adding the variables in a lazy manner?