Viabilidade em Programação Não-linear: Restauração e Aplicações