Je veux exprimer la contrainte suivante, dans un programme linéaire entier:
J'ai déjà les variables entières et on me promet que . Comment puis-je exprimer la contrainte ci-dessus, sous une forme adaptée à une utilisation avec un solveur de programmation linéaire entier?- 100 ≤ x ≤ 100
Cela nécessitera probablement l'introduction de variables supplémentaires. Quelles nouvelles variables et contraintes dois-je ajouter? Peut-il être fait proprement avec une nouvelle variable? Deux?
De manière équivalente, cela demande comment faire respecter la contrainte
dans le contexte où j'ai déjà des contraintes qui impliquent et .0 ≤ y ≤ 1
(Mon objectif est de corriger une erreur dans https://cs.stackexchange.com/a/12118/755 .)
Réponses:
Je pense que je peux le faire avec une variable binaire supplémentaire :δ∈ { 0 , 1 }
Mettre à jour
Cela suppose que est une variable continue . Si nous limitons à une valeur entière , alors la deuxième contrainte peut être simplifiée en:X x y - 101 δ ≤ x ≤ - y + 101 ( 1 - δ )X y- 101 δ≤ x ≤ - y+ 101 ( 1 - δ)
la source
Ce qui suit n'est pas joli du tout, mais cela fonctionne. Soit , N = 100 dans le cas spécifique de la question. Ensuite, nous avons les contraintes suivantes.0 ≤ x ≤ N N= 100
la source
la source