製品コンフィギュレーション モデルでの式の制約とテーブルの制約
この記事では、式の制約およびテーブル制約の使用について説明します。 制約は、販売注文、販売見積、発注書、または製造オーダーのための製品をコンフィギュレーションするときに選択できる属性値を制御します。 制約の作成方法に基づいて、式の制約またはテーブル制約を使用できます。
制約は、販売注文、販売見積、発注書、または製造オーダーのための製品をコンフィギュレーションするときに選択できる属性値の制御に使用します。 制約の作成方法に基づいて、式の制約またはテーブル制約を使用できます。
式の制約とは
式の制約の特徴は、式が算術演算子およびブール演算子と関数を使用することです。 式の制約は、製品コンフィギュレーション モデルの特定のコンポーネントに書き込まれます。 他のコンポーネントで再利用することも、また他のコンポーネントと共有することもできません。 ただし、コンポーネントの式の制約は、コンポーネントのサブコンポーネントの属性を参照できます。
テーブル制約とは
テーブル制約では、製品のコンフィギュレーション時に属性として許される値の組み合わせをリストします。 テーブル制約の定義は、総称的に使用できます。 製品コンフィギュレーション モデルのコンポーネントのテーブル制約を作成する場合、テーブル制約定義を選択します。 許される組み合わせを作成するには、特定のタイプの属性をコンポーネントに追加します。 各属性タイプは特定の値を所有します。
テーブル制約の例
この例では、スピーカーのコンフィギュレーションを特定のキャビネットの仕上げと前グリルに限定する方法を示します。 最初の表には、コンフィギュレーションで一般に使用できるキャビネットの仕上げと前グリルを示します。 値は、キャビネットの仕上げと前グリルの属性タイプで定義されます。
属性の型 | 値 |
---|---|
キャビネットの仕上げ | 黒、カシ、シタン、白 |
前グリル | 黒、メタル、白 |
次の表には、色と仕上げテーブルの制約によって定義される組み合わせを示します。 このテーブルの制約を使用すると、カシの仕上げと黒いグリルのスピーカー、シタンの仕上げと白いグリルのスピーカーなどをコンフィギュレーションできます。
完了 | グリル |
---|---|
カシ | 黒 |
シタン | 白 |
白 | 黒 |
白 | 白 |
黒 | 黒 |
黒 | メタル |
システム定義テーブル制約とユーザー定義テーブル制約を作成できます。 詳細については、システム定義およびユーザー定義のテーブル制約を参照してください。
どのような構文で制約を記述しますか。
制約を記述するには、OML (Optimization Modeling Language) の構文を使用する必要があります。 システムでは、Microsoft Solver Foundation 制約ソルバーを使用して制約を解決します。
テーブル制約または式の制約の使用
制約を作成する方法に基づいて、式の制約またはテーブル制約のいずれかを使用できます。 テーブル制約はマトリックスとして構築しますが、式の制約は個別の文です。 製品をコンフィギュレーションするとき、使用する制約の種類は重要ではありません。 2 つのメソッドの違いを次に示します。
次の制約設定を使用して製品をコンフィギュレーションする場合、以下の組み合わせを使用できますます。
- 色が黒、サイズが 30 または 50 の製品
- 色が赤、サイズが 20 の製品
テーブル制約の設定
色 | サイズ |
---|---|
黒 | 30 |
黒 | 50 |
赤 | 20 |
式の制約設定
(色 == "黒" & (サイズ == "30" | サイズ == "50")) | (色 == "赤" & サイズ = "20")
式の制約の記述時に使用するのは演算子かまたはインフィックス表記法か
式の制約の記述には、使用可能なプレフィックス演算子か、またはインフィックス表記法のいずれかを使用できます。 演算子 Min、Max、および Abs については、インフィックス表記法を使用できません。 これらの演算子は、ほとんどのプログラム言語に標準の演算子として含まれています。
式の制約の記述には、どんな演算子やインフィックス表記法を使用できますか。
次の表は、製品コンフィギュレーション モデル内のコンポーネントの式の制約を記述するときに使用できる演算子とインフィックス表記法を示します。 この最初のテーブルの例では、インフィックス表記法または演算子のいずれかを使用して式を記述する方法を示します。
オペレーター | Description | 構文 | 例 |
---|---|---|---|
Implies | 条件 a が true の場合は、制約 b を適用します。 | Implies[a, b], infix: a -: b |
|
かつ | これは、すべての条件が true の場合にのみ true です。 条件数が 0 の場合、True になります。 | And[args], infix: a & b & ... & z |
|
または | これは、任意の条件が true の場合に true です。 条件数が 0 の場合、False になります。 | Or[args], infix: a | b | ... | z |
|
プラス | これにより要件が合計されます。 条件数が 0 の場合、0 になります。 | Plus[args], infix: a + b + ... + z |
|
マイナス | これは引数を無効にします。 これは条件がきっかり 1 つの場合に限ります。 | Minus[expr], infix: -expr |
|
Abs | これは、条件の絶対値を取ります。 これは条件がきっかり 1 つの場合に限ります。 | Abs[expr] | オペレーター: Abs[x] |
時間 | これは、条件の製品を取ります。 条件数が 0 の場合、1 になります。 | Times[args], infix: a * b * ... * z |
|
パワー | これは、指数関数を取ります。 これはべき乗を右から左に適用します。 (つまり、右結合です)。したがって、Power[a, b, c] は Power[a, Power[b, c]] と等価です。 Power は、指数が正の定数の場合にのみ使用できます。 | Power[args], infix: a ^ b ^ ... ^ z |
|
最大 | これにより、最大条件が作成されます。 条件数が 0 の場合、Infinity (無限) になります。 | Max[args] | オペレーター: Max[x, y, 2] == z |
最小 | これにより、最小条件が作成されます。 条件数が 0 の場合、Infinity (無限) になります。 | Min[args] | オペレーター: Min[x, y, 2] == z |
ない | これにより、条件の論理逆数が作成されます。 これは条件がきっかり 1 つの場合に限ります。 | Not[expr], infix: !expr |
|
次の表の例は、インフィックス表記法を記述する方法を示します。
インフィックス表記法 | Description |
---|---|
x + y + z | 加算 |
x * y * z | 乗算 |
x - y | バイナリ減算は、2 番目の値が負であるバイナリ加算と同様に変換されます。 |
x ^ y ^ z | 右結合の累乗法 |
!x | ブール値の not |
x -: y | Boolean の意味 |
x | y |
x & y & z | ブール値 and |
x == y == z | 等式 |
x != y != z | 明確 |
x < y < z | 次の値より小さい |
x > y > z | 次の値より大きい |
x <= y <= z | 以下 |
x >= y >= z | 以上 |
(x) | かっこは既定の優先順位より優先されます。 |
式の制約がなぜ正しく検証されないのですか。
製品コンフィギュレーション モデルの属性、コンポーネント、またはサブコンポーネントのソルバー名として予約済みのキーワードは使用できません。 ここでは、使用できない予約済みキーワードの一覧を示します:
- シーリング
- 要素
- 等しい
- フロア
- 次の場合
- 未満
- 大きい
- Implies
- ログ
- 最大
- 最小
- マイナス
- プラス
- パワー
- 時間
- スロット
- モデル
- 意思決定
- 目標