имитация цеха - PullRequest
       9

имитация цеха

11 голосов
/ 29 января 2010

Я хотел бы создать симуляцию фабричного цеха и ищу идеи, как это сделать. Мои мысли до сих пор:

• Фабрика состоит из множества процессов, некоторые из которых идут последовательно, а некоторые - параллельно. Каждый процесс будет взаимодействовать со своими восходящими, нисходящими и параллельными соседями, чтобы сообщить им о том, что он прошел через

• Каждый процесс будет иметь свои основные атрибуты, такие как максимальная пропускная способность, стоимость обслуживания в результате сквозного ввода

Очевидно, я не до конца продумал это, но я надеялся, что кто-нибудь сможет дать мне несколько идей или, возможно, ссылку на онлайновый ресурс

обновление: Этот проект только для моего собственного развлечения, и, возможно, учиться немного по пути. Я не работаю программистом, программирование для меня просто хобби. Я решил написать это на C #.

Ответы [ 5 ]

4 голосов
/ 29 января 2010

Поскольку ваш клиент - это вы сами, вам необходимо решить вопрос на все вопросы, которые Марк Байерс задал. Тем не менее, я дам вам несколько советов, и, надеюсь, они помогут вам.

Давайте предположим, что ваш завод берет несколько разных деталей и собирает их в один готовый продукт. Блок-схема процесса сборки может выглядеть следующим образом:

Блок-схема фабрики 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. Я предлагаю использовать низкий процент отказов.
  • Попробуйте использовать другие распределения вероятностей, чем те, которые я предложил. Посмотрите, как они влияют на вашу симуляцию. Всегда пытайтесь выяснить, как входные параметры для распределений вероятностей будут отображаться в реальных значениях.

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

4 голосов
/ 29 января 2010

Точное моделирование всего завода - большая работа.

Во-первых, вам нужно выяснить: почему вы делаете симуляцию? Кто это для? Какую ценность это даст им? Какие части симуляции интересны? Насколько точным это должно быть? Какие части процесса не нужно точно моделировать?

Чтобы выяснить ответы на эти вопросы, вам нужно поговорить с тем, кто хочет, чтобы имитация была написана.

После того, как вы выяснили, что имитировать, вам нужно выяснить, как имитировать это. Вам нужны некоторые модели и некоторые параметры для этих моделей. Вы можете получить некоторые реальные цифры из реального производства и попытаться получить модели из фигур. Модели могут представлять собой простые линейные отношения между входом и выходом, более сложные отношения и, возможно, даже случайный (случайный) эффект. Если у вас нет доступа к реальным данным, вам придется угадывать в вашей модели, но это никогда не будет так хорошо, поэтому старайтесь получать реальные данные везде, где это возможно.

Возможно, вы также захотите рассмотреть вероятность поломки компонентов и то, как это может повлиять. Как насчет рабочих бастующих? Недоступность сырья? Износ оборудования приводит к постепенному снижению производительности с течением времени? Опять же, вы можете не захотеть рассматривать эти детали, это зависит от того, что хочет клиент.

Если ваше моделирование включает в себя случайные события, вы можете запустить его много раз и получить средний результат, например, используя Монте-Карло моделирование.

Чтобы дать лучший ответ, нам нужно знать больше о том, что вам нужно моделировать и чего вы хотите достичь.

1 голос
/ 30 января 2010

То, что вы описываете, является классической проблемой, решаемой с помощью моделирования дискретных событий. Для моделирования задач такого типа было разработано множество языков моделирования общего и специального назначения. Хотя я бы не рекомендовал программировать что-либо «с нуля» для «реальной» проблемы, может оказаться полезным написать собственный код для небольшой проблемы с очередями, чтобы вы могли понять планирование событий, генерацию случайных чисел, отслеживание календарей и т. Д. После того, как вы это сделаете, язык моделирования общего назначения сделает все это за вас, чтобы вы могли сосредоточиться на общей картине.

Хороший справочник: Law & Kelton . ARENA - это стандартная упаковка. Он широко используется и, IMHO, очень универсален для такого рода симуляций. Книга ARENA также является достойной книгой по симуляции и поставляется с программным обеспечением, которое можно применять для решения небольших задач. Чтобы моделировать большие проблемы, вам нужно получить лицензию. Вы должны быть в состоянии загрузить пробную версию ARENA здесь .

0 голосов
/ 29 января 2010

Это может быть больше, чем вы ищете, но визуальные компоненты - хороший инструмент для промышленного моделирования.

Чтобы быть ясным, я не работаю на них, и компания, в которой я работаю в настоящее время, не использует их, но мы рассмотрели их.

0 голосов
/ 29 января 2010

Автомод это путь. http://www.appliedmaterials.com/products/automod_2.html

Есть чему поучиться, и это будет недешево.

Компания ASI Automod работает в сфере симуляции производства уже около 30 лет. Это теперь принадлежит Прикладным Материалам. Крупные игроки, которые занимаются погрузочно-разгрузочными работами на складе, используют Automod, потому что он является проверенным лидером.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...