0

Je me demandais si je pouvais faire une fonction objectif multiple dans LA PÂTE, en faisant cela je peux faire un mini Z = max (a, b, c) en pâte, mais l'utilisation de ce codePuis-je faire un mini Z = max (a, b, c) dans la pâte

ilp_prob = pulp.LpProblem("Miniimize Problem", pulp.LpMinimize) 
    x = [] 
    if m >3: 
     return 1,1 
    for i in range(m): 
     temp = [] 
     for j in range(len(jobs)): 
      temp += [pulp.LpVariable("x_%s_%s" %((i+1),(j+1)),0,1, cat = 'Binary')] 
     x+= [temp] 
    ilp_prob += max([pulp.lpSum([jobs[j]*x[i][j] for j in range(len(jobs))] for i in range(m))]) 
    for i in range(len(jobs)): 
     ilp_prob += pulp.lpSum([x[j][i] for j in range(m)])==1 
    ilp_prob.solve() 

Il renvoie juste tout 1 à x [0], et tous 0 en x [0].

+0

Ce problème n'est pas lié à une "fonction objectif multiple". Il n'a qu'un seul objectif. –

Répondre

3

Je suis sûr que vous ne pouvez pas simplement utiliser les (max) python sur les expressions internes de la pâte! Ces solveurs travaillent sur une spécification de problème très spécifique, sous forme de LP, où il n'y a pas de concept pour ça! L'exception serait que si pulp surchargerait cette fonction max pour ses structures de données (je ne sais pas si c'est possible du tout en python), mais je suis sûr que pulp ne supporte pas les reformulations comme ça (il y en a besoin, encore une fois: la cible est le formulaire standard). Par exemple ne surcharge pas, mais introduit des fonctions max personnalisées, qui transforment en interne votre problème. Cela étant dit: je suis surpris que votre code fonctionne sans erreur critique. Mais je suis trop paresseux pour vérifier les sources de pâtes ici. Jetez un coup d'œil aux guides de formulation LP/IP habituels.

Une première idée serait:

cible:min (max(a,b,c))

reformulation:

  • introduisons une nouvelle variable z
  • ajouter des contraintes:
    • z >= a
    • z >= b
    • z >= c
  • hypothèse: l'objectif veut en quelque sorte de pour minimiser z
    • c'est le cas (la maximisation vous avoir des ennuis que le problème va se unbounded!) ici, comme l'objectif final pour notre cible ressemblerait à:
    • min(z)

Remarque: Il faut veiller à ce que le problème sera toujours linéaire/convexe (en fonction du solveur). Dans ce cas (notre exemple simple, je n'ai pas vérifié votre modèle entier) je ne vois pas de problème, mais dans les cas plus complexes, subjective to complex constraints, cela pourrait introduire non-convexité (et ne peut pas être résolu par Conic solveurs, y compris les solveurs LP).

Et juste jeter un mot-clé dans le ring: votre approche/objectif sonne un peu comme robust-optimization, où généralement un scénario le plus pessimiste est optimisé. Tous les problèmes d'optimisation multi-objectifs ne traitent pas de multiples composants d'objectif comme celui-ci.