Question

J'utilise LPSolve IDE pour résoudre un problème LP.Je dois tester le modèle avec environ 10 ou 20 ensembles de paramètres différents et les comparer.

Existe-t-il un moyen pour moi de conserver le modèle général, mais de spécifier les constantes comme je le souhaite ?Par exemple, si j'ai la contrainte suivante :

A >= [c]*B

Je veux tester le comportement du modèle lorsque [c] = 10, [c] = 20, et ainsi de suite.Pour l'instant, je prépare simplement différents fichiers .lp via search&replace, mais :

a) ça ne semble pas très efficace

b) à un moment donné, je dois considérer la contrainte de la forme A >= B/[c] // =(1/[c]*B).Il semble cependant que LPSolve ne reconnaisse pas l'opérateur de division.Spécifie 1/[c] directement à chaque fois la seule option ?

Était-ce utile?

La solution

Le format que vous utilisez avec lp_solve n'est pas tout à fait clair.Avec le format cplex lp par exemple, il n'y a pas de meilleur moyen :vous ne pouvez pas utiliser la division pour le coefficient (ni même la multiplication d'ailleurs) et il n'y a pas de fonction pour "inclure" un autre fichier ou introduire un nom symbolique pour un paramètre.C’est un langage très simple et ne convient à aucune tâche complexe.

Il existe plusieurs solutions à votre problème ;cela dépend si vous êtes intéressé par quelque chose de rapide à mettre en œuvre, ou de « propre », réutilisable et avec une durée d'exécution courte (bien sûr, c'est un compromis).

  1. Vous avez la possibilité de générer vos fichiers lp depuis une autre langue, par ex.python, bash, etc.Il s'agit d'une solution « rapide et sale » :très lent au moment de l'exécution, mais probablement le plus rapide à mettre en œuvre.

  2. Comme tous les solveurs lp que je connais, lp_solve est livré avec plusieurs interfaces de modélisation :vous pouvez par exemple utiliser le Format MP GNU au lieu de celui actuel.Il reconnaît les multiplications, les divisions, les conditionnels, etc.(tout ce que vous cherchez, voir la section 3.1 'expressions numériques')

  3. Enfin, vous avez la possibilité d'utiliser directement l'interface lp_solve depuis un autre langage de programmation (ex.C) qui sera l’option la plus flexible, mais cela peut nécessiter un peu plus de travail.

Voir le Documentation lp_solve pour plus de détails sur les formats d’entrée pris en charge et la référence API.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top