Contexte
Pour un projet, j'ai besoin d'un programme/algorithme capable de générer des formules mathématiques optimales. Le programme doit prendre en entrée une valeur cible ainsi qu'une liste de valeurs données (entiers, fractions, nombres irrationnels, etc.) et produire une expression mathématique qui aboutit à la valeur cible en utilisant toute ces valeurs.
Objectif
L'objectif est de créer une solution optimale, c'est-à-dire une formule qui utilise le moins de valeurs possibles, tout en étant mathématiquement correcte. Le programme doit également être capable de gérer des cas plus complexes impliquant des opérations avancées comme les racines carrées et les puissances.
Exemples Simples
Pour obtenir 2 à partir des valeurs :
Le programme devrait proposer la solution optimale suivante :
Pour obtenir 3 à partir des valeurs :
Une solution possible serait :
Cependant, cette solution est moins optimale (bien que la meilleur dans ce cas) car elle nécessite l'ajout d'un nombre supplémentaire.
Gestion des Valeurs Répétées
Le programme doit aussi prendre en compte les répétitions de valeurs dans la liste. Par exemple, pour obtenir 4 à partir d'une liste contenant 2, 2, 3, 5. Il faut nécessairement mettre les deux deux. La solution n'est donc pas valide il faudrait donc faire .
Cas Complexes
Le programme doit être capable de résoudre des cas plus complexes. Par exemple, pour obtenir 2 avec les valeurs suivantes :
Le programme pourrait proposer la solution suivante :
Mes réflexions
Pour le moment, la seule manière de gérer les formules que j'ai trouvée est de traiter élément par élément chaque bout de la formule, par exemple avec je cherche plusieurs manières de le simplifier avec tous mes nombres, comme diviser par les autres, multiplier. Et je vois quand c'est rationnel avec une profondeur de 2, 3 sur mon arbre de décision. En plus d'avoir la possibilité de l'inverser en faisant sur lui-même fois lui-même ou faire pour tous les nombres de la forme . Par exemple avec et , mon idée ferait :
ou
etc.
Puis je continuerais la première branche pour trouver :
qui est rationnel.
Avant de recomposer tous les rationnels par des sommes/produits, avant de finalement tout multiplier par un coefficient permettant de directement trouver le résultat attendu.
Le problème de cette méthode, c'est que selon moi, elle offre une formule tout sauf esthétique.
Conclusion
Je cherche donc à développer ou à obtenir un programme qui répond à ces critères et serait capable de générer ces formules automatiquement. Si vous avez des idées, des suggestions d'algorithmes ou de méthodes pour y parvenir, je suis preneur !
# Wolfram alpha
Posté par GG (site web personnel) . Évalué à 5.
Je me demande si tu n'aurais pas des pistes dans :
https://www.wolframalpha.com/
Pourquoi bloquer la publicité et les traqueurs : https://greboca.com/Pourquoi-bloquer-la-publicite-et-les-traqueurs.html
[^] # Re: Wolfram alpha
Posté par BAud (site web personnel) . Évalué à 6. Dernière modification le 12 août 2024 à 17:16.
et aussi dans quelques logiciels de calcul formel, comme maxima, sympy utilisable avec python… il y en a sans doute d'autres.
Je ne me rappelle plus lequel a un module de simplification des polynômes, calcul d'intégrale (peu trivial), calcul formel de fonction dérivée (plus facile, j'en avais fait un il y a longtemps)
[^] # Re: Wolfram alpha
Posté par Jnath . Évalué à 2.
J'utilise parfois sympy ou autre dans mes projets, mais ici je vois pourquoi l’intégrer pour la gestion des expression mathématique mais pas du tout pour le problème que doit régler mon algo.
Idem pour Wolfram, où tout autre application de calcul formel.
Est-ce moi qui est mal compris l’intérêt ?
# langage utilisé
Posté par BAud (site web personnel) . Évalué à 4. Dernière modification le 12 août 2024 à 17:23.
ce serait plus simple de répondre et t'orienter si ton analyse de l'existant indiquait ce que tu as déjà regardé ainsi que le langage que tu privilégies pour tes développements…
[^] # Re: langage utilisé
Posté par Jnath . Évalué à 2.
J'ai déjà écris un code python pour la gestion des formules. Je ne suis donc pas aller très loin de le code, j'ai surtout fait beaucoup de pseudo code, de réflexion pour trouver une méthode/un algorithme me permettant de coder la lib (Ma question ici). La gestion des formules et du calcul formel ne me pose pas trop de soucis.
Il s'agit plus de trouver si quelqu'un connait un algorithme qui pourrait être utile. Ou même plus si un algorithme similaire existe et pourrait être adapté à mon problème.
[^] # Re: langage utilisé
Posté par BAud (site web personnel) . Évalué à 4.
appliqué aux exemples « simples » que tu indiques ? ça pourrait être sympa de le partager (sous une licence correcte comme la MIT), tu mets le code dans un git et zou :p
mouais, entre du pseudo-code et du python, il y aura peu de différence :/ tu peux mettre ton pseudo-code en commentaire :p
regarde déjà ce qui est fait pour résoudre « le compte est bon » (hommage à Patrice Laffont _o/). Tu as pas mal d'exemples :
de mémoire, c'est bourrin (tester toutes les combinaisons) vu que c'est avec des entiers (liste finie) ainsi que les 4 opérations. ya que si le résultat n'est pas exact qui requière de garder l'opération permettant de s'en approcher le plus.
Pour ce que tu veux faire, j'imagine qu'il y a des identités remarquables à prendre en compte, un logiciel de calcul formel te les apportera sans doute
exemple trivial, obtenir 0 à partir des valeurs :
rapidement, tu risques d'avoir besoin de théorèmes, de formules pour des développements/factorisations (comme et autres joyeusetés…)
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.