強化学習をやろうとしています。関数 'getSampleTime' (タイプ'double' の入力引数) が未定義です。の解決法を教えてください。

4 views (last 30 days)
MATLAB/Simulinkを用いて強化学習をやろうとしています。
Simulinkの診断ビューアーに以下のようなエラーメッセージが出てきたのですが、どのように対処したらよいのでしょうか。
'rl.simulink.blocks.AgentWrapper' の 'getSampleTime' メソッドを呼び出すときに MATLAB System ブロック 'PI_D/agent/AgentWrapper' エラーが発生しました。エラーは '
原因: 関数 'getSampleTime' (タイプ'double' の入力引数) が未定義です。
コンポーネント:Simulink | カテゴリ:Block エラー
またMATLAB の方のコードは以下の通りです。こちらはエラーは出ませんでした。
obsDim = [2 1];
obsInfo = rlNumericSpec(obsDim,"LowerLimit",-1*ones(2,1),"UpperLimit",ones(2,1))
actDim = {[0;0]};
k = 0;
for m = -1 : 0.01 : 1
for n = -1 : 0.01 : 1
k = k+1;
actDim{1,k} = [m;n];
end
end
actInfo = rlFiniteSetSpec(actDim)
obspath = [imageInputLayer([2 1],"Normalization","none","Name","obs");
fullyConnectedLayer(20,"Name","hiddenobs");
reluLayer("Name","reluobs");
fullyConnectedLayer(20,"Name","fcobs")];
actpath = [imageInputLayer([2 1],"Normalization","none","Name","act");
fullyConnectedLayer(20,"Name","hiddenact");
reluLayer("Name","reluact");
fullyConnectedLayer(20,"Name","fcact")];
joinedpath = [additionLayer(2,"Name","add");
reluLayer("Name","relu");
fullyConnectedLayer(1,"Name","fc")];
net = layerGraph(obspath)
net = addLayers(net,actpath);
net = addLayers(net,joinedpath);
plot(net)
net = connectLayers(net,"fcobs","add/in1");
net = connectLayers(net,"fcact","add/in2");
plot(net)
critic = rlQValueRepresentation(net,obsInfo,actInfo,"Observation","obs","Action","act");
agent = rlDQNAgent(critic);
env = rlSimulinkEnv("PI_D","PI_D/agent",obsInfo,actInfo);
よろしくお願いいたします。

Accepted Answer

Toshinobu Shintai
Toshinobu Shintai on 14 Oct 2021
Edited: Toshinobu Shintai on 14 Oct 2021
おそらくですが、DQNのエージェントにサンプル時間が指定されていないのが理由ではないでしょうか。
以下のコード
agent = rlDQNAgent(critic);
を、
agentOptions = rlDQNAgentOptions('SampleTime', 0.01);
agent = rlDQNAgent(critic, agentOptions);
としてみて、エラーは無くなりませんでしょうか。

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!