2016-07-04 38 views
0

Ich modelliere gerade ein lineares Programm, für das ich eine Formulierung verwende, von der ich nicht weiß, ob sie gut ist. Ich habe eine Variable X, und in einigen constraint möchte ich überprüfen, ob X einen Wert aus einer Liste oder Menge annimmt (wenn dies der Fall ist, dann ist der Thy - Wert verboten, andernfalls die Beschränkung über die BigM - Methode usw , aber ich denke, das ist nicht so wichtig). Als Beispiel, SET = {1, 2, 10}, und jetzt, wenn in der Lösung X 2 wäre dies nicht erlaubt ist, muss X einen anderen Wert annehmen. Momentan erstelle ich eine Einschränkung für jeden möglichen Wert x in SET und in der Integritätsbedingung | X - x |, und mache dann so etwas wie 0 < = | X - x | * BigM für jedes x. Gibt es eine "Standard" -Möglichkeit, dies zu modellieren, kennen Sie eine bessere Lösung? Zu diesem Thema habe ich nichts gefunden. Danke vielmals!Überprüfen Sie, ob die Variable einen Wert hat, der einem Wert in einem festen Satz entspricht.

Antwort

0

in OPL könnten Sie

{int} SET = {1,2,10} schreiben;

dvar int x;

unterliegen {

forall (i in SET) x = i!;

}