0

Ma question est très simple. Est-il possible de supprimer une variable que j'ai déjà créée?PuLP-OR: Pouvez-vous supprimer les variables déjà créées?

Ou mon seul espoir est de ne pas créer la variable pour commencer?

Je suppose que si vous pouvez imprimer une variable puis en utilisant:

del prob.variable 

serait le supprimer. Mais je ne peux pas le trouver exactement, Python dit que:

prob.variables 

est pas indicable.

+0

Je n'ai rien vu dans les documents, mais je ne suis pas un expert. Dans quel contexte avez-vous besoin de cette fonctionnalité? S'il n'y a pas de contraintes l'utilisant; eh ben ça n'a pas d'importance (garde-les juste). S'il y en a, il pourrait être plus facile de supprimer les contraintes. – sascha

+0

Le problème est qu'il existe une contrainte contenant toutes les variables qui ne sont pas vraiment utiles. c'est une contrainte de somme. J'espérais les avoir créés pour les supprimer juste avant cette contrainte très importante. – drizo

+0

Cette contrainte ne change donc pas la faisabilité/l'objectif? Gardez-le. Le solveur ne s'en souciera pas autant. Et pourquoi vous ne pouvez pas déduire cela * pas utile * avant d'ajouter ces vars ou cette contrainte? – sascha

Répondre

0

Les variables associées à un problème LP prob LA PÂTE se trouve dans prob._variables, qui est une liste, on pourrait penser que vous pouvez supprimer une var variable en utilisant

prob._variables.remove(var) 

Cependant, cela supprime simplement la première variable dans prob._variables, car pour une raison quelconque, Python ne fait pas de distinction entre les variables de problème au niveau de ==. Par là, je veux dire que si var1 et var2 sont deux variables associées à prob,

if var1 == var2: 
    print('Equal') 

retourne toujours « l'égalité ». (N'essayez pas var1 == var2, cela sera interprété comme une équation) . Cela signifie que si vous essayez de trouver l'index de var utilisant

prob._variables.index(var) 

la sortie sera toujours 0.

Quelqu'un qui comprend Python mieux que je ne vais devoir expliquer ce happpening, mais voici un travail autour :

for i, v in enumerate(prob._variables): 
    if v is var: 
     del prob._variables[i] 

Cela ne supprimera pas la variable de toute contrainte impliquant, et il semble que va résoudre le lA PÂTE problème LP comme si la variable était toujours là. Donc, je pense que tout cela est de changer l'attribut prob._variables. Je ne pense pas que cela soit utile dans votre situation (ce que je ne comprends pas vraiment), mais c'est nécessaire si vous voulez supprimer une variable, puis introduire une nouvelle variable avec le même nom que l'ancienne.