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
Nom | Type | Description |
---|---|---|
broken-holds | Compteur |
Compter le nombre de gels que la solution casse, si le solveur est autorisé
à le faire (Aptitude::ProblemResolver::Allow-Break-Holds ).
|
canceled-actions | Compteur | Compter le nombre d'actions en attente que la solution annule (en gardant des paquets dans leur version actuelle). |
installs | Compteur | Compter le nombre de paquets que la solution installe. |
non-default-versions | Compteur | Compter le nombre de versions que la solution installe ou met à jour depuis des sources qui ne sont pas celles par défaut. |
priority | Niveau |
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).
|
removals | Compteur | Compter le nombre de paquets que la solution supprime. |
removals-of-manual | Compteur | Compter le nombre de paquets installés manuellement que la solution supprime. |
safety | Niveau | 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. |
upgrades | Compteur | 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 | |
---|---|
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 |
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.
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 | |
---|---|
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ût | Description | 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.