Jennyでの制約対象のOR指定の方法
AllPairIIの現在のマニュアル上では、生成エンジンにJennyを使用した場合、制約対象のOR指定ができないことになっています。
制約対象のOR指定の例を図1、表1およびリスト1に示します。
表1.PICTでの生成結果
リスト1.PICTの制約式
if ([A] = "a1" )
then ([B] = "b1" ) or ([C] = "c1" ) ;
表1の生成結果では、パラメータAがa1のとき、パラメータBがb1となる場合とパラメータCがc1となる場合がともに現れています。
図1と同じモデルと制約で生成エンジンにJennyを指定して生成した結果を表2に示します。
表2.Jennyでの生成結果その1
同じ制約の場合、Jennyの生成結果ではOR条件ではなくAND条件となってしまっています。これはPICTの場合に、制約表上で制約条件が同じ制約が隣り合う場合、制約対象がORとなるようにPICTの制約式を生成する特別の処理が追加されているのに対し、Jennyの場合は特別な処理を何も行なっていないからです。
AllPairIIを作成した当初は、Jennyの -w オプションで組み合わせできない組み合わせを指定するという方法では、制約対象をORで指定する方法が思いつきませんでした。
その後、改めて見直してみたところ、Jennyでも -w オプションの指定を工夫することによって制約対象をOR条件で指定することが可能であることが分かりました。
その方法を図2の制約表に示します。この制約表では、制約対象と逆制約の関係にある制約条件を追加しています。このときのJennyの生成結果を表3に示します。
図2.改良した制約表
表3.Jennyでの生成結果その2
表3の結果では、表1の生成結果と同様、パラメータAがa1のとき、パラメータBがb1となる場合とパラメータCがc1となる場合がともに現れています。この制約表でPICTで生成してもOR条件での生成結果が得られます。
どうしてこの制約表で制約対象がOR条件となるかは、制約表をよく見てもらえば自然と理解できると思います。もし制約表がなくて、-w オプションだけだったら分からなかったと思います。
今回示した方法は直感的に分かりにくいので、次のバージョンではJennyでもPICTと同じ記入方法で制約対象のOR条件が指定できるようにしたいと考えています。
それでは、また。




