El coste de una solución producida por el
solucionador interactivo de dependencias es un valor que aptitude utiliza
para determinar cuán “mala” es una solución. Las
“mejores” soluciones siempre aparecen antes de las
“peores” soluciones. El coste de las soluciones se definen con
la opción de configuración Aptitude::ProblemResolver::SolutionCost
.
Algunos costes típicos se muestran en Ejemplo 2.1, “Ejemplo de costes del solucionador”.
Ejemplo 2.1. Ejemplo de costes del solucionador
El coste predeterminado, que orden las soluciones por su coste de seguridad, y después por su prioridad de anclaje de apt:
safety, priority
Elimina el menor número de paquetes posible, después cancela el menor número de acciones:
eliminaciones, acciones-canceladas
Ordena soluciones por el número de paquetes que eliminan además del doble del número de las acciones que cancela.
removals + 2 * canceled-actions
Como se puede ver en los ejemplos anteriores, el coste no es necesariamente
un único número. De hecho, un coste consiste de uno más
componentes del coste, siendo cada uno un número
asociado a una solución. Al ordenar las soluciones, el solucionador examina
los componentes del coste en orden, procediendo a los siguientes componentes
una vez que los anteriores son iguales. Por ejemplo, en el coste
“removals, canceled-actions
”, los soluciones
que eliminan menos paquetes siempre aparecen antes que las soluciones que
eliminan más, sin importar el número de acciones canceladas que
conllevan. Por otra parte, las soluciones con el mismo número de
eliminaciones se ordenan de manera que las acciones con menos acciones
canceladas aparecen primero.
Los componentes del coste son de dos tipos: componentes de coste básicos y componentes de coste compuestos.
Los componentes básicos simplemente nombran una propiedad de la solución,
como “upgrades
” o
“removals
”. Puede ver una lista de los
componentes básicos integrados que aptitude ofrece en Tabla 2.1, “Componentes de coste básicos”. También puede crear sus propios
componentes de coste usando las indicaciones
add-to-cost-component
y
raise-cost-component
; para más detalles consulte “Configurar indicaciones del solucionador”.
Cada componente es o bien un contador o un nivel. Los contadores enumeran cuantas acciones de una solución se corresponden con una condición (como eliminar paquetes o instalar paquetes nuevos), mientras que los niveles asocian un número con cada acción para computar el número más alto asociado con cualquier acción en la solución.
Tabla 2.1. Componentes de coste básicos
Nombre | Tipo | Descripción |
---|---|---|
broken-holds | Contador |
Cuenta el número de retenciones que la solución rompe, si es que se permite
que el solucionador los rompa (Aptitude::ProblemResolver::Allow-Break-Holds ).
|
canceled-actions | Contador | Cuenta el número de acciones pendientes que la solución cancela (esto es, mantiene los paquetes en su versión presente). |
installs | Contador | Cuenta el número de paquetes que la solución instala. |
non-default-versions | Contador | Cuenta el número de versiones que la instalación instala o actualiza desde fuentes no predeterminadas. |
priority | Nivel | Un valor que aumenta a medida que disminuye la prioridad de anclaje de apt. Específicamente, se computa haciendo negativa la prioridad de anclaje (por ejemplo, si la prioridad de anclaje es 500, este componente computará como -500). |
removals | Contador | Cuenta el número de paquetes que la solución elimina. |
removals-of-manual | Contador | Cuenta el número de paquetes manualmente instalados que la solución elimina. |
safety | Nivel | Una amplia heurística que aumenta a medida que las acciones son menos “seguras”; para más detalles consulte “Costes de seguridad”. |
upgrades | Contador | Cuenta el número de paquetes que la solución actualiza. |
Los componentes compuestos se generan combinando los valores de componentes
básicos. Por ejemplo, removals + canceled-actions
(eliminaciones + acciones canceladas) suma los componentes
removal
y canceled-actions
, resultando
en un componente que enumera el número de eliminaciones
y de acciones canceladas. Los componentes compuestos
combinan contadores mediante la suma, y escoge el nivel tomando el valor
máximo como se ve en Figura 2.11, “Sintaxis de componentes de coste compuestos”.
Nota | |
---|---|
Es un error sumar dos niveles, tomar el máximo de dos contadores, o combinar
niveles y contadores de cualquier manera. Por ejemplo, los costes
|
Figura 2.11. Sintaxis de componentes de coste compuestos
Suma dos o más costes básicos:
[escala1
]*coste1
+[escala2
]*coste2
+ ...
Toma el valor máximo de dos o más costes básicos:
max([escala1
]*coste1
,[escala2
]*coste2
, ...)
Tenga en cuenta que cada componente básico individual se puede multiplicar
por un factor de escala antes de su combinación con otros componentes. Se
puede usar para controlar las negociaciones que el solucionador realiza
entre costes. Por ejemplo, un coste de 2*removals +
3*upgrades
dice que tres eliminaciones son igualmente
“malas” que dos actualizaciones. Las soluciones que contienen
cuatro eliminaciones y una actualización se considerarán equivalentes a
soluciones que contienen una eliminación y tres actualizaciones, ya que
ambos tiene un coste de once.
El componente de coste safety
(seguridad) es una
estimación heurística de lo “segura” o “insegura”
que es una solución. Los costes de seguridad se pueden imaginar como una
forma de dividir soluciones en varios “niveles”, donde los
niveles “menos seguros” reciben número más altos. Figura 2.12, “Niveles de coste de seguridad” muestra cómo esto funciona con la
configuración predeterminada de aptitude.
Sugerencia | |
---|---|
Los niveles de coste de seguridad son sólo una forma de controlar el orden en que aparecen las soluciones de dependencia. Consulte “Costes en el solucionador interactivo de dependencias.” para una descripción completa de cómo modificar el orden en que aptitude ordena las soluciones. |
Por omisión aptitude inicia el solucionador con un conjunto “apreciable” de niveles de coste de seguridad. Éstos son:
Tabla 2.2. Niveles de coste de seguridad predeterminados
Nivel del coste | Descripción | Opción de configuración |
---|---|---|
10,000 | Las soluciones que sólo incluyen acciones “seguras” (instalar la versión predeterminada de un paquete, o mantener un paquete en su versión actual) y la eliminación de paquetes. | Aptitude::ProblemResolver::Safe-Level ,
Aptitude::ProblemResolver::Remove-Level |
10,000 |
The solution that cancels all the user's actions. It used to be higher than
Aptitude::ProblemResolver::Remove-Level ,
but removing packages was ranked higher than keeping the same packages, even
if the package was to be upgraded.
| Aptitude::ProblemResolver::Keep-All-Level |
40,000 | Soluciones que rompen retenciones definidas por el usuario o que instalan versiones prohibidas. | Aptitude::ProblemResolver::Break-Hold-Level |
50,000 |
Soluciones que instalan paquetes con versiones no predeterminadas (tales
como “experimental ”, por ejemplo).
| Aptitude::ProblemResolver::Non-Default-Level |
60,000 | Soluciones que desinstalan paquetes Esenciales. | Aptitude::ProblemResolver::Remove-Essential-Level |
Si una solución entra dentro de diferentes niveles de coste de seguridad, aparecerá en el nivel más alto (el último). Por ejemplo, una solución que actualiza un paquete a su versión predeterminada y que elimina un segundo paquete correspondería al nivel 40,000. Puede ajustar los niveles de versiones de manera individual usando las indicaciones del solucionador; para más detalles, consulte “Configurar indicaciones del solucionador”. Los niveles predeterminados se ilustran en Figura 2.12, “Niveles de coste de seguridad”.
Besides numbers you can also use the keywords
“maximum
” and
“minimum
” for cost levels. They refer to the
maximal respective minimal integer value possible on the hardware
architecture of your system.
[13] Este límite se impuso porque las estructuras de coste más complejas podían dificultar la optimización del solucionador. Puede que las versiones futuras del programa eliminen algunas de las restricciones si resultan innecesarias.