3 votes

Comment montrer le dual d'un programme linéaire (primal) défini dans pulp

Première question sur Stack Overflow... j'adore ce site...

Je suis en train d'utiliser PuLP en Python. En fonction des variables d'entrée, une fonction objectif et des contraintes, j'essaie de visualiser les variables/valeurs duaux associées à la solution optimale du problème initial en programmation linéaire (le primal). J'ai du mal à rechercher dans la documentation et je voulais juste être clair. Est-il possible de le faire avec PuLP? Il y a du code d'exemple ci-dessous montrant l'entrée du primal.

REMARQUE : J'ai modifié ma question en demandant les résultats duaux (en fonction des retours).

REMARQUE 2 : Encore modifié pour plus de clarté en fonction des retours.

import pulp
lpProb = pulp.LpProblem("exemple", pulp.LpMinimize)
x1 = pulp.LpVariable("x1", 0, None, pulp.LpContinuous)
x2 = pulp.LpVariable("x2", 0, None, pulp.LpContinuous)
x3 = pulp.LpVariable("x3", 0, None, pulp.LpContinuous)
lpProb += 3*x1 + 4*x2 + 2*x3
lpProb += x1 + 2*x2 + x3 >= 42
lpProb += 5*x1 + 7*x2 + 4*x3 >= 68
lpProb.solve()
print(pulp.LpStatus[lpProb.status])
for i in lpProb.variables():
    print("Variable {0} = {1}".format(i.name, i.varValue))
print("Fonction objectif z = {0}".format(pulp.value(lpProb.objective)))

3voto

josilber Points 7859

La suggestion suivante a été proposée par @StuartMitchell dans les commentaires de la question. Il imprime le nom, la valeur double et le surplus de chaque contrainte.

for name, c in list(lpProb.constraints.items()):
    print(name, ":", c, "\t", c.pi, "\t\t", c.slack)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X