
- •Исправление ошибок в коде «Lab16.Gps»
- •Удаление лишних участков кода
- •Исправление опечаток в коде
- •Изменение числовых значений согласно варианту
- •Исправление ошибок, связанных с масштабом времени
- •Проблемы с целесообразностью проведения экспериментов
- •Реализация гипотез
- •Модификация кода для реализации гипотезы a
- •Модификация кода для реализации гипотезы b
- •Модификация кода для реализации гипотезы c
Модификация кода для реализации гипотезы b
Согласно гипотезе B, можно увеличивать число станков каждого типа вплоть до четырёх, однако это повлечёт за собой увеличение себестоимости изготавливаемых деталей.
Управление применением гипотезы B будем осуществлять посредством изменения операнда A оператора STORAGE, где объявляются размеры каждого из многоканальных устройств, моделирующих множество станков определённого типа.
Для реализации гипотезы B добавим в код следующую функцию:
;; Функция, возвращающая, на сколько % увеличится себестоимость детали ;; при использовании гипотезы B, если кол-во станков типа P4 увеличили на 1 BLOSS FUNCTION P4,D4 1,5/2,8/3,7/4,10 |
По сути, эта функция заменяет нам таблицу 2.10 из методички, так как, в действительности, вся эта таблица в явном виде не нужна: вторая её строка являет собой первую, умноженную на 2, а третья – первую, умноженную на 3.
Теперь перейдём к участку кода, где производится инициализация параметров транзактов, и добавим туда следующую строчку:
ASSIGN 1,FN$TYP ;тип детали ASSIGN 2,FN$JOB ;количество этапов ASSIGN 3,FN$JTAP ;номер первого этапа ASSIGN 6,FN$DTIM ;допустимое время
ASSIGN 7,0 ; время ускорения обработки детали ASSIGN 8,0 ; сумма, потерянная при ускорении обработки детали (отнимается от дохода) ASSIGN 9,0 ; входной параметр функции ALOSS
ASSIGN 10,0 ; сумма, потерянная при использовании гипотезы B (прибавляется к себестоимости) |
Как и написано в комментариях, параметр транзакта 10 будет накапливать сумму убытков от применения гипотезы B для изготовления текущей детали, которая будет прибавляться к себестоимости (а значит, вычитаться из дохода). Прибавление очередного слагаемого к этой сумме будет осуществляться при обработке детали на некотором станке, общее число которых было увеличено. Это слагаемое определяется согласно следующей формуле:
|
(2.3) |
где
– общее число (как занятых, так и
свободных) станков того типа, на станке
которого обрабатывается текущая деталь;
– себестоимость этой детали, получаемая
из функции CEB;
– дополнительный процент себестоимости
при увеличении числа станков данного
типа на 1 (значение, возвращаемое функцией
BLOSS).
Для вычисления этих убытков добавим в код, где транзакт проходит уже через конкретное МКУ, следующую строчку:
ASSIGN 9,((FN$ACCEL-1)#4+P1) ; параметр для функции ALOSS ASSIGN 8+,(FN$MDOH#FN$ALOSS/100) ; определить убытки от ускорения l_skipA ADVANCE (P5-P7) ;обработка на станке ASSIGN 10+,((S*4+R*4-1)#FN$CEB#FN$BLOSS/100) ; определить увеличение себестоимости ; из-за увеличения числа станков LEAVE P4 ;освобождение станка |
Всё, что осталось, – учитывать накапливаемое в параметре 10 значение перед уничтожением транзакта, изменяя суммарные значения дохода и себестоимости. Для этого внесём следующие изменения в последний участок кода, который обрабатывает транзакты-детали:
TEST L P6,M1,DDD ;штрафовать? Нет - DDD SAVEVALUE SHTRAF+,FN$MSHT ;штраф SAVEVALUE DOHOD-,FN$MSHT ;определение дохода DDD SAVEVALUE DOHOD+,(FN$MDOH-P8) ;определение дохода SAVEVALUE DOHOD-,FN$CEB ;определение дохода SAVEVALUE CEBECT+,FN$CEB ;определение * себестоимости TERMINATE |
TEST L P6,M1,DDD ;штрафовать? Нет - DDD SAVEVALUE SHTRAF+,FN$MSHT ;штраф SAVEVALUE DOHOD-,FN$MSHT ;определение дохода DDD SAVEVALUE DOHOD+,(FN$MDOH-P8) ;определение дохода SAVEVALUE DOHOD-,(FN$CEB+P10) ;определение дохода SAVEVALUE CEBECT+,(FN$CEB+P10) ;определение * себестоимости TERMINATE |