Skip to content
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

Open
wants to merge 4 commits into
base: develop
Choose a base branch
from
Open

Fix milp bug #2489

wants to merge 4 commits into from

Conversation

Juliette-Gerbaux
Copy link
Contributor

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.

static_cast<uint>(std::ceil(thermalClusterProduction
/ currentCluster->nominalCapacityWithSpinning)));
static_cast<uint>(
std::ceil(std::round(thermalClusterProduction
Copy link
Contributor

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?

Copy link
Contributor Author

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

Copy link
Member

@flomnes flomnes left a 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 ?

@Juliette-Gerbaux
Copy link
Contributor Author

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.

@Juliette-Gerbaux
Copy link
Contributor Author

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants