Exploiting constraints as background knowledge for evolutionary algorithms