(57)【特許請求の範囲】
【請求項１】
それぞれが少なくとも１つの論理変数に基づく複数の条件式のうち、予め定められた論理値をとる条件式に対応付けられた重みの和を最大化する問題を処理する処理装置であって、
第１論理変数および第２論理変数が予め定められた論理関係を有すると仮定した場合における前記重みの和の境界値を算出する算出部と、
前記境界値が予め定められた条件を満たす場合に、前記複数の条件式における前記第１論理変数を、前記第２論理変数を用いた論理式に置換する置換部と、
を備える処理装置。
【請求項２】
前記算出部は、
前記第１論理変数および前記第２論理変数が予め定められた論理関係を有すると仮定した場合に第１論理値をとる条件式に対応付けられた重みの和の下限値を算出し、
前記第１論理変数および前記第２論理変数が前記予め定められた論理関係を有しないと仮定した場合に前記第１論理値をとる条件式に対応付けられた重みの和の上限値を算出し、
前記置換部は、前記上限値が前記下限値以下となる場合に、前記第１論理変数および前記第２論理変数が前記予め定められた論理関係を有しない場合の前記論理式により前記第１論理変数を置換する、
請求項１に記載の処理装置。
【請求項３】
前記算出部は、
前記上限値として、前記第１論理変数と前記第２論理変数とが前記予め定められた論理関係にない場合に、偽となる可能性がある条件式に対応付けられた重みの和を算出し、
前記下限値として、前記第１論理変数と前記第２論理変数とが前記予め定められた論理関係にある場合に、必ず偽となる条件式に対応付けられた重みの和を算出し、
前記複数の条件式のうち真となる条件式の重みの和を最大化するように前記論理変数に論理値を割り当てる問題を処理する、
請求項２に記載の処理装置。
【請求項４】
前記算出部は、
前記第１論理変数と前記第２論理変数とが等しい場合の前記上限値を算出し、
前記第１論理変数と前記第２論理変数とが等しくない場合の前記下限値を算出し、
前記置換部は、前記上限値が前記下限値以下となる場合に、前記複数の条件式において、前記第１論理変数を前記第２論理変数に置換する、
請求項２又は３に記載の処理装置。
【請求項５】
前記算出部は、
前記予め定められた論理関係を有する前記第１論理変数及び前記第２論理変数の値の組み合わせのそれぞれの下限となる値の最小値を下限値として算出し、
前記予め定められた論理関係を有しない前記第１論理変数及び前記第２論理変数の値の組み合わせのそれぞれの上限となる値の最小値を上限値として算出する、
請求項１から４のいずれか１項に記載の処理装置。
【請求項６】
前記算出部は、
前記第１論理変数を含む条件式の重みの合計及び前記第２論理変数を含む条件式の重みの合計の和から、前記第１論理変数及び前記第２論理変数の論理和を含む条件式の重みの合計と前記第１論理変数の否定及び前記第２論理変数の論理和を含む条件式の重みの合計と前記第２論理変数の否定及び前記第１論理変数の論理和を含む条件式の重みの合計との和を減じた第１の値を算出し、
前記第１論理変数の否定を含む条件式の重みの合計及び前記第２論理変数の否定を含む条件式の重みの合計の和から、前記第１論理変数の否定及び前記第２論理変数の否定の論理和を含む条件式の重みの合計と前記第１論理変数の否定及び前記第２論理変数の論理和を含む条件式の重みの合計と前記第２論理変数の否定及び前記第１論理変数の論理和を含む条件式の重みの合計との和を減じた第２の値を算出し、
前記第１の値及び第２の値のうち小さい方を前記上限値とする、
請求項５に記載の処理装置。
【請求項７】
前記算出部は、
前記第１論理変数の否定である条件式の重みの合計と、前記第２論理変数である条件式の重みの合計と、前記第１論理変数の否定及び前記第２論理変数の論理和である条件式の重みの合計との和である第３の値を算出し、
前記第１論理変数である条件式の重みの合計と、前記第２論理変数の否定である条件式の重みの合計と、前記第２論理変数の否定及び前記第１論理変数の論理和である条件式の重みの合計との和である第４の値を算出し、
前記第３の値及び第４の値のうち小さい方を前記下限値とする、
請求項５又は６に記載の処理装置。
【請求項８】
前記複数の条件式に含まれる複数の論理変数から１つの論理変数を選択し、選択した論理変数に論理値を割り当てた結果に基づいて、前記選択した論理変数を含まない子問題を生成する子問題生成部とを更に備え、
前記算出部は、前記子問題に含まれる前記論理変数の組み合わせについて前記境界値を算出する、
請求項１から７のいずれか１項に記載の処理装置。
【請求項９】
前記算出部は、前記子問題における、前記予め定められた論理値になる前記問題全体の複数の条件式の重みの和の値が取りえる下限である全体下限値と、
問題全体での複数の条件式の重みの和の値が取りえる上限である全体上限値を算出する、
請求項８に記載の処理装置。
【請求項１０】
前記算出部は、前記子問題について、前記第１論理変数および前記第２論理変数が予め定められた論理関係を有すると仮定した場合に第１論理値をとる条件式に対応付けられた重みの和の下限値を算出し、
前記置換部は、前記全体上限値と前記全体下限値の差分と、前記下限値との比較結果により、前記複数の条件式において、前記第１論理変数および前記第２論理変数が前記予め定められた論理関係を有しない場合の前記論理式により前記第１論理変数を置換する、
請求項９に記載の処理装置。
【請求項１１】
前記置換部は、前記全体上限値と前記全体下限値との差分が前記下限値以下となる場合に、前記複数の条件式において、前記第１論理変数および前記第２論理変数が前記予め定められた論理関係を有しない場合の前記論理式により前記第１論理変数を置換する、
請求項１０に記載の処理装置。
【請求項１２】
最大カット問題と等価の複数の条件式を含む問題を処理する請求項１から１１のいずれか１項に記載の処理装置。
【請求項１３】
コンピュータにより実行される、それぞれが少なくとも１つの論理変数に基づく複数の条件式のうち、予め定められた論理値をとる条件式に対応付けられた重みの和を最大化または最小化する問題を処理する処理方法であって、
第１論理変数および第２論理変数が予め定められた論理関係を有すると仮定した場合における前記重みの和の境界値を算出する算出段階と、
前記境界値が予め定められた条件を満たす場合に、前記複数の条件式における前記第１論理変数を、前記第２論理変数を用いた論理式に置換する置換段階と、
を備える処理方法。
【請求項１４】
コンピュータを請求項１から１２の処理装置として機能させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、処理装置、処理方法、及び、プログラムに関する。
【背景技術】
【０００２】
複数の論理変数を含む複数の論理式（Ｃｌａｕｓｅ）の重み和を最大化する論理変数の割当を解く最大充足割当問題（ＭＡＸ  ＳＡＴ）が知られている。ＭＡＸ  ＳＡＴは、論理変数に論理値を割り当てて子問題を生成し、子問題を再帰的に解く分岐限定法（Ｂｒａｎｃｈ−ａｎｄ−ｂｏｕｎｄ）により解くことができる。
【０００３】
しかし、問題のサイズが大きくなると子問題の数が指数関数的に増加するので、解を得るのにより多くの処理リソースを要する。そこで、処理量を低減するためにＩｎｆｅｒｅｎｃｅ  Ｒｕｌｅと呼ばれる子問題の簡略化処理の手法が提案されている（非特許文献１〜６）。
［非特許文献１］N. Bansal, V. Raman, Upper Bounds for MaxSat: Further improved, in: ISAAC, 1999, pp. 247-258.
［非特許文献２］R. Niedermeier, P. Rossmanith, New upper bounds for maximum satisfiability, J. Algorithms 36 (1) (2000) 63-88.
［非特許文献３］T. Alsinet, F. Manya, and J. Planes. Improved branch and bound algorithms for max sat. In sixth International Conference on Theory and Applications of Satisfiability Testing, pages 408-415,2003.
［非特許文献４］Javier Larrosa, Federico Heras, Simon de Givry: A logical approach to efficient Max-SAT solving. Artif. Intell. 172(2-3): 204-233 (2008)
［非特許文献５］Federico Heras, Javier Larrosa: A Max-SAT Inference-Based Pre-processing for Max-Clique. SAT 2008: 139-152
［非特許文献６］Toshihide Ibaraki, Takashi Imamichi, Yuichi Koga, Hiroshi Nagamochi, Koji Nonobe, Mutsunori Yagiura: Efficient branch-and-bound algorithms for weighted MAX-2-SAT. Math. Program. 127(2): 297-343 (2011)
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかし、従来、所定の条件が成立した場合に論理変数に一意の論理値を割り当てるＩｎｆｅｒｅｎｃｅ  Ｒｕｌｅが知られているのみであり、最大充足割当問題の処理負担を更に低減するために新しい簡略化手法が必要である。
【課題を解決するための手段】
【０００５】
本発明の第１の態様においては、それぞれが少なくとも１つの論理変数に基づく複数の条件式のうち、予め定められた論理値をとる条件式に対応付けられた重みの和を最大化する問題を処理する処理装置であって、第１論理変数および第２論理変数が予め定められた論理関係を有すると仮定した場合における重みの和の境界値を算出する算出部と、境界値が予め定められた条件を満たす場合に、複数の条件式における第１論理変数を、第２論理変数を用いた論理式に置換する置換部と、を備える処理装置、当該処理装置を用いた処理方法、及び、当該処理装置に用いるプログラムを提供する。
【０００６】
なお、上記の発明の概要は、本発明の特徴の全てを列挙したものではない。また、これらの特徴群のサブコンビネーションもまた、発明となりうる。
【図面の簡単な説明】
【０００７】
【図１】本実施形態の処理装置１０のブロック図を示す。
【図２】Ｂｒａｎｃｈ−ａｎｄ−Ｂｏｕｎｄの処理の一例を示す。
【図３】本実施形態による簡略化処理の概略を示す。
【図４】本実施形態の処理装置１０による処理フローを示す。
【図５】Ｓ３００の具体的な処理内容の一例を示す。
【図６】Ｓ３３０の具体的な処理内容の一例を示す。
【図７】本実施形態における第１の簡略化処理の概要を示す。
【図８】Ｓ３５０の具体的な処理内容の一例を示す。
【図９】本実施形態の対象となる最大充足割当問題の一例を示す。
【図１０】本実施形態における第２の簡略化処理の一例を示す。
【図１１】コンピュータ１９００のハードウェア構成の一例を示す。
【発明を実施するための形態】
【０００８】
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではない。また、実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
【０００９】
図１は、本実施形態に係る処理装置１０のブロック図を示す。処理装置１０は、複数の条件式のうち予め定められた論理値をとる条件式に対応付けられた重みの和を最大化する問題を処理する。
【００１０】
本実施形態では、処理装置１０は、第１論理値（例えば、偽）となる条件式の重みの和を最小化する問題を解くものとする。この問題は、第１論理値の否定となる第２論理値（例えば、真）の条件式の重み和を最大化する問題と同義である。処理装置１０は、問題取得部１１０、算出部１２０、置換部１３０、判定部１４０、子問題生成部１５０、解生成部１６０、及び、出力部１９０を備える。
【００１１】
問題取得部１１０は、処理装置１０の処理対象となる問題を取得する。例えば、問題取得部１１０は、データベース２０等からそれぞれが少なくとも１つの論理変数に基づき、それぞれが重みを有する複数の条件式を含む最大充足割当問題を取得する。問題取得部１１０は、取得した問題を算出部１２０に供給する。
【００１２】
算出部１２０は、問題が簡略化できるかを判断するために、所定の条件において問題から得られる重みの和の境界値を算出する。例えば、算出部１２０は、問題の複数の条件式に含まれる第１論理変数及び第２論理変数が予め定められた論理関係（例えば、第１論理変数≠第２論理変数）を有すると仮定した場合において、予め定められた論理値（例えば、第１論理値）となる条件式の重みの和の境界値を算出する。算出部１２０は、問題から派生する子問題（両者を含めて指す場合は「子問題等」とする）についても境界値を算出する。算出部１２０は、算出した境界値を置換部１３０に供給する。
【００１３】
また、算出部１２０は、各子問題において予め定められた論理値（例えば、第１論理値）になる問題全体の複数の条件式の重みの和の値が取りえる下限である全体下限値、及び、処理時点での問題全体における複数の条件式の重みの和の値が取りえる上限である全体上限値を算出する。算出部１２０は、全体上限値及び全体下限値を置換部１３０及び判定部１４０に供給する。算出部１２０のより具体的な動作は後述する。
【００１４】
置換部１３０は、境界値、全体上限値、及び／又は、全体下限値が予め定められた条件を満たす場合に、複数の条件式における論理変数を、別の論理変数を用いた論理式に置換する。これにより、置換部１３０は、子問題等中の条件式に含まれる論理変数の数を減らし、子問題等を簡略化する。置換部１３０は、従来のＩｎｆｅｒｅｎｃｅ  Ｒｕｌｅを適用して子問題等を簡略化してもよい。置換部１３０は、簡略化した子問題等、又は、簡略化できなかった子問題等を判定部１４０に供給する。置換部１３０のより具体的な動作は後述する。
【００１５】
判定部１４０は、子問題等の解が生成可能であるか判断する。例えば、判定部１４０は、子問題等のサイズが予め定められた基準よりも小さい場合、子問題等の解が生成可能であると判断する。判定部１４０は、解が生成可能であると判断した場合は子問題等を解生成部１６０に供給し、解が生成可能であると判断しない場合は、子問題等を子問題生成部１５０に供給する。
【００１６】
子問題生成部１５０は、子問題等から新しい子問題を生成する。例えば、子問題生成部１５０は、子問題等の複数の条件式に含まれる複数の論理変数から１つの論理変数を選択し、選択した論理変数に論理値を割り当てた結果に基づいて、選択した論理変数を含まない子問題を生成する。子問題生成部１５０は、生成した子問題を算出部１２０に提供する。
【００１７】
解生成部１６０は、子問題等を解く。例えば、解生成部１６０は、子問題に含まれる１以上の論理変数の全ての組み合わせを実行し、最も優れた重みの和を与える論理変数の組み合わせを子問題の解として取得する。解生成部１６０は、取得した解に応じて暫定の最適解である暫定解を更新する。解生成部１６０は、更新した暫定解を算出部１２０及び出力部１９０に供給する。
【００１８】
出力部１９０は、解生成部１６０が生成した解のうち最良の解を最大充足割当問題の解として出力する。
【００１９】
このように処理装置１０は、子問題等が簡略化可能であると判断したことに応じて、子問題等の論理変数を、別の論理変数を用いた論理式に置換する。これにより、処理装置１０は、効率よく子問題を処理することができ、より少ない処理リソースで最大充足割当問題を解くことができる。
【００２０】
図２は、Ｂｒａｎｃｈ−ａｎｄ−Ｂｏｕｎｄの処理の一例を示す。図中のノード１は、問題取得部１１０が取得する元の問題を示し、ノード２及びノード３は、子問題生成部１５０が元の問題から生成した子問題を示す。例えば、子問題生成部１５０は、元の問題に含まれる論理変数のうちｘ１に偽（ｆａｌｓｅ）を割り当てることでノード２の子問題２を生成し、ｘ２に真（ｔｒｕｅ）を割り当てることでノード３の子問題３を生成する。
【００２１】
一例として、元の最大充足割当問題が、第１条件式（ｘ１∨¬ｘ２∨ｘ３，３）、第２条件式（ｘ２∨ｘ３，２）、第３条件式（¬ｘ１∨¬ｘ３，４）、及び、第４条件式（ｘ３，１）の４式を含む場合を想定する。例えば、第１条件式は、ｘ１が真、ｘ２が偽、及びｘ３が真のいずれかが成立する場合、重み３の第１条件式が満たされることを意味する。
【００２２】
子問題生成部１５０は、元の問題に含まれる論理変数ｘ１に真（ｔｒｕｅ）を割り当てた場合、第２条件式'（ｘ２∨ｘ３，２）、第３条件式'（¬ｘ３，４）、及び、第４条件式（ｘ３，１）の３式を含むノード３の子問題を生成する。ここで、元の問題の第１条件式は必ず満たされるので解く必要はない。従って、子問題生成部１５０は、第１条件式を子問題から削除する。また、子問題生成部１５０は、必ず偽となる¬ｘ１を第３条件式から削除する。
【００２３】
従来の簡略化処理では、子問題の一部の論理変数に論理値の一部を与える処理を省略し、子問題の処理を簡略化する。例えば、処理装置１０は、全ての条件式で論理変数（又は論理変数の否定）は出現するが、論理変数の否定（又は論理変数）は出現しない関係を検出した場合は、当該論理変数に真（又は偽）を割り当てる。
【００２４】
一例として、上述した３式を含む子問題では、ｘ２は出現するが¬ｘ２は出現しない。このような場合、ｘ２に第２論理値（例えば、真）を割り当てると第２論理値を最大化する問題に必ず寄与できる。従って、上記子問題において、ｘ２に第２論理値（真）を割り当てると、第３条件式'（¬ｘ３，４）、及び、第４条件式（ｘ３，１）の２式を含むより簡略化された子問題が生成される。これはＰｕｒｅ  Ｌｉｔｅｒａｌ  Ｒｕｌｅと呼ばれる。
【００２５】
また、例えば、処理装置１０は、子問題の任意の論理変数に第２論理値（例えば、真）を割り当てて得られた重みが子問題の当該論理変数に第１論理値（例えば、偽）を割り当てて得られた重みより大きい場合、当該論理変数に第２論理値を割り当てる。一例として、第３条件式'及び第４条件式のみを含む上記子問題において、ｘ３に偽を与えた場合の重み（４）はｘ３に真を与えた場合の重み（１）よりも大きいのでｘ３には偽が割り当てられてよい。これはＣｏｍｐｌｅｍｅｎｔａｒｙ  Ｕｎｉｔ  Ｒｕｌｅと呼ばれる。
【００２６】
従来の簡略化処理では、論理変数の一部に論理値を割り当てることで子問題の処理の一部を省くことができる。例えば、図２に示すように、ノード３の子問題３においてＰｕｒｅ  Ｌｉｔｅｒａｌ  Ｒｕｌｅ等によりｘ２に偽が割り当てられた場合、処理装置１０は、ｘ２に偽（ｆａｌｓｅ）を割り当てた後の子問題の処理のみを続行し、ｘ２に真（ｔｒｕｅ）を割り当てた子問題の処理を省略してよい。
【００２７】
図３は、本実施形態による簡略化処理の概略を示す。本実施形態では、処理装置１０は、子問題中の論理変数を別の論理変数に置き換える簡略化処理を行う。図３の例では、処理装置１０は、図２と同様にノード１の元の問題からノード２及びノード３の子問題を生成し、ノード３の子問題の簡略化処理を行う。
【００２８】
ここで、処理装置１０は、ノード３の子問題において、算出部１２０が算出した境界値等が所定の条件を満たす場合に、論理変数ｘ２を論理変数ｘ３に置き換える。その結果、処理装置１０は、子問題において論理変数ｘ２及び論理変数ｘ３に異なる論理値（例えば、真と偽、又は、偽と真）が割り当てられる子問題は処理しなくてよい。すなわち、処理装置１０は、ノード３の子問題を簡略して、論理変数の数が１個減少したノード４の問題を生成する。
【００２９】
図４は、本実施形態の処理装置１０による処理フローを示す。本実施形態において、処理装置１０は、Ｓ１００〜Ｓ１３００を実行することにより、最大充足割当問題を処理する。
【００３０】
まず、Ｓ１００で問題取得部１１０は、処理装置１０の処理対象となる複数の条件式を含む最大充足割当問題を取得する。例えば、問題取得部１１０は、第２論理値（例えば、真）となる条件式の重み和を最大化するように論理変数に論理値を割り当てる最大充足割当問題を取得する。一例として、問題取得部１１０は、任意の論理変数又は論理変数の否定を各要素としたときに、１の要素又は複数の要素の論理和を各条件式として含み、各条件式に重み付けがなされた問題を取得する。
【００３１】
問題取得部１１０は、最大クリーク問題又は最大カット問題と等価の複数の条件式を含む最大充足割当問題を取得してよい。また、問題取得部１１０は、ランダムベンチマークにより生成した最大充足割当問題を取得してよい。問題取得部１１０は、取得した問題を算出部１２０に供給する。
【００３２】
次に、Ｓ３００で、処理装置１０は、簡略化処理を実行する。例えば、Ｓ１００で取得した問題及び当該問題から派生した子問題が簡略化できるかを判断するために、算出部１２０が、所定の条件において子問題等から得られる重みの和の境界値等を算出し、置換部１３０は、算出された境界値等に応じて、子問題等の簡略化を実行する。
【００３３】
ここで、例えば、置換部１３０は、子問題等の論理変数を、別の論理変数を用いた論理式に置換することにより簡略化を実行する。置換部１３０は、簡略化処理を実行した場合は簡略化した子問題等を判定部１４０に供給し、簡略化処理を実行しなかった場合は子問題等をそのまま判定部１４０に供給する。なお、簡略化処理の詳細は後述する。
【００３４】
次に、Ｓ４００で、判定部１４０は、子問題等の解が生成可能であるか判断する。例えば、判定部１４０は、子問題等に含まれる論理変数の数が予め定められた閾値以下、及び／又は、子問題等に含まれる条件式の数が予め定められた閾値以下となる場合、子問題等の解が生成可能であると判断してよい。
【００３５】
一例として、判定部１４０は、子問題等に含まれる全ての条件式に含まれる変数が１個である場合、又は、子問題における重み和が論理変数の論理値によらず一意に定まる場合に子問題等の解が生成可能であると判断してよい。判定部１４０は、解が生成可能であると判断した場合は子問題等を解生成部１６０に供給し、解が生成可能と判断しない場合は、子問題等を子問題生成部１５０に供給する。
【００３６】
Ｓ５００において、子問題生成部１５０は、子問題等から新しい子問題を生成する。例えば、子問題生成部１５０は、子問題等の複数の条件式に含まれる複数の論理変数から１つの論理変数を選択し、選択した論理変数にそれぞれ異なる論理値を割り当てた結果に基づいて、選択した論理変数を含まない複数の子問題を生成する。
【００３７】
選択した論理変数に論理値を割り当てた結果、他の論理変数によらず条件式が一意に真又は偽に定まらない場合、子問題生成部１５０は当該条件式から選択した論理変数部分を子問題から除外する。また、子問題生成部１５０は、選択した論理変数に論理値を割り当てた結果、他の論理変数によらず一意に真又は偽に定まる条件式を、子問題から除外してよい。また、子問題生成部１５０は、生成した子問題を算出部１２０に提供する。
【００３８】
次にＳ６００において、算出部１２０は、未処理の子問題から処理の対象とする子問題を選択する。例えば、算出部１２０は、未処理の子問題から探索木の幅方向を優先して子問題を選択してよい。一例として、算出部１２０は、図３においてノード２及びノード４の子問題が未処理の子問題として存在する場合、階層が浅いノード２の子問題を優先して選択してよい。これに代えて、算出部１２０は、未処理の子問題から探索木の深さ方向を優先して子問題を選択してよい。
【００３９】
ここで、算出部１２０は、選択した子問題での予め定められた論理値（例えば、第１論理値）になる問題全体の重みの和が取りえる下限である全体下限値ＬＢ、及び、問題全体での複数の条件式の重みの和の値が取りえる上限である全体上限値ＵＢを算出する。
【００４０】
すなわち、処理装置１０は、第２論理値を最大又は第１論理値を最小にする問題を子問題に分岐して解いていく中で、最適な割り当てをした場合に可能である、第１論理値をとる条件式の重み和の範囲を予想する。ここで、選択した子問題で予想される第１論理値の和の範囲の中で最良の場合の値が全体下限値ＬＢである。選択した子問題において第１論理値（又は第２論理値）をとる条件式の重み和が一意に定まる場合には、その一意の重み和の値が全体下限値ＬＢとなる。全体下限値ＬＢは、子問題ごとに算出される。
【００４１】
また、現在までに判明している最適解が取りえる第１論理値の和の範囲の中で最悪の場合の値が全体上限値ＵＢである。全体上限値ＵＢは、全子問題に共通のグローバルな値である。処理装置１０は、子問題について算出した全体上限値ＵＢの値の候補が、現在の全体上限値ＵＢによりも優れている場合は、算出した全体上限値ＵＢの値の候補で全体上限値ＵＢを更新する。
【００４２】
例えば、第１条件式（¬ｘ１，３）、第２条件式（ｘ２∨ｘ３，２）、第３条件式（ｘ１∨¬ｘ３，４）、及び、第４条件式（ｘ３，１）を含む元の問題に、論理変数ｘ１に真（ｔｒｕｅ）を割り当てて生成された、第２条件式'（ｘ２∨ｘ３，２）、第３条件式'（¬ｘ３，４）、及び、第４条件式（ｘ３，１）の３式を含む子問題をＳ６００で算出部１２０が選択した場合を考える。
【００４３】
この場合、第１条件式は必ず満たされないので、子問題に分岐したときに問題全体で第１論理値（例えば、偽）を取る条件式の重みの和は、少なくとも３となる。従って、算出部１２０は、選択した子問題について全体下限値ＬＢ＝３を算出する。
【００４４】
また、第３条件式は必ず満たされるので、子問題に分岐したときに問題全体で第１論理値（例えば、偽）を取る条件式の重みの和の最大値は６（３＋２＋１）となる。ここで、算出部１２０は、算出した当該最大値が現時点の全体上限値ＵＢより小さければ、全体上限値ＵＢを当該最大値で更新する。
【００４５】
これは、全体上限値ＵＢは、問題全体における最悪のケース（第１論理値となる条件式の重み和が最大になるケース）でも最適解から得られているだろう第１論理値の重み和であるので、算出した当該最大値が現時点の全体上限値ＵＢより大きい場合（すなわち、子問題において得られる最悪の最適解で得られる第１論理値の重み和が、問題全体で得られる最悪の最適解で得られる第１論理値の重み和が優れていない場合）には全体上限値ＵＢを更新する必要がないからである。
【００４６】
次にＳ７００において、算出部１２０は、選択した子問題で得られた全体下限値ＬＢが、現在の全体上限値ＵＢよりも優れているか判定する。例えば、全体下限値ＬＢが現在の全体上限値ＵＢよりも小さい場合、算出部１２０は処理をＳ３００に戻す。全体下限値ＬＢが現在の全体上限値ＵＢよりも大きい場合、算出部１２０は処理をＳ８００に進める。これにより、処理装置１０は、子問題について簡略化処理を試みる。
【００４７】
Ｓ８００において、算出部１２０は、選択した子問題を処理済みとする。これにより、処理装置１０は、全体下限値ＬＢが現時点の全体上限値ＵＢよりも小さい子問題（すなわち、最適解が得られる可能性がない子問題）の処理を中止するので、処理リソースを節約することができる。処理装置１０は、処理をＳ１２００に進める。
【００４８】
Ｓ９００において、解生成部１６０は、子問題等を解く。例えば、解生成部１６０は、子問題に含まれる１以上の論理変数の一意の全ての組み合わせを実行し、第２論理値を取る条件式の最大の重みの和（又は第１論理値を取る条件式の最小の重みの和）を与える論理変数に対する論理値の割り当てを子問題の解として取得する。
【００４９】
解生成部１６０は、組み合わせの実行中に子問題等の全体下限値ＬＢと同じ重み和が得られた場合、当該組み合わせに係る割り当てを子問題等の解とし、残りの処理を中断してよい。解生成部１６０は、子問題の論理変数への論理値の割り当てが一意に定まる場合（例えば、子問題に含まれる条件式が単一の論理変数のみの条件式１個の場合等）は、当該子問題において各論理変数に割り当てられている論理値を解として取得する。
【００５０】
次に、Ｓ１０００において、解生成部１６０は、取得した解が暫定解よりも優れた解であるか判定する。例えば、解生成部１６０は、取得した解により得られた第１論理値を取る条件式の重み和が、現在の暫定解の重み和よりも小さいか判定する。解生成部１６０は、取得した解による重み和が暫定解の重み和よりも小さい場合に処理をＳ１１００に進め、そうでない場合に処理をＳ１２００に進める。
【００５１】
次にＳ１１００で解生成部１６０は、現時点での暫定の最適解である暫定解を更新する。例えば、解生成部１６０は、現在の暫定解をＳ９００で生成した解で更新する。暫定解がまだ存在していない場合、解生成部１６０は、取得した解を新しい暫定解として更新する。解生成部１６０は、暫定解を更新した場合、暫定解を算出部１２０に供給する。
【００５２】
ここで、解生成部１６０は、暫定解に応じて全体上限値ＵＢも更新する。例えば、解生成部１６０は、更新した暫定解による条件式の重み和が現在の全体上限値ＵＢよりも小さい場合、更新した暫定解による条件式の重み和で全体上限値ＵＢを置き換えて更新する。解生成部１６０は、更新した暫定解及び全体上限値ＵＢを算出部１２０及び出力部１９０に供給する。解生成部１６０は、Ｓ１１００の後に処理をＳ１２００に進める。
【００５３】
Ｓ１２００において、算出部１２０は、生成済みの子問題のうち未処理のものがあるかを判定する。例えば、算出部１２０は、Ｓ５００で子問題生成部１５０が生成した子問題のうちＳ８００及びＳ９００のいずれの処理の対象にもなっていない子問題があるか判定する。算出部１２０は、未処理の子問題があると判定する場合に処理をＳ６００に戻し、未処理の子問題がないと判定する場合に処理をＳ１３００に進める。
【００５４】
Ｓ１３００において、解生成部１６０が生成した最適解を出力する。例えば、出力部１９０は、解生成部１６０から最終的に得られた暫定解を最適解として処理装置１０のディスプレイ等に表示し、処理装置１０の記憶装置に格納する。
【００５５】
このように、処理装置１０は、問題取得部１１０が取得した元の問題から子問題を生成する。そして、処理装置１０は、子問題等の論理変数を別の論理変数を用いた論理式に置換すること等により子問題を簡略化し、簡略化した子問題を再帰的に解くことにより元の最大充足割当問題の解を得る。これにより、処理装置１０は、効率よく子問題を処理することができ、より少ない処理リソースで最大充足割当問題を解くことができる。
【００５６】
図５は、図４の処理フローにおけるＳ３００の具体的な処理内容の一例を示す。Ｓ３００において、処理装置１０は、例えばＳ３１０〜Ｓ３５０により子問題等の簡略化処理を実行する。
【００５７】
Ｓ３１０において、処理装置１０は子問題等に対して、単一の論理変数を対象にする簡略化を実行する。例えば、処理装置１０は、一定の条件を満たすことを条件に、子問題等に含まれる論理変数に予め定められた論理値を割り当てることで子問題等を簡略化する。一例として、処理装置１０は、Ｐｕｒｅ  Ｌｉｔｅｒａｌ  Ｒｕｌｅ及び／又はＣｏｍｐｌｅｍｅｎｔａｒｙ  Ｕｎｉｔ  Ｒｕｌｅを適用することで子問題等を簡略化する。処理装置１０は、その他の既存のＩｎｆｅｒｅｎｃｅ  Ｒｕｌｅを適用して子問題等を簡略化してよい。
【００５８】
Ｓ３３０において、処理装置１０は、複数の論理変数を対象とする第１の簡略化処理を実行する。例えば、算出部１２０が子問題等に含まれる論理変数の任意の組み合わせについて境界値を算出し、境界値が一定の条件を満たす組み合わせに対して置換部１３０が第１の簡略化処理を実行する。
【００５９】
一例として、処理装置１０は、子問題等に含まれる２個の論理変数に同じ論理値を割り当てたときに得られる最も悪い最適解が、当該２個の論理変数に異なる論理値を割り当てたときに得られる最も良い最適解よりも良いと判定した場合に、当該２個の論理変数に同じ論理値を割り当てる。第１の簡略化処理の詳細については後述する。
【００６０】
Ｓ３５０において、処理装置１０は、複数の論理変数を対象とする第２の簡略化処理を実行する。例えば、子問題等に含まれる任意の２個の論理変数に異なる論理値を割り当てたときに得られる最も良い最適解による第１論理値となる条件式の重み和が、今後の処理で最悪のケースでも得られると現時点で予想される解の結果（すなわち、全体上限値ＵＢ）よりも悪いと予想されるときは、当該２個の論理変数に異なる論理値を割り当てた問題を解く処理は無駄になる。従って、このような場合、処理装置１０は、当該２個の論理変数に同じ論理値を割り当てる。第２の簡略化処理の詳細については後述する。
【００６１】
このように処理装置１０は、複数種類の簡略化処理を適用することにより、子問題等を簡略化する。これにより、処理装置１０は、子問題等をより少ない処理リソースで解くことができる。
【００６２】
なお、処理装置１０は、Ｓ３１０、Ｓ３３０、及び、Ｓ３５０の簡略化処理のうち任意の１又は２つを省略してもよく、これらの簡略化処理を異なる順番で実行してもよい。例えば、処理装置１０は、Ｓ３３０のみ、Ｓ３５０のみ、又は、Ｓ３３０及びＳ３５０の処理のみを実行してよい。
【００６３】
また、処理装置１０は、簡略化処理を繰り返し実行してもよい。例えば、処理装置１０は、Ｓ３１０〜Ｓ３５０（又はこの一部）の処理を所定の条件が満たされるまで繰り返してもよい。
【００６４】
図６は、図５の処理フローにおけるＳ３３０の具体的な処理内容の一例を示す。Ｓ３３０において、処理装置１０の算出部１２０及び置換部１３０は、Ｓ３３２〜Ｓ３４０の処理を実行することにより、第１の簡略化処理を実行する。
【００６５】
まず、Ｓ３３２において、算出部１２０は、子問題等に含まれる複数の論理変数から簡略化の対象とする２個の論理変数を選択する。例えば、算出部１２０は、子問題等に含まれる複数の論理変数から出現回数の多い論理変数、又は、含まれる条件式の重み和が大きい論理変数を優先して選択してよい。
【００６６】
次に、Ｓ３３４において、算出部１２０は、第１論理変数および第２論理変数が予め定められた論理関係（例えば、第１論理変数≠第２論理変数）を有しないと仮定した場合（例えば、第１論理変数＝第２論理変数）に第１論理値をとる処理対象の子問題等の条件式に対応付けられた重みの和の上限値を算出する。
【００６７】
例えば、算出部１２０は、第１論理変数と第２論理変数とが等しい論理関係にある場合の第１論理変数及び第２論理変数の値の組み合わせを割り当てた場合（即ち、第１論理変数及び第２論理変数が共に真、又は、共に偽の場合）のそれぞれにおいて、偽となる可能性がある条件式に対応付けられた重みの和の上限となる値を算出し、そのうちの最小値を上限値として算出する。
【００６８】
一例として、算出部１２０は、第１論理変数を含む条件式の重みの合計及び第２論理変数を含む条件式の重みの合計の和から、第１論理変数及び第２論理変数の論理和を含む条件式の重みの合計と第１論理変数の否定及び第２論理変数の論理和を含む条件式の重みの合計と第２論理変数の否定及び第１論理変数の論理和を含む条件式の重みの合計との和を減じた第１の値を算出する。
【００６９】
算出部１２０は、第１論理変数の否定を含む条件式の重みの合計及び第２論理変数の否定を含む条件式の重みの合計の和から、第１論理変数の否定及び第２論理変数の否定の論理和を含む条件式の重みの合計と第１論理変数の否定及び第２論理変数の論理和を含む条件式の重みの合計と第２論理変数の否定及び第１論理変数の論理和を含む条件式の重みの合計との和を減じた第２の値を算出する。
【００７０】
算出部１２０は、算出した第１の値及び第２の値のうち小さい方を上限値としてよい。すなわち、第１論理変数をｘとし、第２論理変数をｙとし、処理対象の子問題等において論理式Ａを含む条件式（但し¬Ａは含まない）の重みの和の合計をｗａｌｌ（Ａ）と表す場合、算出部１２０は、下記式により、上限値を算出することができる。
ｍｉｎ｛ｗａｌｌ（ｘ）＋ｗａｌｌ（ｙ）−ｗａｌｌ（ｘ∨ｙ），ｗａｌｌ（¬ｘ）＋ｗａｌｌ（¬ｙ）−ｗａｌｌ（¬ｘ∨¬ｙ）｝−ｗａｌｌ（¬ｘ∨ｙ）−ｗａｌｌ（ｘ∨¬ｙ｝
【００７１】
第１論理変数と第２論理変数とが等しい論理関係にある場合、子問題等の第２論理値を取る条件式の重み和が当該上限値を上回ることはない。つまり、当該上限値は、第１論理変数及び第２論理変数に等しい論理関係を割り当てた場合に最低限得られるであろう最適解の第１論理値となる条件式の重み和に対応する。算出部１２０は、算出した上限値を置換部１３０に供給する。
【００７２】
次に、Ｓ３３６において、算出部１２０は、第１論理変数および第２論理変数が予め定められた論理関係（例えば、第１論理変数≠第２論理変数）を有すると仮定した場合に第１論理値をとる処理対象の子問題等の条件式に対応付けられた重みの和の下限値を算出する。例えば、算出部１２０は、第１論理変数と第２論理変数とが等しくない論理関係にある場合の第１論理変数及び第２論理変数の値の組み合わせ（即ち、第１論理変数が真で第２論理変数が偽、又は、第１論理変数が偽で第２論理変数が真の場合）のそれぞれにおいて、必ず偽となる条件式に対応付けられた重みの和の下限となる値を算出し、そのうちの最小値を下限値として算出する。
【００７３】
一例として、算出部１２０は、第１論理変数の否定である条件式の重みの合計と、第２論理変数である条件式の重みの合計と、第１論理変数の否定及び第２論理変数の論理和である条件式の重みの合計との和である第３の値を算出する。
【００７４】
また、算出部１２０は、第１論理変数である条件式の重みの合計と、第２論理変数の否定である条件式の重みの合計と、第２論理変数の否定及び第１論理変数の論理和である条件式の重みの合計との和である第４の値を算出する。
【００７５】
算出部１２０は、当該第３の値及び第４の値のうち小さい方を下限値としてよい。すなわち、第１論理変数をｘとし、第２論理変数をｙとし、処理対象の子問題等において論理式Ａ自体である条件式（論理式Ａを含むが論理式Ａ自体でない条件式は含まない）の重みの和の合計をｗｕｎｉｔ（Ａ）と表す場合、算出部１２０は、下記式により、下限値を算出することができる。
ｍｉｎ｛ｗｕｎｉｔ（¬ｘ）＋ｗｕｎｉｔ（ｙ）＋ｗｕｎｉｔ（¬ｘ∨ｙ），ｗｕｎｉｔ（ｘ）＋ｗｕｎｉｔ（¬ｙ）＋ｗｕｎｉｔ（ｘ∨¬ｙ）｝
【００７６】
第１論理変数と第２論理変数とが異なる論理関係にある場合、子問題等の第２論理値を取る条件式の重み和が当該下限値を下回ることはない。つまり、当該下限値は、第１論理変数及び第２論理変数に異なる論理関係を割り当てた際、最も良い場合に得られるであろう最適解の第１論理値となる条件式の重み和に対応する。算出部１２０は、算出した下限値を置換部１３０に供給する。
【００７７】
次に、Ｓ３３８において、置換部１３０が２個の論理変数が所定の条件を満たすか否かを判定する。例えば、Ｓ３３４で算出部１２０が算出した上限値が、Ｓ３３６で算出部１２０が算出した下限値以下となるか否かを判定する。一例として、置換部１３０は、数式１が成りたつかを判定する。
【数１】
0006548209.tif 000002
…数式１
置換部１３０は、上限値が下限値以下となる場合に処理をＳ３４０に進め、上限値が下限値超となる場合はＳ３３０の処理を終了する。
【００７８】
Ｓ３４０において、置換部１３０は、第１論理変数および第２論理変数が予め定められた論理関係を有しない場合（第１論理変数＝第２論理変数）の論理式により第１論理変数を置換する。例えば、置換部１３０は、処理対象の子問題等の複数の条件式において、第１論理変数を第２論理変数に置換し、処理対象の子問題等を更新する。これにより、置換部１３０は、処理対象の子問題の論理変数の数を削減することができる。
【００７９】
このように、置換部１３０は、第１の簡略化処理において、２個の論理変数に同じ論理値を割り当てた場合に第１論理値を取る条件式の重み和の上限値が、異なる論理値を割り当てた場合に第１論理値を取る条件式の重み和の下限値以下となるか判定する。判定が肯定的な場合は、子問題等において予め定められた論理関係でない論理関係（例えば、第１論理変数＝第２論理変数）を割り当てた方が確実に良い解が得られることとなるので、置換部１３０は、予め定められた論理関係でない論理関係を第１論理変数及び第２論理変数に適用する。
【００８０】
なお、処理装置１０は、Ｓ３３０において複数回Ｓ３３２〜Ｓ３４０の処理を実行してもよい。例えば、処理装置１０は、処理対象の子問題等に含まれる論理変数の任意のペアに対してＳ３３２〜Ｓ３４０の処理を適用して子問題等を逐次更新し、Ｓ３４０の処理を適用できない場合（すなわち、Ｓ３３８の判定が否定的な場合）には当該子問題等において別の未選択の論理変数のペアに対してＳ３３２〜Ｓ３４０の処理を開始してよい。
【００８１】
図７は、本実施形態における第１の簡略化処理の概要を示す。図の横軸は、子問題等に含まれる条件式のうち偽となる条件式の重みの和を示す。図中のＵｌ（Ｘ，Ｙ）は子問題等において第１論理変数ｘに論理値Ｘを割り当て第２論理変数ｘに論理値Ｙを割り当てた場合に偽となる子問題等の条件式の重み和の下限値を示す。図中のＵｕ（Ｘ，Ｙ）は子問題等において第１論理変数ｘに論理値Ｘを割り当て第２論理変数ｘに論理値Ｙを割り当てた場合に偽となる子問題等の条件式の重み和の上限値を示す。
【００８２】
従って、Ｕｕ（Ｔ，Ｔ）は、第１論理変数及び第２論理変数が共に真の場合に偽（第１論理値）を取る条件式の重み和の上限であり、算出部１２０がＳ３３４において算出した第１の値に相当する。Ｕｕ（Ｆ，Ｆ）は、第１論理変数及び第２論理変数が共に偽の場合に偽（第１論理値）を取る条件式の重み和の上限であり、算出部１２０がＳ３３４において算出した第２の値に相当する。算出部１２０は、Ｕｕ（Ｔ，Ｔ）及びＵｕ（Ｆ，Ｆ）のうち最小値（図中の最小上限値）を上限値として算出する。
【００８３】
図中のＵｌ（Ｔ，Ｆ）は、第１論理変数が真で第２論理変数が偽の場合に偽（第１論理値）を取る条件式の重み和の下限であり、算出部１２０がＳ３３６において算出した第３の値に相当する。Ｕｕ（Ｆ，Ｔ）は、第１論理変数が偽で第２論理変数が真の場合に偽（第１論理値）を取る条件式の重み和の下限であり、算出部１２０がＳ３３６において算出した第４の値に相当する。算出部１２０は、Ｕｌ（Ｔ，Ｆ）及びＵｌ（Ｆ，Ｔ）のうち最小値（図中の最小下限値）を下限値として算出する。
【００８４】
Ｓ３３８において、置換部１３０は、Ｕｕ（Ｔ，Ｔ）及びＵｕ（Ｆ，Ｆ）の最小値（図７中ではＵｕ（Ｆ，Ｆ））と、Ｕｌ（Ｔ，Ｆ）及びＵｌ（Ｆ，Ｔ）の最小値（図７中ではＵｌ（Ｔ，Ｆ））とを比較する。
【００８５】
Ｕｕ（Ｔ，Ｔ）及びＵｕ（Ｆ，Ｆ）の最小値は、子問題等において第１論理変数及び第２論理変数に同じ論理値を割り当てた際に、最悪のケース（偽となる条件式の重み和が最大になるケース）で偽となる条件式の重み和の値である。Ｕｌ（Ｔ，Ｆ）及びＵｌ（Ｆ，Ｔ）の最小値は、子問題等において第１論理変数及び第２論理変数に同じ論理値を割り当てた際に、最良のケース（偽となる条件式の重み和が最小になるケース）の偽となる条件式の重み和の値である。従って、前者が小さい場合は、第１論理変数及び第２論理変数に同じ論理値を割り当てた方が確実によい解が得られるので、置換部１３０はＳ３４０で第１論理変数を第２論理変数で置換する。
【００８６】
図８は、図５の処理フローにおけるＳ３５０の具体的な処理内容の一例を示す。Ｓ３５０において、処理装置１０の算出部１２０及び置換部１３０は、Ｓ３５２〜Ｓ３５８の処理を実行することにより、第２の簡略化処理を実行する。
【００８７】
まず、Ｓ３５２において、算出部１２０は、子問題等に含まれる複数の論理変数から簡略化の対象とする２個の論理変数を選択する。算出部１２０は、Ｓ３３２と同様の方法により論理変数を選択してよい。
【００８８】
次に、Ｓ３５４において、算出部１２０は、子問題について、第１論理変数および第２論理変数が予め定められた論理関係（例えば、第１論理変数≠第２論理変数）を有すると仮定した場合に第１論理値をとる条件式に対応付けられた重みの和の下限値を算出する。例えば、算出部１２０は、Ｓ３３６の同様の方法により子問題等についての下限値を算出してよい。
【００８９】
次に、Ｓ３５６において、置換部１３０は、子問題等についての下限値、問題全体の全体上限値ＵＢ、及び、問題全体の全体下限値ＬＢが所定の条件を満たすか否かを判定する。例えば、全体上限値ＵＢと全体下限値ＬＢとの差分が、Ｓ３５４で算出部１２０が算出した子問題等についての下限値以下となるか否かを判定する。一例として、置換部１３０は、数式１が成りたつかを判定する。
【数２】
0006548209.tif 000003
…数式２
置換部１３０は、当該条件が成り立つ場合に処理をＳ３５８に進め、成り立たない場合にＳ３５０の処理を終了する。
【００９０】
Ｓ３５８において、置換部１３０は、処理対象の子問題等に含まれる複数の条件式において、第１論理変数および第２論理変数が予め定められた論理関係を有しない場合の論理式により第１論理変数を置換する。例えば、置換部１３０は、処理対象の子問題等の複数の条件式において、第１論理変数を第２論理変数に置換し、処理対象の子問題等を更新する。これにより、置換部１３０は、処理対象の子問題の論理変数の数を削減することができる。
【００９１】
このように、置換部１３０は、第２の簡略化処理において、全体上限値ＵＢと全体下限値ＬＢの差分と、下限値との比較結果により、処理対象の子問題等を簡略化する。
【００９２】
なお、処理装置１０は、Ｓ３５０において複数回Ｓ３５２〜Ｓ３５８の処理を実行してもよい。例えば、処理装置１０は、処理対象の子問題等に含まれる論理変数の任意のペアに対してＳ３５２〜Ｓ３５８の処理を適用して子問題等を逐次更新し、Ｓ３５８の処理を適用できない場合（すなわち、Ｓ３５６の判定が否定的な場合）には当該子問題等において別の未選択の論理変数のペアに対してＳ３５２〜Ｓ３５８の処理を開始してよい。
【００９３】
ここで図９及び図１０を用いて第２の簡略化処理の概要を説明する。図９は、本実施形態の対象となる最大充足割当問題の一例を示す。図中のノード１は、問題取得部１１０が取得する元の問題を示し、ノード２及びノード３は、子問題生成部１５０が元の問題から生成した子問題を示す。
【００９４】
一例として、問題取得部１１０は、元の問題として、第１条件式Ｃ１（ｘ１，１５）、第２条件式Ｃ２（¬ｘ１∨ｘ２∨¬ｘ３，２０）、及び、第３条件式Ｃ３（¬ｘ１∨¬ｘ２∨ｘ３，２０）を含み、真（第２論理値）となる条件式の重み和を最大化する問題を取得する場合を想定する。元の問題であるノード１においては全ての条件式が偽となる可能性があるので、問題全体で偽（第１論理値）を取る条件式の重み和の上限である全体上限値ＵＢは、全ての条件式の重み和５５（１５＋２０＋２０）となる。
【００９５】
元の問題においては、どの論理変数にも論理値が割り当てられていない。従って、処理対象のノード１において、問題全体で偽（第２論理値）を取る条件式の重み和の下限である全体下限値ＬＢは０となる。
【００９６】
ここで、子問題生成部１５０は、元の問題（ノード１）の論理変数ｘ１に偽（ｆａｌｓｅ）を割り当てて子問題（ノード２）を生成するとする。論理変数ｘ１に偽が割り当てられた結果、条件式Ｃ１のみが確実に満たされず偽となる。「¬ｘ１」を含む条件式Ｃ２及び条件式Ｃ３は、確実に満たされて真となる。
【００９７】
従って、ノード２における問題全体の全体下限値ＬＢ２は１５となる。また、ノード２における問題全体の全体上限値ＵＢの値の候補は１５であり、現時点の全体上限値ＵＢ５５よりも小さい、即ち優れているので、算出部１２０は、全体上限値ＵＢを１５に更新する。
【００９８】
また、子問題生成部１５０は、元の問題（ノード１）の論理変数ｘ１に真（ｔｒｕｅ）を割り当てて別の子問題（ノード３）を生成する。論理変数ｘ１に真が割り当てられた結果、条件式Ｃ１が満たされ真となる。その結果、子問題生成部１５０は、第２条件式Ｃ２'（ｘ２∨¬ｘ３，２０）及び第３条件式Ｃ３'（¬ｘ２∨ｘ３，２０）の２式を含む子問題（ノード３）を生成する。
【００９９】
ノード３において、偽となることが確定した条件式は問題全体で存在しない。従って、ノード３における問題全体の全体下限値ＬＢ３は０となる。また、ノード３において、第２条件式Ｃ２'及び第３条件式Ｃ３'のいずれも偽となる可能性がある。従って、ノード３における問題全体の全体上限値ＵＢの値の候補は４０（２０＋２０）であり、現時点の全体上限値ＵＢ１５よりも大きい。このため、算出部１２０は、全体上限値ＵＢを１５のまま更新しない。
【０１００】
ここで、ノード３に対して、第１論理変数をｘ２とし第２論理変数をｘ３として、第２の簡略化処理を適用する。ノード３における算出部１２０がＳ３５４で算出する下限値ｍｉｎ（Ｕｌ（Ｆ，Ｔ），Ｕｌ（Ｔ，Ｆ））は２０となる。すると、全体上限値ＵＢとノード３の全体下限値ＬＢ３との差分１５（１５−０）は当該下限値以下となるので、置換部１３０は、ノード３において第１論理変数ｘ２を第２論理変数ｘ３で置換する簡略化処理を実行する。
【０１０１】
図１０は、本実施形態における第２の簡略化処理の一例を示す。図の横軸は、元の問題全体に含まれる条件式のうち偽となる条件式の重みの和を示す。図中のＬＢは処理対象の子問題等における全体下限値を示し、ＵＢは全体上限値を示す。Ｕｌ（Ｘ，Ｙ）は子問題等において第１論理変数ｘに論理値Ｘを割り当て第２論理変数ｘに論理値Ｙを割り当てた場合に偽となる子問題等の条件式の重み和の下限値を示す。
【０１０２】
全体下限値ＬＢは、処理対象の子問題等のノードにおいて、問題全体で偽（第１論理値）となる条件式の重み和の下限値である。Ｕｌ（Ｔ，Ｆ）及びＵｌ（Ｆ，Ｔ）の最小値は、子問題等において第１論理変数及び第２論理変数に同じ論理値を割り当てた際に、最良のケースの偽となる条件式の重み和の値である。
【０１０３】
従って、全体下限値ＬＢと下限値Ｕｌ（Ｔ，Ｆ）及びＵｌ（Ｆ，Ｔ）の最小値との和は、処理対象の子問題等において、第１論理変数及び第２論理変数に異なる論理値を割り当てた際に、最良のケースで得られる問題全体の第１論理値の重み和である。図９の例においては、全体下限値ＬＢと下限値Ｕｌ（Ｔ，Ｆ）及びＵｌ（Ｆ，Ｔ）の最小値との和は２０（０＋２０）となる。
【０１０４】
一方で、全体上限値ＵＢは、現在まで子問題等を処理した結果判明している、問題全体で偽（第１論理値）となる条件式の重み和の上限値（すなわち、最悪のケースでも得られると見込まれる偽となる条件式の重み和）である。このため、全体上限値ＵＢが、全体下限値ＬＢと下限値Ｕｌ（Ｔ，Ｆ）及びＵｌ（Ｆ，Ｔ）の最小値との和よりも大きい場合には、第１論理変数及び第２論理変数に異なる論理値を割り当てても判明している以上に良い解が得られないので、第１論理変数と第２論理変数に同じ論理変数を割り当ててよい。
【０１０５】
図９の例においては、ノード３の子問題を処理する時点で全体上限値ＵＢは１５であり、全体下限値ＬＢと下限値Ｕｌ（Ｔ，Ｆ）及びＵｌ（Ｆ，Ｔ）の最小値との和２０よりも大きい。従って、この場合、置換部１３０はノード３の子問題において第１論理変数と第２論理変数に同じ論理変数を割り当てて、ノード４の子問題に更新してよい。
【０１０６】
このように、本実施形態の処理装置１０によると、従来の単一の論理変数を対象とするＩｎｆｅｒｅｎｃｅ  Ｒｕｌｅに加え、ある論理変数を別の論理変数に置き換える簡略化処理を実行できるので、子問題等をより大幅に簡略化して最大充足割当問題の処理負担を低減することができる。特に、本実施形態によると、重みに大きなばらつきがある最大カット問題等をより効率的に解くことができる。なお、上記実施形態の説明では、第１論理値を「偽」、第２論理値を「真」、予め定められた論理関係を「等しい関係」としたが、本発明はこれらに限られない。例えば、第１論理値を「真」、第２論理値を「偽」とし、及び／又は、予め定められた論理関係を「等しくない関係」としてもよい。
【０１０７】
図１１は、処理装置１０として機能するコンピュータ１９００のハードウェア構成の一例を示す。本実施形態に係るコンピュータ１９００は、ホスト・コントローラ２０８２により相互に接続されるＣＰＵ２０００、ＲＡＭ２０２０、グラフィック・コントローラ２０７５、及び表示装置２０８０を有するＣＰＵ周辺部と、入出力コントローラ２０８４によりホスト・コントローラ２０８２に接続される通信インターフェイス２０３０、ハードディスクドライブ２０４０、及びＣＤ−ＲＯＭドライブ２０６０を有する入出力部と、入出力コントローラ２０８４に接続されるＲＯＭ２０１０、フレキシブルディスク・ドライブ２０５０、及び入出力チップ２０７０を有するレガシー入出力部を備える。
【０１０８】
ホスト・コントローラ２０８２は、ＲＡＭ２０２０と、高い転送レートでＲＡＭ２０２０をアクセスするＣＰＵ２０００及びグラフィック・コントローラ２０７５とを接続する。ＣＰＵ２０００は、ＲＯＭ２０１０及びＲＡＭ２０２０に格納されたプログラムに基づいて動作し、各部の制御を行う。グラフィック・コントローラ２０７５は、ＣＰＵ２０００等がＲＡＭ２０２０内に設けたフレーム・バッファ上に生成する画像データを取得し、表示装置２０８０上に表示させる。これに代えて、グラフィック・コントローラ２０７５は、ＣＰＵ２０００等が生成する画像データを格納するフレーム・バッファを、内部に含んでもよい。
【０１０９】
入出力コントローラ２０８４は、ホスト・コントローラ２０８２と、比較的高速な入出力装置である通信インターフェイス２０３０、ハードディスクドライブ２０４０、ＣＤ−ＲＯＭドライブ２０６０を接続する。通信インターフェイス２０３０は、有線又は無線によりネットワークを介して他の装置と通信する。また、通信インターフェイスは、通信を行うハードウェアとして機能する。ハードディスクドライブ２０４０は、コンピュータ１９００内のＣＰＵ２０００が使用するプログラム及びデータを格納する。ＣＤ−ＲＯＭドライブ２０６０は、ＣＤ−ＲＯＭ２０９５からプログラム又はデータを読み取り、ＲＡＭ２０２０を介してハードディスクドライブ２０４０に提供する。
【０１１０】
また、入出力コントローラ２０８４には、ＲＯＭ２０１０と、フレキシブルディスク・ドライブ２０５０、及び入出力チップ２０７０の比較的低速な入出力装置とが接続される。ＲＯＭ２０１０は、コンピュータ１９００が起動時に実行するブート・プログラム、及び／又は、コンピュータ１９００のハードウェアに依存するプログラム等を格納する。フレキシブルディスク・ドライブ２０５０は、フレキシブルディスク２０９０からプログラム又はデータを読み取り、ＲＡＭ２０２０を介してハードディスクドライブ２０４０に提供する。入出力チップ２０７０は、フレキシブルディスク・ドライブ２０５０を入出力コントローラ２０８４へと接続するとともに、例えばパラレル・ポート、シリアル・ポート、キーボード・ポート、マウス・ポート等を介して各種の入出力装置を入出力コントローラ２０８４へと接続する。
【０１１１】
ＲＡＭ２０２０を介してハードディスクドライブ２０４０に提供されるプログラムは、フレキシブルディスク２０９０、ＣＤ−ＲＯＭ２０９５、又はＩＣカード等の記録媒体に格納されて利用者によって提供される。プログラムは、記録媒体から読み出され、ＲＡＭ２０２０を介してコンピュータ１９００内のハードディスクドライブ２０４０にインストールされ、ＣＰＵ２０００において実行される。
【０１１２】
コンピュータ１９００にインストールされ、コンピュータ１９００を処理装置１０として機能させるプログラムは、問題取得モジュール、算出モジュール、置換モジュール、判定モジュール、問題生成モジュール、解生成モジュール、及び、出力モジュールを備える。これらのプログラム又はモジュールは、ＣＰＵ２０００等に働きかけて、コンピュータ１９００を、問題取得部１１０、算出部１２０、置換部１３０、判定部１４０、子問題生成部１５０、解生成部１６０、及び、出力部１９０としてそれぞれ機能させてよい。
【０１１３】
これらのプログラムに記述された情報処理は、コンピュータ１９００に読込まれることにより、ソフトウェアと上述した各種のハードウェア資源とが協働した具体的手段である問題取得部１１０、算出部１２０、置換部１３０、判定部１４０、子問題生成部１５０、解生成部１６０、及び、出力部１９０として機能する。そして、これらの具体的手段によって、本実施形態におけるコンピュータ１９００の使用目的に応じた情報の演算又は加工を実現することにより、使用目的に応じた特有の処理装置１０が構築される。
【０１１４】
一例として、コンピュータ１９００と外部の装置等との間で通信を行う場合には、ＣＰＵ２０００は、ＲＡＭ２０２０上にロードされた通信プログラムを実行し、通信プログラムに記述された処理内容に基づいて、通信インターフェイス２０３０に対して通信処理を指示する。通信インターフェイス２０３０は、ＣＰＵ２０００の制御を受けて、ＲＡＭ２０２０、ハードディスクドライブ２０４０、フレキシブルディスク２０９０、又はＣＤ−ＲＯＭ２０９５等の記憶装置上に設けた送信バッファ領域等に記憶された送信データを読み出してネットワークへと送信し、もしくは、ネットワークから受信した受信データを記憶装置上に設けた受信バッファ領域等へと書き込む。このように、通信インターフェイス２０３０は、ＤＭＡ（ダイレクト・メモリ・アクセス）方式により記憶装置との間で送受信データを転送してもよく、これに代えて、ＣＰＵ２０００が転送元の記憶装置又は通信インターフェイス２０３０からデータを読み出し、転送先の通信インターフェイス２０３０又は記憶装置へとデータを書き込むことにより送受信データを転送してもよい。
【０１１５】
また、ＣＰＵ２０００は、ハードディスクドライブ２０４０、ＣＤ−ＲＯＭドライブ２０６０（ＣＤ−ＲＯＭ２０９５）、フレキシブルディスク・ドライブ２０５０（フレキシブルディスク２０９０）等の外部記憶装置に格納されたファイルまたはデータベース等の中から、全部または必要な部分をＤＭＡ転送等によりＲＡＭ２０２０へと読み込ませ、ＲＡＭ２０２０上のデータに対して各種の処理を行う。そして、ＣＰＵ２０００は、処理を終えたデータを、ＤＭＡ転送等により外部記憶装置へと書き戻す。このような処理において、ＲＡＭ２０２０は、外部記憶装置の内容を一時的に保持するものとみなせるから、本実施形態においてはＲＡＭ２０２０及び外部記憶装置等をメモリ、記憶部、または記憶装置等と総称する。例えば、処理装置１０の記憶部は、問題取得部１１０、算出部１２０、置換部１３０、判定部１４０、子問題生成部１５０、解生成部１６０、及び、出力部１９０から受け取った／へ提供するデータを適宜記憶してよい。例えば、記憶部は、特徴ベクトル問題取得部１１０が算出部１２０に入力したデータを受け取って記憶してよい。また、記憶部は、子問題生成部１５０が算出した子問題等を記憶してよい。
【０１１６】
本実施形態における各種のプログラム、データ、テーブル、データベース等の各種の情報は、このような記憶装置上に格納されて、情報処理の対象となる。なお、ＣＰＵ２０００は、ＲＡＭ２０２０の一部をキャッシュメモリに保持し、キャッシュメモリ上で読み書きを行うこともできる。このような形態においても、キャッシュメモリはＲＡＭ２０２０の機能の一部を担うから、本実施形態においては、区別して示す場合を除き、キャッシュメモリもＲＡＭ２０２０、メモリ、及び／又は記憶装置に含まれるものとする。
【０１１７】
また、ＣＰＵ２０００は、ＲＡＭ２０２０から読み出したデータに対して、プログラムの命令列により指定された、本実施形態中に記載した各種の演算、情報の加工、条件判断、情報の検索・置換等を含む各種の処理を行い、ＲＡＭ２０２０へと書き戻す。例えば、ＣＰＵ２０００は、条件判断を行う場合においては、本実施形態において示した各種の変数が、他の変数または定数と比較して、大きい、小さい、以上、以下、等しい等の条件を満たすか否かを判断し、条件が成立した場合（又は不成立であった場合）に、異なる命令列へと分岐し、またはサブルーチンを呼び出す。
【０１１８】
また、ＣＰＵ２０００は、記憶装置内のファイルまたはデータベース等に格納された情報を検索することができる。例えば、第１属性の属性値に対し第２属性の属性値がそれぞれ対応付けられた複数のエントリが記憶装置に格納されている場合において、ＣＰＵ２０００は、記憶装置に格納されている複数のエントリの中から第１属性の属性値が指定された条件と一致するエントリを検索し、そのエントリに格納されている第２属性の属性値を読み出すことにより、所定の条件を満たす第１属性に対応付けられた第２属性の属性値を得ることができる。
【０１１９】
実施形態の説明において複数の要素が列挙された場合には、列挙された要素以外の要素を用いてもよい。例えば、「Ｘは、Ａ、Ｂ及びＣを用いてＹを実行する」と記載される場合、Ｘは、Ａ、Ｂ及びＣに加え、Ｄを用いてＹを実行してもよい。
【０１２０】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更または改良を加えることが可能であることが当業者に明らかである。その様な変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
【０１２１】
特許請求の範囲、明細書、および図面中において示した装置、システム、プログラム、および方法における動作、手順、ステップ、および段階等の各処理の実行順序は、特段「より前に」、「先立って」等と明示しておらず、また、前の処理の出力を後の処理で用いるのでない限り、任意の順序で実現しうることに留意すべきである。特許請求の範囲、明細書、および図面中の動作フローに関して、便宜上「まず、」、「次に、」等を用いて説明したとしても、この順で実施することが必須であることを意味するものではない。
【符号の説明】
【０１２２】
１０  処理装置、２０  データベース、１１０  問題取得部、１２０  算出部、１３０  置換部、１４０  判定部、１５０  子問題生成部、１６０  解生成部、１９０  出力部、１９００  コンピュータ、２０００  ＣＰＵ、２０１０  ＲＯＭ、２０２０  ＲＡＭ、２０３０  通信インターフェイス、２０４０  ハードディスクドライブ、２０５０  フレキシブルディスク・ドライブ、２０６０  ＣＤ−ＲＯＭドライブ、２０７０  入出力チップ、２０７５  グラフィック・コントローラ、２０８０  表示装置、２０８２  ホスト・コントローラ、２０８４  入出力コントローラ、２０９０  フレキシブルディスク、２０９５  ＣＤ−ＲＯＭ
【図１】
0006548209.tif 000004
【図２】
0006548209.tif 000005
【図３】
0006548209.tif 000006
【図４】
0006548209.tif 000007
【図５】
0006548209.tif 000008
【図６】
0006548209.tif 000009
【図７】
0006548209.tif 000010
【図８】
0006548209.tif 000011
【図９】
0006548209.tif 000012
【図１０】
0006548209.tif 000013
【図１１】
0006548209.tif 000014