強化学習環境をSimulinkで作り、Pythonで作られた強化学習アルゴリズムとリアルタイムで連携することを考えています。
簡単な試みとして、Simulink内の一次遅れのステップ応答にPythonで1を加えるというコードを作成しようとしました。
while文で連携を試みていますが、Simulinkのfunctionブロック内のwhile文「'wait to receive input from python...'」から抜けられていないため、Python側の計算が同時並行で進行できていないようです。
解決策のヒントなどありましたらご教授お願いいたします。
coder.extrinsic('assignin','evalin')
assignin('base','start_py',true)
while not(evalin('base','send_done'))
disp('wait to receive input from python...')
assignin('base','send_done',0)
assignin('base','start_py','False')
u_temp = double(evalin('base','u'));
eng = matlab.engine.connect_matlab()
eng.workspace['send_done'] = 0
eng.workspace['start_py'] = False
session = eng.sim('RL_ENV',background=True)
while not session.done():
while not eng.workspace['start_py']:
obs = eng.workspace['obs']
eng.workspace['u'] = obs + 1.0
eng.workspace['send_done'] = 1