列車ダイヤ簡易評価ツール・マニュアル
Manual of Simple Train Schedule Evaluator

This page contains the usage of Simple Train Schedule Evaluator.

Recently I have made a change, and updated to version 4.0 alpha; it can now run on Cygwin environment.

Last modified: 27 April 2001
列車ダイヤを評価してみよう、というページです。

ソースを久しぶりにいじくり、Ver. 4.0 alpha ということにしました。 こういうのを Windows で動くようになった、とはいわないかも知れませんが、 取り敢えず Cygwin 環境の中でなら動いています。

最終更新 2001. 4. 27.

目次



はじめに

このプログラム「すうじっく」C++版は、 列車ダイヤおよびOD需要データが与えられたとき、 極めて簡単な仮定のもとにそれぞれの列車に乗客を割り付け、 列車ダイヤに関する種々の評価量を計算するものです。 アルゴリズム上その先人のツール (古い PC-9801 の MS-DOS 上で走るもの。 Turbo Pascal で記述されていた) を参考にはしたものの、 コードは完全な高木のオリジナルとなりました。 すべて C++ で書かれております。

トップに戻る

特徴

  1. 乗客 F1 に関する前方検索、 および乗客 F2 に関する後方検索ができます。 乗客 F1、F2 については後の記事を参照下さい。
  2. 特にパス検索部分については、 基本的にあらゆる線形(ライン状、ネットワーク状など) に対応できるようにコードを書いたつもりです。
  3. すべてのデータファイルはテキストファイルですので、 エディタで簡単に見て編集することができます (このこと自体は自慢にならないですが)。 また、 半角 # 以下改行までをコメント行として扱うことができますので、 とかく数字の羅列でわかりにくくなりやすいデータファイルを 少しでもわかりやすく書くことができます。
  4. ちょっと Memory Eater です。 また、 所要時間も少々かかりますので、 ちょっと駅数を多くすると駄目になるかも知れません。 一応所要時間を減らす おまじないも含めてみましたが……
トップに戻る

考え方

プログラムの構造

schedeval というプログラムは次のような構造をしています。
  1. 与えられたダイヤデータから、 駅ごとに到着・出発時刻表を求め、 時刻順にソートした上で蓄えます。 ダイヤは周期性があることを前提にします。
  2. パスを前方検索します。 任意の2駅を出発および到着駅とするペア (ODペアといいます)すべてについて、 出発駅側の出発時刻表にある列車1つ1つを起点とし、 順に到着駅までたどってゆきます。 発見したパスのなかから適切なものを選び、 保存します。
  3. パスを後方検索します。 ほぼ前方検索の逆を行います。
  4. ダイヤを評価します。 ODデータをもとに乗客を列車に割り付けて行きます。 同時に、 トレインアワー・カーアワーや乗客1人あたりの損失量などを計算します。
トップに戻る

行動仮説 F1、F2

行動仮説 F1、F2 とは次のようなものです。
F1
乗車駅にランダム(一様分布)に到着し、 目的駅に到着するまでの交通不効用が 最も少なくなるパス(列車)を選択する。
F2
目的駅に到着したい時刻が(一様分布)に与えられ、 この時刻以前に目的駅に到着する列車の中で 最も交通不効用の少ないパスを選択する。
仮説 F1 は通勤輸送を行っているような都市近郊路線で、 時刻を気にせず利用できる程度の 列車頻度が確保されている場合に近いもの。 F2 はどちらかというと特急利用者のように 時刻を調べて予め乗り込む場合に近く、 都市間輸送向きのモデルです。

なお、 一般に「交通不効用」というばあい、 列車内の混雑状況などを加味しなければなりませんが、 このプログラムでは列車の混雑に関係する要素 (例えば、 300%以上は物理的に乗ることが不可能、 とか、 150%以上の混雑率となると乗客が混雑回避行動を始める、 など) は一切考慮せず、 乗客がこの行動仮説に基づいて 「乗りたいように乗る」場合の行動を計算します。

このため、 このプログラムは混雑率400%といった 非現実的な値も平然と出力しますが、 これは「乗りたいように乗ったらこうなる」 ということを意味しています。 このようなダイヤは、 逆にいうなら混雑していて 「乗りたいように乗る」ことが結果的にできないダイヤであり、 よくない評価が与えられる、 ということでもあります。

トップに戻る

パス検索アルゴリズムと各パスへの乗客の割り付け

このプログラムでは、 行動仮説 F1 に従う客 (以下では頻繁に「乗客 F1」と記述します) のパスを検索する動作を「前方検索」、 行動仮説 F2 に従う客 (同様に「乗客 F2」) のパスを検索する動作を「後方検索」と称します。

トップに戻る

前方検索

前方検索においては、 ODペアの起点駅の発車列車 (複数あります) から順にパスをたどってゆきます。 各停車駅においては、 計算された接続関係行列を利用して、 利用可能な列車をツリー状に探ってゆきます。 ツリー状の検索は、
  1. 検索を深くやり過ぎた(このパスを捨てる)
  2. すでに発見したパスより評価が悪いことが歴然としている (このパスを捨てる)
  3. 列車が目的駅に到達した(このパスを採用)
  4. 乗換の結果、 同一列車種別だが周期遅れの列車にパスが到達した (このパスを捨てる)
の4つのどれかに当てはまるまで続けられます。

このようにしますと、 各発車列車について可能性のあるパスが 「すべて」検索されることでしょう (これを全パス検索と呼ぶことにします)。 次いで、 各発車列車について、 この全パス検索されたものの中から選択可能なものを 選び出す作業をします。 それは次の順序で行います。

  1. 到着駅到着時刻が早い
  2. 到着駅までの乗換回数が少ない
  3. 到着駅までの乗換所要時間の総和が少ない (乗換所要時間とは、 乗換のために駅構内などを 徒歩で移動しているような時間のことをいいます)
  4. 到着駅までの待ち時間の総和が少ない (ここでは、 乗換所要時間、 および出発駅で各利用者にとって ちょうどよい時間に列車がないことによる無駄時間は考慮しません)
これだけの条件を持ち出しても2つのパスに差がない場合、 1つの出発列車に対して2パスが存在することを認めます (「すうじっく」では、 認めていませんでした)。

このようにして、 各出発列車ごとにパスが決まりますが、 これらのうち捨てるべきパスが存在する場合があります。 それは、 出発列車が後であるにもかかわらず 着駅での到着時刻がより早くなる場合 (具体的にいうなら「通過追い抜き」される場合) です。 この場合は、 追い抜かれるほうのパスをリジェクトします。

こうしてパスがすべて決まりますが、 決まったパスに割り付ける乗客数は次の式で与えられます。

ただし、
トップに戻る

後方検索

後方検索においては、 ODペアの終点駅の到着列車 (複数あります) から順にパスをたどってゆきます。 基本的には前方検索の逆をやることです。 例えば、 ツリー状の検索は、
  1. 検索を深くやり過ぎた(このパスを捨てる)
  2. すでに発見したパスより評価が悪いことが歴然としている (このパスを捨てる)
  3. 列車が目的駅に到達した(このパスを採用)
  4. 乗換の結果、同一列車種別だが周期進みの列車にパスが到達した (このパスを捨てる)
の4つのどれかに当てはまるまで続けられます。 このうち前3者は前方検索と同じルール、 最後の1つだけが周期「遅れ」から「進み」に置き換わっています。

各発車列車について、 この全パス検索されたものの中から選択可能なものを 選び出す作業の優先順位は次のようになります。

  1. 出発駅出発時刻が遅い
  2. 出発駅からの乗換回数が少ない
  3. 出発駅からの乗換所要時間の総和が少ない (乗換所要時間については前方検索の項目を参照のこと)
  4. 出発駅からの待ち時間の総和が少ない (ここでは、 乗換所要時間、 および到着駅で各利用者にとってちょうどよい時間に 列車がないことによる無駄時間は考慮しません)
ここでも最初の「到着駅」が「出発駅」になり、 「到着駅到着時刻が早い」が 「出発駅出発時刻が遅い」になっているだけです。

各出発列車ごとにパスが決まったのち、 捨てるべきパスを選ぶ基準も同様で、 到着時刻が前であるにもかかわらず発駅での発車時刻が遅くなる場合、 追い抜かれるほうのパスをリジェクトします。

決まったパスに割り付ける乗客数は次の式で与えられます。

ただし、

時隔の計算は、 今回の場合一つ後のパスとの時隔となることに注意してください。

トップに戻る

プログラムのコンパイレーション

プログラムは UNIX のいわゆる tar 形式のアーカイブとして、 圧縮をかけた状態で曽根・古関研の高木のホームディレクトリの下に 置いてあります。 アーカイブの中にはサンプルデータファイルもあります。 以下の操作は、 すべて端末エミュレータ (kterm など) をひらいて、 その中で行うものです。

トップに戻る

必要なソフトウェア

Linux のような UNIX 互換 OS をインストールしたパソコン、 ワークステーション等、 あるいは Microsoft Windows 95, 98, Me, NT, 2000 などの走るいわゆる DOS/V マシンに、 Cygwin 環境をインストールしたものを、 ご用意下さい。

Linux については、 ディストリビューションを買ってきて、 パソコンにインストールしてください。 インストールに成功すれば、 あとはすぐにコンパイルに進めると思います。

Windows については、 Cygwin 環境をインストールしてください。 インターネットに接続できる環境であれば、 http://www.cygwin.com/ から、 setup.exe という名前のプログラムをダウンロードしてきて実行すれば、 ほぼ完全自動でセットアップが完了するはずです。

以下のソフトをインストールしてあることを前提に話を進めます。

高木は以下の環境で動作確認しています。

libg++ が不要になったので、 GCC のインストールの方法については解説を省略しました。

トップに戻る

アーカイブを開く操作

まずは、ログインして、 端末エミュレータか何かを開いてください。

Cygwin の場合、 デスクトップ上にある Cygwin のアイコンをダブルクリックすると、 Cygwin のコンソールウィンドウ (実はただの DOS 窓) が開きます。

Linux の場合は、 何らかの手段で端末エミュレータ (kterm とか rxvt とか) を開いてください。

そのコンソールの中で、

$ gzip -dc Diagram-4.0-alpha.tar.gz | tar xvf -
とすると、 Diagram-4.0-alpha というディレクトリの下にファイルが開かれます。そこで、
$ cd Diagram-4.0-alpha
として、 このディレクトリに降りてください。

make の実行

このディレクトリにある Makefile というファイルをみてください。 Cygwin 環境では、
LIBS	      = -lm # -lregex
となっているところを、
LIBS	      = -lm -lregex
のように直し、 regex ライブラリ (POSIX互換正規表現ライブラリ) をリンクする必要があります。 この修正を必要とする商用タイプの UNIX が他にいくつかあるようです。

この修正をしたら、

$ make
とすると、コンパイルされます。出来上がるプログラムは: の3つです。

これらは、サーチパスの通った適当なディレクトリに置くこともできますが、 このディレクトリにこのまま置いているものとして説明を続けます。

トップに戻る

データを用意する

データファイルのサンプルが sampledata ディレクトリ(注)の中にあります ので、 これを書き換えていただきます。

注……現時点ではプログラムが国際化対応していないため、 Cygwin 環境では日本語のコメントを挿入するのは避けてください。 サンプルは sampledata-e ディレクトリです。

その前に、

$ cp -pr sampledata data
などとして、専用のデータディレクトリ data をつくってその中で作 業されるとよいかも知れません。

用意するデータファイルにおいて、 # から行末まではコメントとして扱われます。 なお、 # の手前には必ず空白を入れて下さい (行頭にある場合は、構いません)。

ファイルの中のデータが必要数に比べ足りなかった場合や、多すぎる場合、 あるいは不正な値を記入した場合には、 なるべく安全にプログラムが停止するようチェックを行っています。 しかし、 プログラムがうまく動かない場合、 名前が表示されたファイルについて書き方に誤りがないかチェックしてみてください。

必要なファイルはここにある7つのファイルです。 エディタなどで書いていただきます。 このうち6つのファイルの名称は eval.datファイルの中で自由に設定できますし、 eval.dat ファイルについても schedevalプログラムの起動時に与える引数で変更できます。 しかし、 とりあえずここにあるファイル名で説明します。

トップに戻る

eval.dat

まず設定していただくファイルは全体の設定ファイル eval.datです。

ファイル名の設定に関しては、詳しくはこのファイルの中身を見て下さい。 このファイルを除いた残りの設定・出力ファイルの名称は、 すべてこのeval.datの中で変更することができます。

なお、駅での乗換の際に滞留する乗客の数を計算する機能については、 「駅乗換滞留乗客数を算出する駅番号」を負 (例えば -1) にすることでこの機能を殺して使用することができます。 その場合は、 この「駅番号」の次にあるファイル名も記述しないで (# 記号でコメントアウトするだけで大丈夫です) プログラムを走らせてください。

また、このファイルには評価に使用する重要なパラメータである 損失を金額換算する係数を記入する場所があります。

評価係数1
損失時間1分に対する損失(円/分)
評価係数2
乗換回数1回に対する損失(円/回)
評価係数3
立席乗車時間1分に対する損失(円/分)
評価係数4
待ち時間1分に対する追加損失(円/分)で、 評価係数1にプラスして用います。 つまり、待ち時間1分に対する損失は、 「評価係数1+評価係数4」(円/分)となります。
評価係数5
乗換所要時間1分に対する追加損失(円/分)で、 評価係数1にプラスして用います。 つまり、乗換所要時間1分に対する損失は、 「評価係数1+評価係数5」(円/分)となります。
トップに戻る

line.dat

路線設定ファイルです。 サンプルの中身を参考に記述してください。

まず最初に路線数を入力します。 ついで、 各路線ごとに 実効混雑度の出力ファイル名・ 駅数 および駅番号(最初がゼロで始まることに注意)を、 起点から順に記入していただきます。 駅数とその後に記述される駅番号の数があうように、 また、 駅番号は後で記述する駅データと整合するように作成してください。

このファイルは、 1路線しかない場合でも記述しなければなりません。 路線の方向と列車の走行方向の関係は自由に選べます。

トップに戻る

diagram.dat

ダイヤ設定ファイルです。 これも中身を見ていただければわかると思います。

まず最初にダイヤの周期(秒)、 列車数を入力します。 次いで、 列車の数だけ以下のデータを書き込みます。

第 N 列車について、 「セル数」 (要するに start-to-stop の回数のこと) をまず入力します。 プログラムはこの「セル数」データに頼って ファイルを読んでいきます。 各セルについて、 発駅・発時間、着駅・着時間、定員、座席定員、編成両数、 路線番号を入力して行きます。

時刻や時間は、秒単位の整数だけでなく「分:秒」もしくは「時:分:秒」の 形式で記述できるようにしてあります。 秒単位整数の形式で記述することもできますが、 このやり方では記述しにくいと思います。 時刻・時間を (時:)分:秒 で記述する場合、 コロンの前後にスペースを入れないようにしてください。 1:300:4 など、どのような記述も大丈夫です。 負の値の記述はしない方が安全です。 小数点以下を記述した場合も、 動作を保証できません。

時間は実時間で入れても、 いわゆる損失時分で入れても結構です。 ただし、 実時間で入れる場合 「基準時間ファイル」はオールゼロで設定することになります。

駅は番号(最初がゼロで始まることに注意)で入力して下さい。 路線も同様に番号で入力していただきますが、 隣接停車駅間走行中にある路線から別な路線に移ることがある場合、 特殊な書き方をします。

例えば、

 0   0:0  2   0:0 1000 360 8 0
と書けば、 この列車は0駅を時刻 0:0 に出て2駅に時刻 0:0 に到着し、 この間列車の定員は1000名(座席360)、 8両編成で、 0線上を走行することを表します。 また、
 0   0:0  6   0:0 1000 360 8 until 4 0 1
と書けば、 この列車は0駅を時刻 0:0 に出て6駅に時刻 0:0 に到着し、 この間列車の定員は1000名(座席360)、 8両編成で、 途中4駅まで0線上、 その後6駅までは1線上を走行することを表します。 until は大文字でも記述できます。 また、 until 4 0 until 5 1 2 のように入れ子にもできます。

トップに戻る

station.dat

駅データファイルです。駅の数、および名前を入力します。

駅名はローマ字、カタカナ、漢字の順に入力して下さい。 漢字・カタカナは半角を用いず、 漢字コードは EUC 漢字コードとして下さい。 漢字コードの設定方法は使用するエディタに依存しますが、 Mule を使う場合なら、ファイルの編集中に

M-x set-file-coding-system
とし、 ミニバッファにプロンプトが出たら *euc-japan*unix と答え、 その後でセーブすればそうなります。 ちなみに、 実際はこのファイルはグラフ書きなどの場面ではほとんど役に立っていません。 あえていえば、 最後の出力データファイルに漢字駅名が入るのがうれしいくらいです。 カタカナデータはどこでも使っていないと思います。 これは単に高木が面倒くさがったためです。 今後改良したいと思います。すみません。

トップに戻る

trftime.dat

乗換時間データです。列車から列車への乗換にかかる時間がゼロでない場合 に使用します。

はじめにデータ数を入力します。 データ数はゼロでも大丈夫ですが、 この場合「データ数ゼロ」ときちんとファイルに記述して下さい。 なお、ここに指定しない乗換については、乗換時間をゼロとして計算します。

1つのデータは4つの整数からなります。例えば、

10  0   1  300
は、第10駅で、0列車から1列車への乗換に、300秒かかることを表します。

stdtime.dat

基準時間データです。

このプログラムでは、複雑なパスでも可能なようにプログラムしたつもりでは ありますが、基準時間データファイルにおいては設定したすべての駅が少なく とも1本の線上にあるつもりで記述します(つまりこのあたりの思想が一貫し ていないということ)。

損失時間表示で評価する場合、各駅における実際の時刻は損失時間表示の時刻 にこのデータで与えられる時間を足したものになります。基準駅番号なるデー タがありますが、このデータは非負値を与えてある限り実質的にほとんど意味 を持たないはずです。

損失時間表示は、上り・下りの列車を同時評価する場合、あるいは複数路線が あるネットワークにおいて任意の2路線が2駅以上で交わっている場合などに問 題が生じる可能性があります。この場合はこのファイルを設定せず(最初の 「基準駅番号」を負値にする)、ダイヤデータファイルを実時間で与えればよ いことになります。パス検索は時間表示に依存しないはずです。

トップに戻る

od1.dat, od2.dat

乗客 F1, F2 の OD 表です。 全部のODペアについて、 diagram.dat ファイルで指定したダイヤ周期あたりの人数を指定します。

全体の需要は od1.datod2.dat の和であることに注意してください。

行列形式で入力していただきます。 当たり前ですが対角成分はゼロにしてください (データの数さえ合っていれば多分数値自体は無視しますから、 実害はないだろうとは思いますが)。 ゼロ成分も含め、正方形に記述して下さい。

整数でなくても記述できます。

トップに戻る

プログラムを走らせる

schedeval プログラムを走らせる

schedeval の名称は Schedule Evaluator の略のつもりです。 これを走らせれば、 ダイヤの評価ができる「はず」です。

データのあるディレクトリに降りてください。

$ cd /home/foo/data
そして、
$ ../schedeval eval.dat
とすることで、評価ができます。

評価出力は、 eval.dat の冒頭で指定するファイル名のファイルに出力されます。 サンプルでは output.dat になっていると思いますので、適宜ご変更をお願いいたします。

eval.dat の中身を変えたものをいくつか用意してある場合には、 起動時に eval.dat とある部分を別なファイル名に変更すればOKです。

トップに戻る

ijsearch, jisearch プログラムを走らせる

これらは、 schedeval プログラムの一部分をなすパス検索部分だけを取り出したものです。 ijsearch が前方検索、 jisearch が後方検索用です。

データのあるディレクトリに降りて行き、 そこにおいて schedeval と同様に

$ ijsearch
などとすることで、走らせることができます。

基本的にデバッグ用プログラムだったので、 ファイル名などは手入力です。 パス検索がうまくいっているか、 あるいはデータファイルがうまく書けているか のチェックにお使いいただけるのではないかと思います。

データファイルを使っていろいろに動作させ、 念入りなチェックをしてみて下さい。

トップに戻る

結果を見る

駅出発・到着時刻、接続関係

データから割り出された各駅での発車・到着時刻、 および列車間の接続関係は、 ファイル stntime.dat に記述されます。 例えば、 付属のデータを用いて計算させますと、 2駅の出発時刻表は次のように記述されています:
      0:   60( 0) [接続: 1(-420/-2)]
      1:  120(-1) [接続: 0(-360/-1)]
      2:  240( 0) [接続: 0(0/0), 1(-60/-1)]
最初の 0: 〜 2: は、 出発する列車の番号です。

次の 60( 0) などという数字の左側(括弧外)は、 時刻を表します。 到着時刻表の場合は到着、 出発時刻表の場合は出発です。

60( 0) の括弧内の数字は 「周期遅れ倍数」 と呼んでいるものです。 列車の時間は発駅から着駅に向かって積算されてゆきますから、 各駅での発車時刻を周期内 (0〜周期値) におさめるためには周期を適切に選ばなければなりません。 しかし、 これをすれば、 列車番号が同じでも実態としての列車はいくつも存在することになってしまいます。 そこで、ダイヤデータにおいて列車の発駅での周期遅れを0とし、 それより発駅を1本前に出る同一種別列車なら -1、 2本前なら -2、……、 あるいは1本後なら1、2本後なら2、……、 といった倍数を持たせておきます。 つまり、 列車番号と周期遅れ倍数を指定することで、 列車を特定することができます。

[接続: ……] とブラケット内に記述されている値は接続列車の関係を表します。 出発時刻表においてはその列車に乗り継げる到着列車を、 到着時刻表においてはその列車から乗り継げる出発列車を、 それぞれ示します。 1(-420/-2) などと表現されていますが、 この場合括弧外の1が列車番号、 括弧内の斜線の左側が時刻、 右側が周期遅れ倍数です。

トップに戻る

パス

選択されたパスは path.dat に記述されます。 パスの選択過程において候補がいくつか出てきますが、 すべての候補が pathsrch.log に書き出されています。

パスデータは前方パス、 後方パスで読み方が異なります。 前方パスにおいては例えば

 0駅   0> 0レ>   0: 2駅  0/ 240> 2レ> 240: 3駅
     乗換1回 0秒 待ち240秒/ 時隔120秒 (同一パス1列車)
のように記述されます。 これは、頭から順に
「0駅・時刻0発・0列車、時刻0に2駅着、乗換所要時間0秒、時刻240発の2列車 に乗り継ぎ、時刻240、3駅到着」
と読みます。 下には評価量関係のデータが記されます。

一方、後方パスにおいては例えば

 1駅 -60> 1レ> 120/  0: 4駅 240> 2レ> 240: 5駅
     乗換1回 0秒 待ち120秒/ 時隔360秒 (同一パス1列車)
のように記述されます。 これは、頭から順に
「1駅・時刻-60発・1列車、時刻120、乗換所要時間0秒、4駅で時刻240発の2 列車に乗り継ぎ、時刻240、5駅到着」
と読みます。 つまり、 前方と後方とで「乗換所要時間」の記される位置が少々異なることになります。

なお、 pathsrch.log というファイルに、 全パス探索の結果も含めて記述がなされます。 この場合、 全パス探索結果には時隔が表示されません。 これはパス相互間の時隔は当該ODペアについて最終的に選択されるパスが確定しないと、 時隔の計算もできないためです。

トップに戻る

その他出力

評価結果は output.dat に書き出されます。

output.dat に書いてありますが、 列車混雑率グラフを作るためのデータファイルが trconges.dat および conges.dat です。 gnuplot をグラフ書きに使う場合、プログラムが終了後

$ gnuplot
...
gnuplot> load 'trconges.dat'
とすると、 列車混雑率グラフが画面に現れるはずです。 路線ごとに1つずつ出力される実効混雑率グラフ conges00.dat, conges01.dat なども同様です。

実効混雑率については、 各路線の当該区間を走行する列車ごとに計算しています。

同様に、 駅構内滞留乗換客数のグラフも stnconges.dat ファイルで 同様にグラフ化できます。

トップに戻る

問題点

  1. いくつか本文中でも書きましたが、 パス検索・OD割り付けは路線の形状を問わず可能(なはず)なのに、 実効混雑度の計算はそうではない点は問題です。
  2. 路線形状は自由というのは実はウソで、 山手線のように列車が循環運転をするものには対応していません (周期遅れ倍数などに特殊な処理が必要なため)。

この他にもまだ隠されたバグがあるかも知れません。

トップに戻る

おわりに

プログラムに関し、 ご質問、 ご意見、 ご要望などありましたら小生宛ご連絡下さい。 特にバグレポートや、 「今回の演習のためこういう機能を付け加えたい」 というような具体的なご提案は大歓迎です。 バグレポートの場合はデータファイルを一緒にお送り下さい。

著作権関係

このプログラムは高木 亮が著作権を有します。 この他の条件等は、 いわゆる GNU Copyleft に従います。 プログラムのアーカイブにある COPYING というファイルをご覧下さい。

連絡先

高木 亮
E-mail: rt@takagi-ryo.ac
高木 亮 webmaster@takagi-ryo.ac
(c) R. Takagi 1996-2001. All rights reserved.