Скачиваний:
19
Добавлен:
01.05.2014
Размер:
292.35 Кб
Скачать

Прототип программы

Вы решаете, что начать Вашу работу нужно с создания прототипа программы планирования, предназначенной для мастера. Основное назначение прототипа состоит в том, чтобы разработать интерфейс, которым мастер сможет пользоваться на практике, и чтобы проверить делаемые мастером предположения о производительности установок. В производственной версии программы должна быть предусмотрена работа при большом разнообразии ситуаций, включая разные типы изделий, различные сочетания установок и т.д. Однако для того, чтобы как можно скорее создать работоспособный прототип программы, представляется целесообразным при выборе функциональных возможностей прототипа ограничиться некоторым подмножеством функциональных возможностей производственной программы. В связи с этим прототип сможет планировать изготовление лишь таких видов продукции, для которых требуется последовательная обработка на четырех установках, и не будет учитывать необходимость дополнительной доводки изделий на некоторых установках. Приведем далее описание прототипа программы.

Представление ситуации

Разрешающая способность прототипа программы по времени составляет один час. Это означает, что мастер может изменять распределение заданий и операторов по установкам только один раз в час. Данное упрощение позволит быстрее написать работоспособный прототип программы. В реальной программе, предназначенной для планирования производственного процесса, может потребоваться более высокая разрешающая способность по времени, равная, скажем, четверти часа.

Прототип рассчитан на планирование работы только одной смены за день. Эта смена начинается в 8 часов утра (в программе это представлено как "8") и продолжается до часа дня (в программе это представлено как "13"). Каждое производственное задание снабжается уникальным идентификатором, в качестве которого можно употребить наименование заказчика. Перемещение продукции по заводу от установки к установке отслеживается при помощи названий установки и накопителя. Накопитель— это место, где собирается продукция, обработанная одной установкой, в

ожидании обработки на следующей установке. Установки носят следующие названия: альфа, бета, гамма и дельта. Накопители обозначаются цифрами 1, 2, 3, 4 и 5. Весь производственный цикл завода схематически изображен на рис. III. 1.

Количество продукции измеряется в изделиях, а производительность установки — в изделиях в час. Предположим, что к восьми часам утра в накопителе 2 имеется 15 изделий, относящихся к прозводственному заданию "консолидейтед" (наименование заказчика), и что производительность установки бета равна двенадцати изделиям в час. Тогда к девяти часам в накопителе 2 останется 3 изделия заказа "консолидейтед", а в накопитель 3 поступит 12 изделий этого заказа.

Заказы

Информация о том, что в конкретном накопителе имеется некоторое количество изделий, изготавливаемых по определенному заказу, представляется при помощи следующего факта:

% Час Накопитель Идентификатор Изделий

заказ (8, 2, консолидейтед, 15).

Этот факт гласит, что в 8 часов утра в накопителе 2 имеется 15 изделий заказа "консолидейтед". В начале смены планирующая программа анализирует все факты "заказ", имеющиеся в текущей программе, и вырабатывает

план того, как следует в течение смены осуществлять выполнение этих заказов. После того как мастер одобрит план, он сможет далее моделировать при помощи данной программы производственный процесс завода с интервалами времени продолжительностью в один час. (В производственной программе предсказанный объем выработки продукции всегда будет сверяться с реальным объемом.) После того как планирующая программа смоделирует производство продукции за один час, в нее добавляются новые факты "заказ", показывающие положение каждого заказа к концу этого часа. Предположим, что в течение часа, начинающегося в 8 утра, производительность установки бета равна двенадцати изделиям в час. Тогда после обработки планирующей программой восьмого часа в нее добавятся два новых факта "заказ", показывающие положение заказа "консолидейтед" к девяти утра. Эти факты таковы:

% Час Накопитель Идентификатор Изделий

заказ (9, 2, консолидейтед, 3).

заказ (9, 3, консолидейтед, 12).

Операторы

Если оператор приходит на работу к началу смены, то в базу данных добавляется нижеследующий факт:

% Приход Имя

оператор(8, джек).

Если оператор должен уйти до окончания смены, то в базу данных должен быть добавлен нижеследующий факт "опровергнуть", запрещающий планирование работы данного оператора после его ухода:

% Джек уходит в 11.00

опровергнуть (11, оператор (_, джек)).

Мастер должен знать, сколько операторов присутствуют на работе в течение любого часа смены. Приведенная выше форма фактов "оператор" позволяет воспользоваться механизмом наследования из гл. 7 для того, чтобы отслеживать количество операторов, находящихся на работе в течение каждого часа смены. Значения часов связываются друг с другом с помощью базы данных "порождение", имеющей следующий вид:

порождение (9, 8).

порождение (10,9).

...

Нижеследующее правило позволяет установить общее число операторов, находящихся на работе в течение любого заданного часа смены:

% + -

макс- -операторов (Время, Количество) : -

% построить список всех присутствующих операторов

% для часа "Время"

findall (X, послать (Время, оператор (X) ) , Список),

length (Список, Количество).

Производительность установок

Каждая установка обладает определенной производительностью, выраженной в изделиях в час. Производительность зависит от количества операторов, приставленных к установке. Например, производительность уста-новки дельта составляет восемь изделий в час на каждого прикрепленного к ней оператора. Эту информацию можно представить в виде нижеследующего простого правила:

% Название Операторы

производит_установки (дельта. Количество, Производительность) :—

Производительность is Количество * 8.

Однако планирующая программа иногда должна проверять производительность установки при различных распределениях операторов. При использовании приведенного правила "производит _установки" возникает проблема, заключающаяся в том, что если переменная «Количество» не будет конкретизирована, то при обработке подцели "is" возникнет ошибка. В приводимой ниже версии правила "производит_установки" генерируется возможное значение переменной «Количество)), если эта переменная не конкретизирована. При этом генерируемое значение не превышает общего числа операторов, работающих в данную смену. В правило добавлен дополнительный аргумент, несущий информацию об общем числе операторов. Для генерирования значений переменной «Количество )) используется правило "ген_чисел".

% + + ? производит_установки (дельта, МаксОпер, Количество,

% Производительность) :—

( var (Количество),

ген-чисел (МаксОпер, Количество)

;

nonvar (Количество)

),

% 8 изделий/час/оператор:

Производительность is Количество * 8

% сгенерировать целое число N из диапазона от 1 до Макс

% включительно:

% + -

ген_чисел (Макс, N) : —

ген_чисел0 (Макс, 1, N).

% + +

ген_чисел0 (Макс, Начало, Начало).

ген_чисел0 (Макс, Начало, N):—

НовНачало is Начало + 1,

НовНачало = < Макс,

ген_чисел0 (Макс, НовНачало, N).

Если переменная ((Количество)) не была конкретизирована в запросе к правилу "производит_установки", то за счет поиска с возвратом правило "ген_чисел" сгенерирует все возможные значения этой переменной из диапазона от 1 до « МаксОпер ».

Структура программы

Взаимосвязь компонент планирующей программы показана на рис. 111.2 (Структура планирующей программы). Мастер начинает работу с программой запросом к процедуре "старт", аргументом которой является первый час смены. Процедура "старт" позволяет мастеру добавлять новые производственные задания. Затем данная процедура вызывает рекурсивную процедуру "обработка_смены", играющую роль основного интерфейса программы с пользователем. Вначале процедура "обработка_смены" предоставляет мастеру сокращенное меню выбора действий высокого уровня. Одно из этих действий, “план, позволяет построить план работы целой смены. Сначала мастер должен построить план, так как при выполнении любых других действий потребуется наличие текущего плана. Если план не будет построен, то программа не допустит выполнения мастером каких-либо других действий. Компоненты программы можно разбить на несколько категорий в соответствии с табл. III.1.

Соседние файлы в папке Гл.6,7,Прилож.,Допол