Boucler sur Python
mamiemando Messages postés 33459 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 8 janvier 2025 - 12 avril 2024 à 15:11
- Boucler sur Python
- Citizen code python avis - Accueil - Outils
- Python est introuvable. exúcutez sans argument pour procúder ó l ✓ - Forum Python
- Trouver la position d'un élément dans une liste python ✓ - Forum Python
- Python pix ✓ - Forum Python
3 réponses
9 avril 2024 à 10:29
bonjour,
merci de partager un programme complet et testable. donc avec les import et les données.
Tu écris "poids max de 300g du même produit", donc tu peux avoir 15kg au total?
Je suppose qu'il est inutile, après avoir testé 10g de soja + 10g de blé, de tester ensuite 20g de soja + 20g de blé, que c'est le même "mélange"?
9 avril 2024 à 10:47
essaie plutôt ceci:
import itertools import numpy as np # Poids maximal du produit végétal p_max = 301 #grammes # Pas pas = 10 #grammes # Boucles : for comb_poids in itertools.product(range(0, p_max, pas),repeat=2): print(comb_poids)
11 avril 2024 à 19:12
Bonjour,
Pour un faible nombre de produits, tu peux te contenter d'un produit cartésien (et donc utiliser comme yg_be le propose, itertools.product)
from itertools import product for (i, j, k) in product( range(0, 5), # i = 0, 1, 2, 3, 4 range(1, 3), # j = 1, 2 range(10, 21, 5) # k = 10, 15, 20 ): print(i, j, k)
Cette fonction permet, de considérer un nombre arbitraire de dimension (3 dimensions dans l'exemple ci-dessus).
Maintenant, parlons complexité (algorithmique). Supposons que mes dimensions comportent chacune N éléments. Alors exécuter cette boucle se fait en O(N^3), c'est-à-dire à un coût qui croit de manière cubique avec le nombre d'éléments. Si tu as m dimensions, on a donc un coup en O(N^m) ce qui est bien trop coûteux en pratique (de manière générale, on évite d'aller au delà de m=2 pour de grands jeux de données). Ce sera donc "trop cher" d'évaluer toutes les configurations possibles.
Avant de considérer une éventuelle implémentation, l'idéal serait donc de formuler ton problème sous la forme d'un problème d'optimisation. Si tu n'es pas familière de cette discipline, peut-être peux tu exprimer les différents aspects de ton problème en français et on t'aidera à les traduire. En fonction du modèle d'optimisation obtenu, on verra quelle est la manière la plus efficace de le résoudre. Je m'explique.
De manière générale, quand tu modélises un problème d'optimisation, il faut caractériser :
- L'objectif : ce que tu cherches à optimiser (soit minimiser, soit maximiser)
- Les variables de décisions : dans ton cas la quantité de chaque type d'ingrédient
- Les contraintes :
- Contraintes de domaines : quel est le domaine de définition de chaque variable de décision
- Autre contraintes : potentiellement n'importe quoi, par exemple la quantité totale d'ingrédient A + d'ingrédient B ne doit pas excéder une certaine masse.
D'un point de vue pratique, on préfère :
- les objectifs formulés sous forme d'une fonction linéaire ;
- les variables continues (par opposition aux variables discrètes) ;
- les contraintes linéaires.
... car on tombe alors sur un programme linéaire qui se résout rapidement et facilement (par exemple en python avec PuLP).
Bonne chance
Modifié le 11 avril 2024 à 21:46
En réalité, tout est déjà expliqué:
J'ai une base de données, que j'ai créé, de 500 produits végétaux. On y retrouve beaucoup d'informations, mais le plus important reste leurs compositions en protéines et en acides aminés (en g/100g de produit végétal). Je souhaite crée un mélange de produits végétaux qui égalise ou surpasse (mais doit toujours être le plus proche possible) de ma référence, la whey.
Il recherche la proportion de produits dont la composition en protéines et la composition en acides aminés sont supérieures ou égales, et les plus proches, des compositions correspondantes de la whey.
- Il a donc 500 variables continues, nulles ou positives, dont la somme doit faire 1, Pi.
- Deux fois 500 constantes, les compositions en protéines et en acides aminés de chacun des 500 produits, PRi & AAi
- 2 constantes, les compositions en protéines et en acides aminés de la Whey, WPR et WAA
- 2 contraintes, sommes sur i des Pi*PRi >= WPR et iPi*AAi >= WAA
- à optimiser, disons (choix peut-être à affiner) minimiser la somme de (sommes sur i des Pi*PRi) et de (sommes sur i des Pi*AAi)
12 avril 2024 à 15:11
Hello yg_be,
Merci d'avoir pris le message initiale dans une formulation qui est beaucoup plus clair pour moi (cela répond donc à la question que je me posais dans #3). Le modèle me paraît correct et rentre bien dans un solveur de programme linéaire genre PuLP. Juste quelques remarques à ce sujet :
- Si j'ai bien compris tu nommes Pi le pourcentage d'ingrédient i dans le produit final. Tes contraintes indique que le produit final doit satisfaire des critères de composition (cf tes contraintes sur WPR et WAA), et la composition est bien relié à chaque ingrédient.
- Je suspecte que l'objectif sera plutôt économiser le "coût" du produit et donc il faudrait probablement introduire le prix de chaque ingrédient (disons Ki) et minimiser sum_i Ki.Pi (aux unités près, puisque le prix sera probablement en €/g plutôt qu'en €/%). Mais bon c'est peut-être moi qui tire des conjectures hâtives, toujours est-il que c'est notamment pour ça que je demandais des précisions sur l'objectif de l'étude...