MATLAB Answers

離散行動を複数持つQ関数の作成

4 ビュー (過去 30 日間)
Y. M
Y. M 2020 年 10 月 20 日
コメント済み: Y. M 2020 年 10 月 21 日
rlFiniteSetSpec を使い、複数の離散行動を持つQ関数を作成したいのですが、
InputとDimensionの数が合わずエラーが返されてしまいます。
現在コードは下記のようにしているのですが、
DimensionをInputの数に合わせる方法はないでしょうか。
初歩的な質問となってしまいますが、
教えていただけますと幸いです。
%Actionに関するコード抜粋
NA = 5;
actInfo =rlFiniteSetSpec(NA);
actPath = [
featureInputLayer(NA,'Normalization','none','Name','action')
fullyConnectedLayer(50,'Name','CA1')]

  0 件のコメント

サインインしてコメントする。

採用された回答

Hiro
Hiro 2020 年 10 月 20 日
rlFiniteSetSPec の引数はInputの数では無く、実際に取り得る値を指定します
actionが1つならば、それが取り得る離散値をベクトルで渡します
actionが複数ならば、cellを使ってあり得る組み合わせのベクトルを渡します
このあたりに詳細が書いてあります

  3 件のコメント

Y. M
Y. M 2020 年 10 月 21 日
現在このように書き換えてみました。
criticOpts=...までは実行可能なのですが、やはりcritic=...で、
エラー: rl.representation.rlAbstractRepresentation/validateModelInputDimension (行 557)
Model input sizes must match the dimensions specified in the corresponding observation and action info specifications.
が返されてしまいます。
NS=4;
selectable_actions={1,2,3,4,5};
Ts = 0.05;
obsInfo =rlNumericSpec(NS);
obsInfo.Name = 'observation';
obsInfo.Description = '温度、絶対湿度、代表点壁面温度' ; %状態に関する情報の説明(別になくてもいい)
actInfo =rlFiniteSetSpec(selectable_actions);
actInfo.Name = 'AirVolume' ;
NA = numel(actInfo.Elements);
obsPath = [
featureInputLayer(NS,'Normalization','none','Name','state')
fullyConnectedLayer(50,'Name','CS1')
actPath = [
featureInputLayer(NA,'Normalization','none','Name','action')
fullyConnectedLayer(50,'Name','CA1')];
comPath=[
additionLayer(2,'Name','add')
reluLayer('Name','CriticCommonRelu')
fullyConnectedLayer(1,'Name','output')];
dnn = layerGraph();
dnn = addLayers(dnn,obsPath);
dnn = addLayers(dnn,actPath);
dnn = addLayers(dnn,comPath);
dnn = connectLayers(dnn,'CS1','add/in1');
dnn = connectLayers(dnn,'CA1','add/in2');
figure
plot(layerGraph(dnn))
criticOpts = rlRepresentationOptions('LearnRate',0.001,'Optimizer',"rmsprop");
critic = rlQValueRepresentation(dnn,obsInfo,actInfo,'Observation',{'state'},'Action',{'action'},criticOpts);
Hiro
Hiro 2020 年 10 月 21 日
cellの扱い等を理解が怪しいのでMATLAB入門を受講されることをおススメします:
selectable_actions=[1,2,3,4,5];
上のようにするのがドキュメンテーション通りです(恐らく、セルを使っても動作はしますが)
observationの数が3つっぽいのですが、NS = 4?そのあたりは大丈夫ですか?
obsInfo =rlNumericSpec([4 1]);
かなと思います。
いずれにしても、ドキュメンテーションに書いてありますので、よく読まれる事をおススメします。
https://jp.mathworks.com/help/reinforcement-learning/ref/rl.util.rlnumericspec.html#mw_dd97f7de-8690-4904-9211-08eb0123352b
Y. M
Y. M 2020 年 10 月 21 日
始めたばかりとはいえ、
初歩的なことで詰まってしまっていることがお恥ずかしいばかりです。
多くの助言を頂き、誠にありがとうございます。

サインインしてコメントする。

その他の回答 (0 件)

Community Treasure Hunt

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

Start Hunting!