Jump to content

Проблема выбора вида деятельности

Проблема выбора действий — это задача комбинаторной оптимизации, касающаяся выбора неконфликтных действий для выполнения в течение заданного периода времени с учетом набора действий, каждое из которых отмечено временем начала (s i ) и временем окончания (fi ) . Проблема состоит в том, чтобы выбрать максимальное количество действий, которые может выполнить один человек или машина , предполагая, что человек может одновременно работать только над одним действием. Проблема выбора активности также известна как проблема максимизации интервального планирования (ISMP) , которая представляет собой особый тип более общей проблемы интервального планирования .

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

Формальное определение

[ редактировать ]

что существует n действий, каждое из которых представлено временем начала s i и временем окончания fi . Предположим , Два действия i и j называются неконфликтными, s i f j или s j fi если . Задача выбора действий состоит в нахождении максимального множества решений (S) неконфликтных действий, или, точнее, не должно существовать множества решений S' такого, что |S'| > |С| в случае, когда несколько максимальных решений имеют одинаковые размеры.

Оптимальное решение

[ редактировать ]

Проблема выбора деятельности примечательна тем, что использование жадного алгоритма для поиска решения всегда приводит к оптимальному решению . Ниже приведен эскиз псевдокода итерационной версии алгоритма и доказательство оптимальности его результата.

Алгоритм

[ редактировать ]
Greedy-Iterative-Activity-Selector(A, s, f): 

    Sort A by finish times stored in f
    S = {A[1]} 
    k = 1
    
    n = A.length
    
    for i = 2 to n:
        if s[i]  f[k]: 
            S = S U {A[i]}
            k = i
    
    return S

Объяснение

[ редактировать ]

Строка 1: Этот алгоритм называется Greedy-Iterative-Activity-Selector , потому что это прежде всего жадный алгоритм, а затем итеративный. Существует также рекурсивная версия этого жадного алгоритма.

  • представляет собой массив, содержащий действия .
  • представляет собой массив, содержащий время начала действий в .
  • представляет собой массив, содержащий время окончания действий в .

Обратите внимание, что эти массивы индексируются от 1 до длины соответствующего массива.

Строка 3: Сортировка по возрастанию времени завершения массива действий. используя время окончания, хранящееся в массиве . Эту операцию можно выполнить в время, используя, например, алгоритмы сортировки слиянием, сортировки кучей или быстрой сортировки.

Строка 4: Создает набор для сохранения выбранных действий и инициализирует их с помощью действия у которого самое раннее время окончания.

Строка 5: Создает переменную который отслеживает индекс последнего выбранного действия.

Строка 9: Начинает итерацию со второго элемента этого массива. до его последнего элемента.

Строки 10,11: Если время начала принадлежащий активность ( ) больше или равно времени финиша последнего выбранного действия ( ), затем совместим с выбранными видами деятельности в наборе , и поэтому его можно добавить к .

Строка 12: Индекс последнего выбранного действия обновляется до только что добавленного действия. .

Доказательство оптимальности

[ редактировать ]

Позволять быть набором действий, упорядоченных по времени окончания. Предположим, что является оптимальным решением, также упорядоченным по времени завершения; и что индекс первой активности в A равен , т. е. это оптимальное решение не начинается с жадного выбора. Мы покажем это , который начинается с жадного выбора (действие 1), является еще одним оптимальным решением. С , а действия в A непересекающиеся по определению, действия в B также непересекающиеся. Поскольку B имеет то же количество активностей, что и A , то есть , B также является оптимальным.

После того как жадный выбор сделан, задача сводится к поиску оптимального решения подзадачи. Если A — оптимальное решение исходной задачи S, содержащее жадный выбор, то является оптимальным решением проблемы выбора деятельности .

Почему? Если это не так, выберите решение B ' для S ' с большим количеством действий, чем A ', содержащее жадный выбор для S '. Тогда добавление 1 к B ′ даст допустимое решение B к S с большим количеством действий, чем A , что противоречит оптимальности.

Задача выбора взвешенной активности

[ редактировать ]

Обобщенная версия проблемы выбора действий предполагает выбор оптимального набора непересекающихся действий таким образом, чтобы общий вес был максимальным. В отличие от невзвешенной версии, не существует жадного решения проблемы выбора взвешенной активности. Однако решение динамического программирования можно легко сформировать, используя следующий подход: [1]

Рассмотрим оптимальное решение, содержащее активность k . Теперь у нас есть непересекающиеся действия слева и справа от k . Мы можем рекурсивно найти решения для этих двух наборов благодаря оптимальной подструктуре. Поскольку мы не знаем k , мы можем попробовать каждое из действий. Этот подход приводит к решение. Это можно дополнительно оптимизировать, учитывая, что для каждого набора действий в , мы могли бы найти оптимальное решение, если бы знали решение для , где t — последний непересекающийся интервал с j в . Это дает решение. Это можно дополнительно оптимизировать, учитывая тот факт, что нам не нужно учитывать все диапазоны. но вместо этого просто . Таким образом, следующий алгоритм дает решение:

Weighted-Activity-Selection(S):  // S = list of activities

    sort S by finish time
    opt[0] = 0  // opt[j] represents optimal solution (sum of weights of selected activities) for S[1,2..,j]
   
    for i = 1 to n:
        t = binary search to find activity with finish time <= start time for i
            // if there are more than one such activities, choose the one with last finish time
        opt[i] = MAX(opt[i-1], opt[t] + w(i))
        
    return opt[n]
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 78f596ed1ad12315edea1cf94ebfdff3__1628738700
URL1:https://arc.ask3.ru/arc/aa/78/f3/78f596ed1ad12315edea1cf94ebfdff3.html
Заголовок, (Title) документа по адресу, URL1:
Activity selection problem - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)