2017-01-16 2 views
-2

J'écris un code MATLAB où je calcule le max-min. J'utilise la "fminimax" de Matlab pour résoudre le problème suivant:Recherche de max-min dans MATLAB

ki=G(i,:); 
ki(i)=0; 
fs(i)=-((G(i,i)*pt(i)+sum(ki.*pt)+C1)-(C2*(sum(ki.*pt)+C1))); 

G: est une matrice de système. pt: est la variable d'optimisation. Lorsque la matrice système réelle est utilisée, le "fminimax" s'arrête après une itération et renvoie la valeur initiale de "pt", quelle que soit la valeur initiale de "pt", c'est-à-dire qu'aucune solution n'est trouvée. (la valeur initiale est définie comme X0 dans la documentation). Le système a les paramètres suivants: G est dans l'ordre de e-11, pt est dans l'ordre de e-1, et c1 est dans l'ordre de e-14. Lorsque j'essaie une matrice de test générée aléatoirement et différents paramètres, le "fminimax" trouve une solution au problème et tout fonctionne correctement. G dans l'ordre de e-2, pt dans l'ordre de e-2, c1 est dans l'ordre de e-7.
J'ai essayé de mettre à l'échelle le système actuel: "fminimax" a duré plus d'une itération, cependant, il restait la valeur initiale de pt, c'est-à-dire qu'il ne trouvait pas de solution.
J'ai essayé de changer la tolérance du "fminmax", en utilisant "options" [StepTolerance, OptimalityTolerance, ConstraintTolerance et functiontolerance]. Il n'y avait aucun impact du tout. toujours pas de solution.

Je pensais que le problème pourrait être que la précision de "fminimax" n'est pas si élevée, ou il ne convient pas pour résoudre le problème. Je pense que c'est aussi lent.
J'ai téléchargé CPLX, et je voulais transformer le problème max-min en programmation linéaire, en utilisant une méthode trouvée dans un livre. Cependant, quand j'ai essayé mon code sur un minimax simple, il n'a pas donné la même solution. J'ai pensé à utiliser CVX par exemple, mais le problème n'est pas convexe.

Quel pourrait être le problème?
P.S. la matrice du système, G, a différentes réalisations, j'ai essayé certaines d'entre elles. Cependant, le "fminimax" répond de la même manière pour tous, c'est-à-dire qu'il n'a pas été capable de trouver une solution adéquate.

+0

Les questions qui nous demandent de recommander ou de trouver un livre, un outil, une bibliothèque de logiciels, un didacticiel ou une autre ressource hors site sont hors-sujet pour Stack Overflow, car elles ont tendance à attirer des réponses opiniâtres et du spam. Décrivez plutôt le problème et ce qui a été fait jusqu'à présent pour le résoudre. – dasdingonesin

+0

@dasdingonesin J'ai modifié la question, j'espère que c'est plus approprié maintenant. Merci pour l'information. – os12

Répondre

0

Je ne suis pas convaincu que les solveurs d'optimisation sont cassés. Si le problème est non convexe, il peut y avoir plusieurs minimiseurs locaux. Compte tenu des informations que vous avez fournies, nous n'avons aucun moyen de savoir si vous avez commencé à une condition initiale.

Le premier endroit où vous devez commencer est d'obtenir plus d'informations de la condition de sortie d'optimisation ... Est-ce qu'il a fini parce qu'il a atteint la limite d'itération? (J'espère que non car il ne fait pas beaucoup d'itérations) ... Est-ce fini parce qu'une tolérance a été atteinte (par exemple la fonction n'a pas changé de plus de xxxx)? Ou peut-être qu'il ne pouvait pas trouver une solution réalisable? (Je ne sais pas si vous avez des contraintes qui doivent être respectées).

Plus que probablement, je suppose que vous démarrez à un minimiseur local sans s'en rendre compte. Donc, vous devez déterminer si vous êtes en effet à un minimiseur local en regardant le jacobien de la fonction évaluée à votre estimation initiale. Calculez-le analytiquement ou utilisez une approximation à pas finis ....