Résoudre un problème mathématique d'optimisation via une interface web

Résoudre un problème mathématique d'optimisation via une interface web - Python - Programmation

Marsh Posté le 02-11-2017 à 10:25:31    

Bonjour,
 
Je suis en train de créer un site contenant des données numériques, et j'aimerais que le visiteur puisse obtenir la solution optimale d'un problème mathématique basé sur ces données et sur des paramètres qu'il aura renseigné.
Mon site est réalisé en PHP/MySQL.
Je pense qu'il sera nécessaire d'ajouter une touche de Python au site pour l'obtention de la solution optimale.
Je pense faire héberger mon site par Infomaniak qui dit intégrer Python : https://www.infomaniak.com/fr/hebergement/web
 

Citation :

Git, CGI, PHP, Python, Perl, Laravel, pdflib, ...
 
Les langages couramment utilisés dans le développement Web sont pour la plupart supportés et la fonction exec() est autorisée sur nos hébergements.


 
Concernant le problème mathématique en lui même, il sera de la forme:

Citation :

A1*B11 + A2*B12 + A3*B13 + ... - C1 = F1
A1*B21 + A2*B22 + A3*B23 + ... - C2 = F2
...
ET :
A1+A2+A3+...=1


 
Les B et les C sont donnés. Il faut rechercher les meilleurs A pour réduire les F.
Il pourra y avoir des contraintes du type:

Citation :

A1 > A2 > A3 >...


 
C'est donc un problème a priori relativement simple qui ne demande pas de grosses ressources de calcul.
Je suis débutant en Python (mais je connais très bien Matlab comme autre langage "matriciel" ), et j'ai aucune idée de l'emploi de Python dans un service web.
 
J'ai fait quelques recherches sur google, mais je n'ai pas les bons mots-clé et je tombe sur des problèmes d'optimisation de code php, sur des algorithmes d'optimisation Python à utiliser sur son PC mais qui font appel à un serveur distant, etc..
 
J'aurais donc plusieurs questions pour commencer à y voir un peu plus clair :
 

  • Ajouter une touche de Python à mon site en PHP/MySQL est-il la solution ?
  • Comment se passe l'interfaçage entre mon site et ce script d'optimisation ? Idéalement, je trouverais sympa d'envoyer les valeurs d'entrée à Python depuis PHP, et de récupérer la solution dans PHP pour l'afficher comme j'en ai l'habitude, mais je ne sais pas si c'est possible ou si c'est la meilleure approche
  • Quelle algorithme d'optimisation utiliser ?  
  • Quelles sont les contraintes apportées par le fait que ce sera exécuté chez un hébergeur web ? j'imagine qu'ils n'ont pas certaines librairies, surtout dans le domaine des maths et de l'optimisation. Comment faire face à cela ?


Merci beaucoup !


Message édité par petite fraise le 02-11-2017 à 10:28:25
Reply

Marsh Posté le 02-11-2017 à 10:25:31   

Reply

Marsh Posté le 02-11-2017 à 14:05:46    

Pourquoi ne pas le coder en PHP directement, ton algo ? Quel est l'intérêt de passer par Python ?
 
Pour l'interfaçage, tu fais un formulaire web où tu rentres tes données, et côté serveur, ton script php récupère les données du formulaire et lance l'algo. Une fois le résultat trouvé, le script l'affiche sur une nouvelle page web (par ex).
 
De mémoire, un algo de type simplex devrait résoudre ton pb mathématique.
 
Au niveau des contraintes, tu risques surtout de te prendre un timeout (interruption d'ex de ton script car trop long, souvent 30s) si tu es en mutualisé. :o
 
Vu qu'il y a du CGI, voir si tu peux coder ton algo en langage C, en faire un exe et vérifier que tu peux l'exécuter à partir d'un script php via exec() ou une fonction similaire.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 04-11-2017 à 11:56:04    

> Quel est l'intérêt de passer par Python ?  
Probablement utiliser des librairies mathématiques prêtes à l'emploi, non?
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 04-11-2017 à 13:02:06    

Pour coder un simplex, y'a pas de gros besoins en lib mathématique dans mes souvenirs :/ Et PHP a aussi une lib mathématique (JAMA).


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 04-11-2017 à 13:41:15    

Merci de vos réponses  :)  
 
J'ai quelques nouvelles.
Je voulais en fait, pour mieux comprendre le problème, avancer sur la mise en forme des données;
je suis donc parti sur Python, bien que ce n'était pas la seule solution, en me disant que je trouverais peut être plus facilement les librairies mathématiques nécessaires une fois que le problème serait bien posé.  
 
J'ai en parallèle aussi souscris à l'offre d'Infomaniak qui a une offre assez complète mais qui implique du coup des contraintes de développement précises. Les librairies Python disponibles sont:
http://imu330.infomaniak.ch/pythonmodules.py
 
La mauvaise nouvelle était d'abord que le module SciPy de Python n'était pas disponible, or c'est celui qui contient les fonctions d'optimisation (demandeuses en calculs..).
Le module NumPy, plus basique que SciPy, est toutefois disponible.
J'ai donc utilisé cette fonction : https://docs.scipy.org/doc/numpy-1. [...] lstsq.html
Je ne prends pas en compte de contraintes (type A1 > A2 >...) par contre
 
Concernant l'interfaçage entre PHP et Python, j'utilise la méthode GET, avec les variables dans l'url.
La principale contrainte est que Python ne reconnait pas les tableaux dans les GET (par exemple : tableau[element1]=valeur1&tableau[element2]=valeur2), ce qui est pourtant une fonction très pratique de PHP. J'ai donc du aussi faire un travail de mise en forme de ce côté là.
 
Cela dit, si tu as quelques liens sur le simplex en php, ça m'intéresse quand même de mieux comprendre les différentes solutions possibles.


Message édité par petite fraise le 04-11-2017 à 13:42:42
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed