Les contraintes apparaissent spontanément dans nombre de situations auxquelles sont confrontés les êtres humains. Elles formalisent d'une manière transparente et naturelle les dépendances qui existent dans le monde physique ou ses représentations abstraites. Étant donné un ensemble de contraintes, portant chacune sur un sous-ensemble donné d'un certain nombre de variables auxquelles on cherche à affecter une valeur, une question centrale est de savoir s'il existe une possibilité de satisfaire simultanément toutes ces contraintes et, le cas échéant, quelles valeurs on peut affecter à chaque variable pour être sûr de satisfaire toutes les contraintes. La programmation par contraintes est une discipline dont le but est de résoudre des problèmes posés sous la forme de contraintes. Selon E. Freuder, l'un des pionniers de cette discipline, c'est même en informatique l'une des approches les plus réussies à ce jour du Saint-Graal de la programmation: l'utilisateur définit le problème, l'ordinateur le résout. Cependant, les problèmes mixtes, qui utilisent à la fois des variables entières, discrètes, et des variables réelles, continues, ont très peu été considérés jusqu'ici.