Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Морозовский__к_лаб16.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
91.26 Кб
Скачать
  1. Модификация кода для реализации гипотезы 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