Реферат Моделирование вычислительной сети
Работа добавлена на сайт bukvasha.net: 2015-10-28Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
от 25%
договор
Содержание
Введение 4
1 Описание моделируемой системы и задание на моделирование 6
2 Структурная схема модели системы 8
3 Результат работы модели 16
4 Эксперимент пользователя 17
5 Расчет статистических показателей 26
Заключение 30
Список использованной литературы 31
Приложение А 32
Приложение Б 38
Введение
Модель — способ замещения реального объекта, используемый для его изучения. Модель вместо исходного объекта используется в случаях, когда эксперимент опасен, дорог, происходит в неудобном масштабе пространства и времени (долговременен, слишком кратковременен, протяжен), невозможен, неповторим, ненагляден и т. д. Процесс моделирования есть процесс перехода из реальной области в виртуальную (модельную) посредством формализации, далее происходит изучение модели (собственно моделирование) и, наконец, интерпретация результатов как обратный переход из виртуальной области в реальную. Этот путь заменяет прямое исследование объекта в реальной области, то есть лобовое или интуитивное решение задачи.
Сегодня наблюдается повсеместное и всё ускоряющееся усложнение и увеличение всевозможных систем, охватывающих все сферы жизнедеятельности человека. Проведение экспериментов над ними часто весьма дорогостояще, часто вообще невозможно. В то же время нельзя мириться с убытками, наносимыми ошибками в планировании. Для подобных случаев и предназначаются такие дисциплины, как моделирование систем, и языки программирования, как GPSS, позволяющие с определённой вероятностью проанализировать поведение системы с заданными показателями. Для этого необходимо корректно отразить в программе структуру исследуемой системы, а также её временные показатели. Наиболее проработанной областью для GPSS являются различные системы массового обслуживания – заводы, магазины, склады. Использование моделирования позволяет оптимизировать работу системы без проведения реальных экспериментов.
Целью данного курсового проекта является построение имитационной модели вычислительной сети и определение её оптимальных критериев для минимизации убытков. Исходя из этого, можно выделить следующие задачи:
Построение имитационной модели предприятия;
Проведение имитационных экспериментов и сбор статистики;
Анализ полученных данных, выводы о результатах моделирования.
Для достижения поставленной цели используется система имитационного моделирования GPSS.
1 Описание моделируемой системы и задание на моделирование
Система обработки информации содержит мультиплексный канал и N мини-ЭВМ. На вход канала через интервалы времени T1 микросекунд поступают сообщения от датчиков. В канале они буферизируются и предварительно обрабатываются на протяжении Т2 микросекунд. Потом сообщения поступают на обработку в ту мини-ЭВМ, которая имеет наименьшую длину входной очереди. Емкости входных накопителей всех мини-ЭВМ рассчитаны на хранение пяти сообщений. Если в момент прихода сообщения входные накопители всех мини-ЭВМ полностью заполнены, то сообщение получает отказ. Время обработки сообщения во всех мини-ЭВМ равно T3 микросекунд.
Есть две возможности уменьшения числа сообщений, получающих отказ:
увеличение емкости входных накопителей ЭВМ;
ускорение обработки сообщений в ЭВМ при достижении суммы
длин очередей во всех ЭВМ некоторого порогового значения
(авральный режим).
Увеличение на единицу емкости входного накопителя требует S1 единиц стоимости на каждое сообщение.
Переключение ЭВМ в авральный режим происходит тогда, кода суммарное количество сообщений во входных накопителях всех мини-ЭВМ достигает значения 3N. В этом случае все мини-ЭВМ уменьшают время обработки сообщения на k (k <T3) микросекунд, что требует k S2 единиц стоимости на каждое сообщение. Все мини-ЭВМ в авральный режим переводятся одновременно.
Убытки за каждое сообщение, которому отказано в обработке, оставляют S3 единиц стоимости, единица времени работы одной ЭВМ в авральном режиме обходится в S4 единиц стоимости.
Определить, при каких емкостях входных накопителей и авральной скорости обработки сообщений достигается минимум суммарных затрат (убытков от отказов сообщениям в обслуживании, затрат на увеличение емкости входных накопителей и затрат на поддержку аврального режима).
Варианты заданий приведены в таблице 1.
Таблица 1 – Исходные данные
Вариант | Параметры | |||||||
N | T1 | T2 | T3 | S1 | S2 | S3 | S4 | |
1 | 3 | 115 | 93 | 35 | 10 | 5 | 100 | 2 |
2 | 4 | 219 | 184 | 90 | 20 | 7 | 150 | 3 |
3 | 5 | 2610 | 205 | 135 | 18 | 6 | 120 | 4 |
4 | 6 | 3010 | 255 | 188 | 20 | 5 | 130 | 3 |
2 Структурная схема модели системы
Описанная система представляет собой систему массового обслуживания с неограниченным потоком заявок, а происходящие в ней процессы – по сути своей процессы обслуживания. Поэтому для наглядного представления структуры системы была построена Q–схема, представленная на рисунке 1.
Рисунок 1 - Q-схема системы массового обслуживания
BUFF – накопитель мультиплексного канала;
MCH – мультиплексный канал, в котором происходит буферизация поступающих сообщений;
MIN – выбор наименьшей очереди;
Q=N – проверка заполнения накопителя ЭВМ. Если накопитель заполнен, сообщение теряется;
1..n – входные накопители мини-ЭВМ;
EVM1..EVMn – мини-ЭВМ, обрабатывающие сообщения;
Сообщения поступают в канал с частотой T1 микросекунд. Сначала поступающие сообщения попадают в накопитель мультиплексного канала. Если накопитель пуст и канал не занят, сообщение обрабатывается в нём T2 микросекунд. Затем выбирается мини-ЭВМ с наименьшей длиной очереди входного накопителя. Если её накопитель заполнен, то сообщение удаляется из системы и теряется S3 единиц стоимости, иначе сообщение становится в очередь. Затем проверяется, не достигло ли суммарное количество сообщений в накопителях 3N. Если нет, то все мини-ЭВМ обрабатывают сообщения с одинаковой скоростью T3 микросекунд. Иначе включается авральный режим - все мини-ЭВМ уменьшают время обработки сообщения на k микросекунд, что требует k* S2 единиц стоимости на каждое сообщение и S4 – за микросекунду работы аврального режима. Также возможно увеличение ёмкости входных накопителей всех мини-ЭВМ, что требует S1 единиц стоимости за увеличение ёмкости на 1.
Так как нам необходимо отслеживать суммарные затраты, складывающиеся из убытков от отказов сообщениям в обслуживании, затрат на увеличение емкости входных накопителей и затрат на поддержку аврального режима, нам потребуются величины:
Ёмкость входного накопителя мини-ЭВМ;
Количество обработанных сообщений;
Количество сообщений, обработанных в авральном режиме;
Суммарное время действия аврального режима;
Количество потерянных сообщений.
В модели необходимо реализовать:
Задание исходных данных;
Сегмент имитации буферизации и предварительной обработки;
Сегмент имитации выбора наименьшей очереди и её проверки;
Сегмент имитации штатной обработки ЭВМ;
Сегмент имитации авральной обработки ЭВМ;
Сегмент учёта потерянных сообщений;
Сегмент задания времени моделирования и расчёта результатов.
Исходя из необходимости исследования приведённых выше величин, дадим описание основной программе.
Сегмент буферизации тривиален и будет реализован с помощью одного устройства и одной очереди.
Далее необходимо выбрать наименьшую очередь – для этого используем оператор SELECT, который ищет минимальную очередь, записывая её № в параметр EVM.
Затем длина очереди сравнивается с максимальной ёмкостью накопителя Ncapacity. Если они равны, значит все накопители заполнены и сообщение переходит в сегмент учёта потерянных сообщений GOOUT.
Иначе увеличивается сохраняемая величина ALLENTERS, отвечающая за учёт всех обработанных сообщений. Сообщение поступает в накопитель выбранной ЭВМ. Этот факт также отражается в занятии сообщением места в общей очереди MAINSTREAM, представляющей собой сумму очередей всех накопителей. Производится сравнение её длины и величины 3N. Если очередь меньше, сообщение обрабатывается в штатном режиме. В противном случае система переходит в авральный режим AVRALMODE.
Штатный режим обработки реализуется также, как и буферизация, но с использованием двух очередей.
Авральный режим аналогичен штатному, но изменяется время обработки и учитывается количество обработанных сообщений AVRCOUNT и общее время работы режима AVRTIME.
Рисунок 2 – Сегмент буферизации и предварительной обработки
При поступлении сообщение становится в очередь BUF. Если устройство M свободно, производится буферизация.
Рисунок 3 – Сегмент выбора наименьшей очереди и её проверки
Выбирается мини-ЭВМ с наименьшей длиной очереди с помощью блока SELECT. Если её накопитель заполнен, то сообщение удаляется из системы и теряется S3 единиц стоимости, иначе сообщение становится в очереди P$EVM и MS. Затем проверяется, не достигло ли суммарное количество сообщений в накопителях 3N. Если очередь меньше, сообщение обрабатывается в штатном режиме. В противном случае система переходит в авральный режим AVRALMODE.
Рисунок 4 – Сегмент штатной обработки
Сообщение обрабатывается в мини-ЭВМ и уходит из системы.
Рисунок 5 – Сегмент авральной обработки
Рисунок 6 – Сегмент учёта потерянных сообщений
Учёт потерянных сообщений ведётся с помощью сохраняемой величины LOOSE.
В программе нам будет удобнее использовать не величину k, а результирующее время обработки сообщений в авральном режиме Tavr = T3-k, т.к. в этом случае вычисление будет производиться только один раз – при подсчёте убытков, а не на каждом прогоне для вычисления Tavr.
Получаем два оптимизируемых показателя: ёмкость входного накопителя NCapacity и время обработки в авральном режиме Tavr, причём NCapacity может изменяться от 5 до бесконечности, а Tavr – от T3 до 1.
Необходимо подобрать эти показатели таким образом, чтобы минимизировать убытки, вычисляемые:
SUMM VARIABLE -(10#X$ALLENTERS#(Ncapacity-5)+(35-Tavr)#5#X$AVRCOUNT+100#X$LOOSE+2#X$AVRTIME#3)
В программе приведённая величина инвертируется для удобства использования в эксперименте. Таким образом речь идёт уже о максимизации получаемого значения.
3 Результат работы модели
В результате запуска модели для первого варианта при k=1 была получена следующая статистика:
Рисунок 7 – Значения сохраняемых величин
Обработаны были 1016 сообщений, из них 897 – в авральном режиме за время 29954 микросекунд, 22 сообщения было потеряно. Суммарные затраты составили 186409 единиц стоимости.
Можно отметить, что большую часть времени система работала в авральном режиме. В сравнении с затратами на авральную обработку потерянные сообщения составляют незначительную часть затрат. В связи с этим стоит в первую очередь заняться уменьшением затрат на авральную обработку.
4 Эксперимент пользователя
Так как имеются две оптимизируемые величины, каждая из которых может изменяться в широком диапазоне значений, следует воспользоваться экспериментом пользователя.
В пользовательском эксперименте для задания последовательности команд и исходных данных каждого прогона модели удобно использовать PLUS-процедуру. Такая процедура может инициализировать генераторы случайных чисел, выполнять команды и управлять имитацией.
Для примера возьмём значения первого варианта.
Напишем на данном языке:
experiment go(Par1,Par2)
begin
temporary CurYield, ShowString, CommandString;
Ncapacity=Par1;
Tavr=Par2;
CurYield=GetResult();
ShowString= PolyCatenate("Summ ", String(CurYield), ". ");
ShowString=PolyCatenate(ShowString," Capacity ",String(Ncapacity),".");
ShowString=PolyCatenate(ShowString," k time ",String(Tavr),".");
DoCommand(PolyCatenate("SHOW """,ShowString,"""",""));
END;
Данный эксперимент в качестве параметров принимает числа Par1 и Par2, которые будут присвоены соответственно ёмкости входных накопителей и времени обработки в авральном режиме.
procedure GetResult()
begin
temporary Sum, CurYield,Ind_i;
Ind_i=1;
Sum=0;
while (Ind_i<4)do
begin
CurYield=DoTheRun(Ind_i);
Sum=Sum+ CurYield;
Ind_i=Ind_i+1;
end;
Return (Sum/(Ind_i-1));
end;
В приведённой процедуре выполняются 3 прогона модели, а в переменную Sum записывается среднее арифметическое суммарных затрат прогонов.
procedure DoTheRun(Run_Number)
begin
DoCommand("Clear off");
temporary CommandString;
CommandString=Catenate("RMULT ",Run_Number#3);
DoCommand(CommandString);
DoCommand("Start 1");
Return (-(10#X$ALLENTERS#(Ncapacity-5)+ (35 - Tavr)#5#X$AVRCOUNT+100#X$LOOSE+2#X$AVRTIME#3));
end;
В данной процедуре происходит сброс генераторов случайных чисел, очистка сохраняемых величин и сброс статистики. Возвращаемое значение – суммарные затраты.
Для поиска оптимальных параметров используется следующий эксперимент:
experiment SeekOpt()
begin
temporary ShowString, CommandString;
temporary Prev1, Cur1, Flag1, Tprev;
Ncapacity=4;
Prev1=100000;
Flag1=1;
while (Flag1 'NE' 0) do
begin
Ncapacity=Ncapacity+1;
Tavr=36;
while (Tavr 'GE' 2) do
begin
Tprev=Tavr;
Tavr=Tavr-1;
Cur1=GetResult();
if(Cur1
begin
if (Prev1<0) then
begin
ShowString=PolyCatenate(" Optimum.Summ ", String(Prev1),".");
ShowString = PolyCatenate (ShowString, " Capacity ",String(Ncapacity),".");
ShowString = PolyCatenate (ShowString, " k time ",String(Tprev),".");
CommandString = PolyCatenate ("SHOW """,ShowString,"""","");
DoCommand(CommandString);
Flag1=0;
Tavr=0;
end;
else Prev1=Cur1;
end;
else Prev1=Cur1;
end;
end;
end;
Так как оптимизируются два параметра, потребуется два цикла, один из которых будет вложенным. При изучении статистики было установлено, что показатель k и время авральной обработки приоритетнее изменений ёмкости накопителей. Кроме того k ограничен отрезком [0;35], а ёмкость ограничена только минимумом 5, поэтому вложенный цикл будет изменять показатель Tavr =T3-k.
Переменная Flag1 используется для управления внешним циклом. Сначала ей присваивается значение 1, условие выхода из цикла: Flag1 = 0. В переменной Prev1 хранится значение затрат на предыдущем шаге. Вначале ей присваивается очень большое положительное значение, чтобы получаемые затраты на первом шаге заведомо были больше. На каждой итерации внешнего цикла ёмкость накопителей увеличивается на 1. Перед входом в цикл оно устанавливается равным 4, однако прогоны начнутся со значения 5.
Для управления внутренним циклом используется значение времени авральной обработки Tavr. На каждой новой итерации внешнего цикла значение Tavr устанавливается равным 36, но прогоны начинаются со значения 35, т.е. время авральной обработки равно штатному времени обслуживания (k=0). На каждой итерации внутреннего цикла время обработки в авральном режиме уменьшается на 1. Цикл продолжается до тех пор, пока Tavr >=2. Так как значение сначала уменьшается, а затем производится моделирование, финальным значением Tavr станет 1.
Переменная Curl получает значение затрат на текущем шаге. Если предыдущее значение затрат меньше текущего, то выдается результат вместе с оптимальными показателями и осуществляется выход из цикла. В противном случае цикл продолжается.
В результате проведения оптимизационного эксперимента получим:
" Optimum.Summ -181924. Capacity 5. k time 35."
Алгоритм поиска решения базируется на том, что экономические показатели реальных систем обычно представляют собой функции, имеющие единственный локальный экстремум, который и является глобальным. Для того, чтобы перепроверить полученный результат, проведём эксперимент, в котором на каждой итерации вложенного цикла Tavr будет увеличиваться на 1 от 1 до 35.
experiment SeekOptInv()
begin
temporary ShowString, CommandString;
temporary Prev1, Cur1, Flag1, Tprev, Nprev;
Ncapacity=4;
Prev1=100000;
Flag1=1;
while (Flag1 'NE' 0) do
begin
Ncapacity=Ncapacity+1;
Tavr=0;
while (Tavr 'LE' 34) do
begin
Nprev=Ncapacity;
if (Tavr=0) then
begin
Tprev=35;
Nprev=Ncapacity-1;
end;
else Tprev=Tavr;
Tavr=Tavr+1;
Cur1=GetResult();
if(Cur1
begin
if (Prev1<0) then
begin
ShowString=PolyCatenate(" Optimum.Summ ", String(Prev1),".");
ShowString=PolyCatenate(ShowString," Capacity ",String(Nprev),".");
ShowString=PolyCatenate(ShowString," k time ",String(Tprev),".");
CommandString =PolyCatenate("SHOW """,ShowString,"""","");
DoCommand(CommandString);
Flag1=0;
Tavr=35;
end;
else Prev1=Cur1;
end;
else Prev1=Cur1;
end;
end;
end;
Получим
" Optimum.Summ -181924. Capacity 5. k time 35."
Перепроверим значение с помощью эксперимента go(5,35):
"Summ -181924. Capacity 5. k time 35."
Следовательно полученное значение верно для стандартной ёмкости накопителя. Запустим ещё несколько экспериментов с различными ёмкостями для сравнения.
Таблица 2 – Результаты эксперимента go с заданными параметрами
Ёмкость накопителя | Время Tavr | Суммарные затраты |
5 | 34 | -186409 |
6 | 30 | -215189 |
7 | 28 | -235239 |
Отметим, что и при увеличении ёмкости накопителя или уменьшении времени обработки сумма затрат не становится меньше полученной в ходе оптимизационного эксперимента.
При Tavr=35 отсутствуют затраты на обработку сообщений в авральном режиме. Поскольку k=0, k*S2*X$AVRCOUNT=0. Например при k=1 в приведённом выше примере данное выражение=1*5*897=4485 единиц стоимости. Отсутствие затрат этого рода перевешивает убытки от потерянных сообщений.
Также равны нулю и затраты на увеличение ёмкости входных накопителей 10#X$ALLENTERS#(Ncapacity-5).
Фактически k=0 означает, что авральный режим не изменяет времени обработки сообщений, поэтому было бы целесообразно вообще убрать его – в этом случае затраты S4*X$AVRTIME*N также стали бы равны 0. Однако это не предусмотрено условием задачи, поэтому остановимся на полученных показателях ёмкости и времени обработки.
Отметим, что в остальных вариантах наблюдается аналогичная ситуация (см. приложение Б).
5 Расчет статистических показателей
В результате выполнения 10 прогонов были получены 10 матриц размерностью 1*20. Замеры производились каждые 500 микросекунд. Получили матрицу размерностью 1*20, которая была получена путем усреднения 10 исходных матриц.
Рисунок 8 – Динамика суммарных затрат
Чтобы выровнять высокочастотные колебания в процессе (но сохранить нужные низкочастотные колебания или долговременную тенденцию), мы определяем скользящее среднее
Данный ряд необходимо сгладить с помощью процедуры Велча. Данная процедура была написана на языке Delphi:
procedure TForm1.velch(w: integer);
var m, S: integer;
sum: real;
begin
for m:=1 to 20-w do
begin
Sum:=0;
if m<=w then
begin
for S:=-(m-1) to (m-1) do
Sum:=Sum+Res1[m+s];
Res2[m]:=trunc(Sum/(2*m-1));
end
else
begin
for S:=-w to w do
Sum:=Sum+Res1[m+s];
Res2[m]:=trunc(Sum/(2*w+1));
end;
end;
end;
Где w - это окно; w является положительным целым числом из условия, w £ [m/4];
Res1[], Res2[] – массив исходных данных и результирующий массив соответственно. Для сравнения применим процедуру Велча для двух значений w.
Рисунок 9 – Результат сглаживания с помощью процедуры Велча
Можно предположить, что система выходит на установившийся режим после 1500 микросекунд работы. Отбросим первые 3 значения и рассчитаем параметры данной системы:
Рисунок 10 – Результат удаления начальных данных
Среднее значение находим по формуле средней арифметической:
и получаем, что средние суммарные затраты за 500 микросекунд равны 101535,9.
Необходимо рассчитать дисперсию:
Получаем, что дисперсия равна 210,638.
Для расчета доверительного интервала воспользуемся формулой:
где t – коэффициент распределения Стьюдента. В данном случае он равен 2,306.
В итоге получаем, что доверительный интервал:
Заключение
В ходе выполнения данной курсовой работы были выполнены все поставленные перед ней задачи.
Была создана имитационная модель работы системы обработки информации. В ходе проектирования модели была построена концептуальная модель, представленная в виде Q-схемы, а также математическая модель.
Над полученной моделью был проведен ряд экспериментов для определения оптимальных экономических показателей системы.
Таким образом, поставленная во введении цель достигнута
Список использованной литературы
1. Савина, О.А. Имитационное моделирование экономических систем и процессов: Учебное пособие [Текст]/О.А.Савина. – Орел: ОрелГТУ, 2004. – 172 с.
2. Савина, О.А. методические указания к выполнению курсовых работ по дисциплине “Моделирование экономических процессов” [Текст]/О.А.Савина. – Орел: ОрелГТУ, 1999. – 59 с.
3. Боев, В.Д. Моделирование систем. Инструментальные средства GPSSWorld: учебное пособие [Текст]/В.Д.Боев. – БХВ-Петербург, 2004. – 368 с.
4. Олькина, Е.В. Методические указания по оформлению пояснительных записок к дипломным, курсовым проектам (работам) и отчетов по практикам в соответствии с требованиями государственных стандартов [Текст]/Е.В.Олькина. – Орел: ОрелГТУ, 2007. – 54с.
5. Моделирование в GPSSWorld [Электронный ресурс]. – Режим доступа: http://www.intuit.ru/department/calculate/compmodel/6/2.html
Приложение А
(обязательное)
Листинг программы (вариант 1)
Ncapacity EQU 5 ;ёмкость накопителя
Tavr EQU 34 ;время обработки в авральном режиме
SUMM VARIABLE -(10#X$ALLENTERS#(Ncapacity-5)+(35-Tavr)#5#X$AVRCOUNT+100#X$LOOSE+2#X$AVRTIME#3)
GENERATE 11,5 ;буферизация
QUEUE BUFF
SEIZE MULTICHANNEL
DEPART BUFF
ADVANCE 9,3
RELEASE MULTICHANNEL
SELECT MIN EVM,1,3,,Q ;выбор минимальной очереди
TEST L Q*EVM,Ncapacity,GOOUT ;сравнение с ёмкостью накопителя
SAVEVALUE ALLENTERS+,1 ;учёт всех обработанных сообщений
QUEUE P$EVM ;стандартная обработка
QUEUE MAINSTREAM
TEST L Q$MAINSTREAM,9,AVRALMODE ;сравнение содержимого очереди и 3N
SEIZE P$EVM
DEPART MAINSTREAM
DEPART P$EVM
ADVANCE 35 ;стандартная задержка
RELEASE P$EVM
TERMINATE 1
AVRALMODE SAVEVALUE AVRCOUNT+,1 ;обработка в авральном режиме
SEIZE P$EVM
DEPART MAINSTREAM
DEPART P$EVM
MARK AVRINT
ADVANCE Tavr ;уменьшенная задержка
RELEASE P$EVM
SAVEVALUE AVRTIME+,MP$AVRINT ;учёт времени работы в авральном режиме
TERMINATE 1
GOOUT SAVEVALUE LOOSE+,1 ;учёт потерянных сообщений
TERMINATE
START 1000
experiment go(Par1,Par2)
begin
temporary CurYield, ShowString, CommandString;
Ncapacity=Par1;
Tavr=Par2;
CurYield=GetResult();
ShowString= PolyCatenate("Summ ", String(CurYield), ". ");
ShowString=PolyCatenate(ShowString," Capacity ",String(Ncapacity),".");
ShowString=PolyCatenate(ShowString," k time ",String(Tavr),".");
DoCommand(PolyCatenate("SHOW """,ShowString,"""",""));
END;
procedure GetResult()
begin
temporary Sum, CurYield,Ind_i;
Ind_i=1;
Sum=0;
while (Ind_i<4)do
begin
CurYield=DoTheRun(Ind_i);
Sum=Sum+ CurYield;
Ind_i=Ind_i+1;
end;
Return (Sum/(Ind_i-1));
end;
procedure DoTheRun(Run_Number)
begin
DoCommand("Clear off");
temporary CommandString;
CommandString=Catenate("RMULT ",Run_Number#3);
DoCommand(CommandString);
DoCommand("Start 1");
Return (-(10#X$ALLENTERS#(Ncapacity-5)+(35-Tavr)#5#X$AVRCOUNT+100#X$LOOSE+2#X$AVRTIME#3));
end;
experiment SeekOpt()
begin
temporary ShowString, CommandString;
temporary Prev1, Cur1, Flag1, Tprev;
Ncapacity=4;
Prev1=100000;
Flag1=1;
while (Flag1 'NE' 0) do
begin
Ncapacity=Ncapacity+1;
Tavr=36;
while (Tavr 'GE' 2) do
begin
Tprev=Tavr;
Tavr=Tavr-1;
Cur1=GetResult();
if(Cur1
begin
if (Prev1<0) then
begin
ShowString=PolyCatenate(" Optimum.Summ ", String(Prev1),".");
ShowString=PolyCatenate(ShowString," Capacity ",String(Ncapacity),".");
ShowString=PolyCatenate(ShowString," k time ",String(Tprev),".");
CommandString =PolyCatenate("SHOW """,ShowString,"""","");
DoCommand(CommandString);
Flag1=0;
Tavr=0;
end;
else Prev1=Cur1;
end;
else Prev1=Cur1;
end;
end;
end;
experiment SeekOptInv()
begin
temporary ShowString, CommandString;
temporary Prev1, Cur1, Flag1, Tprev, Nprev;
Ncapacity=4;
Prev1=100000;
Flag1=1;
while (Flag1 'NE' 0) do
begin
Ncapacity=Ncapacity+1;
Tavr=0;
while (Tavr 'LE' 34) do
begin
Nprev=Ncapacity;
if (Tavr=0) then
begin
Tprev=35;
Nprev=Ncapacity-1;
end;
else Tprev=Tavr;
Tavr=Tavr+1;
Cur1=GetResult();
if(Cur1
begin
if (Prev1<0) then
begin
ShowString=PolyCatenate(" Optimum.Summ ", String(Prev1),".");
ShowString=PolyCatenate(ShowString," Capacity ",String(Nprev),".");
ShowString=PolyCatenate(ShowString," k time ",String(Tprev),".");
CommandString =PolyCatenate("SHOW """,ShowString,"""","");
DoCommand(CommandString);
Flag1=0;
Tavr=35;
end;
else Prev1=Cur1;
end;
else Prev1=Cur1;
end;
end;
end;
Приложение
Б
Результаты оптимизационного эксперимента
Вариант | Оптимальная ёмкость | Оптимальное время авральной обработки | Суммарные затраты |
2 | 5 | 90 | 923562 |
3 | 5 | 135 | 1933480 |
4 | 5 | 188 | 2327596 |