Coûts dans la résolution interactive de dépendances

Coûts et composantes de coût
Coût de sécurité

Coûts et composantes de coût

Le coût d'une solution produite par la résolution interactive est une valeur qu'aptitude utilise pour mesurer la « mauvaise qualité » de la solution. Les solutions les « meilleures » sont toujours affichées en premier. Le coût d'une solution est défini dans l'option de configuration Aptitude::ProblemResolver::SolutionCost.

Quelques coûts typiques sont donnés dans Exemple 2.1, « Exemples de coût pour le solveur ».

Exemple 2.1. Exemples de coût pour le solveur

Le coût par défaut, pour lequel les solutions sont classées suivant leur coût de sécurité, puis par leur priorité d'épinglage apt :

safety, priority

Retirer le moins de paquets possible, puis annuler le moins d'actions possible :

removals, canceled-actions

Classer les solutions en fonction d'un score donné par le nombre de paquets qu'elles suppriment (« removals ») plus deux fois le nombre d'actions qu'elles annulent (« cancelled-actions »).

removals + 2 * canceled-actions

Comme dans les exemples précédent, un coût n'est pas nécessairement un simple nombre. En fait, un coût consiste en une ou plusieurs composantes de coût, chacune étant un nombre associé à une solution. Lors du classement des solutions, le solveur examine les composantes de coût dans l'ordre, en passant aux composantes suivantes seulement si les précédentes sont égales. Par exemple, dans le coût « removals, canceled-actions », les solutions avec le moins de suppressions apparaissent toujours avant les autres, indépendamment du nombre d'actions qu'elles annuleraient. Cependant, des solutions avec le même nombre de suppressions sont classées dans l'ordre croissant du nombre d'actions annulées.

Les composantes de coût sont de deux types : les élémentaires et les composées.

Les composantes élémentaires nomment simplement une propriété de la solution, telle que le nombre de mises à jour (« upgrades ») ou le nombre de suppressions (« removals »). La liste des composantes élémentaires intégrées dans aptitude peut être trouvée dans Tableau 2.1, « Composantes de coût élémentaires ». Vous pouvez aussi créer vos propres composantes de coût en utilisant les indicateurs add-to-cost-component et raise-cost-component. Consultez la section intitulée « Configuration des indicateurs du solveur » pour les détails.

Chaque composante de coût élémentaire est soit un compteur, soit un niveau. Les compteurs comptent combien de conditions d'un certain type sont satisfaites par les actions d'une solution (telles que l'installation ou la suppression de paquets), alors que les niveaux associent un nombre à chaque action et renvoient le plus grand de ces nombres attachés à chaque action de la solution.

Tableau 2.1. Composantes de coût élémentaires

NomTypeDescription 
broken-holdsCompteur Compter le nombre de gels que la solution casse, si le solveur est autorisé à le faire (Aptitude::ProblemResolver::Allow-Break-Holds).
canceled-actionsCompteur Compter le nombre d'actions en attente que la solution annule (en gardant des paquets dans leur version actuelle).
installsCompteur Compter le nombre de paquets que la solution installe.
non-default-versionsCompteur Compter le nombre de versions que la solution installe ou met à jour depuis des sources qui ne sont pas celles par défaut.
priorityNiveau Une valeur qui augmente lorsque la priorité d'épinglage apt d'une version diminue. Précisément, elle est calculée en prenant l'opposée de la priorité d'épinglage (par exemple, si la priorité d'épinglage vaut 500, cette composante vaut -500).
removalsCompteur Compter le nombre de paquets que la solution supprime.
removals-of-manualCompteur Compter le nombre de paquets installés manuellement que la solution supprime.
safetyNiveau Une valeur heuristique qui augmente lorsqu'une action devient moins « sûre » ; consultez la section intitulée « Coût de sécurité » pour plus de détails.
upgradesCompteur Compter le nombre de paquets que la solution met à jour.

Les composantes composées sont construites en combinant les valeurs des composantes élémentaires. Par exemple, removals + canceled-actions fait la somme des composantes élémentaires removal et canceled-actions, pour aboutir à une composante qui compte le nombre de suppressions et d'actions annulées. Les composantes composées combinent les compteurs en les ajoutant et les niveaux en prenant leur maximum, comme dans Figure 2.11, « Syntaxe des composantes de coût composées ».

[Note]Note

Ajouter deux niveaux, prendre le maximum de deux compteurs ou combiner des niveaux et des compteurs de quelque manière que ce soit est considéré comme une erreur. Par exemple, les coûts removals + safety et max(u(upgrades, installs) seront considérés comme erronés et ignorés par le solveur.[13]

Figure 2.11. Syntaxe des composantes de coût composées

Ajouter deux (ou plus) composantes élémentaires :

                [facteur1*]coût1 + [facteur2*]coût2 + ...
              

Prendre le maximum de deux (ou plus) composantes de coûts élémentaires :

                max([facteur1]*coût1, [facteur2*]coût2, ...)
              

Remarquez que chaque composante élémentaire peut être multipliée par un facteur avant d'être combinée avec d'autres composantes. Cela peut être utilisé pour contrôler les compromis que le solveur fait entre les coûts. Par exemple, un coût de 2*removals + 3*upgrades signifie que trois suppressions sont exactement aussi mauvaises que deux mises à jour. Une solution contenant quatre suppressions et une mise à jour sera considérée comme étant équivalente à une contenant une suppression et trois mises à jour, puisque qu'elles ont toutes les deux un coût égal à 11.

Coût de sécurité

Figure 2.12. Niveaux de coût de sécurité

Niveaux de coût de sécurité
[diagramme des niveaux de coût de sécurité]

La composante de coût safety (« sécurité ») est une estimation heuristique du fait qu'une solution est plus ou moins « sûre ». Les coûts de sécurité peuvent être pensés comme une façon de diviser les solutions en différents « niveaux » étiquetés par des nombres, les niveaux les « moins sûrs » ayant les nombres les plus grands. Figure 2.12, « Niveaux de coût de sécurité » montre comment cela fonctionne avec les réglages par défaut d'aptitude.

[Astuce]Astuce

Les niveaux de coût de sécurité sont juste une façon de contrôler l'ordre dans lequel les solutions aux problèmes de dépendances sont proposées. Consultez la section intitulée « Coûts dans la résolution interactive de dépendances » pour une description complète sur la façon dont aptitude classe les solutions.

Par défaut, aptitude initialise le solveur avec un ensemble « raisonnable » de niveaux de coût de sécurité. Ceux-ci sont :

Tableau 2.2. Niveaux de coût de sécurité par défaut

Niveau de coûtDescription Option de configuration
10 000 Solutions qui contiennent uniquement des actions « sûres » (installation de la version candidate d'un paquet ou conservation d'un paquet dans sa version actuelle) et des suppressions de paquets. Aptitude::ProblemResolver::Safe-Level, Aptitude::ProblemResolver::Remove-Level
10 000 La solution qui annule toutes les actions de l'utilisateur. Elle avait précédemment un nombre de points supérieur à Aptitude::ProblemResolver::Remove-Level, mais supprimer des paquets avait plus de points que garder les mêmes paquets, même si le paquet devait être mis à jour. Aptitude::ProblemResolver::Keep-All-Level
40 000 Solutions qui cassent les gels créés par l'utilisateur ou installent des versions interdites. Aptitude::ProblemResolver::Break-Hold-Level
50 000 Solutions qui installent des paquets depuis des sources autres que celles par défaut (comme depuis « experimental » par exemple). Aptitude::ProblemResolver::Non-Default-Level
60 000 Solutions qui suppriment des paquets essentiels. Aptitude::ProblemResolver::Remove-Essential-Level

Si une solution peut être classée dans plusieurs niveaux, elle sera placée dans le plus élevé, c'est-à-dire celui qui sera affiché en dernier. Par exemple, une solution qui met à jour un paquet à sa version candidate, et qui casse un gel sur un autre paquet sera placée au niveau 40 000. Vous pouvez ajuster les niveaux des versions individuelles en utilisant des indications du solveur. Consultez la section intitulée « Configuration des indicateurs du solveur » pour les détails. Les niveaux par défaut sont illustrés dans Figure 2.12, « Niveaux de coût de sécurité ».

En plus des nombres, il est aussi possible d'utiliser les mots clés « maximum » et « minimum » pour les niveaux de coût. Ils se réfèrent respectivement à la valeur entière la plus grande et la plus petite possible sur l'architecture matérielle de votre système.



[13] La limite a été imposée car des structures de coût plus complexes pourraient rendre difficile l'optimisation du solveur. Les versions futures du programme pourraient supprimer certaines des restrictions si elles s'avéraient superflues.