(57)【要約】【課題】  数理計画方法に用いるモデルに利用する変数の変更を容易にする。【解決手段】  各変数の観測データを記憶する観測データ記憶部１１と、観測データ記憶部１１に記憶されている変数の中から目的変数と説明変数を選択する変数選択部１６と、選択された目的変数および説明変数の観測データを利用して、統計解析を行って目的変数と説明変数の関係式を推計する統計解析部１７と、推計される関係式を展開して、説明変数或いは説明変数と乗算或いは除算の演算子とを結合した変数組とその変数或いは変数組の係数を求める解析手段（字句解析部１８、構文解析部２０）と、求められる変数或いは変数組とその変数或いは変数組の係数とを表示するラベル付配列表示部２３を備える。【選択図】      図１
2007052533.tif 000002
【特許請求の範囲】
【請求項１】
変数ごとに変数の観測データを記憶する観測データ記憶手段と、
前記観測データ記憶手段に記憶されている変数の中から１つの目的変数と当該目的変数を説明する１又は複数の説明変数を選択する変数選択手段と、
前記変数選択手段によって選択される目的変数および説明変数の前記観測データ記憶手段に記憶されている観測データを利用して、統計解析を行って目的変数と説明変数の関係式を推計する推計手段と、
前記推計手段により推計される関係式を展開して、説明変数或いは説明変数と乗算或いは除算の演算子とを結合した変数組とその変数或いは変数組の係数を求める解析手段と、
前記解析手段により求められる変数或いは変数組とその変数或いは変数組の係数とを表示する表示手段と、
を備えたことを特徴とする統計最適化統合装置。
【請求項２】
目的変数を選択するための目的変数選択欄および説明変数を選択するための説明変数選択欄を含み、前記目的変数選択欄および前記説明変数選択欄に前記観測データ記憶手段に記憶された変数を表示する変数選択ページ表示手段を更に備えたことを特徴とする請求項１記載の統計最適化統合装置。
【請求項３】
コンピュータに、
変数ごとに変数の観測データを記憶する観測データ記憶手段に記憶されている変数の中から１つの目的変数と当該目的変数を説明する１又は複数の説明変数を選択する変数選択手順と、
前記変数選択手順において選択された目的変数および説明変数の前記観測データ記憶手段に記憶されている観測データを利用して、統計解析を行って目的変数と説明変数の関係式を推計する推計手順と、
前記推計手順において推計された関係式を展開して、説明変数或いは説明変数と乗算或いは除算の演算子とを結合した変数組とその変数或いは変数組の係数を求める解析手順と、
前記解析手順において求められた変数或いは変数組とその変数或いは変数組の係数とを表示する表示手順と、
を実行させることを特徴とする統計最適化統合プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、数理計画法に用いるモデルの構築を行う統計最適化統合装置、および統計最適化統合プログラムに関する。
【背景技術】
【０００２】
従来より、最適ポートフォリオ決定問題、生産予測による資源の配分の最適化を図るため、目的関数や制約式を数理モデルとして構築した後、数理計画法の技術を用いて最適解を得ることが行われている。ここで、数理モデルを構築するため、対象である分野の知識を利用したトップダウン的なモデルの構築方法や、将来の収益率や需要予測といった収集されたデータを用いた統計的な処理によるモデルの構築方法が採られている。
後者のような統計的な方法で構築した統計モデルを数理計画法に適用する場合は、ユーザが必要事項を手作業により入力し、利用する変数の種類が決定されている場合にはその利用する変数の種類をデータベースに保存することが行われている。例えば、入力として、個別収益率、個別因子、共通因子、制約条件を入力することにより、目的関数の値を最大化するような金融商品および購入数量を決定するものがある（例えば、特許文献１参照。）。
【特許文献１】特開２００３−１３２２１８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
モデルの構築において、注目する変数を変更するとモデルの特徴や性能が変化することがあるが、どのモデルが最適であるかを一意に決定することは困難であり、様々な可能性を検討する必要がある。従って、候補となるべきモデルを複数構築することになるが、変数やモデル構築に用いるデータを変更するたびに、必要事項を手作業で数理計画法を解くためのシステムに投入することは効率的ではない。
上記の従来技術においても、データを変更することは特に考慮されていない。例えば、個別収益率の数値を変更するようなことは容易に行うことができるが、例えば、個別収益率のデータを他のものにすることや、また、データ同士の関係を変更することなどについては、何ら考慮されておらず、モデルに利用する変数が変更されるようなケースでは柔軟に対応することが難しい。
【０００４】
そこで、本発明は、数理計画方法に用いるモデルに利用する変数の変更を容易に行うことを可能にする統計最適化統合装置、および統計最適化統合プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００５】
本発明の統計最適化統合装置は、変数ごとに変数の観測データを記憶する観測データ記憶手段と、前記観測データ記憶手段に記憶されている変数の中から１つの目的変数と当該目的変数を説明する１又は複数の説明変数を選択する変数選択手段と、前記変数選択手段によって選択される目的変数および説明変数の前記観測データ記憶手段に記憶されている観測データを利用して、統計解析を行って目的変数と説明変数の関係式を推計する推計手段と、前記推計手段により推計される関係式を展開して、説明変数或いは説明変数と乗算或いは除算の演算子とを結合した変数組とその変数或いは変数組の係数を求める解析手段と、前記解析手段により求められる変数或いは変数組とその変数或いは変数組の係数とを表示する表示手段と、を備えたことを特徴とする。
上記統計最適化統合装置において、目的変数を選択するための目的変数選択欄および説明変数を選択するための説明変数選択欄を含み、前記目的変数選択欄および前記説明変数選択欄に前記観測データ記憶手段に記憶された変数を表示する変数選択ページ表示手段を更に備えたことを特徴とする。
【０００６】
本発明の統計最適化統合プログラムは、コンピュータに、変数ごとに変数の観測データを記憶する観測データ記憶手段に記憶されている変数の中から１つの目的変数と当該目的変数を説明する１又は複数の説明変数を選択する変数選択手順と、前記変数選択手順において選択された目的変数および説明変数の前記観測データ記憶手段に記憶されている観測データを利用して、統計解析を行って目的変数と説明変数の関係式を推計する推計手順と、前記推計手順において推計された関係式を展開して、説明変数或いは説明変数と乗算或いは除算の演算子とを結合した変数組とその変数或いは変数組の係数を求める解析手順と、前記解析手順において求められた変数或いは変数組とその変数或いは変数組の係数とを表示する表示手順と、を実行させることを特徴とする。
【発明の効果】
【０００７】
本発明によれば、数理計画法に用いるモデルに利用する目的変数と選択変数を選択することができ、それらを選択すれば、変数或いは変数組とその係数とが表示されるので、表示内容を参照することにより変数の変更を容易に行うことができる。
【発明を実施するための最良の形態】
【０００８】
以下、本発明を実施するための最良の形態について図面を参照しつつ説明する。
まず、本発明の実施の形態の統計最適化統合装置の構成について図１を参照しつつ説明する。図１は本実施の形態の統計最適化統合装置の構成を示す構成図である。
図１に示すように、統計最適化統合装置１は、観測データ記憶部１１、正規表現辞書記憶部１２、構文規則辞書記憶部１３、観測データ表示部１４、変数選択ページ表示部１５、変数選択部１６、統計解析部１７、字句解析部１８、文字スタック部１９、構文解析部２０、リスト記憶部２１、ラベル付配列記憶部２２、ラベル付配列表示部２３、数理解析部２４、および求解結果表示部２５として動作する。
【０００９】
観測データ記憶部１１は、変数ごとに変数の観測データを記憶する記憶部であり、その一例を図２に示す。図２は観測データ記憶部１１に記憶されている観測データの一例を示す図である。図２の例では、変数として“ｘｎｌ”、“ｘ１”、“ｘ２”、“ｘ３”があり、それらの観測データが記憶されている。
【００１０】
正規表現辞書記憶部１２は、変数や演算子などの字句を一般化して定義した正規表現を記憶する記憶部である。正規表現辞書記憶部１２に記憶されている正規表現辞書には、例えば、演算子の種類（和：＋、差：−、積：＊、商：／、等号：＝、括弧：（、括弧：））が記憶されている。また、変数の表現形式（最初の文字はアルファベット、アルファベット（ａ−ｚ、Ａ−Ｚ）、数字（０−９）、アンダーバー（＿）などは変数として利用可能など）が記憶されている。さらに、数学関数の定義（対数：ｌｏｇ、平方根：ｓｑｒｔ、累乗：＾など）が記憶されている。さらに、終端記号の種類（＋、−、＊、／、＝、（、）、空列）が記憶されている。ここで、空列とは、文字がないことを意味する。
【００１１】
構文規則辞書記憶部１３は、等号で分けられた左辺が配列名、計算順序を解釈し括弧を展開、係数と変数（変数組）を抽出、など構文の解析内容を記憶する記憶部である。ここで、変数組とは、変数（後述する説明変数）と乗算や除算の演算子とを結合したものを指し、変数は数学関数を含む場合もある。
観測データ表示部１４は、液晶ディスプレイなどの表示部を有しており、不図示の入力部を利用して所定の操作が行われると、観測データ記憶部１１から各変数とその観測データを読み出し、図３に一例を示すように、読み出した各変数とその観測データを表示する。図３は観測データ表示部１４の表示例を示す図である。
【００１２】
変数選択ページ表示部１５は、液晶ディスプレイなどの表示部を有しており、観測データ記憶部１１に記憶されている観測データの変数を読み出し、目的変数および説明変数を選択するためのページを表示する。ここで、目的変数とは推測（予測）したい変数（従属変数）のことであり、説明変数とは目的変数を説明する変数（独立変数）のことである。
図４は変数選択ページ表示部１５の表示例を示す図である。図４に示すように、変数選択ページには、目的変数を選択するための目的変数選択欄１５ａ、説明変数を選択するための説明変数選択欄１５ｂが設けられている。観測データが図２に示すものである場合、目的変数選択欄１５ａに設けられたプルダウンメニューを利用することにより変数“ｘｎｌ”、“ｘ１”、“ｘ２”、“ｘ３”のいずれかを選択可能になっている。また、説明変数選択欄１５ｂには変数“ｘｎｌ”、“ｘ１”、“ｘ２”、“ｘ３”が表示されて選択可能になっていると共に、全ての変数を説明変数として選択するための“＜ａｌｌ＞”が表示されている。
【００１３】
変数選択部１６は、キーボードおよびマウスなどのポインティングデバイスからなり、利用者が変数選択ページ表示部１５に表示された変数選択ページにおいて、目的変数選択欄１５ａから目的変数を選択するために利用され、説明変数選択欄１５ｂから説明変数を選択するために利用されるものである。ただし、利用者は、変数選択ページ表示部１５および変数選択部１６を利用して、目的変数を変数の中から１つのみ選択し、説明変数を変数の中から１又は複数（全部であってもよい）を選択することになる。
【００１４】
統計解析部１７は、観測データ記憶部１１から目的変数として選択された変数の観測データおよび各説明変数として選択された変数の観測データを取り出す。統計解析部１７は、観測データ記憶部１１から取り出した目的変数と各説明変数の観測データを利用して、統計解析を行いモデルを表す目的変数と説明変数との関係を示す関係式を推計する。統計解析部１７は、統計解析を行って推計した関係式を字句解析部１８へ出力する。ただし、関係式は、変数、数学関数、数値である係数、演算子（等号記号、四則演算子記号、（、））により構成されたものである。なお、モデルとして例えば線形回帰モデルや非線形回帰モデルなどが挙げられ、また、推計方法として例えば最小二乗法を利用する方法が挙げられる。
【００１５】
字句解析部１８は、正規表現辞書記憶部１２の記憶内容を利用して、統計解析部１７から入力される関係式に対して、字句解析を行い、関係式をトークンに分割し、字句解析の結果得られたトークンを構文解析部２０へ出力する。ただし、トークンは、文法上の役割を示す記号であり、変数、数学関数、数値である係数、演算子（等号記号、四則演算子記号、（、））の各々に分解された要素列である。なお、字句解析部１７による字句解析の処理手順の詳細は図１０および図１１を参照して後述する。
文字スタック部１９は、字句解析部１８が字句解析の処理時に必要に応じて文字をスタックする記憶部である。
【００１６】
構文解析部２０は、構文規則辞書記憶部１３の記憶内容を利用して、字句解析部１８から入力されるトークンに基づき構文解析を行い、配列名を抽出する。これとともに、構文解析部２０は、関係式を解釈して括弧を展開して、変数或いは変数組とその変数或は変数組に掛けられる係数（数値）とに分割し、分割して得られる変数或は変数組をラベルとし、ラベルとしての変数或は変数組とそれに対応する係数とを対応付けてラベル付配列記憶部２２に記憶する。構文解析部２０は解析の結果得られる配列名とラベル付配列記憶部２２の記憶内容をラベル付配列表示部２３および数理解析部２４へ出力する。なお、構文解析部２０による構文解析の処理手順の詳細は図１２を参照して後述する。
【００１７】
リスト記憶部２１は、構文解析部２０が構文解析の処理時に必要に応じてトークン列やトークン列の展開の結果などを記憶する記憶部であり、その一例を図５に示す。図５はリスト記憶部２１の記憶内容の一例を示す図である。図５に一例を示すリスト記憶部２１は、項目「リスト番号」、「トークン列」、「ポインタ」、「展開結果」がある。
ラベル付配列記憶部２２は、構文解析部２０が構文解析により得られる変数或は変数組とそれに対応する係数とを記憶する記憶部であり、その一例を図６に示す。図６はラベル付配列記憶部２２の記憶内容の一例を示す図である。図６に一例を示すラベル付配列記憶部２２は、項目「ラベル」、「係数」があり、項目「ラベル」に変数或は変数組が格納され、項目「係数」には展開の結果得られた対応する変数或は変数組の係数の値（数値）が格納される。
【００１８】
ラベル付配列表示部２３は、液晶ディスプレイなどの表示部を有しており、構文解析部２０から入力される配列名およびラベル付配列記憶部２２に記憶されている記憶内容（ラベルとそれに対応する係数）を利用して、配列名およびラベルとそれに対応する係数を表示する。
図７はラベル付配列表示部２３の表示例を示す図である。図７に示すように、ラベル付配列表示部２３の表示には配列名（図示例では、ｘｎｌ）が表示されている。また、ラベルとそれに対応する係数が表示され、図示例では、ラベル“（Ｉｎｔｅｒｃｅｐｔ）”とそれに対応する係数“２．８１８”、ラベル“ｘ１”とそれに対応する係数“１．０７８”、ラベル“ｘ３”とそれに対応する係数“−０．１５５”が表示されている。
【００１９】
数理解析部２４は、構文解析部２０から入力される配列名およびラベル付配列記憶部２２に記憶されている記憶内容（ラベルとそれに対応する係数）を利用して、数理計画法に基づき、最適化問題の求解を行い、求解結果を求解結果表示部２５へ出力する。
求解結果表示部２５は、液晶ディスプレイなどの表示部を有しており、数理解析部２４から入力される求解結果を利用して、最適化問題の求解の結果を表示する。その一例を図８に示す。
【００２０】
以下、図１の統計最適化等号装置１により実行される統計最適化方法について図９を参照しつつ説明する。図９は図１の統計最適化統合装置１により行われる統計最適化統合方法の処理手順を示すフローチャートである。
利用者が不図示の入力部を利用して所定の操作を行うと、観測データ表示部１４は、観測データ記憶部１１から各変数とその観測データを読み出し、図３に一例を示すように、読み出した各変数とその観測データを表示する（ステップＳ１０１）。
変数選択ページ表示部１５は、利用者が不図示の入力部を利用して所定の操作を行うと、観測データ記憶部１１に記憶されている観測データの変数を利用して、目的変数および説明変数を選択するためのページ（図４参照）を表示する。利用者は、変数選択部１６を利用して、変数選択ページ表示部１５により表示されたページ内の目的変数選択欄１５ａから１つの目的変数を選択するとともに、ページ内の説明変数選択欄１５ｂから１または複数の目的変数を選択する（ステップＳ１０２）。
統計解析部１７は、観測データ記憶部１１からステップＳ１０２において選択された目的変数および各説明変数の観測データを取り出す。そして、統計解析部１７は、観測データ記憶部１１から取り出した目的変数と各説明変数の観測データを利用して、統計解析を行いモデルを表す目的変数と説明変数との関係を示す関係式を推計する（ステップＳ１０３）。
【００２１】
字句解析部１８は、ステップＳ１０２において統計解析部１７により求められた関係式に対して、字句解析を行い（図１０参照）、解析結果を構文解析部２０へ出力する（ステップＳ１０４）。
構文解析部２０は、ステップＳ１０４において字句解析部１８により字句解析された解析結果を利用して構文解析を行い（図１２参照）、解析結果をラベル付配列表示部２３および数理解析部２４へ出力する（ステップＳ１０５）。
ラベル付配列表示部２３は、ステップＳ１０５における構文解析部２０の解析結果に基づき、図７に一例を示すように、配列名を表示すると共に、ラベルとそれに対応する係数の値（数値）を表示する（ステップＳ１０６）。
【００２２】
数理解析部２４は、ステップＳ１０４において字句解析部１８により字句解析された解析結果を利用して最適化問題の求解を行い（ステップＳ１０７）、求解結果表示部２５は、図８に一例を示すように、ステップＳ１０７における数理解析部２４により得られた最適化問題の求解結果を表示する（ステップＳ１０８）。
変数選択ページ表示部１５は、利用者が不図示の入力部を利用して、目的変数および説明変数を再選択するための所定の操作を行ったか否かを判断する（ステップＳ１０９）。再選択するための所定の操作を行ったと判断すると（Ｓ１０９：ＹＥＳ）ステップＳ１０２の処理に戻り、目的変数および説明変数を選択するためのページ（図４参照）を表示する。一方、再選択するための所定の操作を行っていないと判断すると（Ｓ１０９：ＮＯ）図９の処理を終了する。
【００２３】
以下、図１の統計最適化等号装置１の字句解析部１８により実行される字句解析の処理（ステップＳ１０４の処理）の手順を図１０のフローチャートを参照して説明する。図１０は図１の統計最適化統合装置１の字句解析部１８により行われる字句解析の処理手順を示すフローチャートである。
字句解析部１８は、統計解析部１７から関係式が入力される（ステップＳ２０１）。
字句解析部１８は、ステップＳ２０１において入力された関係式から、順番に、一文字を読み込む（ステップＳ２０２）。字句解析部１８はステップＳ２０２において読み込んだ文字が等号記号「＝」であるか否かを判断する（ステップＳ２０３）。読み込んだ文字が等号記号「＝」であると判断した場合には（Ｓ２０３：ＹＥＳ）ステップＳ２０５の処理へ進む。一方、読み込んだ文字が等号記号「＝」以外であると判断した場合には（Ｓ２０３：ＮＯ）ステップＳ２０４の処理へ進み、字句解析部１８は文字スタック部１８にステップＳ２０２において読み込んだ文字をスタックし（ステップＳ２０４）、ステップＳ２０２の処理に戻る。
【００２４】
字句解析部１８は、文字スタック部１９にスタックされている文字からなる文字列を文字スタック部１９から取り出し、取り出した文字列を配列名のトークンとして構文解析部２０へ出力し、文字スタック部１９にスタックされていた文字を文字スタック部１９から削除する。また、字句解析部１８は、ステップＳ２０２において読み込んだ文字（等号記号「＝」）をトークンとして構文解析部２０へ出力する（ステップＳ２０５）。
【００２５】
字句解析部１８は、ステップＳ２０１において入力された関係式のステップＳ２０２において最後に読み込んだ文字（等号記号「＝」）の後の文字から、順番に、一文字を読み込む（ステップＳ２０６）。字句解析部１８は、ステップＳ２０６において読み込んだ文字が、正規表現辞書記憶部１２に記憶されている終端記号「＋」、「−」、「＊」、「／」、「＝」、「（）、「）」、「空列」の何れかであるか否かを判断する（ステップＳ２０７）。読み込んだ文字が終端記号の何れかであると判断した場合には（Ｓ２０７：ＹＥＳ）ステップＳ２０９の処理へ進む。一方、読み込んだ文字が終端記号以外であると判断した場合には（Ｓ２０７：ＮＯ）ステップＳ２０８の処理へ進み、字句解析部１８は文字スタック部１９にステップＳ２０６において読み込んだ文字をスタックし（ステップＳ２０８）、ステップＳ２０６の処理に戻る。
【００２６】
字句解析部１８は、文字スタック部１９にスタックされている文字（０、１又は複数）からなる文字列を文字スタック部１９から取り出し、取り出した文字列をトークンとして構文解析部２０へ出力し、文字スタック部１９にスタックされていた文字を文字スタック部１９から削除する（ステップＳ２０９）。
字句解析部１８は、ステップＳ２０６において読み込んだ文字（終端記号の何れか）をトークンとして構文解析部２０へ出力する（ステップＳ２１０）。
字句解析部１８は、ステップＳ２０６において読み込んだ文字（終端記号の何れか）が、終端記号「空列」であるか否かを判断する（ステップＳ２１１）。読み込んだ文字（終端記号の何れか）が終端記号「空列」以外であると判断した場合には（Ｓ２１１：ＮＯ）ステップＳ２０６の処理へ戻る。一方、読み込んだ文字（終端記号の何れか）が終端記号「空列」であると判断した場合には（Ｓ２１１：ＹＥＳ）、ステップＳ２０１において統計解析部１７から入力された関係式の全てに対して字句の解析を行ったことになるので、図１０の処理を終了する。
【００２７】
以下、字句解析部１８が図１０のフローチャートにおいて実行する字句解析の一例について図１１を参照しつつ説明する。図１１は字句解析部１８により実行される字句解析の一例を説明するための図であり、（ａ）は入力される関係式を示し、（ｂ）は出力するトークンを示す。
字句解析部１８は統計解析部１７から図１１（ａ）に示す関係式が入力される（ステップＳ２０１）。
字句解析部１８は、ステップＳ２０１において入力された関係式から、一文字「ｏ」を読み込み（ステップＳ２０２）、読み込んだ文字「ｏ」が等号記号「＝」であるか否かを判断する（ステップＳ２０３）。読み込んだ文字「ｏ」が等号記号「＝」以外であると判断し（Ｓ２０３：ＮＯ）、字句解析部１８は文字スタック部１９に読み込んだ文字「ｏ」をスタックし（ステップＳ２０４）、ステップＳ２０２の処理に戻る。文字「ｚ」、「ｏ」、「ｎ」、「ｅ」に対して同様の処理（ステップＳ２０２〜ステップＳ２０４）が行われる。
字句解析部１８は、一文字「＝」を読み込み（ステップＳ２０２）、読み込んだ文字「＝」が等号記号「＝」であるか否かを判断する（ステップＳ２０３）。読み込んだ文字「＝」が等号記号「＝」であると判断し（Ｓ２０３：ＹＥＳ）、字句解析部１８は、文字スタック部１９にスタックされている文字からなる文字列「ｏｚｏｎｅ」を文字スタック部１９から取り出し、取り出した文字列「ｏｚｏｎｅ」を配列名のトークンとして構文解析部２０へ出力し、文字スタック部１９にスタックされていた文字を文字スタック部１９から削除する。また、字句解析部１８は、文字（等号記号「＝」）をトークンとして構文解析部２０へ出力する（ステップＳ２０５）。
【００２８】
字句解析部１８は、一文字「１」を読み込み（ステップＳ２０６）、読み込んだ文字「１」が、終端記号の何れかであるか否かを判断する（ステップＳ２０７）。読み込んだ文字「１」が終端記号以外であると判断し（Ｓ２０７：ＮＯ）、字句解析部１８は文字スタック部１９に読み込んだ文字「１」をスタックする（ステップＳ２０８）。
字句解析部１８は、一文字「＋」を読み込み（ステップＳ２０６）、読み込んだ文字「＋」が、終端記号の何れかであるか否かを判断する（ステップＳ２０７）。読み込んだ文字「＋」が終端記号のいずれかであると判断し（Ｓ２０７：ＹＥＳ）、文字スタック部１９にスタックされている文字からなる文字列「１」を文字スタック部１９から取り出し、取り出した文字列「１」をトークンとして構文解析部２０へ出力し、文字スタック部１９にスタックされていた文字を文字スタック部１９から削除する（ステップＳ２０９）。
字句解析部１８は、文字（終端記号「＋」）をトークンとして構文解析部１９へ出力する（ステップＳ２１０）。
字句解析部１８は、文字（終端記号「＋」）が、終端記号「空列」であるか否かを判断し（ステップＳ２１１）、文字（終端記号「＋」）が終端記号「空列」以外であると判断し（Ｓ２１１：ＮＯ）ステップＳ２０６の処理へ戻る。
【００２９】
字句解析部１８は、一文字「２」を読み込み（ステップＳ２０６）、読み込んだ文字「２」が、終端記号の何れかであるか否かを判断する（ステップＳ２０７）。読み込んだ文字「２」が終端記号以外であると判断し（Ｓ２０７：ＮＯ）、字句解析部１８は文字スタック部１９に読み込んだ文字「２」をスタックする（ステップＳ２０８）。
字句解析部１８は、一文字「＊」を読み込み（ステップＳ２０６）、読み込んだ文字「＊」が、終端記号の何れかであるか否かを判断する（ステップＳ２０７）。読み込んだ文字「＊」が終端記号のいずれかであると判断し（Ｓ２０７：ＹＥＳ）、文字スタック部１９にスタックされている文字からなる文字列「２」を文字スタック部１９から取り出し、取り出した文字列「２」をトークンとして構文解析部２０へ出力し、文字スタック部１９にスタックされていた文字を文字スタック部１９から削除する（ステップＳ２０９）。
字句解析部１８は、文字（終端記号「＊」）をトークンとして構文解析部２０へ出力する（ステップＳ２１０）。
字句解析部１８は、文字（終端記号「＊」）が、終端記号「空列」であるか否かを判断し（ステップＳ２１１）、文字（終端記号「＊」）が終端記号「空列」以外であると判断し（Ｓ２１１：ＮＯ）ステップＳ２０６の処理へ戻る。
【００３０】
字句解析部１８は、一文字「ｒ」を読み込み（ステップＳ２０６）、読み込んだ文字「ｒ」が、終端記号の何れかであるか否かを判断する（ステップＳ２０７）。読み込んだ文字「ｒ」が終端記号以外であると判断し（Ｓ２０７：ＮＯ）、字句解析部１８は文字スタック部１９に読み込んだ文字「ｒ」をスタックする（ステップＳ２０８）。文字「ａ」、「ｄ」、「ｉ」、「ａ」、「ｔ」、「ｉ」、「ｏ」、「ｎ」に対して同様の処理（ステップＳ２０６〜ステップＳ２０８）が行われる。
字句解析部１８は、一文字「＋」を読み込み（ステップＳ２０６）、読み込んだ文字「＋」が、終端記号の何れかであるか否かを判断する（ステップＳ２０７）。読み込んだ文字「＋」が終端記号のいずれかであると判断し（Ｓ２０７：ＹＥＳ）、文字スタック部１９にスタックされている文字からなる文字列「ｒａｄｉａｔｉｏｎ」を文字スタック部１９から取り出し、取り出した文字列「ｒａｄｉａｔｉｏｎ」をトークンとして構文解析部２０へ出力し、文字スタック部１９にスタックされていた文字を文字スタック部１９から削除する（ステップＳ２０９）。
字句解析部１８は、文字（終端記号「＋」）をトークンとして構文解析部２０へ出力する（ステップＳ２１０）。
字句解析部１８は、文字（終端記号「＋」）が、終端記号「空列」であるか否かを判断し（ステップＳ２１１）、文字（終端記号「＋」）が終端記号「空列」以外であると判断し（Ｓ２１１：ＮＯ）ステップＳ２０６の処理へ戻る。
【００３１】
字句解析部１８は、一文字「（」を読み込み（ステップＳ２０６）、読み込んだ文字「（」が、終端記号の何れかであるか否かを判断する（ステップＳ２０７）。読み込んだ文字「（」が終端記号のいずれかであると判断し（Ｓ２０７：ＹＥＳ）、文字スタック部１９にスタックされている文字からなる文字列がないのでステップＳ２０９においてトークンが出力されず、字句解析部１８は、文字（終端記号「（」）をトークンとして構文解析部２０へ出力する（ステップＳ２１０）。
字句解析部１８は、文字（終端記号「（」）が、終端記号「空列」であるか否かを判断し（ステップＳ２１１）、文字（終端記号「（」）が終端記号「空列」以外であると判断し（Ｓ２１１：ＮＯ）ステップＳ２０６の処理へ戻る。
【００３２】
字句解析部１８は、一文字「３」を読み込み（ステップＳ２０６）、読み込んだ文字「３」が、終端記号の何れかであるか否かを判断する（ステップＳ２０７）。読み込んだ文字「３」が終端記号以外であると判断し（Ｓ２０７：ＮＯ）、字句解析部１８は文字スタック部１９に読み込んだ文字「３」をスタックする（ステップＳ２０８）。
字句解析部１８は、一文字「＊」を読み込み（ステップＳ２０６）、読み込んだ文字「＊」が、終端記号の何れかであるか否かを判断する（ステップＳ２０７）。読み込んだ文字「＊」が終端記号のいずれかであると判断し（Ｓ２０７：ＹＥＳ）、文字スタック部１９にスタックされている文字からなる文字列「３」を文字スタック部１９から取り出し、取り出した文字列「３」をトークンとして構文解析部２０へ出力し、文字スタック部１９にスタックされていた文字を文字スタック部１９から削除する（ステップＳ２０９）。
字句解析部１８は、文字（終端記号「＊」）をトークンとして構文解析部２０へ出力する（ステップＳ２１０）。
字句解析部１８は、文字（終端記号「＊」）が、終端記号「空列」であるか否かを判断し（ステップＳ２１１）、文字（終端記号「＊」）が終端記号「空列」以外であると判断し（Ｓ２１１：ＮＯ）ステップＳ２０６の処理へ戻る。
【００３３】
字句解析部１８は、一文字「ｌ」を読み込み（ステップＳ２０６）、読み込んだ文字「ｌ」が、終端記号の何れかであるか否かを判断する（ステップＳ２０７）。読み込んだ文字「ｌ」が終端記号以外であると判断し（Ｓ２０７：ＮＯ）、字句解析部１８は文字スタック部１９に読み込んだ文字「ｌ」をスタックする（ステップＳ２０８）。文字「ｏ」、「ｇ」に対して同様の処理（ステップＳ２０６〜ステップＳ２０８）が行われる。
字句解析部１８は、一文字「＊」を読み込み（ステップＳ２０６）、読み込んだ文字「＊」が、終端記号の何れかであるか否かを判断する（ステップＳ２０７）。読み込んだ文字「＊」が終端記号のいずれかであると判断し（Ｓ２０７：ＹＥＳ）、文字スタック部１９にスタックされている文字からなる文字列「ｌｏｇ」を文字スタック部１９から取り出し、取り出した文字列「ｌｏｇ」をトークンとして構文解析部２０へ出力し、文字スタック部１９にスタックされていた文字を文字スタック部１９から削除する（ステップＳ２０９）。
字句解析部１８は、文字（終端記号「＊」）をトークンとして構文解析部２０へ出力する（ステップＳ２１０）。
字句解析部１８は、文字（終端記号「＊」）が、終端記号「空列」であるか否かを判断し（ステップＳ２１１）、文字（終端記号「＊」）が終端記号「空列」以外であると判断し（Ｓ２１１：ＮＯ）ステップＳ２０６の処理へ戻る。
【００３４】
字句解析部１８は、一文字「（」を読み込み（ステップＳ２０６）、読み込んだ文字「（」が、終端記号の何れかであるか否かを判断する（ステップＳ２０７）。読み込んだ文字「（」が終端記号のいずれかであると判断し（Ｓ２０７：ＹＥＳ）、文字スタック部１９にスタックされている文字からなる文字列がないのでステップＳ２０９においてトークンが出力されず、字句解析部１８は、文字（終端記号「（」）をトークンとして構文解析部２０へ出力する（ステップＳ２１０）。
字句解析部１８は、文字（終端記号「（」）が、終端記号「空列」であるか否かを判断し（ステップＳ２１１）、文字（終端記号「（」）が終端記号「空列」以外であると判断し（Ｓ２１１：ＮＯ）ステップＳ２０６の処理へ戻る。
【００３５】
字句解析部１８は、一文字「ｗ」を読み込み（ステップＳ２０６）、読み込んだ文字「ｗ」が、終端記号の何れかであるか否かを判断する（ステップＳ２０７）。読み込んだ文字「ｗ」が終端記号以外であると判断し（Ｓ２０７：ＮＯ）、字句解析部１８は文字スタック部１９に読み込んだ文字「ｗ」をスタックする（ステップＳ２０８）。文字「ｉ」、「ｎ」、「ｄ」に対して同様の処理（ステップＳ２０６〜ステップＳ２０８）が行われる。
字句解析部１８は、一文字「）」を読み込み（ステップＳ２０６）、読み込んだ文字「）」が、終端記号の何れかであるか否かを判断する（ステップＳ２０７）。読み込んだ文字「）」が終端記号のいずれかであると判断し（Ｓ２０７：ＹＥＳ）、文字スタック部１９にスタックされている文字からなる文字列「ｗｉｎｄ」を文字スタック部１９から取り出し、取り出した文字列「ｗｉｎｄ」をトークンとして構文解析部２０へ出力し、文字スタック部１９にスタックされていた文字を文字スタック部１９から削除する（ステップＳ２０９）。
字句解析部１８は、文字（終端記号「）」）をトークンとして構文解析部２０へ出力する（ステップＳ２１０）。
字句解析部１８は、文字（終端記号「）」）が、終端記号「空列」であるか否かを判断し（ステップＳ２１１）、文字（終端記号「）」）が終端記号「空列」以外であると判断し（Ｓ２１１：ＮＯ）ステップＳ２０６の処理へ戻る。
ステップＳ２０６〜ステップＳ２１１の処理が繰り返され、字句解析部１８は、「＋」、「４」、「＊」、「ｔｅｍｐａｒａｔｕｒｅ２」、「）」、「＊」、「５」、「＊」を、トークンとして構文解析部２０へ出力する。
【００３６】
字句解析部１８は、一文字「ｈ」を読み込み（ステップＳ２０６）、読み込んだ文字「ｈ」が、終端記号の何れかであるか否かを判断する（ステップＳ２０７）。読み込んだ文字「ｈ」が終端記号以外であると判断し（Ｓ２０７：ＮＯ）、字句解析部１８は文字スタック部１９に読み込んだ文字「ｈ」をスタックする（ステップＳ２０８）。文字「ｕ」、「ｍ」、「ｉ」、「ｄ」、「ｉ」、「ｔ」、「ｙ」に対して同様の処理（ステップＳ２０６〜ステップＳ２０８）が行われる。
字句解析部１８は、一文字「空列」を読み込み（ステップＳ２０６）、読み込んだ文字「空列」が、終端記号の何れかであるか否かを判断する（ステップＳ２０７）。読み込んだ文字「空列」が終端記号のいずれかであると判断し（Ｓ２０７：ＹＥＳ）、文字スタック部１９にスタックされている文字からなる文字列「ｈｕｍｉｄｉｔｙ」を文字スタック部１９から取り出し、取り出した文字列「ｈｕｍｉｄｉｔｙ」をトークンとして構文解析部２０へ出力し、文字スタック部１９にスタックされていた文字を文字スタック部１９から削除する（ステップＳ２０９）。
字句解析部１７は、文字（終端記号「空列」）をトークンとして構文解析部１９へ出力する（ステップＳ２１０）。
字句解析部１８は、文字（終端記号「空列」）が、終端記号「空列」であるか否かを判断し（ステップＳ２１１）、文字（終端記号「空列」）が終端記号「空列」であると判断し（Ｓ２１１：ＹＥＳ）、処理を終了する。
【００３７】
以下、図１の統計最適化等号装置１の構文解析部２０により実行される構文解析の処理（ステップＳ１０５の処理）の手順を図１２のフローチャートを参照して説明する。図１２は図１の統計最適化統合装置１の構文解析部２０により行われる構文解析の処理手順を示すフローチャートである。
構文解析部２０は、構文規則辞書記憶部１３の記憶内容に従い、等号記号で分けられた左辺が配列名であることから、ラベル付配列表示部２３および数理解析部２４に対して、字句解析部１８から入力されるトークンの中から、等号記号「＝」より先に入力されたトークンを配列名のトークンとして出力するとともに、等号記号「＝」のトークンを出力する（ステップＳ３０１）。
【００３８】
構文解析部２０は、字句解析部１８から等号記号「＝」のトークンより後に入力されたトークンからなるトークン列を、リスト記憶部２１のリストのリスト番号「１」の項目「トークン列」および項目「展開結果」に格納する（ステップＳ３０２）。構文解析部２０はリスト番号「１」の項目「ポインタ」に「ＮＵＬＬ」を格納する（ステップＳ３０３）。
構文解析部２０は、処理対象となる或いは処理対象となっているリスト番号を特定する際に利用する処理対象リスト番号の値を「０」にする（ステップＳ３０４）。
【００３９】
構文解析部２０は、処理対象リスト番号の値に「１」加算して加算値を処理対象リスト番号の値とする（ステップＳ３０５）。
構文解析部２０は、リスト記憶部２１のリストにおいて、リスト番号が処理対象リスト番号の項目「トークン列」にトークン列が格納されているか否かを判断する（ステップＳ３０６）。トークン列が格納されていると判断した場合には（Ｓ３０６：ＹＥＳ）ステップＳ３０７の処理へ進む。一方、トークン列が格納されていないと判断した場合には（Ｓ３０６：ＮＯ）ステップＳ３１１の処理へ進む。
【００４０】
構文解析部２０は、リスト番号が処理対象リスト番号に対応した項目「トークン列」に格納されているトークン列において、トークン列全体を除き、既に展開が必要な部分であるとして抽出したトークン列を除いた部分から展開が必要な部分を抽出する（ステップＳ３０７）。この抽出は、次のようにして行う。トークン列の左側にある「（」を探し、それに対応する「）」を見つけ、２つのトークンに囲まれたトークン列と、その一方或は双方にある乗算の演算子のトークン「＊」或いは除算の演算子のトークン「／」と、乗算或いは除算の対象のトークン（トークン列の場合あり）とを抽出する。さらに、乗算或いは除算の対象のトークン（トークン列）に対してその乗算の演算子のトークン或いは除算の演算子のトークンの反対側に乗算の演算子のトークン「＊」或いは除算の演算子のトークン「／」がある場合には、さらに、反対側にある乗算の演算子のトークン「＊」或いは除算の演算子のトークン「／」と、乗算或いは除算の対象のトークン（トークン列の場合あり）とを抽出する。乗算或は除算の対象のトークン（トークン列）に対してその乗算或は除算の演算子の反対側に乗算の演算子のトークン「＊」或いは除算の演算子のトークン「／」がなくなるまで抽出を行う。この抽出したトークンからなるトークン列が展開が必要な部分とする。
【００４１】
構文解析部２０は、ステップＳ３０７における抽出結果を基に、トークン列の中に展開が必要な部分が存在したか否かを判断する（ステップＳ３０８）。トークン列の中に展開が必要な部分が存在すると判断した場合には（Ｓ３０８：ＹＥＳ）ステップＳ３０９の処理へ進む。一方、トークン列の中に展開が必要な部分が存在しないと判断した場合には（Ｓ３０８：ＮＯ）ステップＳ３０５の処理へ戻る。
構文解析部２０は、リスト記憶部２１のリストに、新たにステップＳ３０７において抽出した展開が必要な部分であるトークン列を項目「トークン列」および項目「展開結果」に格納する（ステップＳ３０９）。また、構文解析部２０は、ステップＳ３０９において格納したトークン列に対応付けて、項目「ポインタ」に処理対象リスト番号の値を格納し（ステップＳ３１０）、ステップＳ３０７の処理に戻る。
【００４２】
構文解析部２０は、リスト記憶部２１のリストにおいて、リスト番号の大きい順に、項目「トークン列」からトークン列を抽出し、項目「ポインタ」からポインタを抽出し、項目「展開結果」から展開結果（トークン列）を抽出する（ステップＳ３１１）。構文解析部２０は、ステップＳ３１１において抽出したポインタが「ＮＵＬＬ」であるか否かを判断する（ステップＳ３１２）。抽出したポインタが「ＮＵＬＬ」であると判断した場合には（Ｓ３１２：ＹＥＳ）ステップＳ３１５の処理へ進む。一方、抽出したポインタが「ＮＵＬＬ」でないと判断した場合には（Ｓ３１２：ＮＯ）、ステップＳ３１３の処理へ進む。
構文解析部２０は、ステップＳ３１１において抽出した展開結果（トークン列）の括弧の展開を実行する（ステップＳ３１３）。続いて、構文解析部２０は、リスト記憶部２１のリストにおいて、リスト番号が処理対象リスト番号の項目「展開結果」にステップＳ３１３におけるトークン列の括弧を展開した結果を格納する。そして、構文解析部２０は、ステップＳ３１１において抽出したポインタの値にリスト番号が一致する項目「展開結果」に格納されている展開結果（トークン列）に対して、それに含まれるステップＳ３１１において抽出したトークン列にステップＳ３１３において求めた展開結果を代入し、展開結果を更新する（ステップＳ３１４）。そして、ステップＳ３１１の処理に戻る。
【００４３】
構文解析部２０は、リスト記憶部２１のリストから、リスト番号が「１」の項目「展開結果」から展開された展開結果（トークン列）を抽出する（ステップＳ３１５）。
構文解析部２０は、トークン列（ステップＳ３１５において抽出された展開結果（トークン列）、或いは、後述するステップＳ３２２においてトークンが削除された後のトークン列）が空（トークンが何もない）であるか否かを判断する（ステップＳ３１６）。トークン列が空であると判断した場合には（Ｓ３１６：ＹＥＳ）、図１２の処理を終了する。一方、トークン列が空でないと判断した場合には（Ｓ３１６：ＮＯ）、ステップＳ３１７の処理へ進む。
【００４４】
構文解析部２０は、トークン列の最初から「＋」の演算子のトークン或いは「−」の演算子のトークンが現れるまで、或いは、トークンがなくなるまでの全てのトークンを抽出する（ステップＳ３１７）。続いて、構文解析部２０は、ステップＳ３１７において抽出したトークンの中から数字のみのトークンを抽出し、数字のみのトークンがない場合には「１」を抽出したトークンとする（ステップＳ３１８）。さらに、続いて、構文解析部２０は、ステップＳ３１７において抽出したトークンの中から数字のみのトークンおよび「＋」、「−」の演算子のトークン以外のトークンを抽出する。構文解析部２０は、トークンが一つのみの場合にはその一つが変数であるのでその一つをラベル名とし、複数のトークンがあった場合にはそれらを利用して変数組を作成して作成した変数組をラベル名とする。そして、構文解析部２０は、ラベル付配列記憶部２２のラベル付配列の項目「ラベル」にラベル名とした変数のトークン或いは変数組のトークン列を格納する（ステップＳ３１９）。
構文解析部２０は、ステップＳ３１８において抽出した数字のみのトークンの先頭に、不図示の演算子格納メモリに記憶されている「＋」或いは「−」の演算子のトークン（ステップＳ３１７において取り出したトークン列の直前にあった「＋」或いは「−」の演算子のトークン：初期時は「＋」の演算子のトークンが書き込まれる。）を、付加する（ステップＳ３２０）。続いて、構文解析部２０は、ステップＳ３２０において得られた値（「＋」或いは「−」の演算子のトークンが数字のみのトークンの先頭に付加されたもの）を、ステップＳ３１９において格納されたラベルに対応付けてラベル付配列記憶部２２のラベル付配列の項目「係数」に格納する（ステップＳ３２１）。
構文解析部２０は、ステップＳ３１７において現れた「＋」の演算子のトークン或いは「−」の演算子のトークンを不図示の演算子格納メモリに記憶し、ステップＳ３１７において抽出した全てのトークン（「＋」或いは「−」の演算子のトークンが現れるまでのトークン、或いはトークンがなくなるまでのトークン）をトークン列から削除して（ステップＳ３２２）、ステップＳ３１６の処理に戻る。
【００４５】
以下、構文解析部２０が図１２のフローチャートにおいて実行する構文解析の一例について図５および図６を参照しつつ説明する。
構文解析部２０は、ラベル付配列表示部２３および数理解析部２４に対して、字句解析部１８から入力されるトークンの中から、等号記号「＝」より先に入力されたトークンを配列名のトークンとして出力するとともに、等号記号「＝」のトークンを出力する（ステップＳ３０１）。
構文解析部２０は、字句解析部１８から等号記号「＝」のトークンより後に入力されたトークンからなるトークン列「ａ＋（１＋２＊ｂ）＊（３＊ｃ＋（４＊ｄ＋５＊ｅ）＊６＊ｆ）」を、リスト記憶部２１のリストのリスト番号「１」の項目「トークン列」および「展開結果」に格納する（ステップＳ３０２）とともに、リスト番号「１」の項目「ポインタ」に「ＮＵＬＬ」を格納する（ステップＳ３０３）。
構文解析部２０は、処理対象リスト番号の値を「０」にする（ステップＳ３０４）。
【００４６】
構文解析部２０は、処理対象リスト番号の値「０」に「１」加算して加算値「１」を処理対象リスト番号の値とする（ステップＳ３０５）。
構文解析部２０は、リスト記憶部２１のリストにおいて、リスト番号が処理対象リスト番号「１」の項目「トークン列」にトークン列が格納されているか否かを判断する（ステップＳ３０６）。トークン列「ａ＋（１＋２＊ｂ）＊（３＊ｃ＋（４＊ｄ＋５＊ｅ）＊６＊ｆ）」が格納されていると判断し（Ｓ３０６：ＹＥＳ）、構文解析部２０は、トークン列「ａ＋（１＋２＊ｂ）＊（３＊ｃ＋（４＊ｄ＋５＊ｅ）＊６＊ｆ）」の中から、展開が必要な部分「（１＋２＊ｂ）＊（３＊ｃ＋（４＊ｄ＋５＊ｅ）＊６＊ｆ）」を抽出する（ステップＳ３０７）。
構文解析部２０は、トークン列の中に展開が必要な部分が存在したか否かを判断し（ステップＳ３０８）、展開が必要な部分「（１＋２＊ｂ）＊（３＊ｃ＋（４＊ｄ＋５＊ｅ）＊６＊ｆ）」が存在した（Ｓ３０８：ＹＥＳ）ので、構文解析部２０は、リスト記憶部２１のリストのリスト番号「２」の項目「トークン列」および項目「展開結果」に「（１＋２＊ｂ）＊（３＊ｃ＋（４＊ｄ＋５＊ｅ）＊６＊ｆ）」を新たに格納し（ステップＳ３０９）、項目「ポインタ」に処理対象リスト番号「１」を新たに格納する（ステップＳ３１０）。
【００４７】
構文解析部２０は、トークン列「ａ＋（１＋２＊ｂ）＊（３＊ｃ＋（４＊ｄ＋５＊ｅ）＊６＊ｆ）」の既に展開が必要な部分であるとして抽出した部分「（１＋２＊ｂ）＊（３＊ｃ＋（４＊ｄ＋５＊ｅ）＊６＊ｆ）」を除いた部分から展開が必要な部分を抽出する（ステップＳ３０７）が、抽出することができない。構文解析部２０は、トークン列の中に展開が必要な部分が存在したか否かを判断し（ステップＳ３０８）、展開が必要な部分が存在しなかった（Ｓ３０８：ＮＯ）ので、ステップＳ３０６の処理に戻る。
【００４８】
構文解析部２０は、処理対象リスト番号の値「１」に「１」加算して加算値「２」を処理対象リスト番号の値とする（ステップＳ３０５）。
構文解析部２０は、リスト記憶部２１のリストにおいて、リスト番号が処理対象リスト番号「２」の項目「トークン列」にトークン列が格納されているか否かを判断する（ステップＳ３０６）。トークン列「（１＋２＊ｂ）＊（３＊ｃ＋（４＊ｄ＋５＊ｅ）＊６＊ｆ）」が格納されていると判断し（Ｓ３０６：ＹＥＳ）、構文解析部２０は、トークン列「（１＋２＊ｂ）＊（３＊ｃ＋（４＊ｄ＋５＊ｅ）＊６＊ｆ）」の中から、トークン列の全体でない、展開が必要な部分「（４＊ｄ＋５＊ｅ）＊６＊ｆ」を抽出する（ステップＳ３０７）。
構文解析部２０は、トークン列の中に展開が必要な部分が存在したか否かを判断し（ステップＳ３０８）、展開が必要な部分「（４＊ｄ＋５＊ｅ）＊６＊ｆ」が存在した（Ｓ３０８：ＹＥＳ）ので、構文解析部２０は、リスト記憶部２１のリストのリスト番号「３」の項目「トークン列」および項目「展開結果」に「（４＊ｄ＋５＊ｅ）＊６＊ｆ」を格納し（ステップＳ３０９）、項目「ポインタ」に処理対象リスト番号「２」を格納する（ステップＳ３１０）。
【００４９】
構文解析部２０は、トークン列「（１＋２＊ｂ）＊（３＊ｃ＋（４＊ｄ＋５＊ｅ）＊６＊ｆ）」の既に展開が必要な部分であるとして抽出した部分「（４＊ｄ＋５＊ｅ）＊６＊ｆ」を除いた部分から展開が必要な部分を抽出する（ステップＳ３０７）が、抽出することができない。構文解析部２０は、トークン列の中に展開が必要な部分が存在したか否かを判断し（ステップＳ３０８）、展開が必要な部分が存在しなかった（Ｓ３０８：ＮＯ）ので、ステップＳ３０６の処理に戻る。
【００５０】
構文解析部２０は、処理対象リスト番号の値「２」に「１」加算して加算値「３」を処理対象リスト番号の値とする（ステップＳ３０５）。
構文解析部２０は、リスト記憶部２１のリストにおいて、リスト番号が処理対象リスト番号「３」の項目「トークン列」にトークン列が格納されているか否かを判断する（ステップＳ３０６）。トークン列「（４＊ｄ＋５＊ｅ）＊６＊ｆ」が格納されていると判断し（Ｓ３０６：ＹＥＳ）、構文解析部２０は、トークン列「（４＊ｄ＋５＊ｅ）＊６＊ｆ」の中から、トークン列の全体でない、展開が必要な部分を抽出する（ステップＳ３０７）が、展開が必要な部分を抽出できない。構文解析部２０は、トークン列の中に展開が必要な部分が存在したか否かを判断し（ステップＳ３０８）、展開が必要な部分が存在しなかった（Ｓ３０８：ＮＯ）ので、ステップＳ３０６の処理に戻る。
【００５１】
構文解析部２０は、処理対象リスト番号の値「３」に「１」加算して加算値「４」を処理対象リスト番号の値とする（ステップＳ３０５）。
構文解析部２０は、リスト記憶部２１のリストにおいて、リスト番号が処理対象リスト番号「４」の項目「トークン列」にトークン列が格納されているか否かを判断する（ステップＳ３０６）。トークン列が格納されていないと判断し（Ｓ３０６：ＮＯ）、ステップＳ３１１の処理へ進む。
【００５２】
構文解析部２０は、リスト記憶部２１のリストから、リスト番号が最も大きい「３」に対応するトークン列「（４＊ｄ＋５＊ｅ）＊６＊ｆ」、ポインタ「２」および展開結果「（４＊ｄ＋５＊ｅ）＊６＊ｆ」を抽出する（ステップＳ３１１）。構文解析部２０は、抽出したポインタ「２」が「ＮＵＬＬ」であるか否かを判断し（ステップＳ３１２）、抽出したポインタ「２」が「ＮＵＬＬ」でないと判断する（Ｓ３１２：ＮＯ）。構文解析部２０は抽出した展開結果「（４＊ｄ＋５＊ｅ）＊６＊ｆ」を展開して「２４＊ｄ＊ｆ＋３０＊ｅ＊ｆ」を求める（ステップＳ３１３）。構文解析部２０は、ポインタ先の（ポインタの値に一致する）リスト番号「２」の項目「展開結果」の中の、トークン列「（４＊ｄ＋５＊ｅ）＊６＊ｆ」に展開結果「２４＊ｄ＊ｆ＋３０＊ｅ＊ｆ」を代入し、ポインタ先のリスト番号「２」の項目「展開結果」を「（１＋２＊ｂ）＊（３＊ｃ＋２４＊ｄ＊ｆ＋３０＊ｅ＊ｆ）」に更新する（ステップＳ３１４）。
【００５３】
構文解析部２０は、リスト記憶部２１のリストから、リスト番号が次に大きい「２」に対応するトークン列「（１＋２＊ｂ）＊（３＊ｃ＋（４＊ｄ＋５＊ｅ）＊６＊ｆ）」、ポインタ「１」および展開結果「（１＋２＊ｂ）＊（３＊ｃ＋２４＊ｄ＊ｆ＋３０＊ｅ＊ｆ）」を抽出する（ステップＳ３１１）。構文解析部２０は、抽出したポインタ「１」が「ＮＵＬＬ」であるか否かを判断し（ステップＳ３１２）、抽出したポインタ「１」が「ＮＵＬＬ」でないと判断する（Ｓ３１２：ＮＯ）。構文解析部２０は抽出した展開結果「（１＋２＊ｂ）＊（３＊ｃ＋２４＊ｄ＊ｆ＋３０＊ｅ＊ｆ）」を展開して「３＊ｃ＋６＊ｂ＊ｃ＋２４＊ｄ＊ｆ＋３０＊ｅ＊ｆ＋４８＊ｂ＊ｄ＊ｆ＋６０＊ｂ＊ｅ＊ｆ」を求める（ステップＳ３１３）。構文解析部２０は、ポインタ先のリスト番号「１」の項目「展開結果」の中の、トークン列「（１＋２＊ｂ）＊（３＊ｃ＋２４＊ｄ＊ｆ＋３０＊ｅ＊ｆ）」に展開結果「３＊ｃ＋６＊ｂ＊ｃ＋２４＊ｄ＊ｆ＋３０＊ｅ＊ｆ＋４８＊ｂ＊ｄ＊ｆ＋６０＊ｂ＊ｅ＊ｆ」を代入し、ポインタ先のリスト番号「１」の項目「展開結果」を「ａ＋３＊ｃ＋６＊ｂ＊ｃ＋２４＊ｄ＊ｆ＋３０＊ｅ＊ｆ＋４８＊ｂ＊ｄ＊ｆ＋６０＊ｂ＊ｅ＊ｆ」に更新する（ステップＳ３１４）。
【００５４】
構文解析部２０は、リスト記憶部２０のリストから、リスト番号が次に大きい「１」に対応するトークン列「ａ＋（１＋２＊ｂ）＊（３＊ｃ＋２４＊ｄ＊ｆ＋３０＊ｅ＊ｆ）」、ポインタ「ＮＵＬＬ」および展開結果「ａ＋３＊ｃ＋６＊ｂ＊ｃ＋２４＊ｄ＊ｆ＋３０＊ｅ＊ｆ＋４８＊ｂ＊ｄ＊ｆ＋６０＊ｂ＊ｅ＊ｆ」を抽出する（ステップＳ３１１）。構文解析部２０は、抽出したポインタ「ＮＵＬＬ」が「ＮＵＬＬ」であるか否かを判断し（ステップＳ３１２）、抽出したポインタ「ＮＵＬＬ」が「ＮＵＬＬ」であると判断し（Ｓ３１２：ＹＥＳ）、ステップＳ３１５の処理へ進む。
【００５５】
構文解析部２０は、リスト記憶部２１のリストから、リスト番号が「１」に対応する項目「展開結果」から展開された展開結果（トークン列）「ａ＋３＊ｃ＋６＊ｂ＊ｃ＋２４＊ｄ＊ｆ＋３０＊ｅ＊ｆ＋４８＊ｂ＊ｄ＊ｆ＋６０＊ｂ＊ｅ＊ｆ」を抽出する（ステップＳ３１５）。
構文解析部２０は、トークン列が空であるか否かを判断し（ステップＳ３１６）、トークン列「ａ＋３＊ｃ＋６＊ｂ＊ｃ＋２４＊ｄ＊ｆ＋３０＊ｅ＊ｆ＋４８＊ｂ＊ｄ＊ｆ＋６０＊ｂ＊ｅ＊ｆ」が空でないと判断する（Ｓ３１６：ＮＯ）。
構文解析部２０は、トークン列「ａ＋３＊ｃ＋６＊ｂ＊ｃ＋２４＊ｄ＊ｆ＋３０＊ｅ＊ｆ＋４８＊ｂ＊ｄ＊ｆ＋６０＊ｂ＊ｅ＊ｆ」から「＋」の演算子のトークンが現れるまでの全てのトークン「ａ」、「＋」を抽出する（ステップＳ３１７）。構文解析部２０は、ステップＳ３１７において抽出したトークンの中に数字のみのトークンがないので、数字のみのトークンを「１」とする（ステップＳ３１８）。構文解析部２０は、ステップＳ３１７において抽出したトークンの中から数字のみのトークンおよび演算子「＋」、「−」のトークン以外のトークン「ａ」を抽出し、ラベル付配列記憶部２２のラベル付配列の項目「ラベル」にトークン「ａ」をラベル名として格納する（ステップＳ３１９）。
構文解析部２０は、ステップＳ３１８において抽出した数字のみのトークン「１」の先頭に、不図示の演算子格納メモリに記憶されている「＋」の演算子のトークンを、付加する（ステップＳ３２０）。続いて、構文解析部２０は、ステップＳ３２０において得られた数字のみのトークンの先頭に「＋」の演算子のトークンを付加した値「＋１」を、ステップＳ３１９において格納されたラベルに対応付けてラベル付配列記憶部２２のラベル付配列の項目「係数」に格納する（ステップＳ３２１）。
構文解析部２０は、ステップＳ３１７において現れた「＋」の演算子のトークンを不図示の演算子格納メモリに記憶し、ステップＳ３１７において「＋」の演算子のトークンが現れるまでのトークン「ａ」、「＋」をトークン列「ａ＋３＊ｃ＋６＊ｂ＊ｃ＋２４＊ｄ＊ｆ＋３０＊ｅ＊ｆ＋４８＊ｂ＊ｄ＊ｆ＋６０＊ｂ＊ｅ＊ｆ」から削除し、削除後のトークン列が「３＊ｃ＋６＊ｂ＊ｃ＋２４＊ｄ＊ｆ＋３０＊ｅ＊ｆ＋４８＊ｂ＊ｄ＊ｆ＋６０＊ｂ＊ｅ＊ｆ」を得る（ステップＳ３２２）。
【００５６】
これが繰り返されて、ラベル付配列記憶部２２にラベル「ｃ」とその係数「＋３」が対応付けて記憶され、ラベル「ｂ＊ｃ」とその係数「＋６」が対応付けて記憶され、ラベル「ｄ＊ｆ」とその係数「＋２４」が対応付けて記憶される。さらに、ラベル「ｅ＊ｆ」とその係数「＋３０」が対応付けて記憶され、ラベル「ｂ＊ｄ＊ｆ」とその係数「＋４８」が対応付けて記憶される。このとき、ステップＳ３２２において削除された後のトークン列は「６０＊ｂ＊ｅ＊ｆ」である。
【００５７】
構文解析部２０は、トークン列が空であるか否かを判断し（ステップＳ３１６）、トークン列「６０＊ｂ＊ｅ＊ｆ」が空でないと判断する（Ｓ３１６：ＮＯ）。
構文解析部２０は、トークン列「６０＊ｂ＊ｅ＊ｆ」において「＋」、「−」の演算子のトークンが現れないので全てのトークン「６０」、「＊」、「ｂ」、「＊」、「ｅ」、「＊」、「ｆ」を抽出する（ステップＳ３１７）。構文解析部２０は、ステップＳ３１７において抽出したトークンの中から数字のみのトークン「６０」を抽出する（ステップＳ３１８）。構文解析部２０は、ステップＳ３１７において抽出したトークンの中から数字のみのトークン「６０」および演算子「＋」、「−」のトークン以外のトークン「＊」、「ｂ」、「＊」、「ｅ」、「＊」、「ｆ」を抽出し、それらを利用して変数組「ｂ＊ｅ＊ｆ」を作成して作成した変数組「ｂ＊ｅ＊ｆ」をラベル名として、ラベル付配列記憶部２２のラベル付配列の項目「ラベル」に格納する（ステップＳ３１９）。
構文解析部２０は、ステップＳ３１８において抽出した数字のみのトークン「６０」の先頭に、不図示の演算子格納メモリに記憶されている「＋」の演算子のトークンを、付加する（ステップＳ３２０）。続いて、構文解析部２０は、ステップＳ３２０において得られたステップＳ３２０において得られた数字のみのトークンの先頭に「＋」の演算子のトークンを付加した値「＋６０」を、ステップＳ３１９において格納されたラベルに対応付けてラベル付配列記憶部２２のラベル付配列の項目「係数」に格納する（ステップＳ３２１）。
構文解析部２０は、トークン列「６０＊ｂ＊ｅ＊ｆ」から抽出した全てのトークン「６０」、「＊」、「ｂ」、「＊」、「ｅ」、「＊」、「ｆ」を削除し、トークン列が空になる（ステップＳ３２２）。
構文解析部２０は、トークン列が空であるか否かを判断し（ステップＳ３１６）、トークン列が空であると判断し（Ｓ３１６：ＹＥＳ）、処理を終了する。
【００５８】
以上説明した実施の形態によれば、目的変数と選択変数を選択することができ、それらを選択すれば、変数或いは変数組とその係数とが表示されるので、表示内容を参照することにより変数の変更を容易に行うことができる。
【００５９】
以上、本発明の好適な実施の形態について説明したが、本発明は上述の実施の形態に限られるものではなく、特許請求の範囲に記載した限りにおいて様々な設計変更が可能である。
【００６０】
尚、上述した各処理部の機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することにより上記各種処理を行ってもよい。尚、ここでいう「コンピュータシステム」とは、ＯＳや周辺機器等のハードウェアを含むものとする。また、「コンピュータシステム」は、ホームページ提供環境（あるいは表示環境）を備えたＷＷＷシステムも含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ、ＣＤ−ＲＯＭ等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。更に「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ（ＲＡＭ）のように、一定時間プログラムを保持しているものも含むものとする。
【００６１】
また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように情報を伝送する機能を有する媒体のことをいう。また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。更に、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル（差分プログラム）であっても良い。
【図面の簡単な説明】
【００６２】
【図１】本発明の実施の形態の統計最適化統合装置の構成を示す構成図。
【図２】図１の観測データ記憶部に記憶されている観測データの一例を示す図。
【図３】図１の観測データ表示部の表示例を示す図。
【図４】図１の変数選択ページ表示部の表示例を示す図。
【図５】図１のリスト記憶部の記憶内容の一例を示す図。
【図６】図１のラベル付配列記憶部の記憶内容の一例を示す図。
【図７】図１のラベル付配列表示部の表示例を示す図。
【図８】図１の求解結果表示部の表示例を示す図。
【図９】図１の統計最適化統合装置により行われる統計最適化統合方法の処理手順を示すフローチャート。
【図１０】図１の統計最適化統合装置の字句解析部により行われる字句解析の処理手順を示すフローチャート。
【図１１】図１の統計最適化統合装置の字句解析部により行われる字句解析の一例を説明するための図。
【図１２】図１の統計最適化統合装置の構文解析部により行われる構文解析の処理手順を示すフローチャート。
【符号の説明】
【００６３】
１  統計最適化統合装置
１１  観測データ記憶部
１２  正規表現辞書記憶部
１３  構文規則辞書記憶部
１４  観測データ表示部
１５  変数選択ページ表示部
１６  変数選択部
１７  統計解析部
１８  字句解析部
１９  文字スタック部
２０  構文解析部
２１  リスト記憶部
２２  ラベル付配列記憶部
２３  ラベル付配列表示部
２４  数理解析部
２５  求解結果表示部
【図１】
2007052533.tif 000003
【図２】
2007052533.tif 000004
【図３】
2007052533.tif 000005
【図４】
2007052533.tif 000006
【図５】
2007052533.tif 000007
【図６】
2007052533.tif 000008
【図７】
2007052533.tif 000009
【図８】
2007052533.tif 000010
【図９】
2007052533.tif 000011
【図１０】
2007052533.tif 000012
【図１１】
2007052533.tif 000013
【図１２】
2007052533.tif 000014