1 / 34

제 9 장 Arena 통합 및 Customization

제 9 장 Arena 통합 및 Customization. 주요 내용. 각 개체의 도착시각을 외부 파일로 부터 읽어 개체 생성 ( 텍스트 파일 ) ActiveX 자동화와 VBA 를 이용한 다른 응용 프로그램과 통합 고객 사용자 인터페이스 생성 예제 콜센터 모델 개선 – 개별 통화 데이터 기록을 Excel 에 차트로 표현 자체 모듈 설계 – 표준 모델링 구조의 확장. 모델 9-1: 기록된 데이터로부터 개체 도착 생성. 콜 센터 모델에서 통화 도착 데이터 읽어 통화 생성

maxine
Download Presentation

제 9 장 Arena 통합 및 Customization

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 제 9장 Arena 통합 및 Customization

  2. 주요 내용 • 각 개체의 도착시각을 외부 파일로 부터 읽어 개체 생성(텍스트 파일) • ActiveX 자동화와 VBA 를 이용한 다른 응용 프로그램과 통합 • 고객 사용자 인터페이스 생성 예제 • 콜센터 모델 개선 – 개별 통화 데이터 기록을 Excel에 차트로 표현 • 자체 모듈 설계 – 표준 모델링 구조의 확장 추가 모델링 사항

  3. 모델 9-1: 기록된 데이터로부터 개체 도착 생성 • 콜 센터 모델에서 통화 도착 데이터 읽어 통화 생성 • model 09-01.txt: ASCII 텍스트 파일 추가 모델링 사항

  4. 모델 9-1: 기록된 데이터로부터 개체 도착 생성 • Create 모듈 수정 • ReadWrite 모듈 (데이터 입력) 추가 모델링 사항

  5. 모델 9-1: 기록된 데이터로부터 개체 도착 생성 • Delay 모듈: 다음 통화 간격 지연 • 다음 도착 생성을 위한 개체 생성: Separate 모듈 추가 모델링 사항

  6. 모델 9-1: 기록된 데이터로부터 개체 도착 생성 • File 데이터 모듈 추가 모델링 사항

  7. VBA in ARENA • Visual Basic for Applications(VBA) • Arena에 내장됨 • Arena 모델 로직 확장을 위한 개별 코드 작성 • ActiveX 자동화 및 VBA 개요 • ActiveX: 응용프로그램들이 프로그래밍 인터페이스를 통해 서로 제어할 수 있도록 함. • Excel 에서 Macro 생성 : ActiveX 인터페이스를 통해 셀 포맷 지정, 수식 변경, 차트 생성 등을 가능케하는 VBA 코드 • 객체 모델(Object Model) 사용 • 애플리케이션 객체 목록: 엑셀 워크시트, 차트, 셀 등 • 프로퍼티: 워크시슽 이름, 차트 제목 등 • 메소드: 워크시트 삭제, 차트 생성, 셍 병합 등 추가 모델링 사항

  8. VBA in ARENA • VBA: 프로그래밍 언어 • Visual Basic 엔진과 동일 • Microsoft Office, AutoCAD, Arena 등에 내장됨 • 주요 기능 • 비주얼베이직 프로그래밍 구조체: Sub, Function, Class, If, Elseif, Endif, While, Wend, Do, On Error, Select Case • 사용자 폼: 토글 버튼, 스크롤 바, 입력 박스, 명령 버튼, 스핀 버튼 • 코드 디버깅 도구: Watches, Breakpoint, Step 옵션 • 온라인 도움말 • Visual Basic Editor 추가 모델링 사항

  9. VBA in ARENA • VB Editor 추가 모델링 사항

  10. VBA in ARENA • 내장형 Arena VBA Events • ThisDocument: Arena 모델내의 다양한 Event 에 Access할 수 있는 객체 • ModelLogic 객체를 선택하여 이벤트를 선택하여 코딩 • 3가지 이벤트 유형 • 실행 전 이벤트: DocumentOpen, DocumentSave • Arena 기동 실행 이벤트: RunBegin, RunBeginSimulation, RunEndReplication • 모델/사용자 기동 실행 이벤트: UserFunction, VBA_Block_Fire, OnKeyStroke 추가 모델링 사항

  11. VBA in ARENA • 시뮬레이션 실행 VBA 이벤트 1. RunBegin 2. Arena Checks Initiaialize Model 3. RunBeginSimulation 4. RunBeginReplication 5. Arena Runs Replication OnKeyStroke UserFunction 등 6. RunEndReplication 7. RunEndSimulation 8. Arena 시뮬레이션 종료 9. RunEnd 추가 모델링 사항

  12. VBA in ARENA • ModelLogic_RunBegin 호출 • VBA 코드는 모델의 구조적인 데이터 수정 가능 – 모듈 오퍼랜드 값 • 실행 중 값들은 수정 불가 • Arena 는 모델을 체크하고 실행상태로 초기화 • 변수값 초기화 • 자원상태 초기화: Idle, 초기 용량 • ModelLogic_RunBeginSimulation 호출 • 시뮬레이션 실행 초기에 1회 실행할 VBA 코드 삽입 • Excel, Access, Oracle 등 외부로부터 데이터 로드 • UserForm 디스플레이 • Arena 모델의 변수에 값 지정가능 추가 모델링 사항

  13. VBA in ARENA • ModelLogic_RunBeginReplication 호출 • 각 반복실험 실행시 마다 호출 • RunBeginSimulation에서 실행할 수 있는 것과 유사 • Arena 시뮬레이션 수행 • VBA 코드 활성화 가능 • ModelLogic_UserFunction : Arena 에서 UF 변수참조 , 복잡한 수식 및 의사결정 기준 정의 • ModelLogic_VBA_Block_Fire : 개체가 VBA 모듈(Blocks 패널)을 지나갈 때 호출, 예: 개체가 모델을 떠날 때 엑셀에 상세 정보 기록 • ModelLogic_OnKeyStroke: 시뮬레이션 도중 사용자가 지정 키를 누르면 호출, 예: 1 키를 누르면 모델 요약상태를 보여주는 폼 디스플레이 • ModelLogic_OnClearStatistics: 통계치를 비워야 하는 경우(시뮬레이션 시간이 웝업 기간에 도달) 호출, 표준적인 통계치 초기화를 보강해야 하는 경우 VBA 코드 사용 추가 모델링 사항

  14. VBA in ARENA • ModelLogic_RunEndReplication 호출 • 반복실험 종료시 마다 호출 • 요약정보를 외부파일에 저장, 전역 변수 증가 등에 사용 • 중간에 종료되는 경우에는 실행되지 않음 • ModelLogic_RunEndSimulation 호출 • 시뮬레이션 종료시 호출 • 실행 중 데이터 활용 가능: 통계치, 자원 상태 등 엑세스 가능 • 파일, 스프레드 시트, DB 에 통계치 쓰기, 파일 닫기, 종료 메시지 디스플레이 등 포함 • 시뮬레이션 종료 • ModelLogic_RunEnd 호출 • 실행 중 데이터 접근 불가하나 다른 VBA 기능은 가능 • 예: 계속 실행 여부를 묻는 폼 디스플레이 추가 모델링 사항

  15. VBA in ARENA • Arena의 객체 모델 • 객체(Objects) 또는 개체: 보기/개체 찾아 보기 • 프로퍼티(Property) • 메소드(Method) • Collections of Objects • 객체 종류 • 모델 윈도우 객체: Arena 모델 창에 나타날 수 있는 모든 항목 – 모듈, 연결선, 선, 다각형, 문자, 애니메이션 객체, named Views • SIMAN 객체: 시뮬레이션 실행과 관련된 정보 접근 객체 – 변수 값, 자원 용량, 대기열의 길이, 현재 시각 등 • 구조 객체: 일반 Arena 기능에 접근하기 위한 객체 – 애플리케이션, 모듈 정의, 패널 객체 등 추가 모델링 사항

  16. VBA in ARENA • 모델 창 예: 10 개의 상태변수 값을 위치를 바꾸어 모델 창에 디스플레이 Dim oModel As Arena.Model Dim i As Integer Dim nX As Long ‘ Add the status variables to this Arena model Set oModel = ThisDocument.Model nX = 0 ‘Start at x position 0 For i=1 To 10 ‘ Add a status variable to the model window oModel.StatusVariables.Create nX, 0, _ nX + 400, 150, “WIP(“ & i & “)”, “**.*”, False, _ RGV(0,0,255), RGV(0,255,255), RGV(0,0,0), “Arial” ‘ Move over 500 world units for next position nX = nX + 500 Next i 추가 모델링 사항

  17. VBA in ARENA • SIMAN 객체 예: 변수값을 사용자에게 질의하는 메시지 창 디스플레이 Dim oSIMAN As Arena.SIMAN Dim nVarIndex As Long Dim sNewValue As String ‘ Prompt for a new value sNewValue = InputBox(“Enter the new average cycle time:”) ‘ Assign their answer to the Mean Cycle Time variable Set oSIMAN = ThisDocument.Model.SIMAN nVarIndex = oSIMAN.SymbolNumber(“Mean Cycle Time”) oSIMAN.VariableArrayValue(nVarIndex) = sNewValue 변수명을 내부 인덱스로 변환하는 함수 InputBox에 입력된 변수값으로 수정하는 프로퍼티 추가 모델링 사항

  18. Model 9-2: 사용자에 의한 도착 선택 • 고객 도착 정보를 사용자가 상호대화형으로 선택 • Random Interarrival-time process • Arrival time from a file 추가 모델링 사항

  19. Model 9-2: 사용자에 의한 도착 선택 • 도착 로직 수정 추가 모델링 사항

  20. Model 9-2: 사용자에 의한 도착 선택 • Create 모듈의 Max Arrivals에 의한 선택 • Random Process Craete 모듈의 Max Arrivals  0 & 파일 로직 Create 모듈의 Max Arrivals  1 : 파일 로직 선택 • Random Process Craete 모듈의 Max Arrivals  infinite & 파일 로직 Create 모듈의 Max Arrivals  0 : 랜덤 도착 로직 선택 • Create 모듈: model 5-2와 동일 & Max Arrivals = 0 추가 모델링 사항

  21. Model 9-2: 사용자에 의한 도착 선택 • Properties 대화상자를 이용한 모듈 Tag 참조/수정 • Object.nnn  Create from random process or Create from file 추가 모델링 사항

  22. Model 9-2: 사용자에 의한 도착 선택 • VBA 사용자 폼 설계 • Visual Basic Editor  삽입  사용자 정의 폼 메뉴 • 도구 상자 이용 폼 설계 • 프로퍼티 상자의 이름 필드 정의: frmArrivalTypeSelection optFromRandomProcess optFromFile cmdOK 추가 모델링 사항

  23. Model 9-2: 사용자에 의한 도착 선택 • 폼 디스플레이 및 모델 데이터 설정 추가 모델링 사항

  24. Model 9-2: 사용자에 의한 도착 선택 • 버튼 클릭 시 동작 코딩 • Create 모듈에 접근하기 위해 Create and Direct Arrivals 서브 모델을 연다. • Create 모듈의 Max Arrivals 난의 값을 설정한다. • 실행 준비를 위해 Top-level의 모델 애니메이션 뷰로 이동한다. • 재미를 위해 음악 들려주는 코드를 추가한다. • 사용자 정의 폼을 닫는다. • 서브 모델 열기 코드 Dim nArrivalsSubmodelIndex As Long Dim oArrivalsModel As Arena.Model With ThisDocument.Model.Submodels nArrivalsSubmodelIndex = _ .Find(smFindName, "Create and Direct Arrivals") Set oArrivalsModel = _ .Item(nArrivalsSubmodelIndex).Model End With oArrivalsModel.Show 추가 모델링 사항

  25. Model 9-2: 사용자에 의한 도착 선택 • Create 모듈 접근 코드 Dim nCreateRandomProcessIndex As Long Dim oCreateRandomProcessModule As Arena.Module Dim nCreateFileIndex As Long Dim oCreateFileModule As Arena.Module ' Find the two Create modules nCreateRandomProcessIndex = _ oArrivalsModel.Modules.Find(smFindTag, _ "Create from random process") If nCreateRandomProcessIndex = 0 Then MsgBox "No module with tag 'Create from random process'" frmArrivalTypeSelection.Hide Exit Sub End If Set oCreateRandomProcessModule = _ oArrivalsModel.Modules(nCreateRandomProcessIndex) nCreateFileIndex = _ oArrivalsModel.Modules.Find(smFindTag, "Create from file") If nCreateFileIndex = 0 Then MsgBox "No module with tag 'Create from file'" frmArrivalTypeSelection.Hide Exit Sub End If Set oCreateFileModule = oArrivalsModel.Modules(nCreateFileIndex) 추가 모델링 사항

  26. Model 9-2: 사용자에 의한 도착 선택 • Tag를 이용한 Create 모듈의 Max Arrivals 값 지정 • Top –level 뷰로 이동 ' Set the Max Arrivals fields If optFromRandomProcess.value = True Then oCreateRandomProcessModule.Data("Max Batches") = "Infinite" oCreateFileModule.Data("Max Batches") = "0" Else oCreateRandomProcessModule.Data("Max Batches") = "0" oCreateFileModule.Data("Max Batches") = "1" End If Dim oModel As Arena.Model Dim nAnimViewIndex As Long ' Return to the top-level model and show the Animation named view Set oModel = ThisDocument.Model oModel.Show nAnimViewIndex = oModel.NamedViews.Find(smFindName, "Animation") If nAnimViewIndex > 0 Then _ oModel.ActiveView.ZoomView oModel.NamedViews(nAnimViewIndex) 추가 모델링 사항

  27. Model 9-2: 사용자에 의한 도착 선택 • 음악 들려주기 코드 • 사용자 정의 폼 닫기 Dim nSoundFileIndex As Long ' Play the sound file nSoundFileIndex = _ oModel.Embeddeds.Find(smFindTag, "Mission Possible") If nSoundFileIndex > 0 Then _ oModel.Embeddeds.Item(nSoundFileIndex).Do ' Hide the UserForm to allow the run to begin frmArrivalTypeSelection.Hide Exit Sub 추가 모델링 사항

  28. Model 9-3: 실행 결과를 엑셀에 기록하고 차트 만들기 • 주요 내용 • 판매 통화 종료 시 통화 시작시간, 종료시간, 통화지속기간 데이터를 엑셀 시트에 기록 • 통화지속기간의 추세를 파악하기 위해 차트로 나타냄 • 실행 초기 엑셀 초기화 • 엑셀을 기동하여 새파일 만든다. • 전역 변수 선언 Option Explicit ' Global variables Dim oSIMAN As Arena.SIMAN, nArrivalTimeAttrIndex As Long Dim nNextRow As Long, nColumnA As Long, nColumnB As Long, nColumnC As Long ' Global Excel variables Dim oExcelApp As Excel.Application, oWorkbook As Excel.Workbook, _ oWorksheet As Excel.Worksheet 추가 모델링 사항

  29. Model 9-3: 실행 결과를 엑셀에 기록하고 차트 만들기 • 엑셀 객체 라이브러리 참조: 도구/참조  MicroSoft Excel 9.0 Object Library 선택 • RunBeginSimulation 코드 Private Sub ModelLogic_RunBeginSimulation() ' Set the global SIMAN variable Set oSIMAN = ThisDocument.Model.SIMAN ' Set global variable to store Arrival Time attribute index nArrivalTimeAttrIndex = oSIMAN.SymbolNumber("Arrival Time") ' Start Excel and create a new spreadsheet Set oExcelApp = CreateObject("Excel.Application") oExcelApp.Visible = True oExcelApp.SheetsInNewWorkbook = 1 Set oWorkbook = oExcelApp.Workbooks.Add Set oWorksheet = oWorkbook.ActiveSheet (뒷면에 계속) 추가 모델링 사항

  30. Model 9-3: 실행 결과를 엑셀에 기록하고 차트 만들기 With oWorksheet .Name = "Call Data" .Rows(1).Select oExcelApp.Selection.Font.Bold = True oExcelApp.Selection.Font.Color = RGB(255, 0, 0) .Rows(2).Select oExcelApp.Selection.Font.Bold = True oExcelApp.Selection.Font.Color = RGB(0, 0, 255) End With End Sub • RunBeginReplication 코드 Private Sub ModelLogic_RunBeginReplication() Dim nReplicationNum As Long, i As Integer ' Set variables for the columns to which data is to be written nReplicationNum = oSIMAN.RunCurrentReplication nColumnA = (4 * (nReplicationNum - 1)) + 1 nColumnB = nColumnA + 1 nColumnC = nColumnA + 2 추가 모델링 사항

  31. Model 9-3: 실행 결과를 엑셀에 기록하고 차트 만들기 ' Write header row for this day's call data and ' set nNextRow to 3 to start writing data in third row With oWorksheet .Activate .Cells(1, nColumnA).value = "Day " & nReplicationNum .Cells(2, nColumnA).value = "Start Time" .Cells(2, nColumnB).value = "End Time" .Cells(2, nColumnC).value = "Duration" For i = 0 To 2 .Columns(nColumnA + i).Select oExcelApp.Selection.Columns.AutoFit oExcelApp.Selection.NumberFormat = "0.00" Next i End With nNextRow = 3 End Sub 추가 모델링 사항

  32. Model 9-3: 실행 결과를 엑셀에 기록하고 차트 만들기 • 각 통화 데이터 저장 • 모델 수정 • VBA 코드 Private Sub VBA_Block_1_Fire() ' Retrieve create time and current time from SIMAN object data Dim dCreateTime As Double, dCurrentTime As Double dCreateTime = oSIMAN.EntityAttribute(oSIMAN.ActiveEntity, _ nArrivalTimeAttrIndex) dCurrentTime = oSIMAN.RunCurrentTime ' Write the values to the spreadsheet With oWorksheet .Cells(nNextRow, nColumnA).value = dCreateTime .Cells(nNextRow, nColumnB).value = dCurrentTime .Cells(nNextRow, nColumnC).value = dCurrentTime - dCreateTime End With ' Increment the row variable nNextRow = nNextRow + 1 End Sub 추가 모델링 사항

  33. Model 9-3: 실행 결과를 엑셀에 기록하고 차트 만들기 • 차트 작성 및 실행 종료 마무리 • 차트 작성 코드: RunEndReplication Private Sub ModelLogic_RunEndReplication() ' Chart today's sales call data on a separate chart sheet oWorkbook.Sheets("Call Data").Select oWorksheet.Range(oWorksheet.Cells(3, nColumnC), _ oWorksheet.Cells(nNextRow, nColumnC)).Select oExcelApp.Charts.Add ' Format the chart With oExcelApp.ActiveChart .ChartType = xlLineMarkers .SetSourceData Source:=oWorksheet.Range(oWorksheet.Cells(3, _ nColumnC), oWorksheet.Cells(nNextRow, nColumnC)), _ PlotBy:=xlColumns .SeriesCollection(1).XValues = "" .Location Where:=xlLocationAsNewSheet, _ Name:="Day " & oSIMAN.RunCurrentReplication & " Sales Calls" .HasTitle = True ' Title and Y axis .HasAxis(xlValue) = True 추가 모델링 사항

  34. Model 9-3: 실행 결과를 엑셀에 기록하고 차트 만들기 .HasAxis(xlValue) = True .HasAxis(xlCategory) = False ' No X axis or Legend .HasLegend = False .ChartTitle.Characters.Text = "Sales Call Times" .Axes(xlValue).MaximumScale = 60 .Axes(xlValue).HasTitle = True .Axes(xlValue).AxisTitle.Characters.Text = "minutes" End With End Sub • 실행 종료 코드: RunEndSimulation Private Sub ModelLogic_RunEndSimulation() ' Save the spreadsheet and close Excel oExcelApp.DisplayAlerts = False ' Don't prompt to overwrite oWorkbook.SaveAs ThisDocument.Model.Path & "Model 09-03.xls" End Sub 추가 모델링 사항

More Related