Choix pour résoudre une très grosse équation à 5 inconnus?

Magiquall37 Messages postés 5 Date d'inscription jeudi 11 mars 2021 Statut Membre Dernière intervention 22 novembre 2022 - 20 nov. 2022 à 18:47
 Magiquall37 - 24 nov. 2022 à 22:28

Bonjour à tous,

Je suis vraiment désespérer. J'ai planché sur un projet avec des grosses, très grosses équations, aillant 5 inconnus.
Le projet d'origine est une base sous Excel, que de doit réaliser dans une application pour automatisé tout sa, car il y a des mesures a faire, des paramètres a renseigner etc etc. Je ne peux malheureusement pas vous donner la formule, car c'est un calcul breveté.

Actuellement dans Excel il y donc 5 inconnus


Voici une représentation de la feuille de calcul, (comme je vous le disais je ne peut pas vous la donner en clair)
 






 

Les inconnues en bleu clair, et la valeur à rechercher en bleu entourer de rouge.

Les inconnues sont utilisé dans la zone vert avec des additions, soustraction, PI, Puissance de 2, divisions, multiplication, racine carré, et LOG.

Dans la zone verte il utilise aussi certains, pas tous de la zone rose. Ils utilisent aussi d'autre valeur présent dans d'autre onglet.
La zone jaune utilise les verts et rose, mais aussi des mesures de d'autre onglet. 
Les gris utilise les jaunes, mais aussi des mesures de d'autre onglet.
La valeur a trouvé utilise les 2 bleues, c'est une simple adition des 2.
Enfin bref voilà l'idées

Donc pour trouver la valeur la plus petites il faut remonter toutes la chaine de calcul.

Il y a aussi des du conditionnel la dedans, qui fait que cela change parfois la formule. C'est ce qui m'embête car parfois ce que j'ai deja fait (voir en dessous) fonctionne.

Voila, comment résoudre cette giquantestque équation.
Pour info si vous voulez pas regarder en dessous, la formule que je traite actuellement et que j'envoie au solver fait plus de 45 000 caractères.

Je développe actuellement en C# et cela semble compliqué de trouvé un solveur ou solution (gratuite), On est pas contre une solution payante, si c'est pas trop cher, car cela ne sera que pour un client et un seul logiciel. Donc une solution a paiement annuelle est compliqué.
 


Si en C# ce n'est pas possible d'avoir un calcul fiable, éventuellement une solution externe, en python ou autre, pouvant dialoguer avec mon programme.


Je vous remercie, sincèrement j'ai besoin de votre aide. Je me suis fait bouler a chaque fois avec la phrase, Il faut pas utilisé MSF (Microsoft Solver Foundation), c'est plus maintenu depuis 2003. Mais quand je demande des alternatives, ont me dit il y en a plein... mais pas plus loin.

L'un des forums, viens de m'indiquer la librairie TPMath, je vais regarder sa plus en détails, car pour le moment j'ai pas trouvé d'info pouvant adapté mon problème.

Ha au faite, désoler pour mon Français plus que limite en orthographe.


--------------------------------------------------------------------------------------------

Historique:
Du blabla pour vous donnez un complément d'information si vous le désirer, mais j'ai l'impression que plein de personne s'enfuit quand je raconte sa donc je le met à la fin.

--------------------------------------------------------------------------------------------
Pour résoudre l'équation (répartie dans une multitude de cellule Excel), le client utilisait le solver intégrer dans Excel.
Il y a 5 solver, pour 5 des onglet dans Excel, 3 ont une formule identique (avec des entrées différente), une 4eme est identique avec juste une branche en moins la 5eme qui m'embête est du même format mais avec une branche en plus des 3 1er qui contient des Log, la 6eme est complètement différente, beaucoup plus petite, j'ai galérer un peut mais c'était uniquement des copier merder de signe.

Le logiciel etant en C# j'ai été sur MSF (Microsoft Solver Foundation), mais ce dernier n'est plus maintenu depuis longtemps, et l'on ne trouve pas beaucoup d'information.

En tout cas j'ai réussi pour les 5 autres, cela fonctionne. Et la 6eme fonctionne, mais pas dans tout les cas. La formule aillant des conditions elle change suivant les mesures et paramètre renseigné.


Attention:

Ci dessous je vais vous dire ce que j'ai fait, et parfois cela pique sévère, surtout lorsque l'on déploies la formule complète.
Je n'est pas le projet sous les yeux (dimanche oblige), 

J'ai donc 5 inconnus qui sont des réel non nul. (Solver_M22, Solver_M23, Solver_M24, Solver_M25, Solver_M26)
Oui j'ai repris la désignation dans Excel pour mi retrouver car il y en a ... beaucoup.
Les cellules Excel, je l'ai est représenté dans mon code par Cell_M10, Cell_C20 etc...La encore pour me facilité les chose, et quand le client vérifie le fonctionnement qu'il reprend sont fichiers Excel, j'ai sortie l'intégralité de mon calcul (chaque méthode), ainsi quand il me dit qu'en M50 il y a une erreur, j'ai plus qu'a allez voir Cell_M50.


J'ajoute des contraintes genre:
Solver_M22 >= 0
Solver_M22 <= 4
Solver_M24 >= 0.000001
Solver_M24 <= 2

etc.

Pour envoyer la formule dans le Solver MSF, il faut lui donner un Object Term. Cet Object contient l'intégralité de la forum avec les inconnus.

J'ai donc créé toutes les méthodes représentant ce qui existe dans Excel, me retournant un "Double" cela me sert à faire mon calcul final une fois que MSF on fait sont travail et que je connait les inconnus.
Mais j'ai créé en plus les même méthode qui contiennent les inconnus mais cette fois me retournant un Term.

Et pour information, la sa pique. Le Term final que j'envoie dans le solveur, fait plus de 45 000 caractères.
Bon faut relativisé car il ne comprend pas les double alors in donne que des chiffres entier sous forme de division, donc cela allonge le tout, mais quand même.

--------------------------------------------------------------------------------------------




 

5 réponses

Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
20 nov. 2022 à 21:02

Bonsoir,

pas la moindre idée pour te proposer une solution, mais une question.

Si ça marche avec Excel, pourquoi vouloir faire autrement ?

Si c'est une question de droit, tu peux mettre tout ou partie du calcul dans une macro protégée par mot de passe.

Ce n'est pas super sécurisé, mais d'un autre côté C# se décompile très facilement.


0
Magiquall37 Messages postés 5 Date d'inscription jeudi 11 mars 2021 Statut Membre Dernière intervention 22 novembre 2022
Modifié le 20 nov. 2022 à 21:55

Bonjour,

Pourquoi je garde pas excel ? 

=> Car c'est le but du logiciel, en plus des calculs il y a des mesures à l'aide de plusieurs appareils, une camera. Et plein de paramètres à sélectionner.

L'utilisateur final aura juste à sélectionner quelques paramètres et lancer la mesure. Les calcules et résultats sont ensuite sauvegarder dans une basse de donnée. Afin de pouvoir être recalculé si besoin. L'utilisateur lambda n'ayant pas forcément les connaissance pour les paramètres spécifique.

C'est un domaine d'actions très particulier que je ne connaissais pas. Je suis nouveau dans la société. 

Action possible:
Utilisé Excel pour faire les calculs et relire Excel:

=> Je l'ai envisagé, mais la quantité de paramètres à envoyer à Excel pour qu'il face les traitements risque d'être vraiment long avec INTERROP.
Mais je vais commencé à répertorier les paramètres nécessaire pour les calcul demain justement. Dans tout les cas si j'utilise un logiciel externe il me les faudra aussi.
Il faut que je voie aussi pour lancer une macro (pour le solver Excel si je retiens cette solution) depuis mon application, sa je ne l'ai jamais fait.

Je sais dialoguer avec Excel avec Office Interop, mais pas utiliser les macro. Macro qui sont déjà présente d'ailleurs, car le client avait fait un bouton pour lancer les 6 Solveurs.

0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
20 nov. 2022 à 22:38

Hum.

En effet interop c'est lent.

Il existe plein de solutions pour écrire ou lire dans les fichiers xlsx (pas xls) sans interop.

Dans autre sujet aujourd'hui, il était question de ClosedXML (que je ne connais pas, mais ça a résolu le problème du demandeur)

Par contre, gagné que ca puisse exécuter les macros.


Pour le solveur, tunas cherché en Python?


0
Magiquall37 Messages postés 5 Date d'inscription jeudi 11 mars 2021 Statut Membre Dernière intervention 22 novembre 2022
22 nov. 2022 à 22:39

Bonsoir,

Bon j'ai passé la journée à créer ma passerelle et a envoyer les données vers Excel en utilisant les cellules nommé, en utilisant Interop. Bon c'est lent, mais je m'attendait à pire par rapport à ce que j'ai déjà connu, peut être que mon PC de dev fonctionne bien ;).

J'arrive à lancer la macro principal qui lance les 6 solvers, puis récupérer les données. Bon le résultat n'est pas bon encore, il doit me manqué quelques paramètres, mais rien de grave.
Au final, on va dire que c'est une solution viable.

La seul chose qui me gène dans cette pratique, c'est que chaque solver ouvre la boite de dialogue indiquant qu'il a trouve une solution (6 fois). Maintenant, est que les cachés, si c'est possible, c'est une bonne solution. A voir avec le client.

Interop oblige par contre à avoir un Excel sur le PC, mais d'aprés ce que j'ai vu pour lancer la macro cela risque d'être compliqué autrement, a moins d'avoir accès à la dll du solver d'excel, mais j'ai déjà essayé et il n'en veux pas, cette dll est disponible, mais payant annuellement pour VS.


Concernant Python:

C'est clair que j'ai trouvé quelque info, cela semble plus souvent utilisé en tout cas. Je connais le langage que le nom, mais cela me dérangerais pas de mi mettre aussi, au contraire. Par contre ce que j'ai trouvé, je ne le comprend pas trop en faite, et je ne sais pas du tout comment l'aborder.

Mon principal problème, je pense, c'est justement la façon d'aborder le problème, peut être même avec MSF d'ailleurs, car à l'aide de l'objet Term de MSF, je recrée la gigantisme formule d'un seul bloc et c'est surement pas la bonne façon de faire, même si cela fonctionne pour mes 5 autres solver.
J'ai vu des système avec des matrices, ou tableau, je sais pas si j'emploie le bon terme. C'est peut être, surement, ce qu'il faut utiliser.
Et ce que j'ai vue dans mes recherche Python, il parle aussi de Matrice. Ou quand il parle uniquement de résolution d'équation tel que res = ax+ b, cela m'aide pas beaucoup/
La librairie TPMath en parle aussi : TPMATH Résolution des systèmes d'équations linéaires.

Mais j'avoue que j'y comprend rien, clairement et cela me désespère.

J'arrive un peu a relativisé maintenant et décrocher un peu quand je suis à la maison, mais quand j'ai commencé ma femme à eue vraiment peur. Enfin bref, on est pas là pour parler de ma life désolé.

 

0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
24 nov. 2022 à 12:32

Bonjour
Oui interop nécessite Excel sur le PC cible, et probablement le même Excel que sur le PC de développement car les références sont assez dépendantes de la version.

J'ai vu une fois le forum un code qui permettrait d'être plus souple avec les versions, mais je ne sais pas s'il fonctionne pour tous les cas, je vais tacher de le retrouver.


Effectivement, je ne connais qu'Excel pour exécuter les macros, donc et jusqu'à preuve du contraire, je pense que sans Excel, il faudra tout calculer dans le logiciel C# (ou autre)


Concernant les matrice, si j'enfonce des portes ouvertes, je m'en excuse, mais comme je ne sais pas ce que tu connais, je plante le décors (qui pour moi se résume à pas grand chose).

Donc en Maths, une matrice est une série de nombres rangée sous la forme de ligne(s) et de colonne(s), par exemple, les coordonnées 3D d'un point peuvent former une matrice ligne 1*3 (ou une matrice colonne) et les coordonnées de 10 points 3D peuvent former une matrice rectangle 10*3.

On peut faire plein d'opérations "un à un", c.a.d, tu prends le nombre à un emplacement de chaque matrice, tu fais tes calculs avec et tu mets le résultat au même emplacement dans la matrice résultat.

Jusqu'ici tout va bien.

Ça se complique quand il faut faire des calculs sur les matrices entières par ce que si  additionner les matrices A et B c'est bien additionner un à un, multiplier les matrices A et B c'est appliquer un polynôme à chaque valeur des matrices..

Mais là encore, tant qu'on me dit, il faut telle et telle matrices et les multiplier, j'applique bêtement, d'autant qu'il y a des outils de calcul matriciel en C# donc tout va bien.

Là où je suis incapable de savoir faire par moi-même, c'est passer d'une formule à un calcul matriciel.

Par exemple, j'ai fait un stage dans lequel un formateur a essayé de nous faire passer d'un calcul trigonométrique avec des cosinus et de sinus à appliquer que plusieurs centaines valeurs proches.

On commence par faire le développement limité du calcul trigo, au voisinage de ces valeurs (ça à l'époque je savais plus ou moins faire, mais plus aujourd'hui...) et on fait en sorte de repartir les valeurs dans des matrices pour que les additionner, multiplier ou diviser applique à chacune le développement limité.

Bon là, il m'avait perdu le gars.

Donc si c'est ça que tu dois faire, je te conseille d'aller chercher de l'aide auprès de mathématiciens, qui eux sauront t'aiguiller vers les outils mathématiques adaptés.

Peut-être que le langage R est une piste à creuser.


0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Magiquall37
24 nov. 2022 à 22:28

Hummm, comment dire... Ba si simplement, en faite j'étais largué rapidement et j'en suis vraiment désolé, car tu a pris le temps de me répondre et cela m'énerve de ne pas comprendre et de me dire que je suis trop co.. .

Quoi qu'il en soit je vais pas chercher plus loin aujourd'hui, car je voie notre client demain.  La solutions avec excel fonctionne. J'arrive à ce que les solvers n'affichent plus les 6 fenêtres de validation, c'est donc plus fuide. Malheureusement lorsque je cache excel je sais pas pourquoi j'ai une erreur qui se fait à la 3ème données envoyé. Alors que lorsqu'excel est visible cela fonctionne nickel. J'ai aussi le code de retour de chaque solver donc je peu gérer la validité des résultats. 

Si cela conviens au client, je me prends plus la tête avec sa.. Cela fait plusieurs nuit que je dort plus, car cela trotte dans la tête... Si cela conviens pas grâce a vous j'ai des pistes et cela me soulage, il va falloir que je gratte un peu (beaucoup) , mais cela me rassure. 

0
Rejoignez-nous