Поскольку ваш клиент - это вы сами, вам необходимо решить вопрос на все вопросы, которые Марк Байерс задал. Тем не менее, я дам вам несколько советов, и, надеюсь, они помогут вам.
Давайте предположим, что ваш завод берет несколько разных деталей и собирает их в один готовый продукт. Блок-схема процесса сборки может выглядеть следующим образом:
Блок-схема фабрики http://img62.imageshack.us/img62/863/factoryflowchart.jpg
Для первого ромба, где собраны виджеты A и B, предположим, что на выполнение этого шага уходит в среднем 30 секунд. Предположим, что фактическое время, необходимое для сборки двух виджетов, распределено обычно , со средним значением 30 с и дисперсией 5 с. Предположим, что для второго алмаза это также занимает в среднем 30 секунд, но в большинстве случаев это занимает не так много времени, а в других случаях это занимает намного больше времени. Это хорошо аппроксимируется экспоненциальным распределением с 30 с в качестве параметра скорости, часто представляемым в уравнениях лямбда-выражением.
Для первого процесса вычислите время для сборки виджетов A и B как:
timeA = randn(mean, sqrt(variance)); // Assuming C# has a function for a normally
// distributed random number with mean and
// sigma as inputs
Для второго процесса вычислите время добавления виджета C к сборке как:
timeB = rand()/lambda; // Assuming C# has a function for a uniformly distributed
// random number
Теперь ваше общее время сборки для каждого iGadget будет timeA + timeB + waitingTime
. В каждой точке сборки сохраняйте очередь виджетов, ожидающих сборки. Если вторая точка сборки является узким местом, ее очередь заполнится. Вы можете принудительно установить максимальный размер для его очереди и удерживать вещи дальше по потоку, когда этот максимальный размер будет достигнут. Если элемент находится в очереди, его время сборки увеличивается на все iGadget, находящиеся перед ним в сборочной линии. Я оставлю на ваше усмотрение, чтобы выяснить, как это закодировать, и вы можете провести множество испытаний, чтобы посмотреть, каково будет общее время сборки в среднем. Как выглядит результирующее распределение?
Способы "оживить это":
- Требуется 3 виджета B для каждого виджета A. Поиграйте с инвентарем. Пополнять инвентарь через случайные интервалы.
- Добавьте проверку обеспечения качества (здесь полезно использовать экспоненциальное распределение) и отклоните некоторые готовые iGadgets. Я предлагаю использовать низкий процент отказов.
- Попробуйте использовать другие распределения вероятностей, чем те, которые я предложил. Посмотрите, как они влияют на вашу симуляцию. Всегда пытайтесь выяснить, как входные параметры для распределений вероятностей будут отображаться в реальных значениях.
Вы можете многое сделать с помощью этого простого моделирования. Следующим шагом будет обобщение вашего кода, чтобы вы могли иметь произвольное количество виджетов и этапов сборки. Это не так просто. Существует целая область прикладной математики под названием исследование операций , которая посвящена этому типу моделирования и анализа.