以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではない。また、実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
図1は、本実施形態に係る処理装置10のブロック図を示す。処理装置10は、複数の条件式のうち予め定められた論理値をとる条件式に対応付けられた重みの和を最大化する問題を処理する。
本実施形態では、処理装置10は、第1論理値(例えば、偽)となる条件式の重みの和を最小化する問題を解くものとする。この問題は、第1論理値の否定となる第2論理値(例えば、真)の条件式の重み和を最大化する問題と同義である。処理装置10は、問題取得部110、算出部120、置換部130、判定部140、子問題生成部150、解生成部160、及び、出力部190を備える。
問題取得部110は、処理装置10の処理対象となる問題を取得する。例えば、問題取得部110は、データベース20等からそれぞれが少なくとも1つの論理変数に基づき、それぞれが重みを有する複数の条件式を含む最大充足割当問題を取得する。問題取得部110は、取得した問題を算出部120に供給する。
算出部120は、問題が簡略化できるかを判断するために、所定の条件において問題から得られる重みの和の境界値を算出する。例えば、算出部120は、問題の複数の条件式に含まれる第1論理変数及び第2論理変数が予め定められた論理関係(例えば、第1論理変数≠第2論理変数)を有すると仮定した場合において、予め定められた論理値(例えば、第1論理値)となる条件式の重みの和の境界値を算出する。算出部120は、問題から派生する子問題(両者を含めて指す場合は「子問題等」とする)についても境界値を算出する。算出部120は、算出した境界値を置換部130に供給する。
また、算出部120は、各子問題において予め定められた論理値(例えば、第1論理値)になる問題全体の複数の条件式の重みの和の値が取りえる下限である全体下限値、及び、処理時点での問題全体における複数の条件式の重みの和の値が取りえる上限である全体上限値を算出する。算出部120は、全体上限値及び全体下限値を置換部130及び判定部140に供給する。算出部120のより具体的な動作は後述する。
置換部130は、境界値、全体上限値、及び/又は、全体下限値が予め定められた条件を満たす場合に、複数の条件式における論理変数を、別の論理変数を用いた論理式に置換する。これにより、置換部130は、子問題等中の条件式に含まれる論理変数の数を減らし、子問題等を簡略化する。置換部130は、従来のInference Ruleを適用して子問題等を簡略化してもよい。置換部130は、簡略化した子問題等、又は、簡略化できなかった子問題等を判定部140に供給する。置換部130のより具体的な動作は後述する。
判定部140は、子問題等の解が生成可能であるか判断する。例えば、判定部140は、子問題等のサイズが予め定められた基準よりも小さい場合、子問題等の解が生成可能であると判断する。判定部140は、解が生成可能であると判断した場合は子問題等を解生成部160に供給し、解が生成可能であると判断しない場合は、子問題等を子問題生成部150に供給する。
子問題生成部150は、子問題等から新しい子問題を生成する。例えば、子問題生成部150は、子問題等の複数の条件式に含まれる複数の論理変数から1つの論理変数を選択し、選択した論理変数に論理値を割り当てた結果に基づいて、選択した論理変数を含まない子問題を生成する。子問題生成部150は、生成した子問題を算出部120に提供する。
解生成部160は、子問題等を解く。例えば、解生成部160は、子問題に含まれる1以上の論理変数の全ての組み合わせを実行し、最も優れた重みの和を与える論理変数の組み合わせを子問題の解として取得する。解生成部160は、取得した解に応じて暫定の最適解である暫定解を更新する。解生成部160は、更新した暫定解を算出部120及び出力部190に供給する。
出力部190は、解生成部160が生成した解のうち最良の解を最大充足割当問題の解として出力する。
このように処理装置10は、子問題等が簡略化可能であると判断したことに応じて、子問題等の論理変数を、別の論理変数を用いた論理式に置換する。これにより、処理装置10は、効率よく子問題を処理することができ、より少ない処理リソースで最大充足割当問題を解くことができる。
図2は、Branch−and−Boundの処理の一例を示す。図中のノード1は、問題取得部110が取得する元の問題を示し、ノード2及びノード3は、子問題生成部150が元の問題から生成した子問題を示す。例えば、子問題生成部150は、元の問題に含まれる論理変数のうちx1に偽(false)を割り当てることでノード2の子問題2を生成し、x2に真(true)を割り当てることでノード3の子問題3を生成する。
一例として、元の最大充足割当問題が、第1条件式(x1∨¬x2∨x3,3)、第2条件式(x2∨x3,2)、第3条件式(¬x1∨¬x3,4)、及び、第4条件式(x3,1)の4式を含む場合を想定する。例えば、第1条件式は、x1が真、x2が偽、及びx3が真のいずれかが成立する場合、重み3の第1条件式が満たされることを意味する。
子問題生成部150は、元の問題に含まれる論理変数x1に真(true)を割り当てた場合、第2条件式'(x2∨x3,2)、第3条件式'(¬x3,4)、及び、第4条件式(x3,1)の3式を含むノード3の子問題を生成する。ここで、元の問題の第1条件式は必ず満たされるので解く必要はない。従って、子問題生成部150は、第1条件式を子問題から削除する。また、子問題生成部150は、必ず偽となる¬x1を第3条件式から削除する。
従来の簡略化処理では、子問題の一部の論理変数に論理値の一部を与える処理を省略し、子問題の処理を簡略化する。例えば、処理装置10は、全ての条件式で論理変数(又は論理変数の否定)は出現するが、論理変数の否定(又は論理変数)は出現しない関係を検出した場合は、当該論理変数に真(又は偽)を割り当てる。
一例として、上述した3式を含む子問題では、x2は出現するが¬x2は出現しない。このような場合、x2に第2論理値(例えば、真)を割り当てると第2論理値を最大化する問題に必ず寄与できる。従って、上記子問題において、x2に第2論理値(真)を割り当てると、第3条件式'(¬x3,4)、及び、第4条件式(x3,1)の2式を含むより簡略化された子問題が生成される。これはPure Literal Ruleと呼ばれる。
また、例えば、処理装置10は、子問題の任意の論理変数に第2論理値(例えば、真)を割り当てて得られた重みが子問題の当該論理変数に第1論理値(例えば、偽)を割り当てて得られた重みより大きい場合、当該論理変数に第2論理値を割り当てる。一例として、第3条件式'及び第4条件式のみを含む上記子問題において、x3に偽を与えた場合の重み(4)はx3に真を与えた場合の重み(1)よりも大きいのでx3には偽が割り当てられてよい。これはComplementary Unit Ruleと呼ばれる。
従来の簡略化処理では、論理変数の一部に論理値を割り当てることで子問題の処理の一部を省くことができる。例えば、図2に示すように、ノード3の子問題3においてPure Literal Rule等によりx2に偽が割り当てられた場合、処理装置10は、x2に偽(false)を割り当てた後の子問題の処理のみを続行し、x2に真(true)を割り当てた子問題の処理を省略してよい。
図3は、本実施形態による簡略化処理の概略を示す。本実施形態では、処理装置10は、子問題中の論理変数を別の論理変数に置き換える簡略化処理を行う。図3の例では、処理装置10は、図2と同様にノード1の元の問題からノード2及びノード3の子問題を生成し、ノード3の子問題の簡略化処理を行う。
ここで、処理装置10は、ノード3の子問題において、算出部120が算出した境界値等が所定の条件を満たす場合に、論理変数x2を論理変数x3に置き換える。その結果、処理装置10は、子問題において論理変数x2及び論理変数x3に異なる論理値(例えば、真と偽、又は、偽と真)が割り当てられる子問題は処理しなくてよい。すなわち、処理装置10は、ノード3の子問題を簡略して、論理変数の数が1個減少したノード4の問題を生成する。
図4は、本実施形態の処理装置10による処理フローを示す。本実施形態において、処理装置10は、S100〜S1300を実行することにより、最大充足割当問題を処理する。
まず、S100で問題取得部110は、処理装置10の処理対象となる複数の条件式を含む最大充足割当問題を取得する。例えば、問題取得部110は、第2論理値(例えば、真)となる条件式の重み和を最大化するように論理変数に論理値を割り当てる最大充足割当問題を取得する。一例として、問題取得部110は、任意の論理変数又は論理変数の否定を各要素としたときに、1の要素又は複数の要素の論理和を各条件式として含み、各条件式に重み付けがなされた問題を取得する。
問題取得部110は、最大クリーク問題又は最大カット問題と等価の複数の条件式を含む最大充足割当問題を取得してよい。また、問題取得部110は、ランダムベンチマークにより生成した最大充足割当問題を取得してよい。問題取得部110は、取得した問題を算出部120に供給する。
次に、S300で、処理装置10は、簡略化処理を実行する。例えば、S100で取得した問題及び当該問題から派生した子問題が簡略化できるかを判断するために、算出部120が、所定の条件において子問題等から得られる重みの和の境界値等を算出し、置換部130は、算出された境界値等に応じて、子問題等の簡略化を実行する。
ここで、例えば、置換部130は、子問題等の論理変数を、別の論理変数を用いた論理式に置換することにより簡略化を実行する。置換部130は、簡略化処理を実行した場合は簡略化した子問題等を判定部140に供給し、簡略化処理を実行しなかった場合は子問題等をそのまま判定部140に供給する。なお、簡略化処理の詳細は後述する。
次に、S400で、判定部140は、子問題等の解が生成可能であるか判断する。例えば、判定部140は、子問題等に含まれる論理変数の数が予め定められた閾値以下、及び/又は、子問題等に含まれる条件式の数が予め定められた閾値以下となる場合、子問題等の解が生成可能であると判断してよい。
一例として、判定部140は、子問題等に含まれる全ての条件式に含まれる変数が1個である場合、又は、子問題における重み和が論理変数の論理値によらず一意に定まる場合に子問題等の解が生成可能であると判断してよい。判定部140は、解が生成可能であると判断した場合は子問題等を解生成部160に供給し、解が生成可能と判断しない場合は、子問題等を子問題生成部150に供給する。
S500において、子問題生成部150は、子問題等から新しい子問題を生成する。例えば、子問題生成部150は、子問題等の複数の条件式に含まれる複数の論理変数から1つの論理変数を選択し、選択した論理変数にそれぞれ異なる論理値を割り当てた結果に基づいて、選択した論理変数を含まない複数の子問題を生成する。
選択した論理変数に論理値を割り当てた結果、他の論理変数によらず条件式が一意に真又は偽に定まらない場合、子問題生成部150は当該条件式から選択した論理変数部分を子問題から除外する。また、子問題生成部150は、選択した論理変数に論理値を割り当てた結果、他の論理変数によらず一意に真又は偽に定まる条件式を、子問題から除外してよい。また、子問題生成部150は、生成した子問題を算出部120に提供する。
次にS600において、算出部120は、未処理の子問題から処理の対象とする子問題を選択する。例えば、算出部120は、未処理の子問題から探索木の幅方向を優先して子問題を選択してよい。一例として、算出部120は、図3においてノード2及びノード4の子問題が未処理の子問題として存在する場合、階層が浅いノード2の子問題を優先して選択してよい。これに代えて、算出部120は、未処理の子問題から探索木の深さ方向を優先して子問題を選択してよい。
ここで、算出部120は、選択した子問題での予め定められた論理値(例えば、第1論理値)になる問題全体の重みの和が取りえる下限である全体下限値LB、及び、問題全体での複数の条件式の重みの和の値が取りえる上限である全体上限値UBを算出する。
すなわち、処理装置10は、第2論理値を最大又は第1論理値を最小にする問題を子問題に分岐して解いていく中で、最適な割り当てをした場合に可能である、第1論理値をとる条件式の重み和の範囲を予想する。ここで、選択した子問題で予想される第1論理値の和の範囲の中で最良の場合の値が全体下限値LBである。選択した子問題において第1論理値(又は第2論理値)をとる条件式の重み和が一意に定まる場合には、その一意の重み和の値が全体下限値LBとなる。全体下限値LBは、子問題ごとに算出される。
また、現在までに判明している最適解が取りえる第1論理値の和の範囲の中で最悪の場合の値が全体上限値UBである。全体上限値UBは、全子問題に共通のグローバルな値である。処理装置10は、子問題について算出した全体上限値UBの値の候補が、現在の全体上限値UBによりも優れている場合は、算出した全体上限値UBの値の候補で全体上限値UBを更新する。
例えば、第1条件式(¬x1,3)、第2条件式(x2∨x3,2)、第3条件式(x1∨¬x3,4)、及び、第4条件式(x3,1)を含む元の問題に、論理変数x1に真(true)を割り当てて生成された、第2条件式'(x2∨x3,2)、第3条件式'(¬x3,4)、及び、第4条件式(x3,1)の3式を含む子問題をS600で算出部120が選択した場合を考える。
この場合、第1条件式は必ず満たされないので、子問題に分岐したときに問題全体で第1論理値(例えば、偽)を取る条件式の重みの和は、少なくとも3となる。従って、算出部120は、選択した子問題について全体下限値LB=3を算出する。
また、第3条件式は必ず満たされるので、子問題に分岐したときに問題全体で第1論理値(例えば、偽)を取る条件式の重みの和の最大値は6(3+2+1)となる。ここで、算出部120は、算出した当該最大値が現時点の全体上限値UBより小さければ、全体上限値UBを当該最大値で更新する。
これは、全体上限値UBは、問題全体における最悪のケース(第1論理値となる条件式の重み和が最大になるケース)でも最適解から得られているだろう第1論理値の重み和であるので、算出した当該最大値が現時点の全体上限値UBより大きい場合(すなわち、子問題において得られる最悪の最適解で得られる第1論理値の重み和が、問題全体で得られる最悪の最適解で得られる第1論理値の重み和が優れていない場合)には全体上限値UBを更新する必要がないからである。
次にS700において、算出部120は、選択した子問題で得られた全体下限値LBが、現在の全体上限値UBよりも優れているか判定する。例えば、全体下限値LBが現在の全体上限値UBよりも小さい場合、算出部120は処理をS300に戻す。全体下限値LBが現在の全体上限値UBよりも大きい場合、算出部120は処理をS800に進める。これにより、処理装置10は、子問題について簡略化処理を試みる。
S800において、算出部120は、選択した子問題を処理済みとする。これにより、処理装置10は、全体下限値LBが現時点の全体上限値UBよりも小さい子問題(すなわち、最適解が得られる可能性がない子問題)の処理を中止するので、処理リソースを節約することができる。処理装置10は、処理をS1200に進める。
S900において、解生成部160は、子問題等を解く。例えば、解生成部160は、子問題に含まれる1以上の論理変数の一意の全ての組み合わせを実行し、第2論理値を取る条件式の最大の重みの和(又は第1論理値を取る条件式の最小の重みの和)を与える論理変数に対する論理値の割り当てを子問題の解として取得する。
解生成部160は、組み合わせの実行中に子問題等の全体下限値LBと同じ重み和が得られた場合、当該組み合わせに係る割り当てを子問題等の解とし、残りの処理を中断してよい。解生成部160は、子問題の論理変数への論理値の割り当てが一意に定まる場合(例えば、子問題に含まれる条件式が単一の論理変数のみの条件式1個の場合等)は、当該子問題において各論理変数に割り当てられている論理値を解として取得する。
次に、S1000において、解生成部160は、取得した解が暫定解よりも優れた解であるか判定する。例えば、解生成部160は、取得した解により得られた第1論理値を取る条件式の重み和が、現在の暫定解の重み和よりも小さいか判定する。解生成部160は、取得した解による重み和が暫定解の重み和よりも小さい場合に処理をS1100に進め、そうでない場合に処理をS1200に進める。
次にS1100で解生成部160は、現時点での暫定の最適解である暫定解を更新する。例えば、解生成部160は、現在の暫定解をS900で生成した解で更新する。暫定解がまだ存在していない場合、解生成部160は、取得した解を新しい暫定解として更新する。解生成部160は、暫定解を更新した場合、暫定解を算出部120に供給する。
ここで、解生成部160は、暫定解に応じて全体上限値UBも更新する。例えば、解生成部160は、更新した暫定解による条件式の重み和が現在の全体上限値UBよりも小さい場合、更新した暫定解による条件式の重み和で全体上限値UBを置き換えて更新する。解生成部160は、更新した暫定解及び全体上限値UBを算出部120及び出力部190に供給する。解生成部160は、S1100の後に処理をS1200に進める。
S1200において、算出部120は、生成済みの子問題のうち未処理のものがあるかを判定する。例えば、算出部120は、S500で子問題生成部150が生成した子問題のうちS800及びS900のいずれの処理の対象にもなっていない子問題があるか判定する。算出部120は、未処理の子問題があると判定する場合に処理をS600に戻し、未処理の子問題がないと判定する場合に処理をS1300に進める。
S1300において、解生成部160が生成した最適解を出力する。例えば、出力部190は、解生成部160から最終的に得られた暫定解を最適解として処理装置10のディスプレイ等に表示し、処理装置10の記憶装置に格納する。
このように、処理装置10は、問題取得部110が取得した元の問題から子問題を生成する。そして、処理装置10は、子問題等の論理変数を別の論理変数を用いた論理式に置換すること等により子問題を簡略化し、簡略化した子問題を再帰的に解くことにより元の最大充足割当問題の解を得る。これにより、処理装置10は、効率よく子問題を処理することができ、より少ない処理リソースで最大充足割当問題を解くことができる。
図5は、図4の処理フローにおけるS300の具体的な処理内容の一例を示す。S300において、処理装置10は、例えばS310〜S350により子問題等の簡略化処理を実行する。
S310において、処理装置10は子問題等に対して、単一の論理変数を対象にする簡略化を実行する。例えば、処理装置10は、一定の条件を満たすことを条件に、子問題等に含まれる論理変数に予め定められた論理値を割り当てることで子問題等を簡略化する。一例として、処理装置10は、Pure Literal Rule及び/又はComplementary Unit Ruleを適用することで子問題等を簡略化する。処理装置10は、その他の既存のInference Ruleを適用して子問題等を簡略化してよい。
S330において、処理装置10は、複数の論理変数を対象とする第1の簡略化処理を実行する。例えば、算出部120が子問題等に含まれる論理変数の任意の組み合わせについて境界値を算出し、境界値が一定の条件を満たす組み合わせに対して置換部130が第1の簡略化処理を実行する。
一例として、処理装置10は、子問題等に含まれる2個の論理変数に同じ論理値を割り当てたときに得られる最も悪い最適解が、当該2個の論理変数に異なる論理値を割り当てたときに得られる最も良い最適解よりも良いと判定した場合に、当該2個の論理変数に同じ論理値を割り当てる。第1の簡略化処理の詳細については後述する。
S350において、処理装置10は、複数の論理変数を対象とする第2の簡略化処理を実行する。例えば、子問題等に含まれる任意の2個の論理変数に異なる論理値を割り当てたときに得られる最も良い最適解による第1論理値となる条件式の重み和が、今後の処理で最悪のケースでも得られると現時点で予想される解の結果(すなわち、全体上限値UB)よりも悪いと予想されるときは、当該2個の論理変数に異なる論理値を割り当てた問題を解く処理は無駄になる。従って、このような場合、処理装置10は、当該2個の論理変数に同じ論理値を割り当てる。第2の簡略化処理の詳細については後述する。
このように処理装置10は、複数種類の簡略化処理を適用することにより、子問題等を簡略化する。これにより、処理装置10は、子問題等をより少ない処理リソースで解くことができる。
なお、処理装置10は、S310、S330、及び、S350の簡略化処理のうち任意の1又は2つを省略してもよく、これらの簡略化処理を異なる順番で実行してもよい。例えば、処理装置10は、S330のみ、S350のみ、又は、S330及びS350の処理のみを実行してよい。
また、処理装置10は、簡略化処理を繰り返し実行してもよい。例えば、処理装置10は、S310〜S350(又はこの一部)の処理を所定の条件が満たされるまで繰り返してもよい。
図6は、図5の処理フローにおけるS330の具体的な処理内容の一例を示す。S330において、処理装置10の算出部120及び置換部130は、S332〜S340の処理を実行することにより、第1の簡略化処理を実行する。
まず、S332において、算出部120は、子問題等に含まれる複数の論理変数から簡略化の対象とする2個の論理変数を選択する。例えば、算出部120は、子問題等に含まれる複数の論理変数から出現回数の多い論理変数、又は、含まれる条件式の重み和が大きい論理変数を優先して選択してよい。
次に、S334において、算出部120は、第1論理変数および第2論理変数が予め定められた論理関係(例えば、第1論理変数≠第2論理変数)を有しないと仮定した場合(例えば、第1論理変数=第2論理変数)に第1論理値をとる処理対象の子問題等の条件式に対応付けられた重みの和の上限値を算出する。
例えば、算出部120は、第1論理変数と第2論理変数とが等しい論理関係にある場合の第1論理変数及び第2論理変数の値の組み合わせを割り当てた場合(即ち、第1論理変数及び第2論理変数が共に真、又は、共に偽の場合)のそれぞれにおいて、偽となる可能性がある条件式に対応付けられた重みの和の上限となる値を算出し、そのうちの最小値を上限値として算出する。
一例として、算出部120は、第1論理変数を含む条件式の重みの合計及び第2論理変数を含む条件式の重みの合計の和から、第1論理変数及び第2論理変数の論理和を含む条件式の重みの合計と第1論理変数の否定及び第2論理変数の論理和を含む条件式の重みの合計と第2論理変数の否定及び第1論理変数の論理和を含む条件式の重みの合計との和を減じた第1の値を算出する。
算出部120は、第1論理変数の否定を含む条件式の重みの合計及び第2論理変数の否定を含む条件式の重みの合計の和から、第1論理変数の否定及び第2論理変数の否定の論理和を含む条件式の重みの合計と第1論理変数の否定及び第2論理変数の論理和を含む条件式の重みの合計と第2論理変数の否定及び第1論理変数の論理和を含む条件式の重みの合計との和を減じた第2の値を算出する。
算出部120は、算出した第1の値及び第2の値のうち小さい方を上限値としてよい。すなわち、第1論理変数をxとし、第2論理変数をyとし、処理対象の子問題等において論理式Aを含む条件式(但し¬Aは含まない)の重みの和の合計をwall(A)と表す場合、算出部120は、下記式により、上限値を算出することができる。
min{wall(x)+wall(y)−wall(x∨y),wall(¬x)+wall(¬y)−wall(¬x∨¬y)}−wall(¬x∨y)−wall(x∨¬y}
第1論理変数と第2論理変数とが等しい論理関係にある場合、子問題等の第2論理値を取る条件式の重み和が当該上限値を上回ることはない。つまり、当該上限値は、第1論理変数及び第2論理変数に等しい論理関係を割り当てた場合に最低限得られるであろう最適解の第1論理値となる条件式の重み和に対応する。算出部120は、算出した上限値を置換部130に供給する。
次に、S336において、算出部120は、第1論理変数および第2論理変数が予め定められた論理関係(例えば、第1論理変数≠第2論理変数)を有すると仮定した場合に第1論理値をとる処理対象の子問題等の条件式に対応付けられた重みの和の下限値を算出する。例えば、算出部120は、第1論理変数と第2論理変数とが等しくない論理関係にある場合の第1論理変数及び第2論理変数の値の組み合わせ(即ち、第1論理変数が真で第2論理変数が偽、又は、第1論理変数が偽で第2論理変数が真の場合)のそれぞれにおいて、必ず偽となる条件式に対応付けられた重みの和の下限となる値を算出し、そのうちの最小値を下限値として算出する。
一例として、算出部120は、第1論理変数の否定である条件式の重みの合計と、第2論理変数である条件式の重みの合計と、第1論理変数の否定及び第2論理変数の論理和である条件式の重みの合計との和である第3の値を算出する。
また、算出部120は、第1論理変数である条件式の重みの合計と、第2論理変数の否定である条件式の重みの合計と、第2論理変数の否定及び第1論理変数の論理和である条件式の重みの合計との和である第4の値を算出する。
算出部120は、当該第3の値及び第4の値のうち小さい方を下限値としてよい。すなわち、第1論理変数をxとし、第2論理変数をyとし、処理対象の子問題等において論理式A自体である条件式(論理式Aを含むが論理式A自体でない条件式は含まない)の重みの和の合計をwunit(A)と表す場合、算出部120は、下記式により、下限値を算出することができる。
min{wunit(¬x)+wunit(y)+wunit(¬x∨y),wunit(x)+wunit(¬y)+wunit(x∨¬y)}
第1論理変数と第2論理変数とが異なる論理関係にある場合、子問題等の第2論理値を取る条件式の重み和が当該下限値を下回ることはない。つまり、当該下限値は、第1論理変数及び第2論理変数に異なる論理関係を割り当てた際、最も良い場合に得られるであろう最適解の第1論理値となる条件式の重み和に対応する。算出部120は、算出した下限値を置換部130に供給する。
次に、S338において、置換部130が2個の論理変数が所定の条件を満たすか否かを判定する。例えば、S334で算出部120が算出した上限値が、S336で算出部120が算出した下限値以下となるか否かを判定する。一例として、置換部130は、数式1が成りたつかを判定する。
…数式1
置換部130は、上限値が下限値以下となる場合に処理をS340に進め、上限値が下限値超となる場合はS330の処理を終了する。
S340において、置換部130は、第1論理変数および第2論理変数が予め定められた論理関係を有しない場合(第1論理変数=第2論理変数)の論理式により第1論理変数を置換する。例えば、置換部130は、処理対象の子問題等の複数の条件式において、第1論理変数を第2論理変数に置換し、処理対象の子問題等を更新する。これにより、置換部130は、処理対象の子問題の論理変数の数を削減することができる。
このように、置換部130は、第1の簡略化処理において、2個の論理変数に同じ論理値を割り当てた場合に第1論理値を取る条件式の重み和の上限値が、異なる論理値を割り当てた場合に第1論理値を取る条件式の重み和の下限値以下となるか判定する。判定が肯定的な場合は、子問題等において予め定められた論理関係でない論理関係(例えば、第1論理変数=第2論理変数)を割り当てた方が確実に良い解が得られることとなるので、置換部130は、予め定められた論理関係でない論理関係を第1論理変数及び第2論理変数に適用する。
なお、処理装置10は、S330において複数回S332〜S340の処理を実行してもよい。例えば、処理装置10は、処理対象の子問題等に含まれる論理変数の任意のペアに対してS332〜S340の処理を適用して子問題等を逐次更新し、S340の処理を適用できない場合(すなわち、S338の判定が否定的な場合)には当該子問題等において別の未選択の論理変数のペアに対してS332〜S340の処理を開始してよい。
図7は、本実施形態における第1の簡略化処理の概要を示す。図の横軸は、子問題等に含まれる条件式のうち偽となる条件式の重みの和を示す。図中のUl(X,Y)は子問題等において第1論理変数xに論理値Xを割り当て第2論理変数xに論理値Yを割り当てた場合に偽となる子問題等の条件式の重み和の下限値を示す。図中のUu(X,Y)は子問題等において第1論理変数xに論理値Xを割り当て第2論理変数xに論理値Yを割り当てた場合に偽となる子問題等の条件式の重み和の上限値を示す。
従って、Uu(T,T)は、第1論理変数及び第2論理変数が共に真の場合に偽(第1論理値)を取る条件式の重み和の上限であり、算出部120がS334において算出した第1の値に相当する。Uu(F,F)は、第1論理変数及び第2論理変数が共に偽の場合に偽(第1論理値)を取る条件式の重み和の上限であり、算出部120がS334において算出した第2の値に相当する。算出部120は、Uu(T,T)及びUu(F,F)のうち最小値(図中の最小上限値)を上限値として算出する。
図中のUl(T,F)は、第1論理変数が真で第2論理変数が偽の場合に偽(第1論理値)を取る条件式の重み和の下限であり、算出部120がS336において算出した第3の値に相当する。Uu(F,T)は、第1論理変数が偽で第2論理変数が真の場合に偽(第1論理値)を取る条件式の重み和の下限であり、算出部120がS336において算出した第4の値に相当する。算出部120は、Ul(T,F)及びUl(F,T)のうち最小値(図中の最小下限値)を下限値として算出する。
S338において、置換部130は、Uu(T,T)及びUu(F,F)の最小値(図7中ではUu(F,F))と、Ul(T,F)及びUl(F,T)の最小値(図7中ではUl(T,F))とを比較する。
Uu(T,T)及びUu(F,F)の最小値は、子問題等において第1論理変数及び第2論理変数に同じ論理値を割り当てた際に、最悪のケース(偽となる条件式の重み和が最大になるケース)で偽となる条件式の重み和の値である。Ul(T,F)及びUl(F,T)の最小値は、子問題等において第1論理変数及び第2論理変数に同じ論理値を割り当てた際に、最良のケース(偽となる条件式の重み和が最小になるケース)の偽となる条件式の重み和の値である。従って、前者が小さい場合は、第1論理変数及び第2論理変数に同じ論理値を割り当てた方が確実によい解が得られるので、置換部130はS340で第1論理変数を第2論理変数で置換する。
図8は、図5の処理フローにおけるS350の具体的な処理内容の一例を示す。S350において、処理装置10の算出部120及び置換部130は、S352〜S358の処理を実行することにより、第2の簡略化処理を実行する。
まず、S352において、算出部120は、子問題等に含まれる複数の論理変数から簡略化の対象とする2個の論理変数を選択する。算出部120は、S332と同様の方法により論理変数を選択してよい。
次に、S354において、算出部120は、子問題について、第1論理変数および第2論理変数が予め定められた論理関係(例えば、第1論理変数≠第2論理変数)を有すると仮定した場合に第1論理値をとる条件式に対応付けられた重みの和の下限値を算出する。例えば、算出部120は、S336の同様の方法により子問題等についての下限値を算出してよい。
次に、S356において、置換部130は、子問題等についての下限値、問題全体の全体上限値UB、及び、問題全体の全体下限値LBが所定の条件を満たすか否かを判定する。例えば、全体上限値UBと全体下限値LBとの差分が、S354で算出部120が算出した子問題等についての下限値以下となるか否かを判定する。一例として、置換部130は、数式1が成りたつかを判定する。
…数式2
置換部130は、当該条件が成り立つ場合に処理をS358に進め、成り立たない場合にS350の処理を終了する。
S358において、置換部130は、処理対象の子問題等に含まれる複数の条件式において、第1論理変数および第2論理変数が予め定められた論理関係を有しない場合の論理式により第1論理変数を置換する。例えば、置換部130は、処理対象の子問題等の複数の条件式において、第1論理変数を第2論理変数に置換し、処理対象の子問題等を更新する。これにより、置換部130は、処理対象の子問題の論理変数の数を削減することができる。
このように、置換部130は、第2の簡略化処理において、全体上限値UBと全体下限値LBの差分と、下限値との比較結果により、処理対象の子問題等を簡略化する。
なお、処理装置10は、S350において複数回S352〜S358の処理を実行してもよい。例えば、処理装置10は、処理対象の子問題等に含まれる論理変数の任意のペアに対してS352〜S358の処理を適用して子問題等を逐次更新し、S358の処理を適用できない場合(すなわち、S356の判定が否定的な場合)には当該子問題等において別の未選択の論理変数のペアに対してS352〜S358の処理を開始してよい。
ここで図9及び図10を用いて第2の簡略化処理の概要を説明する。図9は、本実施形態の対象となる最大充足割当問題の一例を示す。図中のノード1は、問題取得部110が取得する元の問題を示し、ノード2及びノード3は、子問題生成部150が元の問題から生成した子問題を示す。
一例として、問題取得部110は、元の問題として、第1条件式C1(x1,15)、第2条件式C2(¬x1∨x2∨¬x3,20)、及び、第3条件式C3(¬x1∨¬x2∨x3,20)を含み、真(第2論理値)となる条件式の重み和を最大化する問題を取得する場合を想定する。元の問題であるノード1においては全ての条件式が偽となる可能性があるので、問題全体で偽(第1論理値)を取る条件式の重み和の上限である全体上限値UBは、全ての条件式の重み和55(15+20+20)となる。
元の問題においては、どの論理変数にも論理値が割り当てられていない。従って、処理対象のノード1において、問題全体で偽(第2論理値)を取る条件式の重み和の下限である全体下限値LBは0となる。
ここで、子問題生成部150は、元の問題(ノード1)の論理変数x1に偽(false)を割り当てて子問題(ノード2)を生成するとする。論理変数x1に偽が割り当てられた結果、条件式C1のみが確実に満たされず偽となる。「¬x1」を含む条件式C2及び条件式C3は、確実に満たされて真となる。
従って、ノード2における問題全体の全体下限値LB2は15となる。また、ノード2における問題全体の全体上限値UBの値の候補は15であり、現時点の全体上限値UB55よりも小さい、即ち優れているので、算出部120は、全体上限値UBを15に更新する。
また、子問題生成部150は、元の問題(ノード1)の論理変数x1に真(true)を割り当てて別の子問題(ノード3)を生成する。論理変数x1に真が割り当てられた結果、条件式C1が満たされ真となる。その結果、子問題生成部150は、第2条件式C2'(x2∨¬x3,20)及び第3条件式C3'(¬x2∨x3,20)の2式を含む子問題(ノード3)を生成する。
ノード3において、偽となることが確定した条件式は問題全体で存在しない。従って、ノード3における問題全体の全体下限値LB3は0となる。また、ノード3において、第2条件式C2'及び第3条件式C3'のいずれも偽となる可能性がある。従って、ノード3における問題全体の全体上限値UBの値の候補は40(20+20)であり、現時点の全体上限値UB15よりも大きい。このため、算出部120は、全体上限値UBを15のまま更新しない。
ここで、ノード3に対して、第1論理変数をx2とし第2論理変数をx3として、第2の簡略化処理を適用する。ノード3における算出部120がS354で算出する下限値min(Ul(F,T),Ul(T,F))は20となる。すると、全体上限値UBとノード3の全体下限値LB3との差分15(15−0)は当該下限値以下となるので、置換部130は、ノード3において第1論理変数x2を第2論理変数x3で置換する簡略化処理を実行する。
図10は、本実施形態における第2の簡略化処理の一例を示す。図の横軸は、元の問題全体に含まれる条件式のうち偽となる条件式の重みの和を示す。図中のLBは処理対象の子問題等における全体下限値を示し、UBは全体上限値を示す。Ul(X,Y)は子問題等において第1論理変数xに論理値Xを割り当て第2論理変数xに論理値Yを割り当てた場合に偽となる子問題等の条件式の重み和の下限値を示す。
全体下限値LBは、処理対象の子問題等のノードにおいて、問題全体で偽(第1論理値)となる条件式の重み和の下限値である。Ul(T,F)及びUl(F,T)の最小値は、子問題等において第1論理変数及び第2論理変数に同じ論理値を割り当てた際に、最良のケースの偽となる条件式の重み和の値である。
従って、全体下限値LBと下限値Ul(T,F)及びUl(F,T)の最小値との和は、処理対象の子問題等において、第1論理変数及び第2論理変数に異なる論理値を割り当てた際に、最良のケースで得られる問題全体の第1論理値の重み和である。図9の例においては、全体下限値LBと下限値Ul(T,F)及びUl(F,T)の最小値との和は20(0+20)となる。
一方で、全体上限値UBは、現在まで子問題等を処理した結果判明している、問題全体で偽(第1論理値)となる条件式の重み和の上限値(すなわち、最悪のケースでも得られると見込まれる偽となる条件式の重み和)である。このため、全体上限値UBが、全体下限値LBと下限値Ul(T,F)及びUl(F,T)の最小値との和よりも大きい場合には、第1論理変数及び第2論理変数に異なる論理値を割り当てても判明している以上に良い解が得られないので、第1論理変数と第2論理変数に同じ論理変数を割り当ててよい。
図9の例においては、ノード3の子問題を処理する時点で全体上限値UBは15であり、全体下限値LBと下限値Ul(T,F)及びUl(F,T)の最小値との和20よりも大きい。従って、この場合、置換部130はノード3の子問題において第1論理変数と第2論理変数に同じ論理変数を割り当てて、ノード4の子問題に更新してよい。
このように、本実施形態の処理装置10によると、従来の単一の論理変数を対象とするInference Ruleに加え、ある論理変数を別の論理変数に置き換える簡略化処理を実行できるので、子問題等をより大幅に簡略化して最大充足割当問題の処理負担を低減することができる。特に、本実施形態によると、重みに大きなばらつきがある最大カット問題等をより効率的に解くことができる。なお、上記実施形態の説明では、第1論理値を「偽」、第2論理値を「真」、予め定められた論理関係を「等しい関係」としたが、本発明はこれらに限られない。例えば、第1論理値を「真」、第2論理値を「偽」とし、及び/又は、予め定められた論理関係を「等しくない関係」としてもよい。
図11は、処理装置10として機能するコンピュータ1900のハードウェア構成の一例を示す。本実施形態に係るコンピュータ1900は、ホスト・コントローラ2082により相互に接続されるCPU2000、RAM2020、グラフィック・コントローラ2075、及び表示装置2080を有するCPU周辺部と、入出力コントローラ2084によりホスト・コントローラ2082に接続される通信インターフェイス2030、ハードディスクドライブ2040、及びCD−ROMドライブ2060を有する入出力部と、入出力コントローラ2084に接続されるROM2010、フレキシブルディスク・ドライブ2050、及び入出力チップ2070を有するレガシー入出力部を備える。
ホスト・コントローラ2082は、RAM2020と、高い転送レートでRAM2020をアクセスするCPU2000及びグラフィック・コントローラ2075とを接続する。CPU2000は、ROM2010及びRAM2020に格納されたプログラムに基づいて動作し、各部の制御を行う。グラフィック・コントローラ2075は、CPU2000等がRAM2020内に設けたフレーム・バッファ上に生成する画像データを取得し、表示装置2080上に表示させる。これに代えて、グラフィック・コントローラ2075は、CPU2000等が生成する画像データを格納するフレーム・バッファを、内部に含んでもよい。
入出力コントローラ2084は、ホスト・コントローラ2082と、比較的高速な入出力装置である通信インターフェイス2030、ハードディスクドライブ2040、CD−ROMドライブ2060を接続する。通信インターフェイス2030は、有線又は無線によりネットワークを介して他の装置と通信する。また、通信インターフェイスは、通信を行うハードウェアとして機能する。ハードディスクドライブ2040は、コンピュータ1900内のCPU2000が使用するプログラム及びデータを格納する。CD−ROMドライブ2060は、CD−ROM2095からプログラム又はデータを読み取り、RAM2020を介してハードディスクドライブ2040に提供する。
また、入出力コントローラ2084には、ROM2010と、フレキシブルディスク・ドライブ2050、及び入出力チップ2070の比較的低速な入出力装置とが接続される。ROM2010は、コンピュータ1900が起動時に実行するブート・プログラム、及び/又は、コンピュータ1900のハードウェアに依存するプログラム等を格納する。フレキシブルディスク・ドライブ2050は、フレキシブルディスク2090からプログラム又はデータを読み取り、RAM2020を介してハードディスクドライブ2040に提供する。入出力チップ2070は、フレキシブルディスク・ドライブ2050を入出力コントローラ2084へと接続するとともに、例えばパラレル・ポート、シリアル・ポート、キーボード・ポート、マウス・ポート等を介して各種の入出力装置を入出力コントローラ2084へと接続する。
RAM2020を介してハードディスクドライブ2040に提供されるプログラムは、フレキシブルディスク2090、CD−ROM2095、又はICカード等の記録媒体に格納されて利用者によって提供される。プログラムは、記録媒体から読み出され、RAM2020を介してコンピュータ1900内のハードディスクドライブ2040にインストールされ、CPU2000において実行される。
コンピュータ1900にインストールされ、コンピュータ1900を処理装置10として機能させるプログラムは、問題取得モジュール、算出モジュール、置換モジュール、判定モジュール、問題生成モジュール、解生成モジュール、及び、出力モジュールを備える。これらのプログラム又はモジュールは、CPU2000等に働きかけて、コンピュータ1900を、問題取得部110、算出部120、置換部130、判定部140、子問題生成部150、解生成部160、及び、出力部190としてそれぞれ機能させてよい。
これらのプログラムに記述された情報処理は、コンピュータ1900に読込まれることにより、ソフトウェアと上述した各種のハードウェア資源とが協働した具体的手段である問題取得部110、算出部120、置換部130、判定部140、子問題生成部150、解生成部160、及び、出力部190として機能する。そして、これらの具体的手段によって、本実施形態におけるコンピュータ1900の使用目的に応じた情報の演算又は加工を実現することにより、使用目的に応じた特有の処理装置10が構築される。
一例として、コンピュータ1900と外部の装置等との間で通信を行う場合には、CPU2000は、RAM2020上にロードされた通信プログラムを実行し、通信プログラムに記述された処理内容に基づいて、通信インターフェイス2030に対して通信処理を指示する。通信インターフェイス2030は、CPU2000の制御を受けて、RAM2020、ハードディスクドライブ2040、フレキシブルディスク2090、又はCD−ROM2095等の記憶装置上に設けた送信バッファ領域等に記憶された送信データを読み出してネットワークへと送信し、もしくは、ネットワークから受信した受信データを記憶装置上に設けた受信バッファ領域等へと書き込む。このように、通信インターフェイス2030は、DMA(ダイレクト・メモリ・アクセス)方式により記憶装置との間で送受信データを転送してもよく、これに代えて、CPU2000が転送元の記憶装置又は通信インターフェイス2030からデータを読み出し、転送先の通信インターフェイス2030又は記憶装置へとデータを書き込むことにより送受信データを転送してもよい。
また、CPU2000は、ハードディスクドライブ2040、CD−ROMドライブ2060(CD−ROM2095)、フレキシブルディスク・ドライブ2050(フレキシブルディスク2090)等の外部記憶装置に格納されたファイルまたはデータベース等の中から、全部または必要な部分をDMA転送等によりRAM2020へと読み込ませ、RAM2020上のデータに対して各種の処理を行う。そして、CPU2000は、処理を終えたデータを、DMA転送等により外部記憶装置へと書き戻す。このような処理において、RAM2020は、外部記憶装置の内容を一時的に保持するものとみなせるから、本実施形態においてはRAM2020及び外部記憶装置等をメモリ、記憶部、または記憶装置等と総称する。例えば、処理装置10の記憶部は、問題取得部110、算出部120、置換部130、判定部140、子問題生成部150、解生成部160、及び、出力部190から受け取った/へ提供するデータを適宜記憶してよい。例えば、記憶部は、特徴ベクトル問題取得部110が算出部120に入力したデータを受け取って記憶してよい。また、記憶部は、子問題生成部150が算出した子問題等を記憶してよい。
本実施形態における各種のプログラム、データ、テーブル、データベース等の各種の情報は、このような記憶装置上に格納されて、情報処理の対象となる。なお、CPU2000は、RAM2020の一部をキャッシュメモリに保持し、キャッシュメモリ上で読み書きを行うこともできる。このような形態においても、キャッシュメモリはRAM2020の機能の一部を担うから、本実施形態においては、区別して示す場合を除き、キャッシュメモリもRAM2020、メモリ、及び/又は記憶装置に含まれるものとする。
また、CPU2000は、RAM2020から読み出したデータに対して、プログラムの命令列により指定された、本実施形態中に記載した各種の演算、情報の加工、条件判断、情報の検索・置換等を含む各種の処理を行い、RAM2020へと書き戻す。例えば、CPU2000は、条件判断を行う場合においては、本実施形態において示した各種の変数が、他の変数または定数と比較して、大きい、小さい、以上、以下、等しい等の条件を満たすか否かを判断し、条件が成立した場合(又は不成立であった場合)に、異なる命令列へと分岐し、またはサブルーチンを呼び出す。
また、CPU2000は、記憶装置内のファイルまたはデータベース等に格納された情報を検索することができる。例えば、第1属性の属性値に対し第2属性の属性値がそれぞれ対応付けられた複数のエントリが記憶装置に格納されている場合において、CPU2000は、記憶装置に格納されている複数のエントリの中から第1属性の属性値が指定された条件と一致するエントリを検索し、そのエントリに格納されている第2属性の属性値を読み出すことにより、所定の条件を満たす第1属性に対応付けられた第2属性の属性値を得ることができる。
実施形態の説明において複数の要素が列挙された場合には、列挙された要素以外の要素を用いてもよい。例えば、「Xは、A、B及びCを用いてYを実行する」と記載される場合、Xは、A、B及びCに加え、Dを用いてYを実行してもよい。
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更または改良を加えることが可能であることが当業者に明らかである。その様な変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
特許請求の範囲、明細書、および図面中において示した装置、システム、プログラム、および方法における動作、手順、ステップ、および段階等の各処理の実行順序は、特段「より前に」、「先立って」等と明示しておらず、また、前の処理の出力を後の処理で用いるのでない限り、任意の順序で実現しうることに留意すべきである。特許請求の範囲、明細書、および図面中の動作フローに関して、便宜上「まず、」、「次に、」等を用いて説明したとしても、この順で実施することが必須であることを意味するものではない。