Задача одного станка |
||
На одном станке нужно обработать n деталей. Время обработки k-той детали Tk. Штраф за простой детали в очереди ak. Требуется установить очередность обработки деталей такую, чтобы общий штраф был минимален. Т=Sk Tk Величина штрафа зависит от очередности tk(Sn)-время ожидания обработки детали номер k при очередности заданной перестановкой Sn. Sn=<[1],[2],...,[k],...,[n]> [k]-число стоящее на k-м месте перестановки. Sn=<3,1,4,2> [1]=3 [2]=1 [3]=4 [4]=2 tk(Sn)=tk-1(Sn)+T[k-1] T1(Sn)=0, T[k-1]- продолжительность обработки k-1 детали Т.о. задача состоит в определении перестановки Sn, при которой f(Sn)=Saktk(Sn) будет min. Вместо прямого перебора используют т.н. решающие правила, которые позволяют найти оптимальное решение без перебора. Для задачи одного станка оно гласит: Перестановка Sn=<[1],...[r],...[n]> является оптимальной, если выполнено условие a[1]/T[1]>=a[2]/T[2]>=...a[n]/T[n] 1.Вычисляем для каждой детали а[k]/T[k] 2.Упорядочиваем элементы линейной последовательности в порядке убывания a[k]/T[k] 3. Печатаем номера деталей [1],[2],... Доказательство: проводим методом перестановки соседних элементов. Пусть Sn=<[1],[2],...[i],[j],... [n]>- оптимальное решение. Поменяем местами i и j , это дает Sn=<[1]<[2],...[j],[i],...n>. Для оптимального решения f(Sn)<=f(Sn). Пусть t- время начала обработки i-то детали в перестановке i-той детали в Sn, j-той детали в Sn. Тогда f(Sn)=C+ait+aj(t-Ti) f(Sn)=C+ajt+ai(t+Tj) Подставляя это в неравенство, получаем ait+aj(t+Ti)<=ajt+ai(t+Tj), отсюда следует ,что ajTi<=aiTj. Так как Tk>0 для всех к, то можно поделить на Т. Получаем ai/Ti>=aj/Ti-оптимальная последовательность. |
||