2016-03-11 3 views
1

J'utilise cplex.conflict pour un problème et quand j'utilise cplex.conflict.refine puis que je demande le cplex.conflict.get, il donne la valeur 5 pour certaines des contraintes (un exemple infaisable). Est-ce que quelqu'un sait ce que cela signifie? Voici un exemple en python:Qu'est-ce que cela signifie la valeur 5 comme le retour de se mettre en conflit de cplex?

> python 
Python 2.7.6 (default, Jun 22 2015, 17:58:13) 
[GCC 4.8.2] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import cplex 
>>> c = cplex.Cplex() 
>>> c.variables.add(names = ["x0"]) 
>>> c.linear_constraints.add(lin_expr = [[[0], [-1.0]], [[0], [1.0]]], senses = "LL", rhs = [-10,9]) 
>>> c.conflict.refine(c.conflict.linear_constraints()) 
>>> c.conflict.get() 
[5, 5] 
>>> 

Le api ne concerne que les valeurs renvoyées de -1, 0 ou 3.

Répondre

1

c.conflict.get() peut retourner conflict.constraint_type aussi bien. Dans votre cas, les deux contraintes sont membres des rendements des conflits et CPLEX types de contraintes:

>>> c.conflict.group_status[5] 
None 
>>> c.conflict.constraint_type[5] 
SOS 

à savoir, vos contraintes sont de type SOS qui est étrange que les contraintes SOS sont des variables entières (binaire). Si vous ajoutez une contrainte redondante, par ex.

>>> c.linear_constraints.add(lin_expr = [[[0], [-1.0]], [[0], [1.0]], \ 
[[0], [1.0]]], senses = "LLL", rhs = [-10,9,10]) 
>>> c.conflict.refine(c.conflict.linear_constraints()) 
[5, 5, -1] 

Ceci signifie que le dernier est exclu comme n'étant pas membre du Je vous recommande d'utiliser c.conflict.get_groups() pour plus d'informations.

Edit:

Si vous spécifiez les types de variables lors de définir tout fonctionne bien:

>>> c.variables.add(names = ["x0"], obj=[1.0], types=[c.variables.type.continuous]) 
...etc... 
>>> c.conflict.refine(c.conflict.linear_constraints()) 
Refine conflict on 3 members... 

Iteration Max Members Min Members 
    1   2   0 
    2   2   1 
    3   2   2 

[3, 3, -1] 
+0

Merci, cela est très utile. Est-il possible de savoir quand la sortie de c.conflict.get() est conflict.constraint_type? –

+0

Je ne pense pas que cplex soit supposé renvoyer 'constraint_type' quand on appelle' c.conflict.get() ', ce pourrait être un bug dans ce cas ou juste un comportement imprévu. –