Aller au contenu

Le fil des geeks informatiques


Messages recommandés

  • 2 weeks later...
Posté

Dsl nope, par contre j'ai fais un peu d'optimisation mais décidément je suis pas très doué pour et j'ai du écrire une fois ma propre version du simplexe, c'est pour quelle question ?

Posté

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...)

Posté
  Le 25/09/2018 à 13:46, Anton_K a dit :

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...)

Expand  

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. 

Posté
  Le 25/09/2018 à 16:06, Kassad a dit :

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. 

Expand  

 

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.

Posté
  Le 25/09/2018 à 17:10, Anton_K a dit :

 

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.

Expand  

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.

Posté
  Le 25/09/2018 à 18:51, Noob a dit :

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

Expand  

 

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.

Posté
  Le 25/09/2018 à 19:14, Anton_K a dit :

 

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.

Expand  

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 ?

Posté
  Le 25/09/2018 à 21:21, Noob a dit :

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 ?

Expand  

 

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.

Posté
  Le 25/09/2018 à 22:18, Anton_K a dit :

 

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.

Expand  

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.

Posté
  Le 26/09/2018 à 00:14, Noob a dit :

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.

Expand  

 

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).

  • 1 month later...
Posté

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 ?

Posté
  Le 23/11/2018 à 16:56, NoName a dit :

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 ?

Expand  

=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.

Posté

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".)

Posté

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 

Posté

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.

Posté

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 

Posté
  Le 23/11/2018 à 21:49, NoName a dit :

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 

Expand  

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.

Posté
  Le 23/11/2018 à 18:01, 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".)

Expand  

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:

Posté

Le futur appartient aux bases de données graphes. Quand j'aurais pondu une sémantique formelle de SPARQL on pourra même faire des preuves de correction d'algos comme pour parcour-sup. 

Posté
  Le 23/11/2018 à 22:53, Rincevent a dit :

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:

Expand  

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

Posté
  Le 24/11/2018 à 07:09, Mathieu_D a dit :

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

Expand  

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
Posté
  Le 24/11/2018 à 07:29, Rincevent a dit :

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

Expand  

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

Posté
  Le 24/11/2018 à 07:32, Mathieu_D a dit :

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

Expand  

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. ;)

Posté
  Le 23/11/2018 à 22:10, 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.

Expand  

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

Posté
  Le 24/11/2018 à 07:56, NoName a dit :

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

Expand  

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 ? 

Posté
  Le 24/11/2018 à 07:46, Rincevent a dit :

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. ;)

Expand  

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.

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...