2016-06-20 3 views
2

내 anylogic 프로젝트에서 실행을 종료하고 시뮬레이션을 N 번 실행하고 싶습니다. 각각의 시뮬레이션에서 필자는 출력을 실행 횟수에 따라 Excel 파일에 저장합니다. 내 클릭으로 중지하고 실행하는 대신 자동으로 수행하려고합니다. 어떻게해야합니까? 이벤트를 사용하고 while 루프 (myparm < = N)로 작성하려고 시도하고 루프에서 getEngine(). 실행을 작성했지만 작동하지 않았습니다! 가능하면 도와주세요.Runnig anylogic에서 시뮬레이션 N 배

감사

다음
+0

'단일 실행'시뮬레이션 실험에서 모델을 여러 번 실행 하시겠습니까? 그렇다면 왜? 그냥 입력을 읽지 않거나 한 번 이상 초기화하는 것을 피하려면? (다른 방법도 있지만 계산은 매우 비쌉니다.) 주어진 답은 다중 실행 실험 (매개 변수와 같은)을 사용하는 대신이 특별한 경우를 수행한다고 가정합니다. 변이)이 있습니다. –

답변

1

를 사용하여 모델에 프로그래밍 방식 '모델의 시간'섹션에서 시뮬레이션 실험 페이지에서이를 지정하거나 수, 트리거 타임 아웃의 조치 필드에서 다음 코드를 사용하십시오 이벤트 또는 On-destroy 필드를 사용하십시오.

new Thread(){ 
    public void run(){ 
     // stops the model 
     getExperiment().stop(); 
     try { 
      // delay 
      this.sleep(1000); 
     } catch(Exception e) {}; 
     // runs it again 
     ((Simulation) getExperiment()).button.action(); 
    } 
}.start(); 

이 코드를 실행하기 전에 모델 결과를 Excel 파일에 기록해야합니다. Jaco-Ben이 제안 했으므로 시뮬레이션 실험을 다시 시작하기위한 조건으로 getEngine(). getRunCount()를 지정할 수 있습니다.

2

당신이 당신의 여러 실행을 실행하기 위해 시뮬레이션 설정의 사용을 만들 필요가

AnyLogic

에서 사용하는 기존의 시뮬레이션 프레임 워크를 사용하여 할 수있는 방법에 대한 방법의 개요입니다 모델을 선택하고 출력을 저장하십시오. 제안 된 설정은 다음과 같습니다.

여러 모델 실행을 시작하는 데 사용할 시뮬레이션 실험 페이지 (모델을 실행할 때 나타나는 첫 페이지)에 버튼이 있습니다. 당신은 또한 초기 씨와 당신도 변경 아마도 모델 실행 후 저장할 수있는 몇 가지 다른 모델 매개 변수를 설정할 수 있습니다

getEngine().setRealTimeMode(false); 

를 사용하여 실시간 모드에서 실행되지 여기에서 당신은 엔진을 설정합니다. 모델을 원하는대로 설정하면 run()을 사용하여 모델 실행을 시작합니다.

이제 'Java 동작'섹션 아래의 시뮬레이션 실험 설정 페이지에서 모델 실행이 완료된 후에 모델이 수행해야하는 작업을 지정해야합니다. '시뮬레이션 실행 후'섹션에서 모델의 데이터를 Excel 파일에 저장하는 코드를 작성하십시오. 모델에서 변수 및 객체에 액세스하려면 root를 사용하십시오. saveSomeData는 Excel 파일에 MyDataSet로 불리는 모델에서 발견 내 데이터 세트를 저장하는 시뮬레이션 페이지에서 기능입니다

saveSomeData(root.myDataset); 

. 나중에 참조 할 수 있도록 시드와 특정 매개 변수를 변경 한 경우 Excel 파일로 저장하는 것도 좋습니다.

모델에서 데이터 출력을 저장 한 후에는 새 시드를 지정하고 매개 변수를 다시 변경 한 다음 run()을 다시 호출하여 모델을 다른 반복에 대해 실행할 수 있습니다. 모델 실행이 완료되면 여기에서 '시뮬레이션 실행 후'코드가 다시 호출되므로 중지 조건을 지정해야합니다. 그렇지 않으면 다른 조건을 한 번 반복하여 계속 실행합니다. 그것은 멈추지 않을 것입니다 실행을 시작, 그렇지 않으면 후에는,

getEngine(). getRunCount()를

은 또한, 모델이 일부 정지 조건이 있어야 사용하여 모델 실행의 수에 액세스 할 수 있습니다. 당신은 주기적으로 모델을 실행하기 위해

finishSimulation(); 
+0

고마워 ... 도움이되었다 :) – Elnaz91

관련 문제