이 기사에서는 간단한 AGV 시뮬레이션 모델 을 제시합니다 . 공장에서 부품 라우팅을 시뮬레이션하는 방법에 대한 예입니다. AnyLogic에서 시뮬레이션을 구현했습니다.
나는 이미 AnyLogic에 대한 몇 가지 다른 기본 소개를 제공했습니다. 더 구체적으로 말하자면, 저는 이전에 YT 비디오 시리즈에서 몇 가지 기본 컨베이어 모델을 소개했습니다. 다음은 AnyLogic 시뮬레이션 모델링에 대한 몇 가지 기본 소개 목록입니다.
- Link : AnyLogic의 간단한 컨베이어 라인 모델
- Link : AnyLogic에 박차가 있는 컨베이어 라인
- Link : AnyLogic의 Work Station이 있는 컨베이어 라인
- Link : AnyLogic에서 조립 작업자가 있는 컨베이어 라인
- 링크 : AnyLogic의 컨베이어 워크스테이션에서 일괄 조립 공정
- Link : AnyLogic의 모바일 어셈블리 작업자
다음 단락의 아래 그림에서 AGV 시뮬레이션의 개념적 레이아웃을 설명했습니다.
라우팅과 함께 AGV 시뮬레이션에 AnyLogic 사용
이 블로그의 이전 게시물에서 이미 다양한 이산 이벤트 시뮬레이션 소프트웨어 옵션을 소개했습니다. 아래에 몇 가지 예를 나열합니다. 분명히 저는 무료 공개 시뮬레이션 도구 와 프레임워크의 팬입니다(예: “simmer” 참조). 그러나 AnyLogic은 상용 도구입니다.
- 링크 : R에서 끓인 주차장 시뮬레이터
- 링크 : ProModel AutoCAD 시뮬레이션 에디션
- Link : Visual Components 재무 KPI 시뮬레이션
- 링크 : 불연속 이벤트 시뮬레이션을 위해 R에서 끓이기
- Link : Simmer를 이용한 입고 검사 시뮬레이션
- 링크 : FIFO 생산 백로그 시뮬레이션
다양한 시뮬레이션 프로젝트를 통해 위에 나열된 도구뿐만 아니라 다양한 이산 이벤트 시뮬레이션 도구 로 작업했습니다. 그러나 재료 흐름 연구에 포함된 AGV 시뮬레이션의 경우 AnyLogic 및 Simio가 최고의 이산 이벤트 시뮬레이션 도구 중 하나라는 것을 알았습니다 . 나는 또한 AGV 시뮬레이션과 관련하여 FlexSim 및 Plant Simulation의 기능을 보았고 여러분도 그럴 수 있습니다. 하지만 커스터마이징이 가능하다는 점에서 저는 AnyLogic을 선호합니다. 주로 구조, 문서화 및 투명성과 AnyLogic이 JAVA로 코딩되어 있다는 사실 때문입니다.
시뮬레이션 연구에는 절차 모델이 필요합니다.
공급망 분석가가 시뮬레이션에 들어갈 때 자주 관찰하는 일반적인 실수는 바로 모델링으로 넘어가는 것입니다. 그러나 좋은 시뮬레이션 모델 은 시뮬레이션 연구의 목적이 명확하게 정의되어야만 개발될 수 있습니다. 더욱이 이것은 일반적으로 관련된 모든 당사자가 기본 시스템이나 문제를 완전히 이해한 후에만 가능합니다. 모든 시뮬레이션 연구에 절차 모델을 사용하는 것이 좋습니다. 아래 그림은 내 절차 모델을 보여줍니다.
사실 제가 적용한 절차 모델은 이전 포스트에서 이 블로그에 게시된 적이 있습니다. 다음은 두 가지 관련 기사입니다.
- 링크 : 이산사건 시뮬레이션 절차 모델
- Link : 시뮬레이션 기반 용량 계획
따라서 시뮬레이션 연구의 초기 단계에서 상황을 완전히 이해하는 것이 중요합니다. 이 단계에 대한 적절한 용어는 예를 들어 상황 분석, 격차 분석 및 문제 정의입니다. 데이터 수집은 이 단계의 일부입니다. 그 후, 나는 일반적으로 개발할 시뮬레이션 모델 의 일부인 것과 포함하지 않는 것을 명시적으로 정의합니다 . 예를 들어, 취리히(스위스)에서 트램 운행과 트램 일정을 시뮬레이션한 적이 있습니다. 나는 그 프로젝트에서 트램 레일을 막는 보행자 흐름을 자세히 구현하지 않기로 결정했습니다. 대신 랜덤 분포 곡선을 사용하여 레일 막힘 빈도와 지속 시간을 설명했습니다.
결국 시뮬레이션 연구는 레이아웃과 개념 모델을 개발하여 진행됩니다. 개념적 모델링에는 예를 들어 관련 장비에 대한 상태 전환 다이어그램의 정의뿐만 아니라 흐름도 작성이 포함됩니다. 이것은 실제 시뮬레이션 모델링 구현을 훨씬 쉽게 만들고 잘 구조화된 코드를 보장합니다.
AGV 시뮬레이션의 간단한 레이아웃을 스케치했습니다.
내가 작업하는 프로젝트에 따라 일반적으로 대략적인 레이아웃을 직접 그립니다. 또는 클라이언트 엔지니어링 팀에서 나에게 제공한 AutoCAD 도면(또는 이와 유사한 것)에 의존할 것입니다.
위 그림은 롤러 컨베이어를 통해 수신된 입력 재료를 전달하는 중앙 수신 영역을 나타냅니다. 크레인 또는 로봇은 컨베이어 끝에 있는 AGV에 부품을 배치합니다.
AGV는 초기 입고에서 자재 흐름을 용이하게 합니다.
AnyLogic에서 이 AGV 시뮬레이션의 핵심을 나타내는 AGV는 부품을 작업 영역으로 라우팅합니다. 이 라우팅 프로세스에는 매우 복잡한 수준에서 의사 결정이 필요할 수 있습니다.
예를 들어 가장 가까운 AGV를 작업에 할당하거나 사용률이 가장 낮은 AGV를 할당할 수 있습니다. 실제 라우팅 결정을 모델링하고 싶은 상황에 직면할 수도 있습니다. 즉, 하나의 AGV는 경로 A를 사용하고 다른 AGV는 AGV 레인 네트워크를 통해 경로 B를 사용합니다.
AnyLogic에서 AGV 시뮬레이션 구현
AnyLogic에서 이 AGV 시뮬레이션을 구현했습니다. 모델의 스크린샷은 아래에서 볼 수 있습니다.
기본적으로 모델은 부품 도착을 생성하는 소스로 구성됩니다. 이러한 부품 도착은 컨베이어로 전달됩니다. 부품이 컨베이어의 정의된 끝 위치에 도착하면 운송 작업이 해제됩니다. 실제로 이 작업 디스패치 프로세스는 기본 AnyLogic 프로세스입니다. 그러나 JAVA를 사용하여 사용자 지정 작업 디스패치 논리를 구현할 수 있었습니다.
위에서 설명한 대로 기본 AnyLogic 논리를 사용하여 AGV 중 하나가 전송에 할당되면 모델은 부품을 전송할 작업 영역을 결정합니다. 이를 위해 데모 목적으로 사용자 정의하지만 간단한 결정 로직을 구현했습니다. 아래의 다음 장에서 이 사용자 정의 논리에 대해 설명합니다.
이것은 간단한 예이므로 작업 영역을 자세히 구현하지 않았습니다. 또한 컨베이어 출구에서 로봇이나 크레인의 픽 앤 플레이스 작업을 세부적으로 구현하지도 않았습니다. 내 절차 모델을 참조하면 이것은 완전히 괜찮습니다. 연구 목표와 문제 정의가 이러한 프로세스 단계를 특정 세부사항으로 구현해야 한다고 나타내지 않는 한 더 높은 추상화 수준에서 이러한 프로세스 단계를 구현하는 것이 “허용”됩니다. 픽 앤 플레이스 작업은 예를 들어 시간 지연으로 모델링될 수 있습니다. 이 시간 지연은 선택한 자재 취급 장비에 적합한 경우 무작위로 분배될 수 있습니다.
사실 또 다른 추상화는 작업 영역을 시각화하지 않았으며 이를 나타내는 사용자 정의 개체를 구현하지 않았다는 것입니다. 대신 AnyLogic의 기본 노드 개체를 사용했습니다. 현재 활성 대상 노드, 즉 현재 관련 작업 영역은 스테이션 변수에 의해 참조됩니다. 이 변수는 사용자 지정 라우팅 알고리즘에 의해 업데이트됩니다. 이 기사에서 더 자세히 설명하겠습니다.
부품이 작업 영역에 도착하면 부품은 지정된 기본 시간 동안 작업 영역에 머뭅니다. 결국 부품이 싱크대에 들어갑니다. 싱크가 부품을 삭제하여 모델에서 제거합니다.
JAVA로 커스텀 라우팅 결정 구현하기
AGV 시뮬레이션을 구현할 때 영향을 미치고 싶은 한 가지는 라우팅 결정입니다. 이는 라우팅이 모든 자재 흐름을 용이하게 하기 때문입니다. 이 경우 입고에서 도착하는 각 부품이 동일한 입력 재료(예: 밀링 또는 기타 처리를 위한 원시 부품)를 나타낸다고 가정하면 재료 유형을 기준으로 라우팅할 수 없습니다. 대신 작업 센터 활용도 또는 기타 기준을 기반으로 라우팅할 수 있습니다. 요점은 라우팅 결정을 쉽게 사용자 지정할 수 있어야 한다는 것입니다. AnyLogic에서 이를 수행하는 방법에 대한 간단한 예를 제공하기 위해 이 블로그 게시물을 작성했습니다.
이 간단한 AGV 시뮬레이션 모델 에서 저는 4개의 변수와 1개의 기능으로 사용자 지정 라우팅을 용이하게 합니다.
- output_01 ~ output_03 은 각 작업 영역에 전달된 총 부품 수를 측정합니다.
- 스테이션 은 부품 대상 작업 영역(AnyLogic 노드 개체)을 참조합니다.
- set_route 는 맞춤형 라우팅 결정을 용이하게 하는 기능입니다.
아래 스크린샷은 set_route 함수의 내용을 표시합니다.
set_route 함수는 단순히 순환 라우팅을 구현합니다 . 즉, 첫 번째 부분은 station_a 로 가고, 두 번째 부분은 station_b 로 가는 식 입니다. 그러나 필요한 경우 추가 기능과 변수, 기타 유형의 의사 결정을 지정할 수 있습니다. 결국 구현해야 할 논리는 특정 상황에 따라 다릅니다.
set_route 함수는 에이전트가 논리 블록의 아래 체인에서 moveTo_a 블록에 들어갈 때마다 호출 됩니다 .
이 논리 블록 체인은 다음 흐름을 구현합니다.
- src 는 간격 시간이 무작위로 분포된 부품을 생성합니다.
- 컨베이어 마크업의 시작 위치에서 끝 위치까지 부품을 전달합니다 .
- get_transport 는 AGV가 컨베이어 출구에서 부품을 픽업하도록 요청합니다.
- moveTo_a 는 set_route 를 호출 하고 스테이션 의 노드 참조로 부품을 전송합니다.
- 지연 은 부품이 일정 시간 동안 노드(작업 영역을 나타냄)에 머물게 합니다.
- 싱크 는 모델에서 부품을 제거합니다.
moveTo_a 블록의 OnEnter 섹션에서 함수 호출을 지정할 수 있습니다. 아래 스크린샷을 참조하세요.
결론 및 관련 내용
이 간단한 AGV 시뮬레이션 예제에서 저는 AnyLogic에서 부품 라우팅을 사용자 정의하는 방법을 보여주었습니다. 이 예에서 사용된 라우팅 기준과 라우팅 로직은 매우 간단했습니다. 실제 라우팅 알고리즘은 종종 더 정교하고 작동하는 공장의 요구 사항에 맞게 조정됩니다. 이러한 라우팅 알고리즘은 빠르게 복잡해지고 어려울 수 있습니다.
이 기사 전체에서 이미 관련 콘텐츠에 대한 다양한 링크를 제공했습니다. 그럼에도 불구하고 관심 있는 독자와 공유하고 싶은 몇 가지 추가 기사가 있습니다.
- 링크 : 분석적으로 해결된 대기열 시스템
- 링크 : Python의 에이전트 기반 시뮬레이션
- 링크 : 머신 러닝 및 이산 이벤트 시뮬레이션
최적화 및 시뮬레이션을 전문으로하는 산업 엔지니어 (R, Python, SQL, VBA)
Leave a Reply