
- •Введение
- •Постановка задачи
- •Качественное описание исследуемой операции
- •Концептуальная модель операции
- •Математическая постановка задачи
- •Алгоритмизация решения задачи
- •Анализ методов решения задачи
- •Выбор и описание метода
- •Конструирование алгоритма решения задачи
- •Выполнение третьего шага
- •Проектирование сценария диалога
- •Описание структур данных
- •Структурная схема алгоритма сценария диалога и описание его программной реализации
- •Структурная схема функционального алгоритма решения задачи
- •Численные эксперименты
- •Ручная реализация алгоритма решения задачи
- •Машинные эксперименты с разработанными данными
- •Сравнение результатов ручного и машинного расчетов
- •Заключение
- •Список используемой литературы
- •Приложение а – листинг программы
Конструирование алгоритма решения задачи
В основе метода динамического программирования лежит принцип оптимальности Беллмана т.е оптимальное управление строится постепенно. На каждом шаге оптимизируется управление только этого шага. Вместе с тем на каждом шаге управление выбирается с учётом последствий, так как управление, оптимизирующее целевую функцию только для данного шага, может привести к неоптимальному эффекту всего процесса. Управление на каждом шаге должно быть оптимальным с точки зрения процесса в целом. Это основное правило динамического программирования, сформулированное Беллманом, называется принципом оптимальности. Из этого следует, что для того чтобы найти оптимальное решение на последнем шаге надо сначала найти оптимальное решения для первого, затем для второго и так далее пока не пройдем все этапы до последнего.
На предприятии необходимо выполнить разгрузочно-погрузочные работы на M складах предприятия. Время выполнения работы на каждом складе зависит от количества грузчиков - где n количество грузчиков, занятых на j-м складе при i-м варианте распределения грузчиков. На предприятии имеются грузчики в количестве N человек. Требуется сформировать бригады на каждый склад таким образом, чтобы выполнить все работы за минимальное время.
Этап 1. Текущее количество процессоров D распределяется только для выполнения первого программного модуля R1:
T1(D)= max(t(d1,j), T0(D-d1,j))= t(d1,j),
так как выражение T0(D-d1,j) неопределенно. Результаты выполнения первого шага представляются в таблице 1.
Результаты выполнения первого шага
Состояние D |
Управление U1 |
Оптимальный доход T1(D) |
D1,1=d1,1 D1,2=d1,2 ......... D1,j=d1,j D1,N(1)=d1,N(1) |
U1=d1,1 U1=d1,2 .......... U1=d1, j U1=d1,N(1) |
Т1(D)=t(d1,1) Т1(D)=t(d1,2) .................. Т1(D)=t(d1,j) Т1(D)=t(d1,N(1)) |
Остальные таблицы формируются по такому же алгоритму, но с учетом вычисленных данных.
Этап 2. Текущее количество процессоров D распределяется между двумя программными модулями R1 и R2. Тогда i=2 и уравнение Беллмана имеет следующий вид:
T2(D)= max(t(d2,j), T1(D-d2,j)).
Результаты выполнения второго шага представлены в таблице:
Результаты выполнения второго шага
Управление U2 |
Состояние второго этапа |
||||
D1,1 |
D1,2 |
… |
D1,j |
D1,N(1) |
|
U2 = d 2,1
|
|
|
… |
|
|
D 2,1 = d 2,1+D 1,1 |
D2,2 = d2,1+D1,2 |
… |
D 2,j = d 2,1+D1,j |
D2,N(1) = d2,1+D1,N(1) |
|
U2 = d 2,i |
|
|
… |
|
|
D2,(i–1)N(1)+1 = = d2,i+D1,1 |
D2,(i–1)N(1)+2 = = d2,i+D1,2 |
… |
D2,(i–1)N(1)+j = = d2,i+D1,j |
D2,iN(1)=d2,i+D1,N(1) |
|
U2 = d 2, N(2)
|
|
|
… |
… |
|
D2,(N(2)–1)N(1)+1 = = d2,N(2)+D1,1 |
D2,(N(2)–1)N(1)+2 = = d2,N(2)+D1,2 |
… |
… |
D2,(N(2)N(1)) = = d2,N(2)+D1,N(1) |
При составлении таблицы используются следующие правила и выполняются определенные процедуры:
- количество строк равно количеству различных значений управлений U2. В каждой строке указывается соответствующее значение: d2,1,..., d2,j,..., d2,N(1);
- количество столбцов соответствует количеству состояний на предыдущем i=1 шаге, т.е. в заголовке столбцов указываются значения
D1,1, D1,2,..., D1,j,...,D1,N(1);
- каждая клетка таблицы разбивается на 2 части. В нижней части записывается сумма значений, указанных в заголовках соответствующих столбцов и строк. Эта сумма определяет состояние для второго этапа- количество процессоров, распределяемых на этапе. Недопустимые значения вычеркиваются, и для них не определяются значения верхней части клетки;
- производится заполнение верхней части каждой клетки, в которой указывается максимальное из следующих двух значений: первое значение- время выполнения второго модуля при реализации управления U2; второе значение- время выполнения первого модуля на оставшихся процессорах;
-
составляется окончательная таблица
для второго этапа принятия решения. Эта
таблица содержит три столбца: в первом
столбце указываются уникальные значения
состояний для второго этапа (табл). В
промежуточной таблице имеются
повторяющиеся значения состояний.
таком случае необходимо для состояния
D2,1
найти клетки, имеющие такие же значения
состояний, и среди них выбрать клетку
с минимальным значением T2*(D2,1),
т.е. T2(D2,1)=
min{
T2*(D2,1)}.
Оптимальное значение управления U2
для состояния D2,1
указывается
во втором столбце окончательной таблицы,
а в третьем столбце записывается условное
оптимальное время выполнения первых
двух программных модулей R1
и
R2
при наличии D2,1
процессоров- T2(D2,1).
Аналогичные действия выполняются для
всех остальных состояний D2,s,
s=
,
и критерия.
Окончательная таблица для второго этапа
Состояние D2,i |
Управление U2 |
Условное оптимальное время T2(D2,i) |
D2,1 |
U2,1 |
T2(D2,1) |
D2,2 |
U2,2 |
T2(D2,2) |
... |
... |
... |
D2,s |
U2,s |
T2(D2,s) |
... |
... |
... |
D2,z(2) |
U2,z(2) |
T2(D2,z(2)) |
Этап 3. Совершаем распределение между R1-м, R2-м, R3-м программными модулями текущего количества процессоров D. Функциональное уравнение Беллмана для i=3 имеет следующий вид:
T3(D)= max(t(d3,j), T2(D-d3,j)).
Формируются элементы 3-го этапа, при их формировании используем следующее соотношение:
T2*(D3,(i-1)z(2)+j)= max(t(d3,i), T2(D3,(i-1)z(2)+j –d2,i)).
Значения T2(D3,(i-1)z(2)+j –d2,i) выбираются из третьего столбца окончательной таблицы для второго этапа. Аналогично шагу 2 конструируется окончательная таблица для третьего этапа, содержащая в первом столбце перечень уникальных состояний для третьего этапа, во втором столбце оптимальные управления для каждого состояния и в третьем столбце значения условного оптимального времени выполнения трех программных модулей: R1, R2, R3. Выполнение алгоритма прямой прогонки прекращается при i=m. После этого в окончательной таблице m-го этапа для состояния, соответствующего предельному количеству процессоров D0, находится оптимальное время Tm(Dm,N(m),z(m)) выполнения всех программных модулей R1..., Rm, а также оптимальное количество процессоров, выделенных для реализации Rm-го модуля. На основании этого значения вычисляется оптимальное количество процессоров, которое назначено для реализации оставшихся модулей: R1,R2,.. Rm-1. Это число процессоров является входом в окончательную таблицу (m-1)-го этапа, что позволяет установить оптимальное количество процессоров для Rm-1-го модуля. Процесс последовательного обратного просмотра окончательных таблиц позволяет определить оптимальное число процессоров для Rm-го, Rm-1-го, Rm-2-го,...., R1-го программных модулей.