最適化ツールボックス (optimization toolbox) 改訂後のライブ エディター ツールの使用方法は? 最初はあまり話したくなかったのですが、よく聞かれるので使い方を簡単に説明します。
多くの人が新しいバージョンの MATLAB をダウンロードして、いつものように最適化ツールボックスをクリックしましたが、使い慣れた最適化 APP インターフェイスはポップアップせず、代わりにこのような警告が出ましたね。ライブ エディター タスクとは何ですか? ?
ライブ エディターの作成を最適化する
最初にライブ スクリプトを作成します。
次に、[ライブ エディター] -> [タスク] -> [オプティマイザー] をクリックします。
次に、次のようなものが表示されます。
最初に問題ベースについて話しましょう。左側の問題ベースの方法をクリックしてください。
問題に基づく単純な最適化 (最大値を求める)
最も多くの値を必要とする関数は次のとおりであるとします。
5.*sin(x)+6.*cos(y).^2
制約あり:
x^2+y^2<=4
最適化の出発点は次のとおりです。
x=1;y=0;
まず最初に、x と y の 2 つの変数があるため、前に 2 つの変数を定義する必要があります。変数を追加するには、右端の + 記号をクリックします。
[追加] をクリックして制約を追加します。
デフォルトの目標と制約の灰色の言葉は、書式設定のプロンプトを埋めているだけであり、実際には使用できないことに注意してください。
目標を最大値に設定し、目標と制約を変更します。
すべての設定が完了したら、下の <Solve Problem> をクリックして解決を開始します。
ソリューションの結果が右側に表示されます。
同時に、ワークスペースにはソリューションの結果も表示されます。
変数の値は、ソリューションを通じて取得できます。(変数名):
solution.x
% ans =
% 1.5708
下矢印をクリックして、プロセス全体で自動的に生成されたコードを取得します。
コードとコメントが適切に記述されていることがわかります。
% 创建优化变量
x3 = optimvar("x");
y3 = optimvar("y");
% 设置求解器的初始起点
initialPoint.x = ones(size(x3));
initialPoint.y = zeros(size(y3));
% 创建问题
problem = optimproblem("ObjectiveSense","Maximize");
% 定义问题目标
problem.Objective = 5.*sin(x3)+6.*cos(y3).^2;
% 定义问题约束
problem.Constraints = x3^2+y3^2 <= 4;
% 显示问题信息
show(problem);
% 求解问题
[solution,objectiveValue,reasonSolverStopped] = solve(problem,initialPoint);
% 显示结果
solution
reasonSolverStopped
objectiveValue
% 清除变量
clearvars x3 y3 initialPoint reasonSolverStopped objectiveValue
特殊機能最適化あり
ゴールと制約の両方に対してローカル関数または関数ファイルを選択できます. 関数ファイルを選択した場合, 編集したm-ファイルを直接選択できます. ローカル関数を選択した場合, 実装の最後にローカル関数をカスタマイズできます.編集者:
ソルバーベース
メソッド選択の最初にソルバーベースを選択すると、次のようになります。
この選択は非常に面倒です. 公式の例で直接話しましょう. 最初に, 初期値とパラメータ値を定義するために任意の場所でコードを実行します:
x0 = [2;1];
a = 100;
今回は、ターゲット関数と制約は関数ファイル、ローカル関数、または関数ハンドルのみであるため、ここでは便宜上、リアルタイム エディターのテキストの最後にローカル関数を作成します。
その後、さまざまな設定があります。
ソルバーを選択して <Run Section> をクリックして実行するか、ソルバーの右上隅にある 3 つのドットをクリックしてから <Run Section> をクリックして実行します。
自動生成コード:
% 将固定参数传递给 objfun
objfun = @(x)objectiveFcn(x,a);
% 设置非默认求解器选项
options = optimoptions("fmincon","PlotFcn","optimplotfvalconstr");
% 求解
[solution,objectiveValue] = fmincon(objfun,x0,[],[],[],[],[],[],...
@constraintFcn,options);
% 清除变量
clearvars objfun options
プロセス描画を実行します。
解決結果:
solution
% solution =
% 1.1413
% 1.3029
objectiveValue
% objectiveValue =
% 0.0200
[ccons,ceqcons] = constraintFcn(solution)
% ccons =
% -2.0000 -0.0000
% ceqcons =
% []
それに比べて、問題ベースの方法は使いやすいです。
公式例公開
警告インターフェイスの左側または右側にあるメソッドをクリックして、公式の例から飛び出します。
次のようになります。