Inscription / Connexion Nouveau Sujet
Niveau algorithmique
Partager :

répartition pourcentage

Posté par
borbag
21-07-12 à 11:44

bonjour,
J'étais déjà venu avec mon problème dans la section probabilités afin qu'on me donne le nombre de cas à étudier, et puisque ce nombre a plus de 80 chiffres, je suis à a recherche de quelques optimisations, que j'espère vous serez en mesure de me donner.

Ce problème est le suivant :

on veut mélanger N produits qui se distinguent par leurs taux en alcools, sucres, acidité etc.. de manière à répondre à un cahier des charges donnant les taux maximums et minimums de chacune de ces propriétés, et optionnellement une valeur cible dont il serait bon de se rapprocher.

Mon programme doit donc donner le pourcentage de chaque produit à introduire afin de répondre au mieux à la problématique.

ce que j'ai fait :
- une simple fonction récursive avec un for qui part du pourcentage de liquide déjà introduit jusqu'à 0, de manière à tester toutes les possibilités. Par exemple pour N = 3 on testera [100%, 0%, 0%], [99%, 0%, 1%], [99%, 1%, 0%], , [0%, 0%, 100%]
- un test de continuité, qui stop la récursivité si la solution partielle courante ne peut aboutir à un résultat cohérent (si en ne rajoutant que de l'eau on est encore trop concentré, ou si en ne rajoutant que le produit le plus concentré on est encore trop dilué)

Ce petit test de continuité m'a permis pour N=5 de passer de 1-2h de calcul à 3-4 min, donc j'étais plutôt content de moi, mais en faisant le test avec N (le logiciel doit pouvoir gérer entre 5 et 10 produits) j'ai vu que ça pouvait prendre au moins un mois de calcul, ce qui n'est bien sur pas envisageable.
Je crois qu'il y a en tout N-1 parmi 200+N-1 possibilités (je marche par pas de 0.5) ce qui fait un gros morceau pour N !

Je voulais donc savoir si il existe des méthodes générales pour améliorer mon algo, ou si vous avez une idée qui pourrait me faire avancer un peu, parce que je vais finir par manquer de feuilles de brouillon à force de réfléchir


Voici quelques éléments de réponse que l'on m'a fourni :

Marc Boyer : "Si je reformule, tu as M dimensions (Alcool, Sucre, Acide => M=3),
et un ensemble de N vecteurs avec leurs caractéristiques entre 0 et 1.

Genre
V1= [ 0.1 ; 0.4 ; 0.6 ]
V2= [ 0.1 ; 0.0 ; 0.1 ]
et le vecteur "eau"
V0 = [ 0 ; 0 ; 0 ]

Et du cherches N coefficients C1,...CN tels que
V = (Sum_i Ci * Vi) / Sum_i Ci
se rapproche le plus d'un objectif donné.

Si c'est ça le problème, ça me semble un problème d'espace vectoriel
assez simple: il faudrait identifier une base, et faire une projection
de l'objectif sur la base."

Cette réponse m'a paru très pertinente, cependant je n'ai aucune notion en espace vectoriel !

On m'a également renvoyé vers le lien wikipedia de l'optimisation quadratique, et j'avoue ne pas avoir su l'exploiter, par manque de connaissances mathématiques, mais également parce que mon problème gère non pas des égalités mais des inégalités.


Merci de m'avoir lu.
Cordialement,
Borbag

Posté par
jamo Moderateur
re : répartition pourcentage 21-07-12 à 13:06

Bonjour,

avant d'attaquer la résolution de ce genre de problème, il faut tout d'abord bien le poser, afin que cela soit clair pour tout le monde.
N'oublie pas que toi, tu travailles dans ce domaine, donc tu en entends parler tous les jours.

Il faut donc que cela soit clair au niveau des données de ton problème, ainsi que les objectifs à atteindre, savoir ce que l'on cherche.
Si les choses ne sont pas bien posées, on peut en discuter pendant des mois, puis une nouvelle information peut tout remettre en cause.

Bon, commençons par examiner les données.
Tu dis qu'on possède N produits, et qu'ils sont mélangés.
On pourrait par exemple appeler p1, p2, p3, ..., pN les proportions de chacun de ces produits dans le mélange final. (il faut aussi décider si ce sont des proportions en masse ou en volume)

Cela nous donnerait donc les N inconnues du problème, ce sont donc ces valeurs qu'on cherche.
Mais comme la somme de ces N valeurs est égale à 1 (100%), alors en fait, il n'y a que N-1 inconnues.

Posté par
jamo Moderateur
re : répartition pourcentage 21-07-12 à 13:13

Maintenant, quelles sont les contraintes ?

Examinons le problème avec une seule contrainte pour l'instant, par exemple on veut que le taux d'alcool du mélange soit entre un mini et un maxi.

Il faut donc établir une fonction qui calcule le taux d'alcool du mélange à partir des proportions p1, p2, ... pN, ainsi que des taux d'alcool de chaque produit présente dans le mélange.
Cette fonction n'est pas trop difficile à écrire.
Appelons A cette fonction (A comme alcool), dans laquelle il y a N-1 variables : p1, p2, ... pN-1 (car PN se déduit des N-1 valeurs précédentes comme je l'ai expliqué).
Cette fonction retourne le taux d'alcool du mélange : A(p1,p2, ...,pN-1).

Nous cherchons donc les valeurs des N-1 variables pour que le taux d'alcool soit compris entre un mini et un maxi.

Voyons maintenant quelles méthodes utiliser ...

Posté par
jamo Moderateur
re : répartition pourcentage 21-07-12 à 13:19

Partons sur un méthode simple, une méthode par balayage.

Déjà, il serait intéressant de connaitre vraiment cette valeur de N, c'est-à-dire combien de produits peut-on mélanger au maximum ??
Si c'est de 2 à 5 produits, une méthode par balayage me semble raisonnable.
Si c'est à partir de 10, 20, ... alors là cela ne sera plus possible !

Et c'est bien pour cela que je disais qu'il fait bien examiner le problème, car selon le nombre de variables, les méthodes utilisées ne sont pas les mêmes.
Inutile de prévoir une méthode qui peut travailler avec 50 variables si on n'en aura au final que 5 : la méthode employée risque d'être inefficace.

Sinon, le principe par balayage est simple, c'est celui dont tu parlais dans ton autre topic, et tu cherchais à savoir combien de tests cela représentait.
Mais plutôt que de balayer de 1 en 1, pourquoi ne pas balayer plus grossièrement, de 10 en 10 par exemple, ce qui réduira énormément les calculs.
Ensuite, une fois que tu sais dans quelle dizaine tu te situes pour chaque produit, alors tu affines en faisant de 1 en 1.

Voilà pour la méthode par balayage.
L'inconvénient, c'est qu'on n'est pas certain de ne pas louper la zone où se situe la solution, selon le pas employé.

Posté par
jamo Moderateur
re : répartition pourcentage 21-07-12 à 13:23

Maintenant, passons à d'autres méthodes.

Tu connais peut-être la méthode de Newton, qui permet de résoudre une équation numériquement.
Il faut savoir qu'elle existe aussi en multi-dimensions, c'est-à-dire si la fonction dépend de plusieurs variables.
Par contre, la méthode de Newton nécessite de calculer la dérivée de la fonction par rapport aux variables. Mais là, vu la tête de la fonction, qui est linéaire selon chaque variable si je ne dis pas de bêtise, cela est facile à faire.

Il existe aussi des méthodes qui permettent de se passer du calcul des dérivées, mais du moment qu'on peut les obtenir, je pense qu'il est préférable de le faire.

Posté par
jamo Moderateur
re : répartition pourcentage 21-07-12 à 13:28

Bon, voilà donc rapidement brossé quelques méthodes pour résoudre le problème dans le cas où on cherche à trouver une valeur cible pour l'alcool.

Mais comment faire si on veut aussi trouver une valeur cible pour le sucre par exemple ?

On peut procéder de la manière suivante ...

De la même manière, appelons S la fonction qui donne le taux de sucre en fonction des variables d'entrée p1, p2, ...

Appelons A0 le taux d'alcool recherché et S0 le taux de sucre recherché.

Alors il suffit de définir la fonction : f(p1,p2,...) = (A-A0)²+(S-S0)²

Et ensuite, il faut chercher le minimum de cette fonction, car dans l'idéal elle sera égale à 0 lorsque A est égal à A0 ET lorsque S sera égal à S0.

Et on peut ainsi généraliser à autant de valeurs cibles qu'on veut.

Posté par
borbag
re : répartition pourcentage 21-07-12 à 14:06

Bonjour et merci de ta réponse.

Tout d'abord je ne travaille pas du tout dans ce domaine, j'ai donc dis tout ce que je savais en des termes non techniques, et il sera difficile pour moi d'apporter plus de précisions. Cependant voici quelques réponses à ce que tu disais.

Est ce que les données sont maniées suivant leur masse ou leur volume ?
ça n'a pas d'importance, moi meme je ne le sais pas, ce sont juste des nombres. j'ai par exemple un produit ayant 1000 en valeur pour son parametre TAV. je ne sais pas ce qu'est le TAV, je ne sais pas en quelle unité sont ces 1000, mais je n'en ai pas besoin, puisque je connais la valeur mini (par ex 800) et la valeur maxi (par ex 1200) et je sais si 1000 est bien entre la valeur mini et la valeur maxi.


Quelles sont les contraintes sur les parametres ?
Après avoir fait la somme pour un parametre dans chaque produit pondérée par le pourcentage inséré de chacun de ces produits, j'obtiens la valeur du parametre pour le mélange final, et je peux dès lors savoir si il répond au cahier des charges, ni plus ni moins.
Comme je l'ai expliqué dans mon message initial, j'ai déjà fait le programme qui procède par balayage de toutes les solutions, j'ai donc déjà une fonction capable de savoir si le mélange répond au cahier des charges. J'ai aussi une fonction qui stop le balayage si le début de solution que l'on est entrain d'étudier (par exemple [ 13 %, 15 %, 2%, X1, X2, X3] avec X1 X2 X3 qui vont varier) peut encore mener à un mélange répondant au cahier des charges.


Pour combien de produits cela doit il marcher ?
J'ai précisé que cela devait pouvoir fonctionner pour un nombre de produits variant entre 5 et 10. pour 5, la méthode par balayage pourrait convenir, avec un peu d'optimisation, mais pour 10 je ne pense pas.


quant à la méthode de Newton :
Je ne connais pas du tout cette méthode, et je ne sais pas de quelle fonction à dériver il est question, peux tu m'en dire un peu plus ? est ce qu'il est "facile" (dans le sens de la complexité informatique) de trouver le minimum de la fonction donnant une somme de carrés de différences ?


Je te remercie de t'intéresser à mon problème, l'approche mathématique dont je ne suis pas forcément capable pourrait je pense s'avérer bien utile.
Cordialment,
Borbag

Posté par
jamo Moderateur
re : répartition pourcentage 21-07-12 à 14:41

Imaginons une méthode par balayage avec 10 variables et un pas de 1.

Il faut donc imbriquer 10 boucles "for" :
pour i1 = 0 à 100
pour i2 = 0 à 100-i1
pour i3 = 0 à 100-i1-i2
pour i4 = 0 à 100-i1-i2-i3
etc...

Bon, pour dénombrer tout cela, imaginons que toutes les boucles aillent de 0 à 100, cela donne 10010 cas en tout, c'est-à-dire 1020, soit un nombre à 20 chiffres.
(bon, c'est une majoration car les boucles ne vont pas toutes de 0 à 100, mais ça donne un ordre de grandeur quand même).
Et en effet, même si les calculs et tests à effectuer sont rapides et simples pour chaque cas, le temps de calcul n'est pas raisonnable !

Mais maintenant, imaginons qu'on fasse un balayage non plus avec un pas de 1 mais un pas de 10.
Le nombre de cas possible est alors divisé par 10 pour chaque boucle, ce qui donne un nombre total de cas égal 1010, soit 10 milliard.
Comme ma manière de compter majore le nombre de cas, je pense qu'il est de l'ordre du milliard.
Et je ne sais pas en quoi tu veux programmer ceci, mais il se pourrait que cela soit raisonnable.

Posté par
LeDino
re : répartition pourcentage 21-07-12 à 14:47

Ton problème est une optimisation sous contrainte.
Tu dois minimiser l'écart à ta cible, en respectant un jeu de contraintes.

Selon la forme de la fonction à optimiser, et la forme des contraintes, il existe des algorithmes "tout faits", issus de la branche des mathématiques appelée "recherche opérationnelle".
Si tu n'as pas accès à ces outils et que tu dois te débrouiller avec ton bagage (dont nous ignorons le contenu...), tu peux procéder par balayage systématique, mais en le faisant de manière astucieuse.

Si la fonction cible est "régulière" (voire idéalement convexe), c'est à dire si elle est bien lisse et ne se déforme pas dans tous les sens... alors converger vers une solution supposée unique est beaucoup plus facile.

Tu peux affiner ta stratégie de balayage d'au moins deux manières :

1. En adaptant le "pas" à mesure que tu avances.
Au début, tu considères une maille de recherche assez large pour "cartographier" ta fonction dans sa globalité. Ensuite, tu cibles sur les zones prometteuses en réduisant la maille. Et tu recommences, sur des régions de plus en plus petites.
Cette méthode est assez "généraliste" et convient schématiquement plus à un informaticien.

C'est un peu la généralisation en dimension "n", du jeu du "plus petit plus grand", où la stratégie optimale est de diviser par deux à chaque itération, la taille de l'espace restant à explorer.

2. Sous certaines conditions, tu peux concevoir un algorithme de recherche "intelligent" :
Tu orientes chaque itération suivante dans le sens "le plus prometteur" pour ta fonction à optimiser : il s'agit d'une méthode de type "gradient"... Tu calcules le gain réalisé sur ta fonction en faisant varier un peu chaque paramètre, et tu orientes ta recherche en suivant la direction qui est supposée améliorer le plus ta fonction.

Cette méthode marche si ta fonction est très régulière, car elle revient à considérer que ta fonction est proche de son approximation linéaire.
Elle demande un certain savoir faire (calcul de la direction à suivre, gestion des contraintes, unicité de la solution, extremums locaux...).

Posté par
jamo Moderateur
re : répartition pourcentage 21-07-12 à 14:48

Ensuite, je voulais aussi te signaler que le problème auquel tu es confronté, si on le prend sous sa forme générale, c'est-à-dire un problème d'optimisation mutli-dimensionnel, avec plusieurs variables, plusieurs contraintes, est très très très compliqué !

Il existe des tonnes de manuels sur ces problèmes, avec des dizaines de méthodes, ...

Et s'il existe plusieurs méthodes, c'est tout simplement parce qu'il n'existe pas de méthode universelle qui marche tout le temps pour tout type de problème.

Pour moi, un des gros soucis de ce genre de problème, c'est déjà qu'on n'est même pas certain qu'il existe une solution qui satisfasse toutes les conditions, et de plus qu'il est possible qu'il existe plusieurs solutions !
Et dans ces cas-là, comment prévoir ce problème d'existence et d'unicité de solution dans le programme, comment traiter ces situations ?

Moi, je te conseillerais dans un premier temps de travailler avec un exemple simple, et d'essayer de le dérouler "à la main".

Essaie déjà de prendre par exemple 3 ou 4 produits, ce qui fera autant de variables, et une seule fonction cible, par exemple le taux d'alcool du mélange sous la forme d'une fonction des 3 ou 4 variables.

Il faut donc déjà que tu formalises ce problème, que tu écrives la fonction, cela te permettra de bien t'approprier le problème, de voir de quoi tu vas avoir besoin.

Je pense que pour un tél problème, il faut l'aborder simplement, puis le complexifier petit à petit, plutôt que de vouloir l'attaquer sous sa forme la plus générale tout de suite.
Sinon, le risque est de mal modéliser la situation, de programmer une méthode mal adaptée, que le programme se plante pour on ne sait quelle raison, ce qui demandera un temps énorme de rectification et de recherche d'un problème.

Posté par
LeDino
re : répartition pourcentage 21-07-12 à 14:49

Bonjour Jamo,
Désolé pour le téléscopage de réponses ...

Posté par
LeDino
re : répartition pourcentage 21-07-12 à 15:02

Pour aller dans le sens de Jamo, je recommande également une solution simple et carrée, en commençant sur des dimensions raisonnables.

La première démarche que j'ai suggérée, qu'on pourrait appeler "crible convergent", me semble celle qui est le plus à ta portée. Elle se comprend simplement et a de bonnes chances de na pas rater un optimum local si ta fonction est régulière.

Premier cycle :
Tu fais un maillage avec des dimensions raisonnables.
Tu appliques ton filtre de contraintes.
Tu évalues ta fonction.
Tu obtiens ainsi :
une première cartographie de points acceptables (au sens des contraintes),
un premier maximum provisoire,
et une indication des zones les plus intéressantes (c'est à dire proches du maximum provisoire).

Dans la suite, tu passes au cycle 2 en explorant la ou les zones à potentiel, avec un maillage plus fin.

Au cycle 2, tu pourras décider d'abandonner certaines régions candidates et tu te focaliseras sur les régions prometteuses. Après quelques cycles, tu devrais aboutir à un maillage suffisamment fin pour être à peu près cetain d'être très proche de l'optimum local.

Posté par
borbag
re : répartition pourcentage 21-07-12 à 15:05

@Jamo :
je marche par pas de 0.5, et comme je l'ai dit, j'ai déjà fait le programme pour les 5 paramètres qu'on m'a donné (TAV, Sucres, Tanins, Alcools, Acides) et ce pour N produits. Je le fais tourner pour 5 produits sans aucun problème. je suis apssé de 5 à 10 produits, et je passe de 3min de calculs à (à vue de nez) plus d'un mois ! Je programme en C, mais j'aurais aussi pu le faire en python ou en Java, ça n'a pas d'importance. Si il n'y a pas de solution je demande juste à l'utilisateur de revoir son cahier des charges et d'agrandir le segment mini-maxi. il y a très souvent plusieurs solutions, car souvent deux solutions très proches conviennent (à 0.5% près c'est vite fait) mais mon programme est capable de calculer un indice représentant l'écart au mélange cible, pondéré par des facteurs d'importance donnés au paramètres, et il est donc capable de classer les solutions. Je donne les 10 meilleures au cas où l'utilisateur préférerait pour des raisons logistiques (la totalité d'une cuve à utiliser ou autre) choisir une solution non optimale.

@Ledino :
Je suis entrain d'essayer de coder quelque chose ressemblant au "plus ou moins" : je pars avec une répartition équitable (25% 25% 25% 25% pour 4 produits) et j'augmente ou diminue de moitié la quantité du premier produit en répartissant le reste du volume équitablement sur les autres, tant que je tombe sur des solutions meilleurs que les précédentes, je fais de meme avec le second produit etc.. C'est juste une idée, je ne sais pas combien de fois il est nécessaire de refaire la manip pour tomber sur une "bonne solution" (à définir..).
Ensuite, quand tu parles d'une fonction cible, je ne sais pas laquelle c'est. Comment sortir une fonction mathématique de tout cela afin de savoir si elle est bien pour la méthode de type "gradient" ?

Posté par
borbag
re : répartition pourcentage 21-07-12 à 15:08

cette histoire de maillage m'a l'air pas bete du tout, je vais voir comment implémenter ça, merci

Posté par
borbag
re : répartition pourcentage 21-07-12 à 15:18

@Ledino :

quant à mes bagages, je viens de terminer une Licence en informatique, et je n'ai aucune connaissance en recherche opérationnelle. Cependant, tant que ça ne me demande pas des mois d'apprentissage, je suis pret à élargir mes connaissances ! Je peux utiliser tous les outils à ma portée, ce n'est pas dans le cadre scolaire, ni d'un stage, c'est juste la mère d'un ami qui voudrait ce logiciel pour l'aider dans son travail. (enfin il y a quand même un billet a/r pour la californie à la clé pour moi :p)

Posté par
LeDino
re : répartition pourcentage 21-07-12 à 15:25

Ce que j'appelle la fonction "cible" c'est celle que tu veux minimiser.

C'est la "distance" entre le réalisé que tu obtiens avec une série de paramètres, et la valeur objectif qu'on t'a fixé et dont tu veux te rapprocher le plus possible.

Si tu as plusieurs objectifs cibles, tu peux calculer une fonction de distance (comme l'a indiqué jamo dans un post précedent). Si les objectifs ont des priorités différentes, tu peux également les pondérer dans ton calcul de distance.

Posté par
LeDino
re : répartition pourcentage 21-07-12 à 15:30

Un "détail"... J'ai comme un doute :

Ton problème, c'est de trouver des jeux de paramètres qui satisfont toutes les contraintes (parce que c'est rare) ?
Ou c'est de trouver le meilleur jeu de pramètres parmi de vastes possibiités ?

J'ai sutout répondu dans le sens de la deuxième interprétation.
Si ton problème, c'est surtout le respect des contraintes, c'est un peu différent.

Posté par
borbag
re : répartition pourcentage 21-07-12 à 15:34

on me donne des produits avec leurs parametres, par exemple :


produit1 : TAV_1, Sucres_1, Tanins_1, Acides_1, Alcools_1
...
produitN : TAV_N, Sucres_N, Tanins_N, Acides_N, Alcools_N

et moi je rends seulement des pourcentages de chque produit à mettre :

produit1 : X_1 %
...
produitN : X_N %

et il peut y avoir 0 possibilités comme des centaines, ça dépend des produits qu'on passe en paramètre et du cahier des charges.
Je dois donc donner les 10 meilleurs solutions si elles existent.

Posté par
borbag
re : répartition pourcentage 21-07-12 à 15:37

je vois ce qu'est la fonction, je l'ai déjà codée, c'est la fonction qui me donne un "indice de qualité" qui est  la distance à la valeur cible, pondéré par le coefficient d'importance des parametres. C'est ce que j'utilise pour savoir si une solution est meilleure qu'une autre. Effectivement je peux la traduire en une fonction mathématique. est ce qu'elle t'intéresse ?

Posté par
LeDino
re : répartition pourcentage 21-07-12 à 15:40

Comment définis-tu les "meilleures solutions" ?

Quand tu as 0 possibilités, cela veut-il dire, comme je l'interprète, qu'aucune série de pourcentages ne permet de satisfaire toutes les contraintes ?

Auquel cas, tu dois juste répondre : "aucune formulation respectant les ocntraintes", et c'est fini ?


Quand tu as des centaines de possibilités, tu dois choisir les meilleures ? Selon quel critère ?

Posté par
LeDino
re : répartition pourcentage 21-07-12 à 15:41

J'ai eu à 15h37 la réponse à ma question de 15h40 !

Posté par
LeDino
re : répartition pourcentage 21-07-12 à 15:44

OK.

Ton indice de qualité ressemble exactement à la distance que j'ai évoquée pus haut (et dont parlait déjà jamo). C'est bon signe.

On est bien d'accord que tu cherches à minimier cette fonction, en respectant les contraintes ?

Est-ce que seule la distance aux valeurs cibles entre en jeu dans ta fonction ?

Posté par
borbag
re : répartition pourcentage 21-07-12 à 15:51

Tu as bien compris.

Je vais t'expliquer comment je calcule la distance à la solution :

d'abord nommons quelques variables :

Vp est la valeur d'un parametre après pondération par le pourcentage de produit inséré.
par exemple pour un mélange à trois produits j'ai une solution : [X_1%, X_2%, X_3%], Vp pour le parametre Sucres vaudra somme(X_N/100 * taux de sucres dans produit_N)

Vm est la valeur minimum que doit atteindre Vp (trouvée dans le cahier des charges)
VM est la valeur maximum que doit atteindre Vp (trouvée dans le cahier des charges)
Vc est la valeur cible dont Vp doit se rapprocher (trouvée dans le cahier des charges)

Xvc = 100 * (Vc-Vm)/(VM-Vm)
Xp =  100 * (Vp-Vm)/(VM-Vm)

Ip = | Xp - Xvc |

l'indice correspond à la somme des Ip, un Ip par parametre (TAv, Sucres...), la somme pouvant etre pondérée si on donne plus d'importance à certains parametres.

la meilleure solution est celle pour qui pour tout Vp, Vm <= Vp <= VM, et qui a le plus petit indice.




précisions :
si Vc n'est pas renseignée dans le cahier des charges, on prend la moyenne entre Vm et VM.
si Vm n'est pas renseignée dans le cahier des charges, on prend la valeur minimale du parametre parmis tous les produits mélangés.
inversement pour VM.

Posté par
borbag
re : répartition pourcentage 21-07-12 à 15:54

tout à fait, priorité n°1 : respecter le cahier des charges, ensuite sélection par l'indice de la meilleur solution. Ce sont les seules données qui m'intéressent.

Posté par
LeDino
re : répartition pourcentage 21-07-12 à 16:04

Dans ce cas, pourquoi ne pas raisonner "à l'envers" ?

Tu pars de la cible théorique : la série ces (Vc).
Tu la filtres sous contraintes.
Si les contraintes sont toutes OK, tu vas te coucher .

Sinon, tu calcules un "dépassement de contrainte" pour chaque paramètre hors contrainte.

Et ensuite tu déplaces ton vecteur de (Vp) dans le sens le plus prometteur pour minimiser le dépassement de contraintes.

A creuser...

Posté par
borbag
re : répartition pourcentage 21-07-12 à 16:06

qu'est ce que filtrer sous contrainte ?
le dépassement de contrainte correspond à mes Ip ?
déplacer mon vecteur Vp, comment savoir quel pourcentage de produit changer et dans quel sens ?

Posté par
LeDino
re : répartition pourcentage 21-07-12 à 16:19

"filtrer" ici, veut dire évaluer les contraintes pour chaque paramètre.

Sauf qu'au lieu de calculer simplement si elles sont OK ou pas, tu vas plus loin dans le cas où elles ne sont pas satisfaites : tu calcules plus précisémet de combien elles dépassent.

Le dépassement ne correspond pas à tes Ip qui mesurent la distance à la cible et qui mesure la qualité au sens de la proximité à la cible.

Le dépassement mesure ce qui te manque pour respecter les contraintes. Ce serait plutôt un écart entre Vp et VMax (et respectivement entre Vp et Vmin).

Pour savoir ensuite de combien déplacer les pourcentages pour satisfaire les contraintes, celà dépend de la forme des contraintes (et de leurs interactions). Mais tu n'es pas obligé de trouver "du premier coup". Ce qu'il te faut c'est une "direction à suivre" pour diminuer le dépassement de contrainte tout en t'éloignant le moins possible de la cible (qui ici est ton point de départ puisque tu prends le problème à l'envers ...).

Posté par
LeDino
re : répartition pourcentage 21-07-12 à 16:21

... et je rappelle (à tout hasard) que ce qui précède est juste une piste de réflexion, pas ue solution générale à un problème qui est très vaste ...

Posté par
borbag
re : répartition pourcentage 21-07-12 à 16:21

Je te remercie, je vais réfléchir à ça à tete reposée, avec un crayon, une feuille de brouillon, et je te donnerai des nouvelles quand je l'aurai implémenté !

Posté par
LeDino
re : répartition pourcentage 21-07-12 à 16:21

Prends quelques cas simples si tu en as...
Bon courage !

Posté par
borbag
re : répartition pourcentage 21-07-12 à 16:32

enfait plus je relis et moins c'est clair. ma valeur Cible est fixe, et respecte toujours la contrainte.

tu me dis de partir à l'envers, c'est à dire de partir de la valeur cible. et là je dois évaluer les contraints pour chaque paramètre. ils sont forcément OK, puisque j'ai la valeur cible pour point de départ. et je ne fais pas le rapport avec la quantité de chacun des produits..

J'ai peut etre mal interprété ce que tu disais ?

Posté par
LeDino
re : répartition pourcentage 21-07-12 à 16:43

Citation :
J'ai peut etre mal interprété ce que tu disais ?

Ou c'est moi ! Lol !

Je pense que je me suis planté.
J'ai lu très sommairement les échanges...
En fait tu ne maîtrise pas les Vp, mais les quantités de produits, qui elles te fournissent ensuite les Vp, c'est quelque chose coe ça ?

...

Ce que j'ai dit sur le crible reste valable.
L'idée du dépassement de contrainte reste potentiellement intéressante.
En revanche, ma piste d'algorithme ne fonctionne pas.
Du moins pas en l'état...

Posté par
borbag
re : répartition pourcentage 21-07-12 à 16:55

Oui c'est ça ^^

si je savais trouver les pourcentages grace aux Vp, je les chercherai directement depuis Vc et ce serait bouclé ! ^^

Je vais donc m'intéresser à ton crible et à mon plus ou moins.

"Premier cycle :
Tu fais un maillage avec des dimensions raisonnables."
qu'appelles tu raisonnable ?

"Tu appliques ton filtre de contraintes."
récupérer les Ip ?

"Tu évalues ta fonction."
Là c'est obscur !

"Tu obtiens ainsi :
une première cartographie de points acceptables (au sens des contraintes),
un premier maximum provisoire,
et une indication des zones les plus intéressantes (c'est à dire proches du maximum provisoire)."

Posté par
LeDino
re : répartition pourcentage 21-07-12 à 17:31

Tu as N produits.

Les quantités de produits peuvent varier dans un espace de dimension N.
Ton maillage initial est "raisonnable" si il te conduit à un nombre raisonnable (calculable) d'itérations.

Evaluer tes contraintes c'est calculer les Vp à partir des concentrations de produits (si j'ai compris tes notations). Mieux qu'un filtre ("je rejette si je suis hors contraintes pour un Vp"), tu calcules un "dépassement" de contrainte, pour chaque contrainte.

Evaluer ta fonction, c'est calculer tes Ip puis leur synthèse pondérée (toujours si j'ai bien compris).

Si ça c'est OK pour toi, alors la suite devrait être plus claire.

Si tu as des solutions viables (respectant les contraintes), alors tu t'intéresses aux zones pour lesquelles ta fonction (les Ip) est la meilleure et tu recommences avec un maillage pus fin sur cette zone. C'est le mode "facile" (le problème admet des solutions, et tu choisis la meileure).

Si tu n'as pas de solutions viables, tu t'intéresses aux zones dont les dépassements de contraintes sont les plus faibles. Ce sont probablement les zones où tu as le plus de chance de trouver des slutions viables. C'est le mode "dur" : tu as du mal à trouver des solutions qui satisfont les contraintes, et ça déplace la nature du problème.

Posté par
borbag
re : répartition pourcentage 23-07-12 à 11:40

Bonjour !

Je me suis inspiré de ta méthode par maillage, j'ai fait la chose suivante :

au lieu de tester toutes les possibilités avec un pas de 0.5, je cherche avec un pas de 10, et je garde les 10 meilleurs. ces valeurs sont arbitraires et surement à ajuster.

ensuite je recommence mais au lieu de chercher entre 0 et 100 avec un pas de 10, je cherche entre la solution trouvée avec - le précédent pas et cette meme solution + le précédent pas, avec un pas deux fois plus petit, et ce pour les 10 solutions. De cela je retire encore une fois les 10 meilleures solutions.

Je réitere la manoeuvre jusqu'à ce que mon pas soit assez petit.

ça me donne une réponse instantanée pour N= 5. J'attends des exemples concrets pour N=10 pour vérifier, parce que mes résultats m'ont l'air étranges là dessus.

En tout cas merci pour cette idée !

Posté par
LeDino
re : répartition pourcentage 23-07-12 à 13:48

Cool !
Ca a l'air quand même bien parti...

Les deux types de difficultés que tu peux rencontrer :

1. Que la fonction (synthèse des Ip) soit irrégulière...
... et qu'elle connaisse de ce fait des "sauts" importants qui t'échapperaient parce que ton maillage de départ est trop large. Tu sembles à l'abris de ce cas. Mais il faut savoir que ça peut arriver dans l'absolu : ce que tu trouves sera toujours un "pseudo optimum" et tu ne seras jamais certain qu'il n'y en ait pas un meilleur qui t'ait échappé dans une des "grosses mailles" que tu as écartées au premier cycle...

Ca n'est pas forcément gênant, si ce "pseudo optimum" trouvé présente une qualité suffisante pour l'utilisateur (voire une qualité idéale en respectant parfaitement toutes les cibles, auquel cas il y aurait plusieurs optimums, ce qui n'est pas pour te déplaire...).

Au pire, si tu n'es pas satisfait de ce pseudo optimum, tu peux relancer la recherche sur les mailles écartées au début, avec un pas plus fin, afin de vérifier si tu ne trouves pas un "meilleur pseudo optimum". Ca coutera du temps de calcul, mais ça ne devrait être nécessaire que dans une minorité de cas, donc c'est un moindre mal...

2. Que les contraintes soient difficiles à satisfaire...
... et que ton maillage initial ne te fournisse aucune solution de départ viable.
Auquel cas, il faudra siouxer, en affinant le maillage, et en recherchant en priorité dans les zones où le "dépassement de contrainte" est moindre...

Celà dit, la bonne nouvelle pourrait venir de la forme de ta fonction et de la forme des contraintes. Je ne connais pas ton problème en détail, mais il se peut qu'il ait une "bonne tête" bien régulière, et peut-être même convexe à souhait... Auquel cas, l'algorithme que tu prépares à de belles chances d'aboutir efficacement. C'est tout le mal que je te souhaite...

Bonne suite ...
Et bon voyage aux States !

Posté par
borbag
re : répartition pourcentage 23-07-12 à 14:29

oui je me butte à quelques difficultés (0 solution trouvée quand je sais qu'il y en a :s) mais je pense etre sur un bon truc =)

Je te remercie beaucoup, j'écrirai une dédicace "pour Ledino" dans le sable de Santa Cruz



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !