Main Content

Constraint Enforcement

制御動作を変更し、制約およびアクション範囲を満たす

  • ライブラリ:
  • Simulink Control Design

  • Constraint Enforcement block

説明

Constraint Enforcement ブロックは、制約とアクション範囲に従って、指定された制御動作の最も近くにある変更された制御動作を計算します。

このブロックは、二次計画法 (QP) ソルバーを使用して、関数 |uu0|2 を最小化する制御動作 u を検出します。ここで、u0 は変更されていない制御動作です。

ソルバーは、以下の制約を最適化問題に適用します。

fx+gxucuminuumax

ここで

  • fx および gx は制約関数の係数。

  • c は制約関数の範囲。

  • umin は制御動作の下限。

  • umax は制御動作の上限。

Constraint Enforcement には、Optimization Toolbox™ ソフトウェアが必要です。

制約の適用の詳細については、制御設計への制約の適用を参照してください。

端子

入力

すべて展開する

変更されていない制御動作。スカラーまたはベクトルとして指定します。

[アクション数] パラメーターが 1 の場合、u0 をスカラー信号に接続します。そうでない場合、u0 を長さが [アクション数] に等しいベクトル信号に接続します。

以下の制約式におけるオフセット係数 fx

fx+gxuc

[制約数] パラメーターが 1 の場合、fx をスカラー信号に接続します。そうでない場合、fx を長さが [制約数] に等しいベクトル信号に接続します。

以下の制約式における線形係数 gx

fx+gxuc

gx を Nc 行 Nu 列の信号に接続します。ここで、Nc[制約数] パラメーターに等しく、Nu[アクション数] パラメーターに等しくなります。

以下の制約関数における実行時制約の範囲 c。

fx+gxuc

[制約数] パラメーターが 1 の場合、c をスカラー信号に接続します。そうでない場合、c を長さが [制約数] に等しいベクトル信号に接続します。

この端子が無効化されている場合、ブロックは、[制約範囲] パラメーターを使用して指定される定数制約範囲を使用します。

依存関係

この入力端子を有効にするには、[外部ソースの使用] パラメーターを選択します。

アクション信号の実行時の上限を指定するには、この入力端子を有効にします。この端子が無効化されている場合、ブロックは制御動作に上限を適用しません。

[アクション数] パラメーターが 1 の場合、umax をスカラー信号に接続します。そうでない場合、umax を長さが [アクション数] に等しいベクトル信号に接続します。

依存関係

この入力端子を有効にするには、[上限 (umax) に外部ソースを使用] パラメーターを選択します。

アクション信号の実行時の下限を指定するには、この入力端子を有効にします。この端子が無効化されている場合、ブロックは制御動作に下限を適用しません。

[アクション数] パラメーターが 1 の場合、umin をスカラー信号に接続します。そうでない場合、umin を長さが [アクション数] に等しいベクトル信号に接続します。

依存関係

この入力端子を有効にするには、[下限 (umin) に外部ソースを使用] パラメーターを選択します。

出力

すべて展開する

QP ソルバーによって返される変更済み制御動作。

ソルバーが最大反復回数に達する前に解を見つけた場合、u* はこの最適解を出力します。

ソルバーが最大反復回数に達した場合、最適化は停止し、u* は準最適解を出力します。

最初の最適化問題が実行不可能な場合、返される制御動作は、ブロックが制約またはアクション範囲を無視するように設定されているかどうかにより異なります。詳細については、[exitflag] パラメーターを参照してください。

[アクション数] パラメーターが 1 の場合、u* はスカラー信号を出力します。そうでない場合、u* は、長さが [アクション数] に等しいベクトル信号を出力します。

QP ソルバーの最適化ステータス。次の表に取り得るステータス値を示します。

終了フラグ説明
1ソルバーは、すべての制約と範囲が有効な状態で最適解に収束しました。この場合、u* は最適な制御動作を出力します。
2最初の最適化問題が実行不可能であり、ブロックはすべての制約および範囲を無視するように設定されています。この場合、u* は変更されていない制御動作 u0 を出力します。
3最初の最適化問題が実行不可能でした。ブロックはアクション範囲を無視して最適化を再実行し、実行可能解を検出しました。ブロックはこの解を u* で出力します。
4最初の最適化問題が実行不可能でした。ブロックは制約範囲を無視して最適化を再実行し、実行可能解を検出しました。ブロックはこの解を u* で出力します。
0ソルバーが最大反復回数に達しました。u* の制御動作の出力は、準最適の場合があります。
負の整数

最初の最適化問題が実行不可能であり、次のいずれかのシナリオが適用されます。

  • アクション範囲なしで最適化を再実行しましたが、実行可能解を生成しませんでした。

  • 制約範囲なしで最適化を再実行しましたが、実行可能解を生成しませんでした。

  • ブロックは、制約とアクション範囲を無視しないように設定されています。

この場合、u* の制御動作の出力はゼロです。

依存関係

この出力端子を有効にするには、[最適化ステータス] パラメーターを選択します。

パラメーター

すべて展開する

[パラメーター] タブ

適用する制約の数を指定します。

プログラムでの使用

ブロック パラメーター: nc
型: 文字ベクトル
既定: '1'

範囲を適用し、最適化するアクションの数を指定します。

プログラムでの使用

ブロック パラメーター: nu
型: 文字ベクトル
既定: '1'

制約の定数境界を指定します。[制約数] パラメーターが 1 の場合、[制約範囲] を有限のスカラーとして指定します。そうでない場合、[制約範囲][制約数] と等しい長さの有限値のベクトルとして指定します。

制約が実行時に変化する場合、[外部ソースの使用] パラメーターを選択し、実行時の制約信号を c 入力端子に接続します。

依存関係

このパラメーターを有効にするには、[外部ソースの使用] パラメーターをオフにします。

プログラムでの使用

ブロック パラメーター: c
型: 文字ベクトル
既定: '0'

このパラメーターを選択して、外部制約範囲の c 入力端子を追加します。

プログラムでの使用

ブロック パラメーター: external_c
型: 文字ベクトル
値: 'off' | 'on'
既定: 'off'

このパラメーターを選択して、アクションの外部上限の umax 入力端子を追加します。

プログラムでの使用

ブロック パラメーター: external_umax
型: 文字ベクトル
値: 'off' | 'on'
既定: 'off'

このパラメーターを選択して、アクションの外部下限の umin 入力端子を追加します。

プログラムでの使用

ブロック パラメーター: external_umin
型: 文字ベクトル
値: 'off' | 'on'
既定: 'off'
[ブロック] タブ

最適化を実行するサンプル時間を指定します。

プログラムでの使用

ブロック パラメーター: Ts
型: 文字ベクトル
既定: '0.1'

最適化を反復する最大回数を指定します。

プログラムでの使用

ブロック パラメーター: maxiter
型: 文字ベクトル
既定: '200'

制約違反の許容誤差の値を指定します。

プログラムでの使用

ブロック パラメーター: tol
型: 文字ベクトル
既定: '1e-6'

このパラメーターを選択して、QP ソルバーの最適化ステータスに対する [exitflag] 出力端子を追加します。

プログラムでの使用

ブロック パラメーター: exitflag
型: 文字ベクトル
値: 'off' | 'on'
既定: 'off'

このパラメーターを選択すると、最初の QP 問題が実行不可能な場合、制約を無効化して最適化が再実行されます。

このパラメーターと [QP が実行不可能な場合はアクション範囲を無視] の両方を選択すると、最初の QP 問題が実行不可能な場合、変更されていないアクション信号が出力されます。

プログラムでの使用

ブロック パラメーター: relax_c
型: 文字ベクトル
値: 'off' | 'on'
既定: 'off'

このパラメーターを選択すると、最初の QP 問題が実行不可能な場合、アクション範囲を無効化して最適化が再実行されます。umaxumin の両方の入力端子が無効になっている場合、ブロックはこのパラメーターを無視します。

このパラメーターと [QP が実行不可能な場合は制約を無視] の両方を選択すると、最初の QP 問題が実行不可能な場合、変更されていないアクション信号が出力されます。

プログラムでの使用

ブロック パラメーター: relax_u
型: 文字ベクトル
値: 'off' | 'on'
既定: 'off'

拡張機能

バージョン履歴

R2021a で導入