mpcCustomS​olverを用いる場​合のMIMOへの拡張​に関して

1 回表示 (過去 30 日間)
sano
sano 2020 年 10 月 5 日
コメント済み: sano 2020 年 10 月 5 日
いつもお世話になっております。
自作のQPソルバーを用いて計算を行う場合について質問させていただきたくご連絡致しました。
【自作のQPソルバー】
function [X, status] = mpcCustomSolver(H,f,A,b,x0)
persistent n; %Keep variable 'n' in memory
if isempty(n)
% Run just first time step
n = evalin('base','Obj.ControlHorizon'); %Extract variable from base workspace
end
cvx_begin quiet
variable X(n+1)
minimize (0.5*X'*H*X+f'*X)
subject to
A*X >= b;
cvx_end
% Get cvx status
str = cvx_status;
if strcmp('Solved',str)
status = 1; % Feasible solution
else
status = -1; % Infeasible solution
end
end
上記の自作のQPソルバーを用いて計算を行っており、操作量の数が1、制御量の数も1のSISO型のシミュレーションが行えることは確認しております。
しかし、MPCの変数を複数にした場合(MIMO型への拡張を行った場合) 以下のエラーが発生してしまします。
  • Inner matrix dimensions must agree.
MPCのオブジェクトを作成に関してはツールボックスを用いてObjを作成し、そこにObj.Optimizer.CustomSolver = true; を実行しファイルを追加している状況です。
以上の問題を解決する手段として下記の質問に答えていただけると幸いです。
① MPCツールボックスで作成したObjに Obj.Optimizer.CustomSolver = true; でOptimizerのファイルを追加してもエラーはないのでしょうか。
② 上記のエラーは mpcCustomSolver(H,f,A,b,x0) のx, H, g, A, b, x0の変数がSISO型のままだからと推察されますが、操作量の数と制御量の数を増やすことは可能でしょうか?
尚、本モデルは操作量の数は6、制御量の数は6、外乱の数は30としております。
不明な点等がありましたら追加で質問していただけると嬉しいです。
大変お忙しい中恐縮ですがご回答いただければ幸いです。
  2 件のコメント
Toshinobu Shintai
Toshinobu Shintai 2020 年 10 月 5 日
私はcvxについては全く知りませんので、回答はできないのですが、方針としてまずは「MPCオブジェクトの設定」「カスタムソルバーの記述方法」「cvxの使い方」のどこに問題があるのか、切り分けをしてはどうでしょうか。
参考までに、私が以前作成したカスタムソルバーを添付します。こちらは操作量2、制御量2、外乱0で問題無く動作していました。
sano
sano 2020 年 10 月 5 日
Toshinobu Shintai 様
ご回答ありがとうございます。
添付していただいたカスタムソルバーを基に再度検証していきたいです。その際に具体的な問題が明らかになればその都度更新させていただきます。
Toshinobu Shintai様、お忙しい中ご検討いただきありがとうございます。

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

回答 (0 件)

カテゴリ

Help Center および File ExchangeController Creation についてさらに検索

製品


リリース

R2019a

Community Treasure Hunt

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

Start Hunting!