Ce genre de problème se règle souvent par des algorithmes heuristisques, genre algorithme génétique.
Rapidement:un algorithme génétique reproduit la sélection naturelle. Tu as une population d'individu (ici un ensemble d'objet) et tu mesures leurs performances (ici grâce à tes filtres). Ensuite les plus mauvais sont "éliminés" et les meilleurs sont croisés pour obtenir une nouvelle génération. Des mutations aléatoires sont aussi ajoutées pour éviter de tomber trop vite dans un optimum local. Les individus de cette nouvelle génération sont ensuite évalués, et ainsi de suite.
Quand tu arrêtes le calcul, tu n'auras pas la garantie d'avoir trouvé une solution optimale, mais tu auras une solution "pas mal". De plus, c'est très souple en fonction des ressources de calcul disponible. Dans ce genre d'algorithme, tu joues sur les paramètres (nombre de générations, taille de population, probabilité de mutation) pour trouver le meilleur compromis entre temps de calcul et qualité du résultat.
Si le problème n'est pas adapté ou si le truc est mal codé, cela peut ressembler à une recherche complètement aléatoire, mais souvent cela donne de bons résultats. Dans ton cas, sélectionner des solutions déjà pas mal et les combiner pour voir si cela améliore, ainsi que changer juste un objet aléatoirement, me semble assez pertinent.
[^] # Re: Perso j'en aurais bien besoin...pour optimiser mon perso dans un jeu ;p
Posté par koxinga . En réponse à la dépêche Sortie du Top 500 de juin 2011. Évalué à 3.
Ce genre de problème se règle souvent par des algorithmes heuristisques, genre algorithme génétique.
Rapidement:un algorithme génétique reproduit la sélection naturelle. Tu as une population d'individu (ici un ensemble d'objet) et tu mesures leurs performances (ici grâce à tes filtres). Ensuite les plus mauvais sont "éliminés" et les meilleurs sont croisés pour obtenir une nouvelle génération. Des mutations aléatoires sont aussi ajoutées pour éviter de tomber trop vite dans un optimum local. Les individus de cette nouvelle génération sont ensuite évalués, et ainsi de suite.
Quand tu arrêtes le calcul, tu n'auras pas la garantie d'avoir trouvé une solution optimale, mais tu auras une solution "pas mal". De plus, c'est très souple en fonction des ressources de calcul disponible. Dans ce genre d'algorithme, tu joues sur les paramètres (nombre de générations, taille de population, probabilité de mutation) pour trouver le meilleur compromis entre temps de calcul et qualité du résultat.
Si le problème n'est pas adapté ou si le truc est mal codé, cela peut ressembler à une recherche complètement aléatoire, mais souvent cela donne de bons résultats. Dans ton cas, sélectionner des solutions déjà pas mal et les combiner pour voir si cela améliore, ainsi que changer juste un objet aléatoirement, me semble assez pertinent.