2008-12-23 9 views
2

Je travaille sur une application matlab pour laquelle j'ai besoin d'une vitesse améliorée. J'utilise linprog pour résoudre un programme linéaire à 2 contraintes avec environ 10 000 variables bornées par zéro et un. Linprog est extrêmement lent pour mon application. Y a-t-il un moyen de reformuler pour améliorer la vitesse? Ou connaissez-vous un shareware compatible matlab (je suis sur un budget serré) qui serait utile?matlabs linprog trop lent

Répondre

0

Cela me semble être un programme linéaire avec des contraintes de boîte (qu'on peut appeler des contraintes liées). Avez-vous défini correctement ces contraintes de boîte? Voir le reference pour plus d'informations.

1

si vous ne me dérange une mise en œuvre qui ne sont pas en Matlab mais interfacé en utilisant MEX, peut-être Glpk et glpkmex peut aider

http://glpkmex.sourceforge.net/

Alternativement, lpsolve peut être en mesure d'aider aussi mais pas comme bon comme librairie glpk pour les problèmes à grande échelle: http://web.mit.edu/lpsolve/doc/MATLAB.htm

Si vous pouvez l'utiliser, IBM ILOG CPLEX est en fait l'un des meilleurs pour les problèmes à grande échelle. Il existe une interface vers matlab (http://www-01.ibm.com/software/integration/optimization/cplex-optimizer/connectors/), et vous pouvez essayer d'obtenir une version d'essai étendue si vous n'avez pas de licence .

Dans certains cas particuliers, il est possible de simplifier votre problème de manière significative en examinant les coefficients de la fonction objectif et en déterminant quelle contrainte sera active en fonction de vos contraintes. Les variables qui ne participent pas aux contraintes actives peuvent être définies à la valeur min ou max (0 ou 1, selon votre description) selon que leurs coefficients dans la fonction objectif sont positifs ou négatifs, en supposant que vous minimisez votre fonction objectif. Si vous faites de la maximisation, faites l'inverse. Cela rogne le nombre de variables =).