Стоимость в интерактивном решателе зависимостей

Стоимости и стоимостные компоненты
Стоимости безопасности

Стоимости и стоимостные компоненты

Стоимость решения, выводимая интерактивным решателем зависимостей, является значением, используемым aptitude для определения того, насколько «плохим» является некоторое решение. «Более хорошие» решения отображаются перед «более плохими» решениями. Стоимость решения определяется параметром настройки Aptitude::ProblemResolver::SolutionCost.

Некоторая типичная стоимость приведена в Пример 2.1, «Примеры стоимости решателя».

Пример 2.1. Примеры стоимости решателя

Стоимость по-умолчанию, сортировка по их стоимости безопасности, затем по их приоритету apt:

safety, priority

Удалить как можно меньше пакетов, затем отменить как можно меньше действий:

removals, canceled-actions

Отсортировать решения по числу удаляемых пакетов плюс двойное число отменяемых действий.

removals + 2 * canceled-actions

Как видно из приведённых выше примеров, стоимость не является с необходимостью «единичным» числом. Фактически, стоимость состоит из одного или более стоимостных компонентов, каждый из которых является числом, ассоциированным с решением. Когда решатель сортирует решения, он рассматривает стоимостные компоненты по порядку, переходя к более поздним компонентам только в том случае, если ранние компоненты равны. Например, в стоимости «removals, canceled-actions», решения с наименьшим числом удалений всегда будут отображаться перед решениями с большим числом удалений независимо от того, сколько в них отменяемых действий. Тем не менее, решения с одинаковым числом удалений сортируются так, что решения с наименьшим числом отменяемых действий отображаются первыми.

Стоимостные компоненты могут быть двух вариантов: базовые стоимостные компоненты и составные стоимостные компоненты.

Базовые компоненты просто именуют некоторое свойство решения, такое как «обновления» или «удаления». Список встроенных базовых компонентов, предоставляемый aptitude может быть найден в Таблица 2.1, «Базовые стоимостные компоненты». Вы можете также создать свои собственные стоимостные компоненты, используя подсказки add-to-cost-component и raise-cost-component; подробности см. в разделе «Настройка подсказок решателя».

Каждый базовый компонент является либо счётчиком, либо уровнем. Счётчики считают то, сколько действий решения удовлетворяют некоторому условию (такому как удаление пакетов или установка новых пакетов), в то время как уровни ассоциируют число со всяким действием и вычисляют наибольшее число, ассоциируемое со всяким действием в решении.

Таблица 2.1. Базовые стоимостные компоненты

ИмяТипОписание
broken-holdsСчётчик Считает число фиксаций, ломаемых решением, если решателю разрешено ломать фиксации (Aptitude::ProblemResolver::Allow-Break-Holds).
canceled-actionsСчётчик Считает число ожидаемых действий, отменяемых решением (сохранение пакет в их текущих версиях).
installsСчётчик Считает число пакетов, устанавливаемых решением.
non-default-versionsСчётчик Считает число версий, устанавливаемых или обновляемых из источников не по-умолчанию.
priorityУровень Значение, которое возрастает при снижении у версии пакета приоритета apt. Точнее, оно вычисляется отрицанием приоритета (так, например, если приоритет равен 500, этот компонент будет равен -500).
removalsСчётчик Считает число пакетов, удаляемых решением.
removals-of-manualСчётчик Считает число установленных вручную пакетов, удаляемых решением.
safetyУровень Широкое эвристическое значение, которое возрастает в том случае, когда действия становятся наименее «безопасными»; подробности см. в разделе «Стоимости безопасности».
upgradesСчётчик Считает число пакетов, обновляемых решением.

Составные компоненты получаются путём комбинации значений базовых компонентов. Например, removals + canceled-actions складывает компоненты removal и canceled-actions, в результате получается компонент, который считает число удалений и отменяемых действий. Сложные компоненты комбинируют счётчики, складывая их вместе, и уровни, беря их максимальное значение, как это показано в Рисунок 2.11, «Синтаксис составных стоимостных компонент».

[Примечание]Примечание

Складывать два уровня неправильно, а также брать максимум двух счётчиков или каким-то образом комбинировать уровни и счётчики. Например, стоимость removals + safety и max(upgrades, installs) будут считаться ошибками и будут игнорироваться решателем.[13]

Рисунок 2.11. Синтаксис составных стоимостных компонент

Сложить два или более значения стоимости:

                [множитель1]*стоимость1 + [множитель2]*стоимость2 + ...
              

Принять максимальное значение двух или более базовых стоимости:

                max([множитель1]*стоимость1, [множитель2]*стоимость2, ...)
              

Заметьте, что каждый отдельный базовый компонент может быть умножен на коэффициент до его объединения с другими компонентами. Это может быть использовано для управления компромиссами стоимости. Например, стоимость 2*removals + 3*upgrades говорит о том, что три удаления в точности так же «плохи» как два обновления. Решения, содержащие четыре удаления и одно обновление, будут рассматриваться как эквивалентные решениям, содержащим одно удаление и три обновления, поскольку стоимость обоих типов решений равна одиннадцати.

Стоимости безопасности

Рисунок 2.12. Уровни стоимости безопасности

Уровни стоимости безопасности
[диаграмма уровней стоимости]

Компонент стоимости безопасности является эвристической оценкой того, насколько «безопасно» или «небезопасно» некоторое решение. Стоимости безопасности могут рассматриваться как способ разделения решений на несколько нумерованных «уровней», где «менее безопасным» уровням назначаются более высокие числа. Рисунок 2.12, «Уровни стоимости безопасности» демонстрирует, как это работает с настройками aptitude по-умолчанию.

[Подсказка]Подсказка

Уровни стоимости безопасности являются способом управления порядком, согласно которому выводятся решения зависимостей. Полное описание того, как изменять порядок сортировки решений aptitude, см. в разделе «Стоимость в интерактивном решателе зависимостей».

По-умолчанию, aptitude инициализирует решатель с «приемлемым» набором уровней стоимости безопасности. Это следующие уровни:

Таблица 2.2. Уровни стоимости безопасности по-умолчанию

Уровень стоимостиОписаниеПараметры настройки
10,000 Решения, включающие лишь «безопасные» действия (установка для пакета цели по-умолчанию или сохранение текущей версии пакета) и удаления пакетов. Aptitude::ProblemResolver::Safe-Level, Aptitude::ProblemResolver::Remove-Level
10,000 Решение, отменяющее все действия пользователя. Оно обычно имеет больший вес, чем Aptitude::ProblemResolver::Remove-Level, но удаление пакетов всегда имеет больший вес, чем сохранение тех же пакетов, даже если этот пакет должен был быть обновлён. Aptitude::ProblemResolver::Keep-All-Level
40,000 Решения, которые ломают фиксации, установленные пользователем, или устанавливают запрещённые версии. Aptitude::ProblemResolver::Break-Hold-Level
50,000 Решения, которые устанавливают версии не по-умолчанию (такие, как например, «экспериментальные»). Aptitude::ProblemResolver::Non-Default-Level
60,000 Действия, которые удаляют пакеты первой необходимости. Aptitude::ProblemResolver::Remove-Essential-Level

Если решение соответствует нескольким уровням стоимости безопасности, оно будет помещено на самый высокий уровень, то есть, тот, что появился последним. Например, решение, обновляющее один пакет до его версии по-умолчанию и ломающее фиксацию другого пакета, будет помещено на уровень 40,000. Вы можете настроить уровни индивидуальных версий, используя руководство по решателю; подробности см. в разделе «Настройка подсказок решателя». Уровни по-умолчанию иллюстрируются в Рисунок 2.12, «Уровни стоимости безопасности».

Помимо чисел для уровней стоимости можно использовать ключевые слова «maximum» и «minimum». Они обозначают, соответственно, максимально и минимальное целочисленное значение, возможное на архитектуре вашей системы.



[13] Был установлен этот предел, так как более комплексные стоимостные структуры могли бы затруднить оптимизацию решателя. В будущих версиях программы некоторые ограничения, если они окажутся излишними, могут быть удалены.