Задача одного станка

 

На одном станке нужно обработать 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-оптимальная последовательность.