Traditionnellement, la programmation linéaire est utilisée pour trouver la solution optimale à un ensemble de contraintes, de variables et d'un objectif (tous décrits comme des relations linéaires). Parfois, lorsque l'objectif est parallèle à une contrainte, il existe une infinité ou de nombreuses solutions optimales tout aussi bonnes. Je ne pose pas de question sur ce dernier cas.
Je suis plus intéressé à trouver de nombreuses solutions qui sont dans la région réalisable générée par mon ensemble de contraintes. Mais j'aimerais que les solutions que je trouve soient «dispersées» autour de la région réalisable dans le sens où elles sont au maximum éloignées les unes des autres. Existe-t-il un moyen connu, sans exécuter plusieurs fois un solveur, de générer plusieurs solutions et d'utiliser la fonction objectif pour imposer la séparation des solutions?
Par exemple, tout programme linéaire avec les décisions a et b et les contraintes w <= a <= x et y <= b <= z peut être «dupliqué» pour trouver deux solutions. Notre nouveau programme linéaire a des variables a1, a2, b1 et b2 et les contraintes w <= a1 <= x et w <= a2 <= x et similaires pour b1, b2. Cependant, quand il s'agit de former une fonction objective, nous rencontrons des problèmes car nous ne pouvons pas utiliser des normes autres que la norme L1 sans rejeter la linéarité et nous ne pouvons même pas vraiment utiliser la norme L1 car ce n'est pas possible (pour autant que je sache) ) pour coder des valeurs absolues.
Peut-être que je devrais me pencher sur l'optimisation convexe ou la programmation semi-définie ou quelque chose?
Existe-t-il un moyen connu de générer un ensemble de solutions pour un programme linéaire et d'utiliser un objectif qui impose une "distance" entre les solutions?