관리되지 않는 시뮬레이터를 Bonsai


  • 총 완료 시간: 40분
  • 활성 시간: 40분
  • 비활성 시간: 0분


  • 총 완료 시간: 60분
  • 활성 시간: 30분
  • 비활성 시간: 30분


  • 총 완료 시간: 60분
  • 활성 시간: 30분
  • 비활성 시간: 30분

시뮬레이터 테스트 및 브레인 학습을 위해 로컬 환경에서 실행되는 시뮬레이터를 작업 영역에 연결합니다 Bonsai .

시작하기 전에

Python 종속성 불일치 또는 일반적인 환경 충돌을 격리하는 데 문제가 발생하는 경우 코딩 작업을 위해 Miniconda 가상 환경을 설정하는 것이 좋습니다.

1단계: 커넥터 추가 Bonsai

전용 커넥터를 추가Bonsai하도록 시뮬레이터 코드를 업데이트합니다.

기존 AnyLogic 모델을 래핑하고 커넥터 라이브러리를 Bonsai 연결해야 사용할 Bonsai수 있습니다. 래핑은 래퍼 모델이 기존 모델의 루트 에이전트를 제어할 수 있도록 기존 시뮬레이터 모델을 새 모델(래퍼 모델)에 종속성으로 포함하는 프로세스입니다. 래퍼 모델 속성 창의 종속성 섹션에서 기존 모델과 래퍼 모델 간의 관계를 확인할 수 있습니다.

A. 래퍼 모델 빌드

  1. AnyLogic GitHub 리포지토리에서Bonsai 커넥터 라이브러리(BonsaiLibrary.jar)를 다운로드합니다.Bonsai
  2. Microsoft Project Bonsai AnyLogic 페이지에서래퍼 모델 템플릿을 다운로드합니다.
  3. AnyLogic에서:
    1. 색상표 패널을 선택합니다.
    2. 왼쪽 아래 모서리에서 더하기 기호(+)를 선택하여 라이브러리 관리 대화 상자를 엽니다.
    3. 대화 상자의 오른쪽에 있는 추가 단추를 선택합니다.
    4. 컴퓨터에서 BonsaiLibrary.jar 파일을 찾아서 선택합니다.
    5. 모든 대화 상자를 확인합니다.
  4. AnyLogic에서 래퍼 모델 및 기존 시뮬레이터 모델을 엽니다.
  5. 래퍼 모델에서 래퍼 에이전트 유형을 엽니다.
  6. 래퍼 에이전트의 편집기 패널에서 왼쪽을 마우스로 가리키면 커넥터 개체와 함수가 getObservable 표시됩니다Bonsai.
  7. 기존 시뮬레이터 모델의 프로젝트 패널에서 최상위 에이전트를 래퍼 에이전트로 끌어서 놓습니다.

AnyLogic 스크린샷

관련 메뉴 항목이 강조 표시된 AnyLogic UI의 스크린샷

이제 기존 모델이 래퍼 모델의 개체로 인스턴스화됩니다. 이제 래퍼 모델에 추가한 루트 개체를 통해 기존 모델의 필드와 함수에 액세스할 수 있습니다.

Bonsai Connector jar 파일이 이동되거나 삭제되지 않는 한 모든 AnyLogic 프로젝트에서 사용할 수 있습니다.

B. 기존 모델 업데이트

래퍼 모델 또는 커넥터의 함수에서 호출될 수 있는 getObservable 기존 모델의 모든 함수에 대해 다음을 Bonsai 수행합니다.

  1. 함수의 속성 창을 엽니다.
  2. 고급 섹션으로 이동합니다.
  3. 액세스 옵션의 드롭다운 목록에서 "public"을 선택합니다.

C. Bonsai 커넥터 업데이트

Bonsai AnyLogic에서 커넥터 개체를 클릭하고 속성 아래에 다음 정보를 제공합니다.

  • 작업 영역 ID입니다.
  • 액세스 키입니다.
  • 시뮬레이터의 고유한 이름입니다.

D. 기본 제공 AnyLogic 데이터베이스 마이그레이션

참고

기존 모델이 기본 제공 AnyLogic 데이터베이스를 사용하지 않는 경우 이 단계를 건너뛸 수 있습니다.

옵션 1: 데이터베이스 폴더 복사

  1. 선택한 파일 탐색기에서 두 모델 디렉터리를 모두 엽니다.
  2. AnyLogic에서 두 모델을 모두 닫습니다.
  3. 기존 모델 폴더에서 래퍼 모델 폴더로 데이터베이스 폴더를 복사합니다.

옵션 2: 데이터베이스 백업 만들기 및 복원

  1. 기존 모델에서 데이터베이스 개체 속성을 엽니다.
  2. 데이터베이스 백업을 선택하고 백업 파일을 컴퓨터에 저장합니다.
  3. 래퍼 모델의 데이터베이스 개체 속성을 엽니다.
  4. 데이터베이스 복원을 선택하고 만든 백업 파일을 선택합니다.
  5. 데이터베이스를 복원한 후에는 백업 파일을 삭제할 수 있습니다.
  1. MATLAB-Central의 웹 페이지에서 도구 상자를Bonsai 다운로드합니다.Bonsai
  2. 도구 상자 설치 관리자(.mltbx)를 두 번 클릭합니다.
  3. 화면에 표시되는 프롬프트에 따라 기본 MATLAB/Simulink 버전의 도구 상자를 설치합니다.
  4. Simulink 모델을 엽니다.
  5. 기존 모델을 래핑하여 값을 입력 states 으로InitialConfig, 값을 출력으로 허용 action 합니다.

    래핑된 모델의 Simulink 스크린샷

    입력 및 출력으로 래핑된 기존 모델이 있는 Simulink의 스크린샷

  6. Simulink 라이브러리 브라우저에서 다음 블록을 추가합니다.
    • Bonsai
    • 상수
    • 멀티플렉서
    • 시뮬레이션 중지
  7. 값을 False사용하여 상수 블록을 만듭니다.
  8. 시뮬레이션의 초기 상태를 나타내는 데 필요한 만큼 상수 블록을 만듭니다.
  9. Mux 블록을 사용하여 초기 속성 값을 결합하고 Mux 출력 포트를 InitialConfig 기존 모델의 입력 포트에 연결합니다.
  10. 블록의 action 출력 포트를 Bonsaiaction Simulink 모델의 입력 포트에 연결합니다.
  11. 블록의 reset 출력 포트를 Bonsai 중지 시뮬레이션 블록에 연결합니다.
  12. state 기존 모델의 출력 포트를 블록의 state 입력 포트에 Bonsai 연결합니다.
  13. 상수 False 블록을 블록의 halted 입력 포트에 연결합니다 Bonsai .
  14. 블록을 두 번 클릭하고 Bonsai 샘플 시간을 .로 [DEFAULT_SIMULATION_RATE, 0]설정합니다.

완전히 연결된 모델의 Simulink 스크린샷

위의 프로세스에 설명된 대로 관련 블록이 연결된 Simulink UI의 스크린샷

2단계: 커넥터 구성 Bonsai

전용 커넥터는 기본적으로 연결된 시뮬레이터에 사용자 지정됩니다. 카트폴 예제에서 완벽하게 작동하는 전용 커넥터의 Bonsai 예를 볼 수 있습니다. GitHub 리포지토리 예제는 로컬로 실행되어 포함된 Cartpole Python 시뮬레이터를 등록하고 연결합니다. 사용자 지정 가능한 요소는 예제 파일에 TODO로 플래그가 지정됩니다.

A. 래퍼 클래스 구성

래퍼 모델에는 다음에 대한 Bonsai모델의 시작 구성, 작업 공간 및 관찰 공간을 정의하는 데 필요한 세 가지 Java 클래스가 포함되어 있습니다.

  • ModelConfig: 학습 에피소드를 초기화하는 데 필요한 모든 변수를 포함해야 합니다. 초기화 구성이 시뮬레이션 논리의 일부로 발생하는 경우 이 클래스를 비워 둘 수 있습니다. ModelConfig변수는 커넥터 개체의 BonsaiepisodeStart 필드에서 액세스할 수 있으며 Inkling 파일에 정의된 시뮬레이터 구성 변수에 매핑됩니다.
  • ModelAction: 브레인에서 래퍼 모델로 다시 전달하는 모든 변수 Bonsai 를 포함해야 합니다. ModelAction변수는 커넥터 개체의 BonsaiepisodeStep 필드에서 액세스할 수 있으며 Inkling 파일에 정의된 허용되는 브레인 작업에 매핑됩니다. ModelAction 각 단계에서 모델을 업데이트하기 위해 브레인에서 값을 제공합니다 Bonsai .
  • ModelObservation: 시뮬레이션에 대해 관찰 가능한 공간을 정의하는 데 필요한 모든 변수를 포함해야 합니다. 정의된 ModelObservation 변수는 함수에 의해 getObservable 각 에피소드 단계의 시작 부분에 채워지고 Inkling 파일에 정의된 시뮬레이터 상태에 매핑됩니다.

중요

플랫폼은 Bonsai 현재 숫자 필드(정수 및 이중)와 배열만 데이터 형식으로 허용합니다.

B. getObservable 래퍼 모델에 대한 함수 업데이트

업데이트 getObservable 방법은 기존 모델에 따라 달라지지만, 기존 모델의 적절한 출력과 정의된 ModelObservation 관찰 공간의 각 요소를 연결하는 것이 중요합니다.

기존 모델에서 필드 및 함수에 액세스하려면 기존 모델을 나타내는 루트 개체를 사용하여 이름 접두사로 지정합니다. 예를 들어 기존 모델에서 호출 currTemp 된 변수에 액세스하려면 래퍼 모델의 루트 에이전트 형식인 위치를 Main 참조하는 데 사용합니다Main.currTemp.

중요

함수 및 커넥터에 getObservable 추가하는 모든 코드는 Bonsai 기존 모델을 참조해야 합니다. 래퍼는 들어오고 나가는 정보를 Bonsai 패키지하기 위한 것이므로 기존 모델이 통신할 수 있습니다.

C. Bonsai 커넥터 필드 업데이트

  1. 기존 모델에 대해 작동하거나 보고하는 코드로 episodeStart, episodestep중지된 필드를 업데이트합니다.
필드 기능 로컬 변수
episodeStart 시뮬레이션된 환경 초기화 config (별칭 ModelConfig)
episodeStep 시뮬레이션된 환경 업데이트 action (별칭 ModelAction)
중단 시뮬레이션이 터미널 상태True (또는 False)인지 여부를 나타냅니다. 없음
  1. SIM_PARAMS.m이라는 새 파일을 만들고 시뮬레이터에 필요한 변수를 정의합니다. 예:
    TemplateParam = 1;  %% dummy variable
    
  2. startup.m이라는 새 파일을 만들고 다음 코드를 추가합니다.
    addpath(genpath(pwd))
    SIM_PARAMS
    DEFAULT_SIMULATION_RATE = -1;  % units: sec
    
  3. DEFAULT_SIMULATION_RATE 모델과 동일한 속도로 블록을 실행 Bonsai 하려면 -1(권장)로 설정합니다. 그렇지 않으면 원하는 샘플 속도를 두 번째로 설정합니다.
  4. bonsaiConfig.m이라는 새 파일을 만들고 다음 코드를 추가합니다.
    % Copyright (c) Microsoft Corporation.
    % Licensed under the MIT License.
    
    function config = bonsaiConfig
    
      config = BonsaiConfiguration();
      % % override api url, defaults to "https://api.bons.ai"
      % config.url = "https://api.bons.ai";
    
      % bonsai workspace
      config.workspace = "YOUR_WORKSPACE_ID"; %TODO
    
      % access key, generated from https://beta.bons.ai/brains/accounts/settings
      config.accessKey = "YOUR_ACCESS_KEY"; %TODO
    
      % simulator name, for an unmanaged simulator launched from the desktop to show up on the web
      config.name = "YOUR_SIMULATOR_NAME"; %TODO
    
      % path to bonsai block in your simulink model file, used to determine state and action schemas
      config.bonsaiBlock = "simulinkModelFileName/Bonsai"; %TODO
    
      % % set state and action schemas (overrides data from bonsaiBlock)
      config.stateSchema = ["state1", "state2", "state3", "state4"]; %TODO
      config.actionSchema = ["action1"]; %TODO
    
      % set your InitialConfig Parameters
      config.configSchema = ["initialConfig1"]; %TODO
    
      % % time (in seconds) the simulator gateway should wait for
      % %   your simulator to advance, defaults to 60
      config.timeout = 60;
    
      % path to csv file where episode data should be logged
      config.outputCSV = "record-data.csv";
    
      % % display verbose logs
      config.verbose = true;
    end
    
  5. 작업 영역 및 기존 시뮬레이터와 %TODO 관련된 세부 정보를 사용하여 주석으로 플래그가 Bonsai 지정된 각 줄을 업데이트합니다.
  6. bonsaiTrain.m이라는 새 파일을 만들고 다음 코드를 추가합니다.
    % Copyright (c) Microsoft Corporation.
    % Licensed under the MIT License.
    % Main entrypoint for training a Bonsai brain. After starting this script you
    % must begin training your brain in the web, selecting the "Simulink Cartpole"
    % simulator.
    %% Load startupFiles
    startup;
    
    % Simulink Model File Name
    mdl = 'simulinkModelFilename'; %TODO
    load_system(mdl);
    set_param(mdl, 'FastRestart', 'on');
    
    % run training
    config = bonsaiConfig;
    BonsaiRunTraining(config, mdl, @episodeStartCallback);
    
    % callback for running model with provided episode configuration
    function episodeStartCallback(mdl, episodeConfig)
      in = Simulink.SimulationInput(mdl);
      in = in.setVariable('initialProp1', 'initialProp1', ... 'initialPropN', episodeConfig.initialConfig1); %TODO
      sim(in);
    end
    
  7. 다음과 같이 주석으로 %TODO 플래그가 지정된 각 줄을 업데이트합니다.
  • initialProp1 ... initialPropN: 모델의 초기 속성으로 정의된 실제 이름과 일치하도록 업데이트합니다.
  • initialConfig1: bonsaiConfig.m 파일에 정의된 초기 구성 매개 변수와 일치하도록 이름을 업데이트합니다.

3단계: CLI 및 환경 구성 Bonsai

환경 변수 및 SIM_ACCESS_KEY 환경 변수를 SIM_WORKSPACE 설정합니다.

export SIM_WORKSPACE="YOUR_WORKSPACE_ID"
export SIM_ACCESS_KEY="YOUR_WORKSPACE_ACCESS_KEY"

그런 다음, 명령을 실행 bonsai configure 하여 CLI에 대한 작업 영역 ID를 Bonsai 설정합니다.

bonsai configure --workspace-id ${SIM_WORKSPACE}

4단계: 기본 구성으로 sim 실행

시뮬레이터를 연결하기 Bonsai전에 기본 구성을 사용하여 모델을 로컬로 실행하여 예상대로 작동하는지 확인해야 합니다.

시뮬레이터를 로컬로 실행하려면 다음을 수행합니다.

  1. AnyLogic에서 실행 단추를 클릭합니다.
  2. 표시되는 드롭다운 목록에서 원하는 시뮬레이터를 선택합니다.

테스트 실행에 헤드리스(GUI 없음) 또는 애니메이션(GUI 사용) 실험을 사용할 수 있습니다.

5단계: 시뮬레이터를 관리되지 않는 sim으로 등록

Python 시뮬레이터의 로컬 인스턴스를 시작하고 반환된 CreateSession세션 ID를 기록해 둡니다.

로컬 AnyLogic 모델을 시작합니다. 커넥터는 Bonsai 자동으로 시뮬레이터를 Bonsai 관리되지 않는 시뮬레이터로 등록합니다.

로컬 Simulink 모델을 시작합니다. 도구 상자는 Bonsai 자동으로 관리되지 않는 시뮬레이터로 Bonsai 시뮬레이터를 등록합니다.

6단계: 테스트 브레인으로 관리되지 않는 시뮬레이터 실행

시뮬레이터가 관리형(확장 가능한) 시뮬레이터로 작업 영역에 추가하기 전에 올바르게 Bonsai 통신할 수 있는지 확인해야 합니다.

  1. UI를 Bonsai엽니다.
  2. + 브레인 만들기를 선택하고 프롬프트에 따라 빈 브레인을 만듭니다.
  3. 기본 브레인 샘플 파일을 열고 Inkling 템플릿을 교육 탭의 빈 코딩 패널에 붙여넣습니다.
  4. 시뮬레이터에 대한 유효한 상태 및 작업을 사용하여 템플릿을 구성합니다.
  5. 학습 단추를 선택합니다.
  6. 관리되지 않는 시뮬레이터 목록에서 시뮬레이터를 선택합니다.

잠시 후 MATLAB 콘솔에서 에피소드 데이터 스트리밍이 표시됩니다.

테스트 데이터가 충분한 경우 학습 중지를 선택합니다. Simulink는 테스트 실행의 세부 정보를 구성 파일(bonsaiConfig.m)에 Bonsai 설정된 파일 이름으로 csv 로그로 기록합니다.

다음 단계

시뮬레이터가 로컬로 연결되고 올바른 동작을 확인할 수 있게 되면 이를 관리형 시뮬레이터로 변환하고 브레인 학습 Bonsai을 확장할 준비가 된 것입니다.