-
Notifications
You must be signed in to change notification settings - Fork 25
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix milp bug #2489
base: develop
Are you sure you want to change the base?
Fix milp bug #2489
Conversation
Quality Gate passedIssues Measures |
static_cast<uint>(std::ceil(thermalClusterProduction | ||
/ currentCluster->nominalCapacityWithSpinning))); | ||
static_cast<uint>( | ||
std::ceil(std::round(thermalClusterProduction |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
le ceil est-il nécessaire après l'arrondi?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oui parce qu'en faisant le round sur des valeurs multipliées par 1000000 on obtient bien un nombre entier mais après on divise par 1000000 donc la valeur n'est pas entière. Le round est là pour arrondir à la 7ème décimale et non à un nombre entier
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pourquoi utiliser le facteur 1000000 (1e6) ? A-t-il une signification particulière ?
C'est juste un nombre arbitrairement grand. On pourrait tout à fait choisir un nombre entre 1e4 et 1e8. |
Ce problème d'arrondi des solutions du solveur se pose à d'autres endroits dans la code (en amont des heuristiques thermiques par exemple), à chaque fois qu'on fait un ceil sur des variables de sortie du solveur, il faut d'abord arrondir pour éviter que 1.0000000001 ne devienne 2. |
Problème constaté par Amine sur le MILP avec Xpress. L'erreur est du à un mauvais ceiling sur des valeurs égales à n+10^-10 qui deviennent n+1 avec le ceil au lieu de n.