optimization toolboxの制約条件

タイトルにもありますように,optimization toolboxの制約条件の設定で以下のエラーが出て困っています.
関数 'exp' (タイプ'optim.problemdef.OptimizationVariable' の入力引数) が未定義です。
私のコードでは,
x = optimvar('x');
で最適化の変数を定義し
confn = x*exp(x) <=b; % b = const.
のように制約条件を設定したいと思っているのですがエラーが出てしまいます.
の(5)の状況で,exp関数への入力として,optimvarで定義された値が適さないということだと思ったのですが,解決方法がわかりません.
解決方法があれば教えて頂きたいです.
よろしくお願いします.

 Accepted Answer

michio
michio on 24 Sep 2020
問題点の確認ですが、以下のように実行すると
x = optimvar('x');
confn = x*exp(x) <= 10
関数 'exp' (タイプ'optim.problemdef.OptimizationVariable' の入力引数) が未定義です。
というエラーがでるということでしょうか?エラーが発生するコード例を明示して頂けると問題点を理解し易いかと思いまして。
ちなみに上記2行を実行すると
confn =
Nonlinear OptimizationInequality
(x .* exp(x)) <= 10
とエラーなく通ります。
もし上記2行でエラーが出る場合は exp という独自に作成された関数がある、、可能性があります。
which exp
と実行して、呼ばれている exp 関数の所在を確認してみてください。

4 Comments

ご回答ありがとうございます.
which expを実行したところ,
built-in (C:\Program Files\MATLAB\R2019b\toolbox\matlab\elfun\@double\exp)
と出てきました.自作の関数はないと思います.
実は,私のコードでは最適化変数が6つあり
x = optimvar('x',6);
confn1 = (x(2)*exp(x(1))) <= 10
confn2 = x(3) <= 5
などとしているのですが,この場合だとやはりconfn1の行でエラーが出ます.
最適化変数が一つの場合は,私の環境でも問題なく実行できることは確認出来ました.
ベクトルとして定義した場合は記述が異なるのでしょうか?
michio
michio on 25 Sep 2020
制約条件などに exp が使えないというR2019b 時点での機能制約が要因でした。以下のリンクで R2019b 時点での日本語版を確認できると思いますが、exp がリストに入っていません。
R2020a でサポートされている関数が増加していますので R2020a もしくは R2020b へバージョンアップ可能であれば推奨いたします。
もしくは、R2019b でもソルバーベースの解法であれば問題なく設定できるかと思います。
yusuke koizumi
yusuke koizumi on 25 Sep 2020
ありがとうございました.
アップグレードで解決しました.
michio
michio on 25 Sep 2020
R2019b という点に早く気が付けばよかったです。失礼いたしました。

Sign in to comment.

More Answers (0)

Products

Release

R2019b

Asked:

on 14 Sep 2020

Commented:

on 25 Sep 2020

Community Treasure Hunt

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

Start Hunting!