Costes en el solucionador interactivo de dependencias.

Costes y componentes del coste
Costes de seguridad

Costes y componentes del coste

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

NombreTipoDescripción
broken-holdsContador 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-actionsContador Cuenta el número de acciones pendientes que la solución cancela (esto es, mantiene los paquetes en su versión presente).
installsContador Cuenta el número de paquetes que la solución instala.
non-default-versionsContador Cuenta el número de versiones que la instalación instala o actualiza desde fuentes no predeterminadas.
priorityNivel 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).
removalsContador Cuenta el número de paquetes que la solución elimina.
removals-of-manualContador Cuenta el número de paquetes manualmente instalados que la solución elimina.
safetyNivel Una amplia heurística que aumenta a medida que las acciones son menos seguras; para más detalles consulte “Costes de seguridad”.
upgradesContador 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]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 removals + safety y max(upgrades, installs) se tomarán como errores, y el solucionador los ignorará.[13]

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.

Costes de seguridad

Figura 2.12. Niveles de coste de seguridad

Niveles de coste de seguridad
[Safety cost levels diagram]

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]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 costeDescripciónOpció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.