2017-10-10 5 views
0

J'ai construit un MIP assez complexe en Python PuLP. De toute évidence un peu trop complexe pour moi. Lorsque je l'exécute, il donne ce qui suit:Python PuLP "Remplacer l'objectif précédemment défini." et __dummy = None

UserWarning: Remplacer l'objectif précédemment défini. warnings.warn (« Réenregistrement précédemment défini objectif. »)

Le problème effectue quelques calculs, mais ne vient pas à la solution attendue.

Les retours LpStatus[prob.status]Optimal

Les retours prob.objectiveNone

Lorsque j'imprime le prob.variables() avec

for v in prob.variables(): 
    print(v.name, "=", v.varValue) 

Je reçois __dummy = None entre les autres variables.

Quelqu'un peut-il expliquer ce que le __dummy = None signifie dans ce contexte? Où pourrais-je chercher une solution? J'étais assez sûr que je n'ai qu'une seule fonction objective.

Répondre

2

D'accord, j'ai trouvé la solution. J'ai en effet écrasé la fonction objectif sans le remarquer.

Voici le morceau de code qui a provoqué l'avertissement:

for i in range(len(items)): 
     for l in range(L): 
      prob += delta[0-l] == 0 

la variable delta est une liste de listes. Le premier index manquait, le programme a donc comparé une liste avec un zéro. Comme cela n'est pas possible, l'équation renvoie toujours false (peut-être codé comme zéro), ce qui a été interprété comme une fonction objectif.

Cette résolu la question:

for i in range(len(items)): 
     for l in range(L): 
      prob += delta[i][0-l] == 0 

Désormais, elle ajoute des équations au lieu des valeurs au prob. J'espère que cela aidera tous ceux qui rencontrent un problème similaire.