J2ni2Cmax — различия между версиями
Zemskovk (обсуждение | вклад) |
Zemskovk (обсуждение | вклад) |
||
Строка 4: | Строка 4: | ||
*Дано <tex>n</tex> работ и <tex>2</tex> станка. | *Дано <tex>n</tex> работ и <tex>2</tex> станка. | ||
*Для каждой работы известно её время выполнения на каждом станке <tex>p_{ij}</tex>. | *Для каждой работы известно её время выполнения на каждом станке <tex>p_{ij}</tex>. | ||
− | *Для каждой работы известна последовательность <tex>O_{i1}, \ O_{i2} \ | + | *Для каждой работы известна последовательность <tex>O_{i1}, \ O_{i2} \ \ldots \ O_{ik}</tex> станков {{---}} порядок, в котором нужно выполнить работу. |
*В каждой последовательности <tex>O_{i}</tex> не более двух элементов. | *В каждой последовательности <tex>O_{i}</tex> не более двух элементов. | ||
Требуется минимизировать время окончания выполнения всех работ. }} | Требуется минимизировать время окончания выполнения всех работ. }} | ||
Строка 19: | Строка 19: | ||
Тогда оптимальное расписание для нашей задачи будет следующим: | Тогда оптимальное расписание для нашей задачи будет следующим: | ||
− | * Расписание <tex>M_{1}</tex> : сначала <tex>I_{12}</tex> в соответсвии с расписанием <tex>S_{12}</tex>. Затем <tex>I_{1}</tex> в произвольном порядке. Затем <tex>I_{21}</tex> в соответсвии с <tex>S_{21}</tex>. | + | * Расписание <tex>M_{1}</tex>: сначала <tex>I_{12}</tex> в соответсвии с расписанием <tex>S_{12}</tex>. Затем <tex>I_{1}</tex> в произвольном порядке. Затем <tex>I_{21}</tex> в соответсвии с <tex>S_{21}</tex>. |
− | * Расписание <tex>M_{2}</tex> : сначала <tex>I_{21}</tex> в соответсвии с расписанием <tex>S_{21}</tex>. Затем <tex>I_{2}</tex> в произвольном порядке. Затем <tex>I_{12}</tex> в соответсвии с <tex>S_{12}</tex>. | + | * Расписание <tex>M_{2}</tex>: сначала <tex>I_{21}</tex> в соответсвии с расписанием <tex>S_{21}</tex>. Затем <tex>I_{2}</tex> в произвольном порядке. Затем <tex>I_{12}</tex> в соответсвии с <tex>S_{12}</tex>. |
Примечание: во время выполнения <tex>I_{21}</tex> на <tex>M_{1}</tex> или <tex>I_{12}</tex> на <tex>M_{2}</tex> могут возникнуть простои | Примечание: во время выполнения <tex>I_{21}</tex> на <tex>M_{1}</tex> или <tex>I_{12}</tex> на <tex>M_{2}</tex> могут возникнуть простои | ||
Строка 28: | Строка 28: | ||
<tex>T_{j}(x)</tex> {{---}} время выполнения множества работ <tex>x</tex> на станке <tex>j</tex>. | <tex>T_{j}(x)</tex> {{---}} время выполнения множества работ <tex>x</tex> на станке <tex>j</tex>. | ||
− | <tex>G_{j}</tex> {{---}} множество всех работ, которые нужно сделать хотя бы раз на <tex>j</tex>-м станке | + | <tex>G_{j}</tex> {{---}} множество всех работ, которые нужно сделать хотя бы раз на <tex>j</tex>-м станке, то есть <tex>G_{1} = I_{1} \cup I_{12} \cup I_{21}</tex>. |
{{Лемма | {{Лемма | ||
|id=lemma1 | |id=lemma1 | ||
|statement= | |statement= | ||
− | Расписание, построенное данным алгоритмом, обладает следующим свойством : один из станков работает без простоев. | + | Расписание, построенное данным алгоритмом, обладает следующим свойством: один из станков работает без простоев. |
|proof= | |proof= | ||
− | Рассмотрим | + | Рассмотрим два случая: |
*<tex>T_{1}(I_{12}) + T_{1}(I_{1}) \geqslant T_{2}(I_{21}) </tex>. Тогда <tex>M_{1}</tex> работает без прерываний, т.к к моменту завершения выполнения <tex>I_{1}</tex> на <tex> M_{1} </tex> все работы <tex>I_{21}</tex> выполнены на <tex>M_{2}</tex>. | *<tex>T_{1}(I_{12}) + T_{1}(I_{1}) \geqslant T_{2}(I_{21}) </tex>. Тогда <tex>M_{1}</tex> работает без прерываний, т.к к моменту завершения выполнения <tex>I_{1}</tex> на <tex> M_{1} </tex> все работы <tex>I_{21}</tex> выполнены на <tex>M_{2}</tex>. | ||
*Иначе <tex>T_{1}(I_{12}) + T_{1}(I_{1}) < T_{2}(I_{21}) </tex>. Тогда <tex>M_{2}</tex> работает без прерываний, т.к к моменту завершения выполнения <tex>I_{2}</tex> на <tex> M_{2} </tex> все работы <tex>I_{12}</tex> выполнены на <tex>M_{1}</tex> . | *Иначе <tex>T_{1}(I_{12}) + T_{1}(I_{1}) < T_{2}(I_{21}) </tex>. Тогда <tex>M_{2}</tex> работает без прерываний, т.к к моменту завершения выполнения <tex>I_{2}</tex> на <tex> M_{2} </tex> все работы <tex>I_{12}</tex> выполнены на <tex>M_{1}</tex> . | ||
Строка 55: | Строка 55: | ||
Рассмотрим станок на котором достигается <tex>C_{max}</tex> . | Рассмотрим станок на котором достигается <tex>C_{max}</tex> . | ||
− | *Если это <tex>M_{1}</tex>, то оптимальность очевидна | + | *Если это <tex>M_{1}</tex>, то оптимальность очевидна <tex>(C_{max} \geqslant \sum\limits_{i \in G_{1}} p_{i1})</tex>. |
*Иначе <tex>C_{max}</tex> достигается на <tex>M_{2}</tex>. | *Иначе <tex>C_{max}</tex> достигается на <tex>M_{2}</tex>. | ||
Тогда либо <tex>M_{2}</tex> работает без прерываний и оптимальность очевидна. | Тогда либо <tex>M_{2}</tex> работает без прерываний и оптимальность очевидна. | ||
Строка 62: | Строка 62: | ||
}} | }} | ||
− | |||
==Сложность алгоритма== | ==Сложность алгоритма== | ||
− | Время работы алгоритма равно времени работы алгоритма [[F2Cmax|<tex>F2 \mid \mid C_{max}</tex>]] | + | Время работы алгоритма равно времени работы алгоритма [[F2Cmax|<tex>F2 \mid \mid C_{max}</tex>]], то есть <tex>O(n\log n)</tex>. |
− | |||
− | |||
==Источники информации== | ==Источники информации== | ||
− | * Peter Brucker. «Scheduling Algorithms» {{---}} «Springer», 2006 г. {{---}} 180 стр. {{---}} ISBN 978-3-540-69515-8 | + | * Peter Brucker. «Scheduling Algorithms» {{---}} «Springer», 2006 г. 179 {{---}} 180 стр. {{---}} ISBN 978-3-540-69515-8 |
[[Категория: Дискретная математика и алгоритмы]] | [[Категория: Дискретная математика и алгоритмы]] | ||
[[Категория: Теория расписаний]] | [[Категория: Теория расписаний]] |
Версия 02:11, 16 мая 2016
Задача: |
Рассмотрим задачу:
|
Содержание
Описание алгоритма
- первый станок. - второй станок.
Разобьем все работы на четыре множества:
- — множество всех работ, которые должны выполниться только на .
- — множество всех работ, которые должны выполниться только на .
- — множество всех работ, которые должны выполниться сначала на затем на .
- — множество всех работ, которые должны выполниться сначала на затем на .
Решим задачу для и для независимо. Получим расписание и .
Тогда оптимальное расписание для нашей задачи будет следующим:
- Расписание : сначала в соответсвии с расписанием . Затем в произвольном порядке. Затем в соответсвии с .
- Расписание : сначала в соответсвии с расписанием . Затем в произвольном порядке. Затем в соответсвии с .
Примечание: во время выполнения
на или на могут возникнуть простои из-за того, что работа ещё не выполнилась на предыдущем станке.Доказательство корректности алгоритма
— время выполнения множества работ на станке .
— множество всех работ, которые нужно сделать хотя бы раз на -м станке, то есть .
Лемма: |
Расписание, построенное данным алгоритмом, обладает следующим свойством: один из станков работает без простоев. |
Доказательство: |
Рассмотрим два случая:
|
Сложность алгоритма
Время работы алгоритма равно времени работы алгоритма , то есть .
Источники информации
- Peter Brucker. «Scheduling Algorithms» — «Springer», 2006 г. 179 — 180 стр. — ISBN 978-3-540-69515-8