Шаг 9. Учет смены предпочитаемого продукта при долгом ожидании

Согласно нашей постановке задачи, если потребитель слишком долго безуспешно ждет появления в продаже какого-то определенного продукта, то он теряет терпение и согласен приобрести любой продукт (A или B), который быстрее появится в наличии, поэтому становится возможной смена предпочтений пользователя. Чтобы учесть такое поведение, достаточно лишь слегка изменить диаграмму состояний потребителя: нужно добавить два срабатывающих по таймауту перехода из состояний WantA и WantB в новое состояние WantAnything. В свою очередь, из этого состояния в состояния UsesA и UsesB будут вести два альтернативных перехода, срабатывающих при покупке продукта того или иного типа.

  1. Добавьте новое состояние WantAnything в середину диаграммы состояний потребителя. Нарисуйте два перехода, ведущие в это состояние из состояний WantA и WantB соответственно. Назовите их GiveUpWainingA и GiveUpWaitingB. Оба перехода должны срабатывать По таймауту, с таймаутом, равным 2 единицам времени. Создайте копию перехода BuyA (этот новый переход будет называться BuyA1) и сделайте так, чтобы он вел из состояния WantAnything в состояние UsesA. Аналогичным образом создайте копию перехода BuyB. Оставьте свойства срабатывания переходов без изменений. В свойстве Действие при входе состояния WantAnything напишите person.setFillColor(gold);

Срабатывающие по истечению таймаута переходы ограничивают время ожидания определенного продукта до 5 единиц времени. Перейдя в состояние WantAnything, потребитель начинает отслеживать доступность обоих продуктов и купит тот продукт, который появится в наличии первым.

  1. В редакторе класса Main щелкните по объекту consumers и добавьте еще одну функцию сбора статистики (на странице свойств Статистика). Назовите ее NWantAny и задайте условие item.statechart.isStateActive( item.WantAnything )
    Добавьте на диаграмму еще один элемент данных со Значением consumers.NWantAny() и золотым цветом gold.
  2. Запустите модель.

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


  1. Измените действия событий updateProductionA и updateProductionB следующим образом: напишите
    ProductionA = consumers.NWantA() + consumers.NWantAny();
    и
    ProductionB = consumers.NWantB() + consumers.NWantAny();
Таким образом мы учитываем при анализе спроса и тех потребителей, которые готовы приобрести любой продукт.
  1. Запустите модель.

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


Контрольная модель: AB Market and SD Supply Chain - Phase 9


          Шаг 8. Добавление в модель продукта B

          Экспериментирование с моделью