(57)【要約】【課題】数理計画法に入力する数式の修正を支援する情報を提示すること。【解決手段】制約式生成装置１は、照合部と展開部との組み合わせにより定義される前提用ルール１３ａを記憶部から読み取り、入力される入力前提モデル１１ａが読み取った前提用ルール１３ａの照合部に適合するときに、適合する照合部に対応する展開部が示す１つ以上の制約式１７を、入力前提モデル１１ａから展開される制約式１７として生成する前提ルール適用部１２ａと、前提ルール適用部１２ａにより生成された制約式１７を表示するときに、その生成に使用された入力前提モデル１１ａを表示する制約式１７に対応付けて表示する表示制御部１９とを有する。【選択図】  図２
2019012488.tif 000002
【特許請求の範囲】
【請求項１】
照合部と展開部との組み合わせにより定義されるモデル展開用知識を記憶部から読み取り、入力されるモデルデータが読み取った前記モデル展開用知識の前記照合部に適合するときに、適合する前記照合部に対応する前記展開部が示す１つ以上の制約式を、前記モデルデータから展開される数理計画問題の制約式として生成するルール適用部と、
前記ルール適用部により生成された前記制約式と、その制約式の生成に使用された前記モデルデータとを対応付けて表示する表示制御部とを有することを特徴とする
制約式生成装置。
【請求項２】
前記表示制御部は、さらに、前記制約式と前記モデルデータとを対応付けて表示するときに、そのモデルデータに対して適用された前記モデル展開用知識も併せて対応付けて表示することを特徴とする
請求項１に記載の制約式生成装置。
【請求項３】
前記ルール適用部は、入力される前記モデルデータに使用されるモデル変数の取り得る値の範囲をもとに計算した人工変数の値を、生成する前記制約式に追加することを特徴とする
請求項１に記載の制約式生成装置。
【請求項４】
前記制約式生成装置は、さらに、前記ルール適用部が生成した前記制約式と、入力された目的関数とをもとにした前記数理計画問題を求解するソルバ部を有しており、
前記ソルバ部は、複数の前記制約式を同時に満たす解が存在しないことで、複数の前記制約式が矛盾関係であるときには、その矛盾関係を示す情報を前記表示制御部に表示させることを特徴とする
請求項１ないし請求項３のいずれか１項に記載の制約式生成装置。
【請求項５】
前記制約式生成装置は、さらに、前記ルール適用部が生成した前記制約式と、入力された目的関数とをもとにした前記数理計画問題を求解するソルバ部を有しており、
前記ソルバ部は、前記目的関数の変数値が指定された範囲内である前記制約式に使用される各変数の変数値の集合を求解し、その求解結果の集合を前記表示制御部に表示させることを特徴とする
請求項１ないし請求項３のいずれか１項に記載の制約式生成装置。
【請求項６】
制約式生成装置は、ルール適用部と、表示制御部とを有しており、
前記ルール適用部は、照合部と展開部との組み合わせにより定義されるモデル展開用知識を記憶部から読み取り、入力されるモデルデータが読み取った前記モデル展開用知識の前記照合部に適合するときに、適合する前記照合部に対応する前記展開部が示す１つ以上の制約式を、前記モデルデータから展開される数理計画問題の制約式として生成し、
前記表示制御部は、前記ルール適用部により生成された前記制約式と、その制約式の生成に使用された前記モデルデータとを対応付けて表示することを特徴とする
制約式生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制約式生成装置、および、制約式生成方法に関する。
【背景技術】
【０００２】
制約式を満たしつつ目的関数に沿って最適化を行う数理計画法は、輸送システムの最短ルートを求めたり、生産システムの最小コストを立案したりと様々な分野で応用されている。非特許文献１には、数理計画法の一種である混合整数線形計画法（ＭＩＬＰ：Mixed-Integer Linear Programming）が紹介されている。
【０００３】
数理計画法を利用するためには、制約式や目的関数を数式で正確に記述する必要があるので、高度な数学的専門知識を要する。特許文献１には、専門知識を持たない初心者にとっても手軽に数理計画法を利用させるために、生産工程、生産品種、製品オーダなどの生産現場でなじみのある情報を入力すると、生産計画または物流計画を数理計画法によりコンピュータで自動的に立案するスケジューリング方法が記載されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１３−２１８６４４号公報
【非特許文献】
【０００５】
【非特許文献１】久保幹雄編  応用数理計画法ハンドブック,朝倉書店,2002年
【発明の概要】
【発明が解決しようとする課題】
【０００６】
数理計画法のソルバ（求解部）に入力する制約式や目的関数をそのまま利用者に入力させるよりも、制約式の手がかりとなるモデルデータを利用者に入力させ、計算機が自動でモデルデータから制約式を生成するほうが、利用者への負担が少なくて便利である。しかし、現実の数理計画問題を利用者がモデルデータにモデル化するときに、誤ったモデルデータを入力してしまうと、そのモデルデータから生成される制約式も誤ったものとなる。
【０００７】
誤った制約式が入力されたソルバは、「実行可能解がない」などの不具合が存在することだけは出力するかもしれない。しかし、利用者にとっては、多くのモデルデータや制約式のうちのどの部分を修正すれば、全体としてソルバが正しい最適解を出力するのかが、わからない。または、そもそも対象とする数理計画問題そのものが、本質的に解のない問題かもしれない。つまり、数理計画法をモデル化するときに、適切な修正に役立つ情報の提示が求められる。
【０００８】
そこで、本発明は、数理計画法に入力する数式の修正を支援する情報を提示することを、主な課題とする。
【課題を解決するための手段】
【０００９】
前記課題を解決するために、本発明の制約式生成装置は、照合部と展開部との組み合わせにより定義されるモデル展開用知識を記憶部から読み取り、入力されるモデルデータが読み取った前記モデル展開用知識の前記照合部に適合するときに、適合する前記照合部に対応する前記展開部が示す１つ以上の制約式を、前記モデルデータから展開される数理計画問題の制約式として生成するルール適用部と、
前記ルール適用部により生成された前記制約式と、その制約式の生成に使用された前記モデルデータとを対応付けて表示する表示制御部とを有することを特徴とする。
その他の手段は、後記する。
【発明の効果】
【００１０】
本発明によれば、数理計画法に入力する数式の修正を支援する情報を提示することができる。
【図面の簡単な説明】
【００１１】
【図１】本発明の一実施形態に関する制約式生成装置の処理の概要を示すフローチャートである。
【図２】本発明の一実施形態に関する制約式生成装置の構成図である。
【図３】本発明の一実施形態に関する制約式生成装置が適用される例題として、プラント配管破断時の溢水評価問題の説明図である。
【図４】本発明の一実施形態に関するモデル変数を格納するデータテーブルである。
【図５】本発明の一実施形態に関するモデルデータの入力画面図である。
【図６】本発明の一実施形態に関する図５の入力画面から入力されたモデルデータを格納するデータテーブルである。
【図７】本発明の一実施形態に関する混合整数線形計画法によるモデル展開用知識を格納するデータテーブルである。
【図８】本発明の一実施形態に関する図７の照合部をさらに要素ごとに格納するデータテーブルである。
【図９】本発明の一実施形態に関する成立用ルールの入力画面図である。
【図１０】本発明の一実施形態に関する前提用ルールの入力画面図である。
【図１１】本発明の一実施形態に関する制約式の生成処理の詳細を示すフローチャートである。
【図１２】本発明の一実施形態に関する図１１の処理を補足説明するための例を示す説明図である。
【図１３】本発明の一実施形態に関する制約式を格納するデータテーブルである。
【図１４】本発明の一実施形態に関する制約式の表示画面図である。
【図１５】本発明の一実施形態に関するソルバ部が出力する最適解の表示画面図である。
【図１６】本発明の一実施形態に関する図１５の表示画面図の別の形態である。
【図１７】本発明の一実施形態に関する制約式生成装置の構成図である。
【図１８】本発明の一実施形態に関する図１７の制約式生成装置による目的関数の詳細入力画面を示す画面図である。
【図１９】本発明の一実施形態に関する図１８の画面図から入力された設定に沿った、ソルバ部の結果確認画面を示す画面図である。
【図２０】本発明の一実施形態に関する図１７の制約式生成装置の処理のうちのソルバ部による求解処理の詳細を示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下、本発明の一実施形態を、図面を参照して詳細に説明する。
【００１３】
図１は、制約式生成装置１の処理の概要を示すフローチャートである。
制約式生成装置１は、Ｓ１１でモデル展開用知識の入力を受け付けるとともに、Ｓ１２でモデルデータ、目的関数の入力を受け付ける。
制約式生成装置１は、Ｓ１１のモデル展開用知識を用いて、Ｓ１２のモデルデータから制約式へ展開する（Ｓ１３）。
制約式生成装置１は、Ｓ１３で展開した制約式を画面表示し（Ｓ１４）、その制約式に対する修正を受け付ける（Ｓ１５）。修正がなされたときには（Ｓ１５，Ｙｅｓ）、制約式生成装置１は、Ｓ１２に戻りモデルデータ、目的関数の再入力を受け付ける。
制約式生成装置１は、制約式を満たしつつ目的関数を最大化する数理計画問題（混合整数線形計画問題など）をソルバ部で求解し（Ｓ１６）、その求解結果である最適解を画面表示する（Ｓ１７）。
そして、制約式生成装置１は、次の問題があるときには、Ｓ１２に戻りモデルデータ、目的関数の再入力を受け付ける。一方、Ｓ１１のモデル展開用知識は、複数の問題で共通して利用可能な汎用的な知識であるので、問題ごとに再入力しなくてもよい。
【００１４】
図２は、制約式生成装置１の構成図である。
制約式生成装置１は、ＣＰＵ（Central Processing Unit）と、メモリと、ハードディスクなどの記憶手段（記憶部）と、キーボード、タッチパネルなどの入力部と、ネットワークインタフェースとを有するコンピュータとして構成される。
このコンピュータは、ＣＰＵが、メモリ上に読み込んだプログラム（アプリケーションや、その略のアプリとも呼ばれる）を実行することにより、各処理部により構成される制御部（制御手段）を動作させる。
【００１５】
制約式生成装置１は、前提ルール適用部１２ａと、成立ルール適用部１２ｃと、前提変数生成部１４ａと、成立変数生成部１４ｃと、生成係数設定部１５と、ソルバ部１８と、表示制御部１９とを処理部として有する。
制約式生成装置１の記憶部には、モデルデータ１１（入力前提モデル１１ａ、モデル変数１１ｂ、入力成立モデル１１ｃ）と、モデル展開用知識１３（前提用ルール１３ａ、成立用ルール１３ｃ）と、目的関数１６と、制約式１７とが格納される。
以下、図１の各処理と対応付けて図２の各要素を説明する。
【００１６】
モデル展開用知識１３は、Ｓ１１で入力されるデータであり、データ内容の詳細は図７〜図１０で後記する。モデル展開用知識１３は、前提用ルール１３ａまたは成立用ルール１３ｃのいずれかに分類される。この分類はルールの階層構造を示しており、前提用ルール１３ａが上位階層、成立用ルール１３ｃが下位階層である。つまり、１つの前提用ルール１３ａが成り立つ前提で、１つ以上の成立用ルール１３ｃが成立するというルール間の関係のため、「前提」と「成立」とを使い分けている。
【００１７】
モデルデータ１１は、Ｓ１２で入力されるデータであり、データ内容の詳細は図４〜図６で後記する。モデルデータ１１もモデル展開用知識１３と同様に、「前提」と「成立」とに分類される。つまり、１つの入力前提モデル１１ａ（上位モデル）が成り立つ前提で、１つ以上の入力成立モデル１１ｃ（下位モデル）が成立するというモデル間の関係である。さらに、入力前提モデル１１ａと入力成立モデル１１ｃとは、それぞれモデル変数１１ｂを用いた数式で表現されるが、そのモデル変数１１ｂについての定義も別途入力される。
【００１８】
目的関数１６は、Ｓ１２で入力され、Ｓ１６で求解処理に参照される。
制約式１７は、Ｓ１３でモデルデータ１１とモデル展開用知識１３とから展開（生成）され、Ｓ１６で求解処理に参照される（詳細は図１１〜図１３で後記）。ここで、制約式１７の生成処理は、「前提」と「成立」とで別々に行われる。
前提ルール適用部１２ａは、入力前提モデル１１ａとモデル展開用知識１３とを照合し、照合で一致するモデル展開用知識１３における制約式１７のテンプレート式を出力する。前提変数生成部１４ａは、前提ルール適用部１２ａが出力したテンプレート式に使用される変数を新たに生成する。
成立ルール適用部１２ｃは、入力成立モデル１１ｃとモデル展開用知識１３とを照合し、照合で一致するモデル展開用知識１３における制約式１７のテンプレート式を出力する。成立変数生成部１４ｃは、成立ルール適用部１２ｃが出力したテンプレート式に使用される変数を新たに生成する。
生成係数設定部１５は、前提変数生成部１４ａおよび成立変数生成部１４ｃがそれぞれ出力するテンプレート式に対して、それぞれ新たに生成された変数に乗算する係数を設定する。これにより、テンプレート式は制約式１７に変換される。
【００１９】
ソルバ部１８は、Ｓ１６で示したように、制約式１７を満たしつつ目的関数１６を最大化（最適化）する数理計画問題を、数理計画法で求解する。
表示制御部１９は、展開された制約式１７と目的関数１６とを画面表示したり（Ｓ１４）、ソルバ部１８の求解結果である最適解を画面表示したり（Ｓ１７）することで、利用者に数理計画問題の詳細を通知する。
【００２０】
ここで、本実施形態の主な特徴として、表示制御部１９は、Ｓ１４で制約式１７を画面表示するときに、その制約式１７の展開処理に使用された（展開元となった）モデルデータ１１やモデル展開用知識１３を、展開先の制約式１７と対応付けて表示する。これにより、誤った制約式１７を発見したときに、その展開元のモデルデータ１１やモデル展開用知識１３にさかのぼって修正することが可能である。
つまり、１つのモデルデータ１１が複数の制約式１７に展開され、そのうちの１つの制約式１７に誤りを発見したときは、展開元のモデルデータ１１を修正することで、他の展開先である制約式１７も一括で修正することができる。
【００２１】
図３は、制約式生成装置１が適用される例題として、プラント配管破断時の溢水評価問題の説明図である。この説明図は、４つの部屋Ｌ１〜Ｌ４を横方向から見た図であり、上部ほど地面から高く、下部ほど地面から近くなる。各部屋は、１辺４ｍの立方体である。
部屋Ｌ１，２は部屋Ｌ３，４より上のフロアに位置する。
部屋Ｌ３の床は部屋Ｌ４の床より１ｍ高く、部屋Ｌ１の床の高さとＬ２の床の高さは、同じである。
部屋Ｌ１−Ｌ２間の通路には開閉扉Ｐ１２があり、部屋Ｌ３−Ｌ４間の通路には開閉扉Ｐ３４がある。各開閉扉は、全開と全閉の２つのみの状態がある。
部屋Ｌ１−Ｌ３間の通路Ｐ１３には扉がなく直接つながっていて、部屋Ｌ１から部屋Ｌ３に常時水が流れ得る。
部屋Ｌ２−Ｌ４間の通路には開閉扉Ｐ２４に加えて、部屋Ｌ２側の通路入り口に高さ0.5mの堰が存在する。つまり、部屋Ｌ２の床面積16平方メートルに0.5mをかけた、８立方メートルを越えた水量が部屋Ｌ２に溜まったときに、その越えた水量が堰を介して部屋Ｌ４に流れ出る。
【００２２】
図３のテーブル１０２は、４つの部屋Ｌ１〜Ｌ４に配備されているＡ系統，Ｂ系統という２つの配管系統を示す。Ａ系統では、部屋Ｌ１またはＬ２で破断する可能性がある。Ｂ系統では、部屋Ｌ１またはＬ４で破断する可能性がある。破断時の水量はA系統で25立方メートル、B系統で50立方メートルとし、それぞれ１カ所でのみ破断するとする。
以上の前提を元に、溢水評価問題として、各部屋の最大水位とそのときの開閉扉の開閉状態を求めることとする。この求解結果は、事故時の扉の開閉操作や、あるいは設備の設置場所や部屋、扉の構造の改修案の作成などに用いることができる。よって、利用者は、図３の溢水評価問題をモデル化したモデルデータ１１を制約式生成装置１に入力する。
【００２３】
図４は、モデル変数１１ｂを格納するデータテーブルである。
利用者が入力したモデル変数１１ｂは、図３の各部屋の破断後の水量を示す変数である。利用者は、第１列のモデル変数（変数名）に対して、第２列の変数タイプ（実数か整数か）と、第３列の（モデル変数が取り得る）上限値と、第４列の（モデル変数が取り得る）下限値と、第５列の説明文とを対応付けて入力する。なお、混合整数線形計画法では、変数は実変数と整数変数に分けられ、通常いずれの変数も正の値または０の値を取り得る。
さらに、利用者は、図示は省略したが変数Ｗ３の値を最適化（最大化）する旨の目的関数１６を併せて入力し、制約式生成装置１に記憶させておく。
【００２４】
図５は、モデルデータ１１の入力画面図である。
この入力画面図は、モデルデータ１１の入力欄２０１と、モデル変数１１ｂの入力欄２０２と、保存ボタン２０３と、削除ボタン２０４と、新規ボタン２０５と、入力済みのモデルデータ１１のリスト欄２０６とを有している。テーブル形式の各入力欄２０１，２０２は、左列が入力項目の表示箇所で、右列がその項目の入力箇所である。
入力欄２０１には、上から順に、モデルデータ１１のモデル名と、入力前提モデル１１ａと、入力成立モデル１１ｃと、目的関数１６とが入力される。入力欄２０２は、１つの列を１つのモデル変数１１ｂとし、そのモデル変数１１ｂの詳細（変数タイプ、上限値、下限値）を上から順に入力させる。
保存ボタン２０３が押されると、入力欄２０１，２０２の入力内容が制約式生成装置１の記憶部に保存されるとともに、リスト欄２０６にも反映される。
削除ボタン２０４が押されると、入力欄２０１，２０２の入力内容やリスト欄２０６の保存内容が削除される。
新規ボタン２０５が押されると、入力欄２０１，２０２の入力内容がリセットされ、新たなモデルデータ１１を入力可能となる。
【００２５】
なお、モデルデータ１１の入力部は、入力欄２０１とリスト欄２０６とで、データの重複チェック処理を行ってもよい。例えば、モデルデータ１１の入力部は、入力欄２０１のモデル名として入力された文字列が、リスト欄２０６のモデル名に既に存在していたときには、重複の旨を示す警告を表示する。
また、図５の入力欄２０１，２０２への入力方法として、テキスト入力とする代わりに、等号や不等号を図面オブジェクトとしてあらかじめ登録しておき、グラフィカルにデータ入力を実行できるＧＵＩ（Graphical User Interface）を用意してもよい。
【００２６】
図６は、図５の入力画面から入力されたモデルデータ１１を格納するデータテーブルである。
データテーブルの第１列「モデル名」には、入力欄２０１の「モデル名」の入力結果を格納する。
データテーブルの第２列の入力前提モデル１１ａには、入力欄２０１の「入力前提モデル」で入力された数式を、構文解析により左辺、右辺、比較演算子としてそれぞれ抽出した要素を格納する。
データテーブルの第３列の入力成立モデル１１ｃには、入力欄２０１の「入力成立モデル」で入力された数式を、構文解析により左辺、右辺、比較演算子としてそれぞれ抽出した要素を格納する。
【００２７】
ここで、データテーブルの「番号」列と「論理」列を説明する。
１つのモデル名は、１つ以上の入力前提モデル１１ａの数式と、１つ以上の入力成立モデル１１ｃの数式とにより構成される。よって、入力前提モデル１１ａが複数の数式から構成されるときには、各数式に「番号」列で示す連続番号を数式ごとに付加する。なお、数式の個数は可変なので、最後の数式であることを示す連続番号「−１」も「番号」列に入力される。
さらに、入力前提モデル１１ａについて、連続番号で続く２つの数式の間の論理関係（AND関係またはOR関係）を、「論理」列に記載する。例えば、３つの数式が存在するときには、以下のように入れ子形式で解釈される。
（（番号１の数式）（番号２の「論理」）（番号２の数式））（番号３の「論理」）（番号３の数式）
一方、入力成立モデル１１ｃについての数式間の論理関係は、全てANDであるので「論理」列はデータテーブルでは省略される。
【００２８】
図７は、混合整数線形計画法によるモデル展開用知識１３を格納するデータテーブルである。ここでは、説明をわかりやすくするために、目的関数１６と制約式１７とがいずれも１次式で表現される混合整数線形計画法を対象としたモデル展開用知識１３を例示する。
モデル展開用知識１３は、ルールＩＤで区別される複数のルールが存在し、各ルールは、モデルデータ１１と照合するための「照合部」と、その照合部に合致したモデルデータ１１の展開先となるテンプレート式である「展開部」との組み合わせで記述される。
【００２９】
なお、照合部の「if A then B≧C」のＡ，Ｂ，Ｃの各要素は、変数と定数を含む一次式である。そして、Ｂ要素とＣ要素とは、等式または不等式で関係づけられている。If以下のＡ要素が成り立ったときに満たす必要のあるモデルデータ１１が、then以下のＢ要素とＣ要素とを用いた等式または不等式で定義される。
If以下のＡ要素は、ルールC1,C2で示すような１つの変数Ａだけで定義されてもよいし、ルールC11,C21で示すようなｎ個の変数A1〜An間の論理積（and）で定義されてもよいし、ルールC12,C22で示すようなｎ個の変数A1〜An間の論理和（OR）で定義されてもよい。
ここで、「左辺≦右辺」の形式は、式の移動により「左辺≧右辺」の形式に書き直すことができるため、「左辺＝右辺」の形式と、「左辺≧右辺」の形式を例示する。
【００３０】
展開部には、モデル変数１１ｂ以外に、計算過程で内部的に使用される人工変数として、以下の変数が用いられる。
・予約変数「BigM」とは、モデル変数１１ｂよりも充分大きな定数である。
・予約変数「SmallM」とは、モデル変数１１ｂよりも充分小さな定数である。
・バイナリ変数「ConF(A)」とは、引数Aが成立するときに１の値を返し、成立しないときに０の値を返す。
【００３１】
ここで、図７の第１行「Ｃ１」に着目すると、「照合部」の冒頭には「[C1M]」の記載があり、「展開部」の冒頭には「[C1E]」の記載がある。これらの[C1M]、[C1E]は、後に続く数式のIDであり、ID語尾のM=Matching(照合部)、E=Expanding(展開部)を意味する。
例えば、第１行「Ｃ１」は、ひとつのＡ要素が成り立ったときに満たす必要のあるモデルデータ１１の形式が、「左辺（B)≧右辺（C)」のときには、バイナリ変数Conf(A)を用いた「B+BigM×(1-Conf(A))≧C」という１つの制約式１７に、そのモデルデータ１１が展開される旨を示す。
【００３２】
また、図７の第２行「Ｃ２」に着目すると、１つの照合部[C2M]に対して２つの展開部[C2E1],[C2E2]が対応付けられている。これは、１つのモデルデータ１１を２つの制約式１７に展開することを意味する。
さらに、図７の第５行「Ｃ１２」に着目すると、１つの照合部[C12]に対してｎ個の展開部[C12E1],…,[C12En]が対応付けられている。これは、１つのモデルデータ１１をｎ個の制約式１７に展開することを意味する。
【００３３】
ここで、図７のデータテーブルのうち、ルールＩＤの冒頭が「Ｃ」で始まるルールは成立用ルール１３ｃを示し、ルールＩＤの冒頭が「Ｆ」で始まるルールは前提用ルール１３ａを示す。
第７行「Ｆ１」および第８行「Ｆ２」のルールは、新しく導入されたバイナリ変数Conf(A)に対応するルールである。例えば、第７行「Ｆ１」は、Ａ要素が「左辺(Q)≧右辺(R)」の形式の場合に、[F1E1],[F1E2]という２つの制約式１７に展開される旨を示す。もし、ConF(A)が１なら、[F1E1]は自明で、[F1E2]から、Q-R≧0つまり、もとの式Q≧Rが成立することがわかる。もし、ConF(A)が０なら、[F1E2]が自明で、[F1E1]から、R≦Qが成り立つことがわかる。
【００３４】
なお、厳密には、R=Qの場合はConF(A)が０でも１でも成り立つが、R<QなのにConF(A)が１となって、より厳しい条件が付与されることはないので制約式１７を作成する時に注意すれば問題にはならない。
ただし、厳密な制約式１７の適用のためには、目的関数を最大化する問題では、目的関数にc(A)×ConF(A)の（係数c(A)は適当な小さな正の値）項を人工的に追加すれば、どちらも成り立つ場合には、ConF(A)＝１となるようにすることができる。
【００３５】
同様に、第８行「Ｆ２」のルールは、Ａ要素が「左辺(Q)＝右辺(R)」の形式の場合に、[F2E1],[F2E2]という２つの制約式１７に展開される旨を示す。Conf(A)=1のときには、Q-R≧0かつ、Q-R≦0となり、Q=Rとなることがわかる。Conf(A)=0のときは、いずれの式も自明となる。
「Ｆ２」のルールも「Ｆ１」のルールと同様に、Q＝Rのとき、Conf(A)=0となることもあり得るが、目的関数１６に工夫をすることで、厳密に制約式１７を適用させることが可能である。
【００３６】
図８は、図７の照合部をさらに要素ごとに格納するデータテーブルである。
このデータテーブルは、照合部ＩＤごとに、そのルールの種別（成立用ルール１３ｃなら「成立」、前提用ルール１３ａなら「前提」）と、Ａ，Ｂ，Ｃ各要素と、Ｂ要素とＣ要素との間の関係を示す比較演算子とを格納する。
なお、ルールC11のようなｎ個の変数A1〜An間の論理積（and）を「And A(n)」と略し、ルールC12のようなｎ個の変数A1〜An間の論理和（OR）を「OR A(n)」と略して表記する。
【００３７】
図９は、成立用ルール１３ｃの入力画面図である。
この入力画面図は、成立用ルール１３ｃの入力欄２１１と、保存ボタン２１２と、削除ボタン２１３と、新規ボタン２１４と、入力済みの成立用ルール１３ｃのリスト欄２１５とを有している。リスト欄２１５はスクロールバーにより表示内容を上下方向に更新できる。
入力欄２１１には、上から順に、成立用ルール１３ｃのルールＩＤと、成立用ルール１３ｃの照合部と、成立用ルール１３ｃの展開部とが入力される。
保存ボタン２１２が押されると、入力欄２１１の入力内容が制約式生成装置１の記憶部に保存されるとともに、リスト欄２１５にも反映される。削除ボタン２１３が押されると、入力欄２１１の入力内容やリスト欄２１５の保存内容が削除される。新規ボタン２１４が押されると、入力欄２１１の入力内容がリセットされ、新たな成立用ルール１３ｃを入力可能となる。
【００３８】
図１０は、前提用ルール１３ａの入力画面図である。
この入力画面図は、前提用ルール１３ａの入力欄２２１と、保存ボタン２２２と、削除ボタン２２３と、新規ボタン２２４と、入力済みの前提用ルール１３ａのリスト欄２２５とを有している。
入力欄２２１には、上から順に、前提用ルール１３ａのルールＩＤと、前提用ルール１３ａの照合部（ＩＤと数式）と、前提用ルール１３ａの展開部と、目的関数１６の追加項が入力される。例えば、ConF(A)=0の場合でも制約式１７が成り立つときには、目的関数１６に「SmallM×Conf(A)」の項を追加するなどの指定方法がある。
保存ボタン２２２が押されると、入力欄２２１の入力内容が制約式生成装置１の記憶部に保存されるとともに、リスト欄２２５にも反映される。削除ボタン２２３が押されると、入力欄２２１の入力内容やリスト欄２２５の保存内容が削除される。新規ボタン２２４が押されると、入力欄２２１の入力内容がリセットされ、新たな前提用ルール１３ａを入力可能となる。
【００３９】
図１１は、制約式１７の生成処理（Ｓ１３）の詳細を示すフローチャートである。
図１２は、図１１の処理を補足説明するための例を示す説明図である。以下、図１２を参照しつつ、図１１の各処理を説明する。
まず、入力前提モデル１１ａを先頭から順に１つずつ選択するループ（Ｓ１１１〜Ｓ１１６）を開始し、そのループ内でさらに、前提用ルール１３ａを先頭から順に１つずつ選択するループ（Ｓ１１２〜Ｓ１１５）を開始する。なお、先頭から順に１つずつ選択する処理は、例えば、図６〜図８の各データテーブルの第１行に選択用ポインタを設定し、ループを一巡するごとに選択用ポインタを次の行に更新する処理である。
例えば、図１２の符号３１１では、図５の入力画面図で入力された「W4≧16」が入力前提モデル１１ａとして選択されている。
【００４０】
前提ルール適用部１２ａは、選択された入力前提モデル１１ａと、選択された前提用ルール１３ａの照合部とを比較することで、両者が一致するか否かを判定する（Ｓ１１３）。例えば、入力前提モデル１１ａ「W4≧16」は、比較演算子が≧であることから、前提用ルール１３ａ「F1」の照合部[F1M]の「Q≧R」に適合する。
そこで、前提ルール適用部１２ａは、入力前提モデル１１ａに対して、Ｓ１１３の照合で適合した前提用ルール１３ａを適用する（Ｓ１１４）。例えば、「W4≧16」を「Q≧R」に当てはめると「W4=Q、16=R」となるため、図７の前提用ルール１３ａ「F1」の展開部は、以下のようになる（符号３１２）。
・[F1E1] W4-16-BigM×ConF(A)≦0
・[F1E2] W4-16+BigM×(1-ConF(A))≧0
なお、Ｓ１１４の処理に併せて、図１０の前提用ルール１３ａ「F2」のように、前提用ルール１３ａに追加項が指定されていたときには、その追加項を目的関数１６に追加する。一方、今回の前提用ルール１３ａ「F1」は追加項は指定されていないので、目的関数１６の変更は不要である。
【００４１】
２つのループの後に、Ｓ１１４で適用された展開部の集合は、前提変数生成部１４ａに入力される。Ｓ１１７では、前提変数生成部１４ａは、入力された展開部の数式に含まれる変数ConF(A)をもとに、ユニークな変数名を生成する。なお、図１２では、生成する変数名「Ｆ」としたが、生成する変数が複数存在するときは、変数名として「F001,F002,F003…」のように連続番号を付加することが望ましい。これにより、ConF(A)をＦに置き換えた展開式が符号３１３で示される。
以上、入力前提モデル１１ａに前提用ルール１３ａを適用して、制約式１７に展開する処理を説明した。以下ではＳ１２１〜Ｓ１２７で、同様に、入力成立モデル１１ｃに成立用ルール１３ｃを適用して、制約式１７に展開する処理を示す。
【００４２】
まず、入力成立モデル１１ｃを先頭から順に１つずつ選択するループ（Ｓ１２１〜Ｓ１２６）を開始し、そのループ内でさらに、成立用ルール１３ｃを先頭から順に１つずつ選択するループ（Ｓ１２２〜Ｓ１２５）を開始する。符号３２１では、図５の入力成立モデル１１ｃ「W4+16=W3」が選択されている。
成立ルール適用部１２ｃは、選択された入力成立モデル１１ｃと、選択された成立用ルール１３ｃの照合部とを比較することで、両者が一致するか否かを判定する（Ｓ１２３）。そして、成立ルール適用部１２ｃは、入力成立モデル１１ｃに対して、Ｓ１２３の照合で適合した成立用ルール１３ｃを適用する（Ｓ１２４）。
【００４３】
そして、入力成立モデル１１ｃ「W4+16=W3」に対して、比較演算子が＝で、If部のＡ要素（入力成立モデル１１ｃに対応する入力前提モデル１１ａ）が単一の条件式である（図６の論理列にandやORが設定されていない）ので、成立用ルール１３ｃ「C2」が適合する（符号３２２）。
「W4+16=W3」を「B=C」に当てはめると「(W4+16)=B、W3=C」となるため、成立ルール適用部１２ｃは、成立用ルール１３ｃ「C2」の展開部を符号３２２のように生成する（Ｓ１２４）。
・[C2E1] W4+16+BigM×(1-ConF(A))≧W3
・[C2E2] W4-16-BigM×(1-ConF(A))≦W3
Ｓ１２７では、Ｓ１１７と同様に、成立変数生成部１４ｃは、Ｓ１２４で生成された展開部の数式に含まれる変数ConF(A)をもとに、ユニークな変数名「Ｆ」を符号３２３のように生成する。
【００４４】
Ｓ１３１では、生成係数設定部１５は、前提変数生成部１４ａおよび成立変数生成部１４ｃそれぞれの出力式に含まれる予約変数BigM、SmallMに適当な値を設定する。符号３３１では、BigM→48を代入した結果の制約式１７を示す。
なお、BigMには、制約式１７に係数×Fの形式の項が存在するF=1の場合でも、制約式１７に係数×(1-F)の形式の項が存在するF=0の場合でも、制約式１７が必ず成立するための最小の値が設定される。つまり、予約変数BigM、SmallMは、あくまでF=0の場合とF=1の場合との場合分けを行う用途で用いられるだけである。
例えば、符号３３１の第１行「W4-16-BigM×F≦0」に対してF=1として変形すると「W4-16≦BigM」となる。図４のモデル変数１１ｂの上限値列ではW4の上限値=64なので、「W4-16≦48≦BigM」となる。したがって、BigM=48とすれば、F=1のとき、もとの式は必ず成立する。このように、BigMを設定する。
一方、Ｓ１１４で説明した目的関数１６の追加項の係数については、できるだけ、本来の目的関数１６に影響を与えないようにするのが好ましい。この実施例では、目的関数１６の係数項を持つ他のモデル変数１１ｂの係数項の1/100を設定するとする。
【００４５】
図１３は、制約式１７を格納するデータテーブルである。ここでは、図１２の符号３３１で示される４つの制約式１７を格納する例を示す。このデータテーブルは、モデル名ごとに、そのモデルデータ１１から生成される制約式１７と、その制約式１７に用いられる生成変数との対応データを格納する。
データテーブルの制約式１７は、制約式番号と、前提用ルール１３ａまたは成立用ルール１３ｃのどちらで生成されたかを示す「種類」と、モデルデータ１１のモデル番号（図６の番号列）と、適用されたモデル展開用知識１３を示す「適用ルール」と、制約式１７の各要素（左辺、右辺、比較演算子）とで構成される。
データテーブルの「生成変数」は、前提変数生成部１４ａや成立変数生成部１４ｃが制約式１７内の変数を変換するときの変換元である「元変数」と、変換先である「変数名」とで構成される。
【００４６】
図１４は、制約式１７の表示画面図である。
この表示画面図は、制約式１７の生成元となるモデルデータ１１の表示欄２３２と、「前提」系列の対応関係を示す左側の箇所と、「成立」系列の対応関係を示す右側の箇所とを含む表示欄２３１と、各種ボタン群とで構成される。
表示欄２３１の左側には、符号２３３の入力前提モデル１１ａ→適用される前提用ルール１３ａ「ルールＦ１」→生成される２つの制約式１７（符号２３４）の対応関係が示されている。
表示欄２３１の右側には、符号２３５の入力成立モデル１１ｃ→適用される成立用ルール１３ｃ「ルールＣ２」→生成される２つの制約式１７（符号２３６）の対応関係が示されている。
また、入力前提モデル１１ａと入力成立モデル１１ｃとの間の階層関係も、双方向の矢印で対応付けられている。
この表示欄２３１を参照することで、利用者は、自身が入力したモデルデータ１１と、制約式生成装置１が生成した制約式１７との対応関係を確認することができる。
【００４７】
さらに、表示画面図には、表示欄２３１の内容を編集（修正）させるモードに切り換えるための編集ボタン２３９ａと、編集（修正）後のデータ内容を記憶部に登録させるための登録ボタン２３９ｂと、新たなモデルデータ１１を追加させるための追加ボタン２３９ｃと、既存のモデルデータ１１を削除させるための削除ボタン２３９ｄと、目的関数１６および制約式１７を確定し、ソルバ部１８の求解処理に移行させるための求解ボタン２３９ｅと、を有する。
【００４８】
図１５は、ソルバ部１８が出力する最適解の表示画面図である。この表示画面図は、図１４の求解ボタン２３９ｅが押された後に表示され、結果表示欄２４１と、確認ボタン２４５とを有する。
結果表示欄２４１には、モデル変数１１ｂごとに、制約式１７を満たしつつ目的関数１６を最適化するときの数値のリスト欄２４２と、モデル変数１１ｂを用いた目的関数１６を示す表示欄２４３とがそれぞれ表示される。さらに、結果表示欄２４１には、モデルデータ１１の制約が成り立っていることを示す表示欄２４４や、計算経過を示す各種データ（Conf(A)の値が１か０かなど）を併せて表示してもよい。
この結果表示欄２４１によって、利用者は、モデルデータ１１やモデル展開用知識１３が適切であったかどうかを容易に確認することができる。確認ボタン２４５が押されると、図１のＳ１８に移行する。
【００４９】
図１６は、図１５の表示画面図の別の形態である。図１６ではソルバ部１８が制約式１７を満たしつつ目的関数１６を最大化（最適化）する数理計画問題を求解できなかった場合を示す。図１４と図１６とは、以下のように表示内容が対応する。
・入力前提モデル１１ａ：符号２３３→符号２５３
・入力前提モデル１１ａから生成される制約式１７：符号２３４→符号２５４
・入力成立モデル１１ｃ：符号２３５→符号２５５
・入力成立モデル１１ｃから生成される制約式１７：符号２３６→符号２５６
ここで、図１６では利用者の不注意により、符号２５５の第２項を「16」ではなく「160」とタイプミスしたとする。
【００５０】
表示制御部１９は、求解できなかった旨の表示２５２に加え、その原因である入力前提モデル１１ａと入力成立モデル１１ｃとの間の矛盾関係を示すエラー表示２５７と、符号２５４の制約式１７と符号２５６の制約式１７との間の矛盾関係を示すエラー表示２５８を併せて表示する。矛盾関係とは、複数の数式間で、同時に満たす解が存在しない状態である。
これにより、利用者は、符号２５６の制約式１７を１つずつ修正するよりも、その根本の原因である入力成立モデル１１ｃ（符号２５５）のタイプミスに気づくことで、モデルデータ１１を迅速かつ正確に修正することができる。
【００５１】
以上説明した本実施形態では、入力されたモデルデータ１１から制約式生成装置１が制約式１７を生成するため、ソルバ部１８に入力する制約式１７を入力する手間を省力化できる。また、表示制御部１９は、図１４の制約式１７の表示画面において、展開元のデータ（モデルデータ１１およびモデル展開用知識１３）と、展開先のデータ（制約式１７）とを対応付けて表示する。これにより、制約式１７の生成過程を辿ることができ（換言すると、トレーサビリティを確保し）、どの部分で誤ったデータが混入したかを容易に発見できる。
【００５２】
図１７は、制約式生成装置１の構成図である。図１７では、図２の制約式生成装置１に対して、ソルバ制御部１８ｂと適合解リスト１８ｃとを追加している。
ソルバ制御部１８ｂは、目的関数１６と制約式１７との組み合わせで定義される数理計画問題について、目的関数１６の詳細をソルバ部１８に設定する。目的関数１６の詳細とは、例えば、以下の通りである。
・目的関数１６の変数値が最適値（１通り）となるように求解するときに、最適値とは最小値か最大値かという設定。
・目的関数１６の変数値が所定範囲内となるように求解するときに、その所定範囲内の下限値および上限値の設定。なお、所定範囲内となる解は複数存在することもあるため、その解の集合を格納する適合解リスト１８ｃを新たに用意した。
【００５３】
図１８は、図１７の制約式生成装置１による目的関数１６の詳細入力画面を示す画面図である。この画面図は、目的関数１６として最適化対象となる変数名の入力欄２６１と、結果出力条件の入力欄２６２と、求解結果の出力数の入力欄２６３と、最適解は最小値か最大値かという入力欄２６４と、適合解リスト１８ｃへの出力対象となる解の範囲の入力欄２６５とを有する。
結果出力条件の入力欄２６２には、入力欄２６３〜２６５の各入力値の組み合わせをグループ化した結果出力条件として、そのグループ名が入力される。
ラジオボタンの入力欄２６３から「単一」が選択されると、目的関数１６の変数値を最適値（１通り）とするため、ラジオボタンの入力欄２６４から最適値として最小値か最大値かのいずれかを選択させる。
ラジオボタンの入力欄２６３から「複数」が選択されると、目的関数１６の変数値の所定範囲を、入力欄２６５から入力させる。
【００５４】
図１９は、図１８の画面図から入力された設定に沿った、ソルバ部１８の結果確認画面を示す画面図である。この画面図は、ソルバ部１８の求解処理に使用された結果出力条件の表示欄２７１（入力欄２６２に対応）と、その表示欄２７１の結果出力条件における解の範囲の表示欄２７２（入力欄２６５に対応）と、ソルバ部１８の求解結果として、制約式１７のモデル変数１１ｂ（離散変数の値、実変数の代表値）と、目的関数１６との変数値とで構成される結果リストの表示欄２７３と、その求解処理に使用された制約式１７の表示欄２７４とを有する。
表示欄２７３には、適合解リスト１８ｃとして、表示欄２７２の範囲（25以上80以下の範囲）に適合する目的関数１６の変数値（F2=60）となる２組の適合解が列挙されている。
なお、表示欄２７１は、例えば、プルダウンメニューにより、図１８を介して事前登録された複数の結果出力条件から、１つの結果出力条件を選択可能になっている。結果出力条件の変更に伴い、ソルバ部１８は、求解処理の再計算を行い、その計算結果の表示内容を表示制御部１９に更新させる。
【００５５】
図２０は、図１７の制約式生成装置１の処理のうちのソルバ部１８による求解処理（図１のＳ１６）の詳細を示すフローチャートである。
Ｓ２０１において、ソルバ部１８は、目的関数１６と制約式１７とをもとに、図１８で入力された結果出力条件に沿って求解処理を行う。
Ｓ２０２において、ソルバ部１８は、入力欄２６３から「複数」が選択されたか否かを判定する。Ｓ２０２でＮｏなら（「単一」が選択されたなら）、ソルバ部１８は、入力欄２６４で指定されたように、目的関数１６が最小値または最大値となるＳ２０１で求解された最適解を適合解リスト１８ｃに追加して（Ｓ２１１）、処理をＳ２１２に進める。一方、Ｓ２０２でＹｅｓなら、処理をＳ２０３に進める。
【００５６】
Ｓ２０３において、ソルバ部１８は、Ｓ２０１で求解された結果が入力欄２６５から入力された所定範囲内（下限値〜上限値の範囲内）であるか否かを判定する。Ｓ２０３でＮｏなら（範囲外なら）、処理をＳ２０１に戻す。一方、Ｓ２０３でＹｅｓなら、処理をＳ２０４に進める。
Ｓ２０４において、ソルバ部１８は、Ｓ２０３で範囲内とされた最適解の離散変数値の組合せ（例えば「K1=1,K2=0,K3=0」）を除外する制約式１７（例えば「K1=0,K2=1,K3=1」を含む制約式１７）を追加する。つまり、複数解を列挙する指定の場合に、順次、最適解を与える変数の組を除外する制約式１７を追加することにより、別解を指定された解の範囲で出力することができる。
【００５７】
Ｓ２０５において、ソルバ部１８は、最適解（範囲に適合する解）を適合解リスト１８ｃに追加して、処理をＳ２０１に戻す。
Ｓ２１２において、表示制御部１９は、Ｓ２０５およびＳ２１１でそれぞれ追加された適合解リスト１８ｃ内の求解結果（最適解、適合解）を、表示欄２７３のように画面表示する。これにより、最適解を与える変数の組および、最適解近傍の変数の組を列挙することができる。
【００５８】
なお、本発明は前記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、前記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。
また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。
また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。また、上記の各構成、機能、処理部、処理手段などは、それらの一部または全部を、例えば集積回路で設計するなどによりハードウェアで実現してもよい。
また、前記の各構成、機能などは、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。
【００５９】
各機能を実現するプログラム、テーブル、ファイルなどの情報は、メモリや、ハードディスク、ＳＳＤ（Solid State Drive）などの記録装置、または、ＩＣ（Integrated Circuit）カード、ＳＤカード、ＤＶＤ（Digital Versatile Disc）などの記録媒体に置くことができる。
また、制御線や情報線は説明上必要と考えられるものを示しており、製品上必ずしも全ての制御線や情報線を示しているとは限らない。実際にはほとんど全ての構成が相互に接続されていると考えてもよい。
さらに、各装置を繋ぐ通信手段は、無線ＬＡＮに限定せず、有線ＬＡＮやその他の通信手段に変更してもよい。
【符号の説明】
【００６０】
１      制約式生成装置
１１    モデルデータ
１１ａ  入力前提モデル
１１ｂ  モデル変数
１１ｃ  入力成立モデル
１２ａ  前提ルール適用部
１２ｃ  成立ルール適用部
１３    モデル展開用知識
１３ａ  前提用ルール
１３ｃ  成立用ルール
１４ａ  前提変数生成部
１４ｃ  成立変数生成部
１５    生成係数設定部
１６    目的関数
１７    制約式
１８    ソルバ部
１８ｂ  ソルバ制御部
１８ｃ  適合解リスト
１９    表示制御部
【図１】
2019012488.tif 000003
【図２】
2019012488.tif 000004
【図３】
2019012488.tif 000005
【図４】
2019012488.tif 000006
【図５】
2019012488.tif 000007
【図６】
2019012488.tif 000008
【図７】
2019012488.tif 000009
【図８】
2019012488.tif 000010
【図９】
2019012488.tif 000011
【図１０】
2019012488.tif 000012
【図１１】
2019012488.tif 000013
【図１２】
2019012488.tif 000014
【図１３】
2019012488.tif 000015
【図１４】
2019012488.tif 000016
【図１５】
2019012488.tif 000017
【図１６】
2019012488.tif 000018
【図１７】
2019012488.tif 000019
【図１８】
2019012488.tif 000020
【図１９】
2019012488.tif 000021
【図２０】
2019012488.tif 000022