Maximiser une fonction de nombreux paramètres (python)

tout d'abord, permettez-moi de dire que je manque d'expériences scientifiques de mathématiques ou de statistiques - donc cela pourrait être très bien connu de problème, mais je ne sais pas par où commencer.

J'ai une fonction f(x1, x2, ..., xn) où j'ai besoin de deviner le x'ses et de trouver la valeur la plus élevée pour f. La fonction a les propriétés suivantes:

  • le nombre total ou de paramètres est habituellement d'environ 40 à 60, donc une force brute approche est impossible.
  • les valeurs possibles pour chaque x de la gamme de 0,01 à 2,99
  • la fonction est constante, ce qui signifie qu'une hausse de la valeur du diaphragme signifie que l'estimation des paramètres est mieux, et vice-versa.

Jusqu'à présent, j'ai mis en place une jolie méthode de base en python. Au départ, il définit tous les paramètres à 1, au hasard des suppositions de nouvelles valeurs et vérifie si le f est plus élevé qu'avant. Si non, revenir à la valeur précédente.
Dans une boucle de 10 000 itérations cela semble fonctionner d'une certaine manière, mais le résultat est sans doute loin d'être parfait.

Des suggestions sur la façon d'améliorer la recherche des paramètres optimaux seront appréciées. Lorsque vous tapez cette question, les choses linke MCMC est venu, mais cela semble être une très avancée de la méthode et j'aurais besoin de beaucoup de temps à même de comprendre la méthode.
De base des indications ou des concepts pourrait m'aider plus élaboré des méthodes et des algorithmes.

Bienvenue DONC! Je suis sûr qu'il ya formelle de la solution à ce problème, mais mon premier imagine un algorithme glouton... Pour chaque xn, trouver la valeur de cette xn qui maximise f, et à répétition? Cela dépend de la nature de f. Pensées?
Ne vous arrive de savoir si la fonction a quelques maxima, ou si c'est censé avoir beaucoup? Si c'est relativement peu maxima, vous pouvez essayer descente de gradient
Si vous êtes l'envoi d'un nombre inconnu de variables à une fonction, je suggère de les stocker dans un tableau, une liste ou un dictionnaire. Probablement une liste pour votre cas.

OriginalL'auteur David | 2013-07-23