Discrete design optimization accounting for practical constraints