Huginの製品・サービスはマインドウエア総研により翻訳・提供されています。pict

NET 言語

Hugin GUI と Hugin Decision Engine は、ベイジアン信念ネットワークやインフルエンス・ダイアグラムを記述するためのnet言語と呼ぶ特別な目的の言語を使用します。この言語は、ネットワーク・モデルの構造、条件付き確率および効用関数および決定の時間的順序(インフルエンス・ダイアグラムの場合)の指定を含む、信念ネットワークやインフルエンス・ダイアグラムの完全な記述を作成することを可能にします。

このページは、第1リビジョンから大幅に変更されているNET言語の第2リビジョンを説明します。その理由は、この言語の第1リビジョンが固定フォーマットを使用していたためです(すなわち、さまざまなエレメントの意味が、記述内でのそれらの位置によって決定される)。これは、古い言語での記述が新しい言語でのそれらの意味を維持するように、この言語を拡張することが不可能だったことを含意します。

ノード

信念ネットワークまたはインフルエンス・ダイアグラムの基本エレメントはノードです。通常の信念ネットワークでは、ノードは確率変数(離散または連続)を表します。インフルエンス・ダイアグラムでは、ノードは意思決定者によてtコントロールされる決定、もしくは変数のさまざまなコンフィギュレーションにプリファレンスを割り当てるために使用する効用関数である場合もあります。

事例 1

以下のノード記述は、 [Lauritzen & Spiegelhalter, 1988]の有名な事例である "Chest Clinic"ネットワークからの引用です。

node T
{
states = ("yes" "no");
label = "Has tuberculosis?";
position = (25 275);
}

これは、 "yes" と "no"とラベルづけされたステートを持つバイナリの確率変数Tを記述します。この記述は、 Hugin GUIによって使用される labelpositionを与えます。

ノードの記述はh、次のキーワードのいずれかで導入されます: [<prefix>] node, decision または utility。ここで nodeでのオプショナルなprefix は、 discrete または continuous のいずれかです( prefix を省略するとデフォルトで discrete が使用されます)。モデル内でユニークな(唯一の)名前がキーワードに続きます。そして、次の形式で name/value の対のシーケンスが続きます。

    <name> = <value>;

括弧を括ります。

この事例は、ノードについてnet言語で現在定義しているフィールド名を示します: states, label および position。これらのフィールドのすべては、オプショナルです;いずれかのフィールドがない場合、デフォルト値が供給されます。

  • states は、ノードのステートを指定します(ここで、決定ノードの決定は、ステートとしてもみなされます);ステートは、文字列のリストによって示されます。リストは空欄であってはなりません。リスト中の文字列は、個々のステートのラベルからなります;ラベルはノードについてユニークである必要はありません(空の文字列でも可能です)。リストの長さ(すなわち、ステートの数)だけが、Hugin Decision Engineに関係します;ただし、ステートの・ラベルはHugin GUIで使用されます。
    デフォルト値は、長さ1のリストで、空の文字列を格納しています(すなわち、ノードは1つのステートを持ちます)。
    states フィールドは、効用ノードや連続ノードでは不可です。
  • label は、ノードを表示するときに Hugin GUI で使用します。ラベルは、推論エンジンでは使用しません。デフォルト値は空文字列です。
  • position は、整数のリストです(このリストは長さ2を持たなければなりません)。 これは、 Hugin GUIでのネットワークのグラフィカル表示内の位置を示します。位置は、推論エンジンでは使用しません。デフォルトの位置は、 (0,0)です。

これらのフィールドとは別に、ノードについて独自のフィールドを指定することができます。これらは、ノードについていくつかの追加情報を必要とする特定のアプリケーションで使用できます。

事例 2

このシチュエーションでは、T ノードがアプリケーション特定のフィールド MY_APPL_my_field を割り当てています。

node T
{
states = ("yes" "no");
label = "Has tuberculosis?";
position = (25 275);
MY_APPL_my_field = "1000";
}

このようなアプリケーション特定フィールドの値は、引用文字 (")で括られた文字列のみが可能です (文字列の正確な定義は "表記法"の項を参照)。

混乱を避けるためにフィールド名をアプリケーション特定prefixで始める(たとえば、MY_APPL のprefix)のは良いスタイルだと思われます。

事例 3

HUGINのランタイムでは、 ノードとそれらのステートの記述を保存するために、いくつかの追加フィールドが使用されます。これらはHR のprefixのついたフィールドです。

node T
{
states = ("yes" "no");
label = "Has tuberculosis?";
position = (25 275);
HR_State_0 = "Yes, the patient HAS tuberculosis.";
HR_State_1 = "No, the patient has NOT tuberculosis.";
HR_Desc = "Represents the fact that the patient has tuberculosis or not.";
}

モデルの構造

構造(すなわち、元となるグラフのエッジ)が、間接的に指定されます。2種類のエッジがあります:有向エッジと無向エッジ。

事例 4

これは、有向エッジの代表的な指定です:

potential ( A | B C ) { }

これは、ノード A が2つの親: BC を指定します。 つまり、 B から A への有向エッジと、 C から A への有向エッジがあります。

モデルは、無向エッジを含むこともあります。このようなモデルは、連鎖グラフ・モデルと呼ばれます。

事例 5

potential ( A B | C D ) { }

これは、 AB の間に無向エッジがあるこを指定します。さらに、常に AB の両方が CD を親として持つことを指定します。

親がない場合、垂直バーは省略できます。

無向エッジで接続されたノードの最大集合は、連鎖グラフ・コンポーネントと呼ばれます。

すべてのグラフが許可されるわけではありません。下記の制限が、ネットワークの構造に強制されます。

グラフは、いかなる(有向の)循環も含むことはできません。

事例 6

次の指定は循環 A → B → C → A のため許可されません:

potential ( B | A ) { }
potential ( C | B ) { }
potential ( A | C ) { }

しかしながら、次の指定は有効です:

potential ( B | A ) { }
potential ( C | B ) { }
potential ( C | A ) { }

事例 7

次の指定は、循環 A → B → C ~ AAC の間のエッジは "双方向"としてカウントする)があるので許可されません:

potential ( B | A ) { }
potential ( C | B ) { }
potential ( A C ) { }

しかしながら、次の指定は有効です:

potential ( A | B ) { }
potential ( C | B ) { }
potential ( A C ) { }

連続確率ノードは、インフルエンス・ダイアグラムでは許可されません。すなわち、効用ノードや決定ノードも含むネットでは、連続ノードは不可です。

効用ノードは、グラフ中にどのような子も持つことがありません。これは、効用ノードが垂直バーの(右ではなく)左側のみに現れることを含意します。

無向エッジは、離散確率ノードの間にのみ現れることができます。

連続ノードは、連続ノードのみを子として持つことができます。

決定ノードが垂直バーの左側に現れる場合、それは1つだけ現れるはずです。この場合、いわゆる情報リンクが指定されます;このようなリンクは、決定がなされるべきときに、どの変数がわかているかを指定します。

事例 8

,2つの決定ノード D1D2 と3つの離散確率変数A, B および C を持つインフルエンス・ダイアグラムを指定したいとします。まず A が観察され、そして決定 D1 がなされ;そして、 B が観察され;最後に決定 D2 がなされます。このイベントのシーケンスは、以下のように指定できます:

potential ( D1 | A) { }
potential ( D2 | D1 B ) { }

最後にnode-, decision- または utility-指定によって宣言される前に、どのノードもいかなるpotential-指定でも参照されることはありません。

ポテンシャル

我々は、モデルの定量部も指定する必要があります。この部分は、確率変数の条件付き確率関数と効用関数が仮定できる値からなります。したがって、離散確率、連続確率、および効用ポテンシャルを区別します。

ポテンシャルのすてべのタイプは、potential-指定の中括弧の間の数値指定で異なります。

事例 9

次の記述は、"Chest Clinic" 事例からで、離散変数 T の条件付き確率表を指定します:

potential ( T | A )
{
data = (( 0.05 0.95 ) % A=yes
( 0.01 0.99 )); % A=no
}

これは、Asia への旅行を仮定して、tuberculosis(結核)の確率が 5 %であり、一方、 被験者がAsiaに行っていない場合、それがたったの 1 % であることを指定します。データ・フィールドは、数字の非構造化リストとしても指定できます:

potential ( T | A )
{
data = ( 0.05 0.95 % A=yes
0.01 0.99 ); % A=no
}

この事例が示すように、potential-指定のデータ・フィールドによって、数値データが指定されます。このデータは、実数のリストの形式を持ちます。 このリストの構造は、子ノードが続く親ノードのノード・リストを持つ多次元表の構造に対応するか、あるいは、まったく無構造なフラット・リストであるかのいずれかのはずです。データ・リストの"レイアウト" は、row-majorです。

事例 10

potential ( D E F | A B C ) { }

この potential-指定のデータ・フィールドは、次元リスト <A, B, C, D, E, F>を持つ多次元表に対応します。

効用ポテンシャルのデータ・フィールドは、垂直バーの右側のノードの次元だけを持ちます。

事例 11

次の記述は、"Oil Wildcatter" 事例からで、効用ポテンシャルを示します。 Drillpay が効用ノードで、一方、 Oil は3つのステートを持つ離散確率ノードで、 Drill は2つのステートを持つ決定ノードです。

potential (Drillpay | Oil Drill)
{
data = (( -70 0 ) % dr
( 50 0 ) % wt
( 200 0 )); % sk
}

このpotential-指定のデータ・フィールドは、次元リスト<Oil, Drill>を持つ多次元表に対応します。

連続確率ポテンシャルのデータ・フィールド中の表は、垂直バーの右側にある離散確率ノードの次元を持ちます。すべての離散確率ノードは、垂直バーの右側の最初に一覧されなければなりません(それから連続ノードが続きます)。ただし、多次元表内の項目は、もはや値ではなく、連続分布関数です。現在のところ、ガウス型正規分布が使用できます。正規分布は、その平均と分散で指定できます。次の事例では、連続確率ぽtン社ルが記述されます。

事例 12

A が、離散確率 BC を親に持つ連続ノードであるとします。 BC も2つのステートを持ちます: B はステート b1 と b2 、そして C はステート c1 と c2 を持ちます。

potential (A | B C)
{
data = (( normal ( 0, 2 ) % b1 c1
normal ( 3, 2 ) ) % b1 c2
( normal ( 1, 2 ) % b2 c1
normal ( 2, 2 ) )); % b2 c2
}

このpotential-指定のデータ・フィールドは、次元リスト <B, C> を持つ表です。各エントリーは、連続ノード A の確率分布を格納します。

上記の事例のすべてのエントリーは、ガウス型正規分布(現在利用可能な唯一の連続分布)を格納します。 正規分布は、2つのパラメータのリストが続くキーワード normal で指定されます。最初のパラメータは平均で、2つ目のパラメータは正規分布の分散です。

事例 13

この事例では、 A が1つの離散親 B と1つの連続親 C を持つ連続ノードだとします。B はステート b1と b2 を持ち、C は正規分布を持ちます。

potential (A | B C)
{
data = ( normal ( 1 + C, 2 ) % b1
normal ( 1 + 2 * C, 2 ) ); % b2
}

この potential-指定のデータ・フィールドは、次元リスト <B> (B は、垂直バーの右側に最初に一覧される離散親のみ)を持つ表です。各エントリーは、再び A の連続分布関数を格納します。A でのC の影響は、正規分布の平均パラメータを指定する数式での C の使用に由来します。

正規分布の平均パラメータのみが、数式として指定できます。分散パラメータは、定数でなければなりません。数式中で可能な演算子は、 +, - および * (加法、減法、乗法)です。

決定ノードは、関数が割り当てられないので、データ・フィールドを持つことができません。したがって、決定ポテンシャル指定は、本当にポテンシャルを指定するのではなく、むしろ情報リンクの指定のためのトリックです。

データ・フィールドがpotential-指定から省略された場合、1のリストが離散確率ポテンシャルのために供給され、一方、ゼロのリストが効用ポテンシャルのために供給されます。連続確率ポテンシャルについては、平均と分散が両方とも 0 に設定されて正規分布のリストが供給されます。

離散確率ポテンシャルのデータ・フィールドの値は、非負の数のみを格納できます。連続確率ポテンシャルの正規分布の指定において、分散パラメータは非負の数のみが可能です。効用ポテンシャルの値または正規分布の平均パラメータでは、そのような制約はありません。

グローバル情報

信念ネットワークまたはインフルエンス・ダイアグラム全体に関する情報が、記述の始めに指定でき、キーワード net で初期化されます。

事例 14

net
{
node_size = (100 40);
}

これは、ノードが幅100および高さ40で表示されることを指定します。この情報は、 Hugin GUIで使用されます。

現在のところ、node_size フィールドのみが、 net-指定のために定義されています。ただし、ノードと同様、必要なあらゆる追加フィールドを追加することができます。

事例 15

net
{
node_size = (100 40);
MY_APPL_my_field = "1000";
}

この指定は、 MY_APPL_my_field と名づけられた application-指定フィールドを持ちます。

事例 16

Hugin GUI の最新バージョンは、application-指定フィールドの系列を使用します。それらのいくつかをここに示します:

net
{
node_size = (80 40);
HR_Grid_X = "10";
HR_Grid_Y = "10";
HR_Grid_GridSnap = "1";
HR_Grid_GridShow = "0";
HR_Font_Name = "Arial";
HR_Font_Size = "-12";
HR_Font_Weight = "400";
HR_Font_Italic = "0";
HR_Propagate_Auto = "0";
}

Hugin GUI は、すべてのフィールドで プレフィックス HR を使用します。

表記法

名前は、Cプログラミング言語での識別子と同じ構造です。これは、名前が文字で始まる文字や桁の非空シーケンスであることを意味します。この文脈では、アンダースコア文字 ( _ ) は、文字としてみなされます。 大文字・小文字は区別されます。名前を形成する文字や桁のシーケンスは、可能な限り続けられます; それは最初の非文字/非桁文字(たとえば、カッコや空白)で終了します。

文字列は引用文字 ( " ) または改行文字を含まない文字のシーケンスです;その開始と終了は、引用文字によって示されます。

数字は、桁のシーケンスが続くオプショナル記号からなり、小数点文字を含むことが可能で、場合によっては符号付き整数が続く'E' または 'e'を含むオプショナルな指数フィールドを含みます。

ネットの記述内のどこにでもコメントを置くことができます(名前、数字、またはその他の複合文字表記エレメントの途中を除く)。それは空白と同等とみなされます。コメントは、パーセント文字 ( % ) で導入され、行の終わりまで続きます。

Row-major表現

表のrow-major表現での特定のコンフィギュレーションに対応する値を見つけるために、我々はには、 0 から s-1 の値をインデックスします。ここで、s は、リスト中の値の数です。ノードの対応するリストが (A1, A2,..., An) であり、ノード Ai が 0 から si-1 にインデックスされたsiステートを持つとします。すると、

math_size

我々が欲しいのは、コンフィギュレーション (a1, a2,..., an) のインデックスです。ここで、 ai のステート・インデックスが ji (0 ≤ ji ≤ si-1) であるとします。すると、 x は次式で計算できます。

math_index

ここで

math_a