web-dev-qa-db-fra.com

Utilisation de min / max * dans * un programme linéaire entier

J'essaie de mettre en place un programme linéaire dans lequel la fonction objectif ajoute un poids supplémentaire au max des variables de décision multipliées par leurs coefficients respectifs.

Dans cet esprit, existe-t-il un moyen d'utiliser les opérateurs min ou max dans la fonction objective d'un programme linéaire?

Exemple:

Minimize
    (c1 * x1) + (c2 * x2) + (c3 * x3) + (c4 * max(c1*x1, c2*x2, c3*x3)) 
subject to
    #some arbitrary integer constraints:
    x1 >= ...
    x1 + 2*x2 <= ... 
    x3 >= ...
    x1 + x3 == ...

Notez que (c4 * max(c1*x1, c2*x2, c3*x3)) est le terme "poids supplémentaire" qui me préoccupe. On laisse c4 désigne le coefficient "poids supplémentaire". Notez également que x1, x2, et x3 sont entiers dans cet exemple particulier.

Je pense que ce qui précède pourrait être en dehors de la portée de ce que propose la programmation linéaire. Cependant, peut-être y a-t-il un moyen de pirater/reformater cela en un programme linéaire valide?

Si ce problème est complètement hors du cadre de la programmation linéaire, peut-être que quelqu'un peut recommander un paradigme d'optimisation plus adapté à ce type de problème? (Tout ce qui me permet d'éviter d'énumérer et de vérifier manuellement toutes les solutions possibles serait utile.)

28
solvingPuzzles

Ajoutez une variable auxiliaire, disons x4, avec des contraintes:

x4 >= c1*x1
x4 >= c2*x2
x4 >= c3*x3  
Objective += c4*x4
44
fairidox