Aller au contenu

Le fil des geeks informatiques


Johnnieboy

Messages recommandés

  • 2 weeks later...

Cplex renvoie des solutions sous optimales. Après avoir regardé la tête du modèle exporté, le problème ne vient pas d´une erreur sur la fonction maximisée. Après examen il y a en fait incohérence entre la valeur de la solution prétendument optimale telle que rapportée par le solver (surestimée) et telle que calculée à la main

 

edit : bon je crois avoir trouvé, c’est pas cplex, je pense que ça a à voir avec une troncature dans la récupération de la solution (cplex donne parfois à un problème en nombre entier des solutions non entières à un 10^(-15) près...)

Lien vers le commentaire
2 hours ago, Anton_K said:

Cplex renvoie des solutions sous optimales. Après avoir regardé la tête du modèle exporté, le problème ne vient pas d´une erreur sur la fonction maximisée. Après examen il y a en fait incohérence entre la valeur de la solution prétendument optimale telle que rapportée par le solver (surestimée) et telle que calculée à la main

 

edit : bon je crois avoir trouvé, c’est pas cplex, je pense que ça a à voir avec une troncature dans la récupération de la solution (cplex donne parfois à un problème en nombre entier des solutions non entières à un 10^(-15) près...)

C'est un problème qui passe près puis loin de 0 ? Comme les précisions ne sont pas les mêmes aux alentours de 0 qu'ailleurs parfois ça peut avoir des réactions inattendues suivant le système à résoudre. 

Lien vers le commentaire
46 minutes ago, Kassad said:

C'est un problème qui passe près puis loin de 0 ? Comme les précisions ne sont pas les mêmes aux alentours de 0 qu'ailleurs parfois ça peut avoir des réactions inattendues suivant le système à résoudre. 

 

Non, c'est une fonction à valeur vectorielle linéaire sur chaque composante, composantes à maximiser sur un sous-ensemble convexe de {0,1}^n, si c'est ta question. Dans l'espace des images il ne se passe rien de bizarre, on pousse vers le haut à droite. Le problème sembait juste être que (dans certaines instances, aucune idée pourquoi) si une composante de la solution (pas de son image) était approchée même très près, elle était tronquée parce que je manipulais chaque composante comme un entier (ayant spécifié que je voulais une solution entière). Du coup 0.9999999999 devient 0 et la valeur de la solution calculée à la main ne correspond plus.

 

Donc finalement rien de mystérieux.

Lien vers le commentaire
1 hour ago, Anton_K said:

 

Non, c'est une fonction à valeur vectorielle linéaire sur chaque composante, composantes à maximiser sur un sous-ensemble convexe de {0,1}^n, si c'est ta question. Dans l'espace des images il ne se passe rien de bizarre, on pousse vers le haut à droite. Le problème sembait juste être que (dans certaines instances, aucune idée pourquoi) si une composante de la solution (pas de son image) était approchée même très près, elle était tronquée parce que je manipulais chaque composante comme un entier (ayant spécifié que je voulais une solution entière). Du coup 0.9999999999 devient 0 et la valeur de la solution calculée à la main ne correspond plus.

 

Donc finalement rien de mystérieux.

Mais dans ce cas tu devrais pas choisir un algo dédié aux nombres entiers ? Rajouter la contrainte des entiers est pas anodin du tout et peut faire qu'une bonne partie du travail effectué par le solver sur des nombres décimaux compte pour du beurre.

Lien vers le commentaire
19 minutes ago, Noob said:

Mais dans ce cas tu devrais pas choisir un algo dédié aux nombres entiers ? 

 

C’est ce que je fais justement, mais cplex utilise quand même des relaxations de ces contraintes aboutissant aux approximations décrites avant, et des solutions de type double même quand tu demandes explicitement une solution entière. Après oui je pourrais utiliser une autre implémentation du simplexe, c’est peut-être ce que je finirai par faire mais d’abord je vais voir si on peut paramétrer cplex pour l’empêcher de prendre ces raccourcis fâcheux. Ou sinon j’arrondis a posteriori bien sûr.

Lien vers le commentaire
1 hour ago, Anton_K said:

 

C’est ce que je fais justement, mais cplex utilise quand même des relaxations de ces contraintes aboutissant aux approximations décrites avant, et des solutions de type double même quand tu demandes explicitement une solution entière. Après oui je pourrais utiliser une autre implémentation du simplexe, c’est peut-être ce que je finirai par faire mais d’abord je vais voir si on peut paramétrer cplex pour l’empêcher de prendre ces raccourcis fâcheux. Ou sinon j’arrondis a posteriori bien sûr.

Ok, c'est bizarre parce que normalement ça fait partie du job que de chercher à relaxer les contraintes sauf qu'il n'est pas supposer s'arrêter là. Tu sais si la solution qu'il te donne est optimale dans le cas des nombres décimaux ?

Lien vers le commentaire
56 minutes ago, Noob said:

Ok, c'est bizarre parce que normalement ça fait partie du job que de chercher à relaxer les contraintes sauf qu'il n'est pas supposer s'arrêter là. Tu sais si la solution qu'il te donne est optimale dans le cas des nombres décimaux ?

 

Non la solution rendue n’est pas optimale pour la relaxation linéaire, c’est vraiment une approximation de la solution au problème en nombres entiers. A mon avis elle est obtenue en dualisant (si ça te parle) certaines contraintes, dont peut être les contraintes d’entièreré. D’où le fait qu’on ait un tout petit écart (« duality  gap ») mais qu’on tende quand même vers une solution entière et optimale pour le problème entier.

Lien vers le commentaire
2 hours ago, Anton_K said:

 

Non la solution rendue n’est pas optimale pour la relaxation linéaire, c’est vraiment une approximation de la solution au problème en nombres entiers. A mon avis elle est obtenue en dualisant (si ça te parle) certaines contraintes, dont peut être les contraintes d’entièreré. D’où le fait qu’on ait un tout petit écart (« duality  gap ») mais qu’on tende quand même vers une solution entière et optimale pour le problème entier.

Ok. Je comprends en partie ce qu'est le problème dual, mais il me semblait que dans le cas linéaire le gap disparait si tu as atteint une solution optimale et ça servait même de critère d'arrêt. Dans le cas des entiers je me souviens plus trop. Il me semblait que le gap persistait.

Car de mémoire on peut se figurer géométriquement les deux espaces de solutions comme des formes qui vont se toucher là ou la solution est optimal. Un peu comme deux pyramides posées l'une sur l'autre sur leurs pointes. Si on inclut des contraintes d'entièreté on dégrade forcément la solution optimale. (à moins que la solution entière soit aussi une solution linéaire). Du coup si on veut garder un gap de zéro il faut que la solution du dual soit améliorée. Mais ça parait absurde vu qu'on avait une solution optimale avant.

Sinon ça signifierait que les contraintes d'entièreté du primal sont des relaxations pour le dual. Et il me semblait pas que c'était le cas. Du coup selon moi il était normal d'avoir un gap en travaillant avec des entiers. Mais ça commence à dater, et j'ai pas vraiment toucher au MIP, plutôt à la prog linéaire.

 

EDIT j'ai bien l'impression que je me suis gouré du coup.

Lien vers le commentaire
4 hours ago, Noob said:

Ok. Je comprends en partie ce qu'est le problème dual, mais il me semblait que dans le cas linéaire le gap disparait si tu as atteint une solution optimale et ça servait même de critère d'arrêt. Dans le cas des entiers je me souviens plus trop. Il me semblait que le gap persistait.

Car de mémoire on peut se figurer géométriquement les deux espaces de solutions comme des formes qui vont se toucher là ou la solution est optimal. Un peu comme deux pyramides posées l'une sur l'autre sur leurs pointes. Si on inclut des contraintes d'entièreté on dégrade forcément la solution optimale. (à moins que la solution entière soit aussi une solution linéaire). Du coup si on veut garder un gap de zéro il faut que la solution du dual soit améliorée. Mais ça parait absurde vu qu'on avait une solution optimale avant.

Sinon ça signifierait que les contraintes d'entièreté du primal sont des relaxations pour le dual. Et il me semblait pas que c'était le cas. Du coup selon moi il était normal d'avoir un gap en travaillant avec des entiers. Mais ça commence à dater, et j'ai pas vraiment toucher au MIP, plutôt à la prog linéaire.

 

EDIT j'ai bien l'impression que je me suis gouré du coup.

 

Non tu as raison quant au fait que théoriquement pour un problème continu le saut de dualité est nul, alors qu’en nombre entier il peut être théoriquement irréductible. D’une part je ne suis pas certain que c’est une solution duale qui est donnée, d’autre part j’utilisais le mot duality gap abusivement vu qu’on est bien dans le cas continu. Le problème de « l’écart » dans le cas continu n’est pas théorique mais dans le choix de la méthode de résolution, certaines méthodes permettent de s’approcher arbitrairement sans dépasser l’optimal en mettant à jour le pas de modification de la solution mais leur critère d’arrêt n’est pas l’annulation du terme dual (désolé je décris ça de moins en moins précisément car je ne suis même pas sûr que c’est ce qui explique le résultat).

Lien vers le commentaire
  • 1 month later...

hola braves gens,

 

j'ai encore besoin d'aide auprès des spécialistes d'excel:

J'ai un tableau pleins de colonnes comme ça: 

1
- Banane
- Poisson
- Tomate
- Banane
- Viande
- Pomme
- Tomate
- Poisson
-Viande
- Poisson
- Banane

est-ce qu'il est possible de faire en sorte que excel me sorte le nombre d'occurrence de chaque truc ?

Lien vers le commentaire
38 minutes ago, NoName said:

hola braves gens,

 

j'ai encore besoin d'aide auprès des spécialistes d'excel:

J'ai un tableau pleins de colonnes comme ça: 

1
- Banane
- Poisson
- Tomate
- Banane
- Viande
- Pomme
- Tomate
- Poisson
-Viande
- Poisson
- Banane

est-ce qu'il est possible de faire en sorte que excel me sorte le nombre d'occurrence de chaque truc ?

=nb.si(plage de recherche;cellule dont tu recherches les occurrences dans la plage)

Mais du coup ça marche mieux si t'as qu'une seule valeur par cellule.

Peut être que mettre une chaîne de caractères en second paramètre fonctionne aussi, de tête je saurais pas dire.

Lien vers le commentaire

Ha les joies d'Excel.

En plus je suis sûr qu'il n'y a pas de pattern et qu'on ne peut pas compter les puces par case pour arrriver au résultat voulu. (Ni les mots directement je parie sur la présence de la chaîne "des bananes".)

Lien vers le commentaire

En fait j'ai un tableau de trucs que j'ai essayé de standardisé en maximum je dois compter les occurences de chaque dans chaque ligne sauf que j'ai 14 * 12 cases avec plusieurs items par case, j'ai pas trop envie de me taper ça à la main 

Lien vers le commentaire

Tu peux pas faire ça autrement qu'avec Excel ? Si t'as les données en texte pure le notebook python que je t'avais envoyé devrais faire ça.

 

Sinon une piste car je ne connais rien du tout à Excel.

Premièrement en admettant que tu connaisses  tous les mots.

Tu fais une colonne pour chaque cellule. Et dans chaque colonne tu utilises une ligne pour chaque mot différent. Chaque cellule de cette colonne test si dans la cellule x,y la chain abc s'y trouve.

Tu te retrouves donc avec un tableau de 1 ou de 0 et il te reste à faire la somme par ligne.

Lien vers le commentaire
19 minutes ago, NoName said:

Mmh en effet c'est pas con, je sais pas si je vais faire exactement ça mais je vais découper je pense item par item pour chaque colonne et faire les comptes colonnes par colonnes 

Si tu peux diviser les cellules oui c'est plus facile. Mais je pensais que tu voulais aussi éviter de te taper tout ça à la main.

Lien vers le commentaire
Il y a 4 heures, Mathieu_D a dit :

Ha les joies d'Excel.

En plus je suis sûr qu'il n'y a pas de pattern et qu'on ne peut pas compter les puces par case pour arrriver au résultat voulu. (Ni les mots directement je parie sur la présence de la chaîne "des bananes".)

La vraie supériorité du SQL, c'est qu'il donne aux techos un argument béton pour envoyer se faire foutre les gens qui te donnent des données pourries comme ça, et pour faire porter sur eux le coût de leur nettoyage. :mrgreen:

Lien vers le commentaire
8 hours ago, Rincevent said:

La vraie supériorité du SQL, c'est qu'il donne aux techos un argument béton pour envoyer se faire foutre les gens qui te donnent des données pourries comme ça, et pour faire porter sur eux le coût de leur nettoyage. :mrgreen:

Tiens en passant, Redshift ou Athena pour mon client aujourd'hui sur Oracle ?

Lien vers le commentaire
il y a 19 minutes, Mathieu_D a dit :

Tiens en passant, Redshift ou Athena pour mon client aujourd'hui sur Oracle ?

Hmmm je vais me renseigner (parce que je suppose que la réponse "quitter Oracle", toujours pertinente, ne convient pas à ton client). ;)

  • Yea 1
  • Haha 1
Lien vers le commentaire
1 minute ago, Rincevent said:

Hmmm je vais me renseigner (parce que je suppose que la réponse "quitter Oracle", toujours pertinente, ne convient pas à ton client). ;)

Si si c'est le cas pour l'analytique. Mais on va garder Oracle pour l'opérationnel.

Lien vers le commentaire
il y a 5 minutes, Mathieu_D a dit :

Si si c'est le cas pour l'analytique. Mais on va garder Oracle pour l'opérationnel.

Garder Oracle est toujours la mauvaise réponse, toujours. 

 

Pour Athena ou Redshift, ça depend du besoin. Si ses besoins sont simples (genre des trucs de reporting classique sur des données pas toujours structurées pour commerciaux itinérants), plutôt Athena. Mais si ses données sont bien structurées, vraiment massives (peta-scale), avec des besoins d'analyses poussées (genre, besoin d'UDFs en Python), alors Redshift.

 

Mais c'est dit rapidement, ça ne vaut pas une vraie étude... que tu pourrais lui facturer. ;)

Lien vers le commentaire
Il y a 9 heures, Noob a dit :

Si tu peux diviser les cellules oui c'est plus facile. Mais je pensais que tu voulais aussi éviter de te taper tout ça à la main.

Oui mais considérant que tous les points commencent par "- " il doit bien y avoir une commande pour les séparer automatiquement en cellules 

Lien vers le commentaire
8 minutes ago, NoName said:

Oui mais considérant que tous les points commencent par "- " il doit bien y avoir une commande pour les séparer automatiquement en cellules 

Mais tu peux pas faire un global find replace et mettre des  "," à la place des "-" et ça te fait un beau fichier format csv que tout logiciel digne de ce nom peut traiter automatiquement ? 

Lien vers le commentaire
28 minutes ago, Rincevent said:

Garder Oracle est toujours la mauvaise réponse, toujours. 

 

Pour Athena ou Redshift, ça depend du besoin. Si ses besoins sont simples (genre des trucs de reporting classique sur des données pas toujours structurées pour commerciaux itinérants), plutôt Athena. Mais si ses données sont bien structurées, vraiment massives (peta-scale), avec des besoins d'analyses poussées (genre, besoin d'UDFs en Python), alors Redshift.

 

Mais c'est dit rapidement, ça ne vaut pas une vraie étude... que tu pourrais lui facturer. ;)

On a un timing de péremption de licence à tenir, en vision cible on a conseillé Snowflake. Pour tenir le timing soit Redshift soit un outil de virtualisation.

Lien vers le commentaire

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...