This paper addresses a real-life machine reassignment problem proposed in the Google ROADEF/EURO Challenge (2012). In this paper, we propose a linear integer programming (IP) formulation and iterated local search (ILS) heuristics for approximately solving this problem. Different versions of the ILS heuristics are presented. Two of these versions rely on IP-based perturbations, whereas the other two are based on randomized perturbations. We also propose efficient restricted versions of the classic perturbation and local search procedures based on the "shift" and "swap" neighborhoods. Computational experiments showed that the IP-based heuristics are competitive with the best heuristics in the literature.Keywords: machine reassignment problem; iterated local search; heuristics; linear integer programming R. Lopes et al. / Intl. Trans. in Op. Res. 22 (2015) 77-95 The "capacity constraints" guarantee that all machines have enough available resources to run the processes assigned to them. Let C mr ∈ N be the capacity of a resource r ∈ R for a machine m ∈ M and D pr ∈ N be the demand of r for a process p ∈ P, the capacity constraints can be formulated aswhere U (m, r) = p∈P|X (p)=m D pr is the usage of r for m according to the reassignment X . We avoid the notation U (m, r, X ) and write U (m, r) for the sake of a cleaner notation. We use same notations for all the functions that depend on X . A resource r ∈ R is said "transient" if it is reserved for a process p ∈ P simultaneously on machines I p and X (p). For example, the disk space used by p in I p can only be freed after the migration of p to X (p) has finished, meanwhile this resource must be reserved for p in both machines. The "transient constraints" are extensions of the capacity constraints for transient resources. Let T ⊆ R be the set of transient resources, the transient constraints can be stated as p∈P|I p =m∨X (p)=m