Main Content

lsqlin ソルバーを使用した最適化ライブ エディター タスク

この例では、[最適化] ライブ エディター タスクを使用して制約付き最小二乗問題を解く方法を示します。

この例の問題は、x1 + 2x2 + 4x3 = 7 の面上にある、原点に最も近い点を見つけることです。この問題を解く最も簡単な方法は x = (x1,x2,x3) の面上の点から原点への距離を二乗したものを最小化することです。これは実際の距離を最小化した場合と同じ最適点を出力します。任意の点 (x1,x2,x3) から原点までの距離の二乗は x12+x22+x32 になるため、問題を次のように記述できます。

minxf(x)=x12+x22+x32,

制約は以下になります。

x1 + 2x2 + 4x3 = 7.(1)

関数 f(x) は "目的関数" で、x1 + 2x2 + 4x3 = 7"等式制約" です。より複雑な問題では、他の等式制約、不等式制約、上限または下限の制約を含むことがあります。

[最適化] を使用した問題の設定と求解

[最適化] ライブ エディター タスクで [lsqlin] ソルバーを使用して問題を設定します。

  1. [ホーム] タブの [ファイル] セクションで [新規ライブ スクリプト] ボタンをクリックして、新しいライブ スクリプトを作成します。

    New Live Script button

  2. [最適化] ライブ エディター タスクを挿入します。[挿入] タブをクリックしてから、[コード] セクションで、[タスク]、[最適化] を選択します。

    Optimize task in Live Editor: Choose between problem-based (recommended) and solver-based

  3. [ソルバーベース] ボタンをクリックします。[最適化] タスクが開きます。

  4. タスクの [問題の種類の指定] セクションで、[目的]、[最小二乗] を選択して、[制約]、[線形等式] を選択します。

    タスクは、推奨ソルバーとして [lsqlin] を選択します。

  5. データの Cd を MATLAB® ワークスペースに配置するには、[挿入] タブで [セクション区切り] ボタンをクリックします。新しいセクションに、次のコードを入力します。

    C = eye(3);
    d = zeros(3,1);
  6. 線形等式制約の行列とベクトルを設定します。

    Aeq = [1 2 4];
    beq = 7;
  7. Ctrl+Enter を押してセクションを実行します。これにより、変数がワークスペースに配置されます。

  8. タスクの [問題のデータの選択] セクションで、エントリを対応する値に設定します。

    Variables C, d, Aeq, and beq are selected, and x0 is not

  9. Ctrl+Enter を押してソルバーを実行します。終了メッセージを表示します。

    Exit message reports minimum found satisfying constraints

  10. 解を見つけるには、タスクの一番上を確認します。

    Returned variables are solution and objectiveValue

    ソルバーは、変数の solutionobjectiveValue を MATLAB ワークスペースに返します。

  11. タスクの下にセクション区切りを挿入します新しいセクションに、次の行を配置します。

    disp(solution)
    disp(objectiveValue)
  12. Ctrl+Enter を押してセクションを実行します。

    solution = [1/3, 2/3, 4/3]. objective = 7/3.

参考

|

関連するトピック