Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите пожалуйста исправить ошибки в тексте программы GPSS....

Terlis Знаток (400), открыт 3 недели назад
GENERATE 100, 60 ; Генерация клиента каждые 60 минут
ENTER Queue ; Вход клиента в очередь
SEIZE Administrator ; Администратор захватывает ресурс
ADVANCE 30 ; Администратор заполняет данные о клиенте в течение 30 минут
RELEASE Administrator ; Администратор освобождает ресурс
DECIDE 0.7, Queue, ANKETA, ANKETA ; Клиент заполняет анкету с вероятностью 70%
TRANSFER (ANKETA, 30), END ; Если клиент заполнил анкету - переход к следующему шагу через 30 минут
JUMP INCARNATE ; Переход к следующему шагу

ANKETA TRANSFER (QUEUE, 30) ; Анкета заполнена, клиент возвращается в очередь через 30 минут
INCARNATE TERMINATE ; Окончание моделирования процесса

TERMINATE ; Окончание работы программы

GENERATE 100, 60 ; Генерация клиента каждые 60 минут
ENTER Queue ; Вход клиента в очередь
SEIZE Trainer ; Занятие тренера
ADVANCE 60 ; Проведение тренировки продолжительностью 60 минут
RELEASE Trainer ; Тренер освобождает ресурс
ADVANCE 10 ; Подведение итогов
LEAVE Queue ; Клиент уходит

Queue STORAGE 0 ; Очередь
Administrator FACILITY 1 ; Ресурс (администратор)
Trainer FACILITY 1 ; Ресурс (тренер)
ANKETA LABEL ; Метка для анкеты
END LABEL ; Метка для завершения процесса


6 ответов
Татьяна Просветленный (32616) 3 недели назад
 ; Клиенты поступают в очередь каждые 60 минут 
GENERATE 100, 60

; Первый процесс: Обработка клиентом администратора
ENTER Queue
SEIZE Administrator
ADVANCE 30 ; Обработка администратора длится 30 минут
RELEASE Administrator
DECIDE 0.7, ANKETA, SKIP_ANKETA ; Клиент заполняет анкету с вероятностью 70%
TRANSFER , ANKETA ; Переход к анкете
SKIP_ANKETA TRANSFER , INCARNATE ; Переход минуя анкету

; Второй процесс: Анкетирование
ANKETA TRANSFER 30, INCARNATE ; Анкета заполнена, переход к следующему шагу через 30 минут

; Завершение процесса
INCARNATE TERMINATE

; Начало второго потока клиентов (тренировка)
GENERATE 100, 60
ENTER Queue
SEIZE Trainer
ADVANCE 60 ; Тренировка длится 60 минут
RELEASE Trainer
ADVANCE 10 ; Подведение итогов
LEAVE Queue

; Определение ресурсов и очередей
Queue STORAGE 0
Administrator FACILITY 1
Trainer FACILITY 1

; Метки
ANKETA LABEL
INCARNATE LABEL
END LABEL
Пояснения по изменениям:

Объединены два блока GENERATE в один для упрощения.
Исправлены все ошибки с неправильным использованием операторов и процедур GPSS.
Добавлены метки для корректного перехода между блоками.
Убедились, что все ресурсы (FACILITY) и очереди (STORAGE) объявлены корректно.
TerlisЗнаток (400) 3 недели назад
Ради бога, извините, Вы и так очень сильно помогаете! Но, прошу Вас, объясните, пожалуйста, почему всё еще выходят такие ошибки..
Если всё же решите помочь, я могу еще раз вопрос в майл ру задать!

Татьяна Просветленный (32616) Terlis, возможно еще в настройках твоего IDE где ты вводить свой код и попробуй проверить может там бывает какие то настройки для твоего кода еще
Анонимус Мудрец (13504) 3 недели назад
В вашем коде GPSS есть несколько ошибок и неточностей. Давайте разберем их:

1. Неправильное использование GENERATE и TERMINATE:
  • Вы используете GENERATE дважды, что неверно. В моделированиях GPSS GENERATE определяет источник транзакций (клиентов), и в вашем случае должен быть только один.
  • Вы используете TERMINATE дважды, что тоже неверно. В GPSS TERMINATE означает полное завершение транзакции. В вашем случае TERMINATE должен использоваться только один раз в конце моделирования.

2. Неправильное использование TRANSFER:
  • В строке DECIDE 0.7, Queue, ANKETA, ANKETA DECIDE используется для выбора пути транзакции с определенной вероятностью, но после этого вы используете TRANSFER, что лишнее. TRANSFER должен использоваться в DECIDE, но не в отдельной строке.
  • В ANKETA TRANSFER (QUEUE, 30) вы возвращаете клиента в очередь через 30 минут после заполнения анкеты. Но если в очереди уже есть клиенты, то ваша модель не будет учитывать ожидание в очереди.

3. Неточности в описании ресурсов:
  • Administrator FACILITY 1 и Trainer FACILITY 1 определяют один и тот же ресурс. В вашей модели должны быть два разных ресурса, один для администратора, а другой для тренера.

4. Отсутствие использования QUEUE:
  • QUEUE в вашем коде используется только для определения хранилища очереди. Но вы не используете QUEUE в своих командах ENTER и LEAVE.

Исправленный код:
 GENERATE 100, 60                      ; Генерация клиента каждые 60 минут  
ENTER Queue ; Вход клиента в очередь
SEIZE Administrator ; Администратор захватывает ресурс
ADVANCE 30 ; Администратор заполняет данные о клиенте в течение 30 минут
RELEASE Administrator ; Администратор освобождает ресурс
DECIDE 0.7, Queue, ANKETA, END ; Клиент заполняет анкету с вероятностью 70%

ANKETA ADVANCE 30 ; Если клиент заполнил анкету, ждет 30 минут
ENTER Queue ; Клиент возвращается в очередь

INCARNATE ; Переход к следующему шагу
SEIZE Trainer ; Занятие тренера
ADVANCE 60 ; Проведение тренировки продолжительностью 60 минут
RELEASE Trainer ; Тренер освобождает ресурс
ADVANCE 10 ; Подведение итогов
LEAVE Queue ; Клиент уходит
TERMINATE ; Окончание моделирования процесса


Queue STORAGE 0 ; Очередь
Administrator FACILITY 1 ; Ресурс (администратор)
Trainer FACILITY 1 ; Ресурс (тренер)
ANKETA LABEL ; Метка для анкеты
END LABEL ; Метка для завершения процесса
  • Эта модель не учитывает количество тренеров и администраторов.
  • Вы можете добавить в свою модель более сложные функции, например, статистику о времени ожидания в очереди или количестве заполненных анкет.
TerlisЗнаток (400) 3 недели назад
Извините, что докучаю!! Но он всё еще не может показать мне результат, выдает вот это..:
Если возможно, пожалуйста, объясните почему((
Инспектор Жопидý Просветленный (40690) 3 недели назад
В коде есть несколько ошибок. Вот исправленный вариант и пояснения:
GENERATE 100, 60 ; Генерация клиента каждые 60 минут
ENTER Queue ; Вход клиента в очередь
SEIZE Administrator ; Администратор захватывает ресурс
ADVANCE 30 ; Администратор заполняет данные о клиенте
RELEASE Administrator ; Администратор освобождает ресурс
DECIDE 0.7, ANKETA, INCARNATE ; Клиент заполняет анкету с вероятностью 70%

ANKETA TRANSFER (Queue, 30) ; Анкета заполнена, клиент возвращается в очередь

INCARNATE ADVANCE 10 ; Подведение итогов
LEAVE Queue ; Клиент уходит

GENERATE 100, 60 ; Генерация клиента каждые 60 минут
ENTER Queue ; Вход клиента в очередь
SEIZE Trainer ; Занятие тренера
ADVANCE 60 ; Проведение тренировки
RELEASE Trainer ; Тренер освобождает ресурс
TRANSFER ,INCARNATE ; Переход к подведению итогов

Queue STORAGE 0 ; Очередь
Administrator FACILITY 1 ; Ресурс (администратор)
Trainer FACILITY 1 ; Ресурс (тренер)
ANKETA LABEL ; Метка для заполнения анкеты
INCARNATE LABEL ; Метка для подведения итогов

START 1 ; Запуск моделирования

Пояснения к исправлениям:
1. DECIDE:
o Вместо DECIDE 0.7, Queue, ANKETA, ANKETA теперь DECIDE 0.7, ANKETA, INCARNATE.
o В DECIDE нельзя использовать имя очереди (Queue) как метку. Нужно указать корректные метки для перехода в зависимости от условия.
2. TRANSFER:
o Убран лишний TRANSFER после RELEASE Administrator, так как клиент уже находится в нужном месте (после INCARNATE).
o Добавлен TRANSFER ,INCARNATE после RELEASE Trainer, чтобы клиент после тренера переходил к блоку INCARNATE для подведения итогов.
3. JUMP INCARNATE:
o Удален блок JUMP INCARNATE, так как он создавал бесконечный цикл и не имел смысла в контексте программы.
4. TERMINATE:
o Удалены лишние операторы TERMINATE. Достаточно одного в конце программы для завершения моделирования.
5. END LABEL:
o Заменено на INCARNATE LABEL. Метка END зарезервирована в GPSS, ее нельзя использовать для других целей.
6. START 1:
o Добавлен блок START 1 в конце программы для запуска моделирования на 1 запуск.
Рекомендация:
Перед запуском кода GPSS всегда полезно проверить его на наличие синтаксических ошибок и логических несоответствий.
TerlisЗнаток (400) 3 недели назад
Простите, но у меня снова выдает ошибку..
Но спасибо большое, что ответили
olimchik Мастер (1050) 3 недели назад
Для исправления ошибок в вашей программе на языке GPSS, нужно выполнить следующие изменения:

1. Правильный синтаксис DECIDE: У команды DECIDE неправильный синтаксис. Попробуйте использовать DECIDE с метками, как показано ниже.
2. Команда TRANSFER требует корректировки: Синтаксис команды TRANSFER должен быть исправлен.
3. Корректировка операторов и меток: Проверьте правильность использования операторов и меток.

Вот исправленный код:
 GENERATE 100, 60                      ; Генерация клиента каждые 60 минут  
ENTER Queue ; Вход клиента в очередь
SEIZE Administrator ; Администратор захватывает ресурс
ADVANCE 30 ; Администратор заполняет данные о клиенте в течение 30 минут
RELEASE Administrator ; Администратор освобождает ресурс
DECIDE 0.7, FILL_FORM, SKIP_FORM ; Клиент заполняет анкету с вероятностью 70%
FILL_FORM ADVANCE 30 ; Если клиент заполнил анкету - переход к следующему шагу через 30 минут
TRANSFER ,END ; Переход к концу процесса
SKIP_FORM TRANSFER ,QUEUE ; Переход обратно в очередь

END TERMINATE ; Окончание моделирования процесса

GENERATE 100, 60 ; Генерация клиента каждые 60 минут
ENTER Queue ; Вход клиента в очередь
SEIZE Trainer ; Занятие тренера
ADVANCE 60 ; Проведение тренировки продолжительностью 60 минут
RELEASE Trainer ; Тренер освобождает ресурс
ADVANCE 10 ; Подведение итогов
LEAVE Queue ; Клиент уходит

Queue STORAGE 0 ; Очередь
Administrator FACILITY 1 ; Ресурс (администратор)
Trainer FACILITY 1 ; Ресурс (тренер)
Основные изменения:

1. Заменил DECIDE 0.7, Queue, ANKETA, ANKETA на DECIDE 0.7, FILL_FORM, SKIP_FORM.
2. Изменил синтаксис для команд TRANSFER и добавил метки FILL_FORM и SKIP_FORM.

Проверьте эту версию программы на корректность. Если возникнут дополнительные ошибки или вопросы, предоставьте информацию о них для дальнейшей помощи.
TerlisЗнаток (400) 2 недели назад
Спасибо огромное Вам за ответ! Но всё еще ничего не получается..
Похожие вопросы