Constraint Enforcement
![](constraint_enforcement_block.png)
ライブラリ:
Simulink Control Design /
Constraint Control
説明
Constraint Enforcement ブロックは、制約とアクション範囲に従って、指定された制御動作の最も近くにある変更された制御動作を計算します。
このブロックは、二次計画法 (QP) ソルバーを使用して、関数 を最小化する制御動作 u を検出します。ここで、u0 は変更されていない制御動作です。
ソルバーは、以下の制約を最適化問題に適用します。
ここで
fx および gx は制約関数の係数。
c は制約関数の範囲。
umin は制御動作の下限。
umax は制御動作の上限。
Constraint Enforcement ブロックには、Optimization Toolbox™ ソフトウェアが必要です。
制約の適用の詳細については、制御設計への制約の適用を参照してください。
例
端子
入力
u0 — 制御動作
スカラー | ベクトル
変更されていない制御動作。スカラーまたはベクトルとして指定します。
[アクション数] パラメーターが 1
の場合、u0 をスカラー信号に接続します。そうでない場合、u0 を長さが [アクション数] に等しいベクトル信号に接続します。
fx — 制約関数のオフセット係数
スカラー | ベクトル
以下の制約式におけるオフセット係数 fx。
[制約数] パラメーターが 1
の場合、fx をスカラー信号に接続します。そうでない場合、fx を長さが [制約数] に等しいベクトル信号に接続します。
gx — 制約関数の線形係数
スカラー | ベクトル | 行列
以下の制約式における線形係数 gx。
gx を Nc 行 Nu 列の信号に接続します。ここで、Nc は [制約数] パラメーターに等しく、Nu は [アクション数] パラメーターに等しくなります。
c — 制約の範囲
スカラー | ベクトル
以下の制約関数における実行時制約の範囲 c。
[制約数] パラメーターが 1
の場合、c をスカラー信号に接続します。そうでない場合、c を長さが [制約数] に等しいベクトル信号に接続します。
この端子が無効化されている場合、ブロックは、[制約範囲] パラメーターを使用して指定される定数制約範囲を使用します。
依存関係
この入力端子を有効にするには、[外部ソースの使用] パラメーターを選択します。
umax — アクション信号の上限
スカラー | ベクトル
アクション信号の実行時の上限を指定するには、この入力端子を有効にします。この端子が無効化されている場合、ブロックは制御動作に上限を適用しません。
[アクション数] パラメーターが 1
の場合、umax をスカラー信号に接続します。そうでない場合、umax を長さが [アクション数] に等しいベクトル信号に接続します。
依存関係
この入力端子を有効にするには、[上限 (umax) に外部ソースを使用] パラメーターを選択します。
umin — アクション信号の下限
スカラー | ベクトル
アクション信号の実行時の下限を指定するには、この入力端子を有効にします。この端子が無効化されている場合、ブロックは制御動作に下限を適用しません。
[アクション数] パラメーターが 1
の場合、umin をスカラー信号に接続します。そうでない場合、umin を長さが [アクション数] に等しいベクトル信号に接続します。
依存関係
この入力端子を有効にするには、[下限 (umin) に外部ソースを使用] パラメーターを選択します。
出力
u* — 変更済み制御動作
スカラー | ベクトル
QP ソルバーによって返される変更済み制御動作。
ソルバーが最大反復回数に達する前に解を見つけた場合、u* はこの最適解を出力します。
ソルバーが最大反復回数に達した場合、最適化は停止し、u* は準最適解を出力します。
最初の最適化問題が実行不可能な場合、返される制御動作は、ブロックが制約またはアクション範囲を無視するように設定されているかどうかにより異なります。詳細については、[exitflag] パラメーターを参照してください。
[アクション数] パラメーターが 1
の場合、u* はスカラー信号を出力します。そうでない場合、u* は、長さが [アクション数] に等しいベクトル信号を出力します。
exitflag — 最適化ステータス
1
| 2
| 3
| 4
| 0
| 負の整数
QP ソルバーの最適化ステータス。次の表に取り得るステータス値を示します。
終了フラグ | 説明 |
---|---|
1 | ソルバーは、すべての制約と範囲が有効な状態で最適解に収束しました。この場合、u* は最適な制御動作を出力します。 |
2 | 最初の最適化問題が実行不可能であり、ブロックはすべての制約および範囲を無視するように設定されています。この場合、u* は変更されていない制御動作 u0 を出力します。 |
3 | 最初の最適化問題が実行不可能でした。ブロックはアクション範囲を無視して最適化を再実行し、実行可能解を検出しました。ブロックはこの解を u* で出力します。 |
4 | 最初の最適化問題が実行不可能でした。ブロックは制約範囲を無視して最適化を再実行し、実行可能解を検出しました。ブロックはこの解を u* で出力します。 |
0 | ソルバーが最大反復回数に達しました。u* の制御動作の出力は、準最適の場合があります。 |
負の整数 | 最初の最適化問題が実行不可能であり、次のいずれかのシナリオが適用されます。
この場合、u* の制御動作の出力はゼロです。 |
依存関係
この出力端子を有効にするには、[最適化ステータス] パラメーターを選択します。
パラメーター
制約数 — 制約数
1
(既定値) | 正の整数
適用する制約の数を指定します。
プログラムでの使用
ブロック パラメーター: nc |
型: 文字ベクトル |
既定: '1' |
アクション数 — アクション数
1
(既定値) | 正の整数
範囲を適用し、最適化するアクションの数を指定します。
プログラムでの使用
ブロック パラメーター: nu |
型: 文字ベクトル |
既定: '1' |
制約範囲 — 制約の範囲
0
(既定値) | 有限のスカラー | ベクトル
制約の定数境界を指定します。[制約数] パラメーターが 1
の場合、[制約範囲] を有限のスカラーとして指定します。そうでない場合、[制約範囲] を [制約数] と等しい長さの有限値のベクトルとして指定します。
制約が実行時に変化する場合、[外部ソースの使用] パラメーターを選択し、実行時の制約信号を c 入力端子に接続します。
依存関係
このパラメーターを有効にするには、[外部ソースの使用] パラメーターをオフにします。
プログラムでの使用
ブロック パラメーター: c |
型: 文字ベクトル |
既定: '0' |
外部ソースの使用 — 外部制約範囲の入力端子の追加
off
(既定値) | on
このパラメーターを選択して、外部制約範囲の c 入力端子を追加します。
プログラムでの使用
ブロック パラメーター: external_c |
型: 文字ベクトル |
値: 'off' | 'on' |
既定: 'off' |
上限 (umax) に外部ソースを使用 — アクションの上限の入力端子を追加
off
(既定値) | on
このパラメーターを選択して、アクションの外部上限の umax 入力端子を追加します。
プログラムでの使用
ブロック パラメーター: external_umax |
型: 文字ベクトル |
値: 'off' | 'on' |
既定: 'off' |
下限 (umin) に外部ソースを使用 — アクションの下限の入力端子を追加
off (既定値) | on
このパラメーターを選択して、アクションの外部下限の umin 入力端子を追加します。
プログラムでの使用
ブロック パラメーター: external_umin |
型: 文字ベクトル |
値: 'off' | 'on' |
既定: 'off' |
サンプル時間 — 最適化サンプル時間
0.1
(既定値) | 正のスカラー
最適化を実行するサンプル時間を指定します。
プログラムでの使用
ブロック パラメーター: Ts |
型: 文字ベクトル |
既定: '0.1' |
最大反復回数 — 最適化の最大反復回数
200
(既定値) | 正の整数
最適化を反復する最大回数を指定します。
プログラムでの使用
ブロック パラメーター: maxiter |
型: 文字ベクトル |
既定: '200' |
制約の許容誤差 — 制約違反の許容誤差
1e-6
(既定値) | 非負のスカラー
制約違反の許容誤差の値を指定します。
プログラムでの使用
ブロック パラメーター: tol |
型: 文字ベクトル |
既定: '1e-6' |
最適化ステータス — 終了フラグ出力端子を追加
off
(既定値) | on
このパラメーターを選択して、QP ソルバーの最適化ステータスに対する [exitflag] 出力端子を追加します。
プログラムでの使用
ブロック パラメーター: exitflag |
型: 文字ベクトル |
値: 'off' | 'on' |
既定: 'off' |
QP が実行不可能な場合は制約を無視 — 最適化が実行不可能な場合、制約を無効化
off
(既定値) | on
このパラメーターを選択すると、最初の QP 問題が実行不可能な場合、制約を無効化して最適化が再実行されます。
このパラメーターと [QP が実行不可能な場合はアクション範囲を無視] の両方を選択すると、最初の QP 問題が実行不可能な場合、変更されていないアクション信号が出力されます。
プログラムでの使用
ブロック パラメーター: relax_c |
型: 文字ベクトル |
値: 'off' | 'on' |
既定: 'off' |
QP が実行不可能な場合はアクション範囲を無視 — 最適化が実行不可能な場合、アクション範囲を無効化
off
(既定値) | on
このパラメーターを選択すると、最初の QP 問題が実行不可能な場合、アクション範囲を無効化して最適化が再実行されます。umax と umin の両方の入力端子が無効になっている場合、ブロックはこのパラメーターを無視します。
このパラメーターと [QP が実行不可能な場合は制約を無視] の両方を選択すると、最初の QP 問題が実行不可能な場合、変更されていないアクション信号が出力されます。
プログラムでの使用
ブロック パラメーター: relax_u |
型: 文字ベクトル |
値: 'off' | 'on' |
既定: 'off' |
拡張機能
C/C++ コード生成
Simulink® Coder™ を使用して C および C++ コードを生成します。
Constraint Enforcement ブロックは、倍精度の信号のコード生成のみをサポートします。
バージョン履歴
R2021a で導入R2023b: ライブラリの場所の変更
Constraint Enforcement ブロックは Simulink Control Design/Constraint Control サブライブラリに含まれるようになりました。
R2023b では、以前のリリースで保存されたモデルを開くと、Constraint Enforcement ブロックのライブラリ リンクが自動的に更新されます。
参考
トピック
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)