犀角(Diceros Horn)

とくながの「書き散らかし」です

ここは研究・調査・開発などの記録がメインのページです。 日常の雑事、読書記録は はてなダイアリー の方に書いています。よろしければそちらもどうぞ。

Mon, 11 Jun 2007

スケールフリーネットワークシミュレータ

WSモデル、BAモデル、オリジナルモデル についてシミュレーションプログラムを統合しました。

使い方

モデルを選んで、パラメータを与えて、Initialize ボタンを押してください。 その後、Update ボタンを押せば、シミュレーションをステップ実行します。 ただし静的なモデルについてはなにもしません。 次数分布は Log 表示可能です。

Pagerank Central Laplacian ボタンでそれぞれグラフから決まる行列の 最大固有値の固有ベクトル(の絶対値)を頂点の半径に比例させて表示させます。 Pagerank は「グラフの推移確率行列*0.9 + すべての行成分が 1/頂点数の定数行列 * 0.1」 の行列について固有値を計算しています。本来は有向グラフについて計算すべきですが、 無向グラフについても双方向に推移できる対称的な有向グラフとして計算しています。 Central はボナチッチの中心性指標すなわち隣接行列の最大固有値の固有ベクトル を求めるものです。ボタンを押し続けると、2番目に大きい固有値の固有ベクトル、 3番目に大きい固有値の固有ベクトル、の順に徐々に小さな固有値 に付随する固有ベクトルの成分を可視化します。Degree ボタンで戻ります。 今どのモードなのかを示すために、頂点の色とボタンの文字の色を一致させています。 Degree(次数=デフォルト)以外では Update ボタンで更新しても自動的には計算しません。 毎回ボタンを押しなおしてください。押したときに、右上の通常次数分布が表示されるグラフは 固有値の分布になります。

モデルの説明

Barabasi Albert Simulator
Barabasi Albert のスケールフリーモデル
Watts Beta Model
Watts Storogatz のスモールワールドモデル
Erdos Renyi Model
JUNG に付属のモデル
Eppstein Power Law Model
JUNG に付属のモデル
Kleinberg SmallWorld Model
JUNG に付属のモデル
Apriori Power Law Model
ベキ則に従う次数分布を与えて、そこからグラフを作る
Unlink Smaller Degree
頂点数ははじめから固定し、初期状態はWSのレギュラーグラフ。 1ステップごとに、乱数でリンクをひとつ選択して、端点のうち次数の小さい方のノードを別のノードに付け替える。ただし、次数が1の時は付け替えない。付け替えるノードは、自分自身及びすでにリンクのあるノードは除いて、ノードの次数に比例した確率で選ぶものとする。(優先的選択)
Clusterize Simulator
ランダムグラフからはじめて、次数分布を変えずにクラスタ係数が局所的に大きくなるように辺を付け替える。
ScaleFreeInit Clusterize
上と同じだが、初期状態を Barabasi Albert のスケールフリーネットワークからはじめる。
Link More Common Neighbor
ランダムグラフからはじめて、リンクを共通の近傍がより大きくなるようなノードに付け替えていく。

履歴

2006/6/14
Pagerank とボナチッチの中心性指標を可視化する機能を追加
2006/6/12
モデルをいろいろ追加
2006/5/21
Watts Storogatz モデルにバグを発見したので直す
2006/5/6
グラフ可視化アルゴリズム SpringLayout 以外に KKLayout を追加。切り替えられるようにした。SpringLayout のパラメータも変更可能。JNLP 版ではセキュリティの関係で動かないが、Pajek 形式のファイルを出力する機能、グラフ画面を Jpeg で出力する機能(バグ残っているけど)を追加
2006/3/5
いくつかの不具合を修正。設計の若干の見直し。オリジナルルール Node Concentrate モデルの見直し。ベキ則が現れるようになった。ベキ則が現れることの条件として、Barabasi Albert モデルからノードが新たに加わることが条件のように書いてある本も多いが、そうとは限らないことの反例になるかな。
2006/1/6
いろいろなシミュレーションを統合
2006/1/1
対数目盛表示を追加
2005/12/31
クラスタ係数の計算を追加
2005/12/24
オリジナルルールを追加
2005/11/30
JUNG を使って作り直す
2005/11/5
BAモデルのプロトタイプ作成
2005/11/3
クラスター度の計算を追加
2005/10/30
隣接行列の固有値を計算する(現在この機能は削除中)
2005/10/23
WSモデルのプロトタイプ作成

リンクする場合は http://www.tokunagakenichi.net/Program/ScaleFree/index.html にどうぞ。

2007/06/11追記

1年ほど触っていませんでしたが、中部地方の学生さんからネットオークションの研究の参考にしたいと、コメントをいただきました。どのように発展するのか楽しみにしています。

posted at 23:37 | category: /Program/ScaleFree | 固定リンク(スケールフリーネットワークシミュレータ)

Mon, 06 Mar 2006

プログラム集

ここでは以前に教育または研究目的で作成したプログラム、プライベートで作ったプログラムを置いています。ただいま整理中です。

リンクする場合は URL は http://www.tokunagakenichi.net/Program/ でお願いします。

posted at 00:49 | category: /Program | 固定リンク(プログラム集 )

Sun, 19 Feb 2006

プラネタリウム

天球のシミュレーション (Java Web Start)

恒星の位置を取得して、プラネタリウムのようなものを Java3D で作ってみました。6等星まで表示するようになっています。 恒星のデータは外部のXMLファイルで記述してあります。

履歴

2003/6/22
恒星の位置情報をXMLファイルで記述して、直径20の球面上に 星を配置してプラネタリウムのようなものを作る。

参考リンク

posted at 16:44 | category: /Program | 固定リンク(プラネタリウム)

花火のシミュレーション

花火のシミュレーション (Java Web Start)

夏の風物詩といえば花火ですが、それを Java3D でシミュレーションしようと思う。 できれば玉にどのように火薬を詰めるか、 どの方向に爆発させるかなどについえもシミュレーションできるようにしたい。

種類

よく言われる打ち上げ花火(正確には「打ち上げ玉」)の中にも、 割物、ポカ物、昇り曲、仕掛け花火などがあり、 代表的な割物の中にも、菊、牡丹、冠、千輪、などがある。 詳しくは参考文献を見てほしい。

色は金属の炎色反応で決まる。 紅色は炭酸ストロンチウム、緑色は硝酸バリウム、 黄色はシュウ酸ソーダ、青色は酸化銅、 白色はアルミニウムなどを使うらしい。

シミュレーション

花火を飛ばすための「割薬」と、光を出すための「星」を 「玉皮」の中に詰めることによって、玉ができる。 Java3D によるシミュレーションではこの玉を BranchGroup とし、 そのなかにいろいろな星を Shape3D として addChild することにする。

適当なキーを押すと開始し、スペースキーを押すと止まります。 マウスによって、視点を動かせるので、花火が上がっている中を小型セスナで アクロバット飛行をする気分が味わえます。

参考文献

posted at 16:34 | category: /Program | 固定リンク(花火のシミュレーション)

絡み目の計算

絡み数の簡易計算 (Java Web Start)

絡み数を計算するプログラム。多角形を三角形に分割して それぞれの三角形で絡み目を計算してそれらを足しています。 三角形同士が干渉しあうことの判定はもっと速いものもあるでしょうが、 ここでは正確さを重視しています。

履歴

2004/11/07
とりあえずバージョン。四角形に対して三角形を動かした場合に 絡み数を随時計算するようにする。

使い方

マウスでグリグリしてください。 白い三角形が動きます。赤い四角形との絡み目を計算して表示します。 視点は変えられません。表示された辺で上下関係は見てください。

posted at 16:02 | category: /Program/Knot | 固定リンク(絡み目の計算 )

輸送問題

輸送問題をステップ実行するプログラム(Java Web Start)

m個のの供給地からn個の需要地へ物資を輸送する場合、 各供給地から需要地への輸送費と各供給地の供給量、 各需要地の需要量が与えられているとき、 どの供給地から需要地にどれだけ物資を輸送するのがコストが最も少なくなるか。 この問題を考えるのが輸送問題である。

このプログラムではそれを飛び石法を用いて解くことにする。 まず供給地の個数と需要地の個数を入力する。 するとコスト表と輸送量の表が現れる。 その表に必要な係数を入力して、「次のステップ」ボタンを押すと、 標準的な手順にしたがって、飛び石法で解を求めていく。

飛び石法で基底変数を変換する場合、そのループの場所の色を変えています。 輸送量の表の右下のセルに全輸送コストを表示しています。

解が退化する場合はメッセージを出して終了します。 その場合は供給量、需要量を摂動させて もう一度始めから解いて下さい。

posted at 15:31 | category: /Program/OR | 固定リンク(輸送問題 )

PERT

PERT Simulator(Java Web Start)

いくつかの作業をまとまりとして見るときそれをプロジェクトと言い、 作業リストからプロジェクトの日程計画をたてることを考える。 作業リストにはその作業を始めるのに既に終了しておかなくてはならない 作業(先行作業)と、所要時間から構成される。このときそれぞれの作業が いつから始めることが可能か、余裕があるかどうかを調べる。

ここでは作業リストを与えて、次のものを求める。

  • 最早開始時刻(ES)
  • 最早終了時刻(EF)
  • 最遅開始時刻(LS)
  • 最遅終了時刻(LF)
  • 全余裕(TF)
  • 自由余裕(FF)
まず最初の画面では作業の個数を選択する。次に作業リストを与える表が現れるので、 所要時間を記入し、先行作業のところにチェックをいれる。その後、『PERT実行』 と言うボタンを押せば上の値を求めて表として表示する。

まだ日程計画としてつじつまがあっていないとき (先行作業をたどって行くとループになるときなど) の例外処理はしていない。最悪無限ループに陥る可能性がある。 また、ダミー作業を挿入する方法が一意でないときの処理も いい加減である。その辺は注意して利用してほしい。

ひょっとしたらバグが残っているかもしれない。 見つけた人は教えてほしい。

posted at 15:20 | category: /Program/OR | 固定リンク(PERT )

シンプレックス法

シンプレックス法をステップ実行するプログラム(Java Web Start)

初めの画面では変数の個数と条件式の個数を入力する。 変数はスラック変数も含める。条件式は目的関数は含めない。 [ENTER] ボタンを押すと、シンプレックス表の画面に切り替わる。 ここで、シンプレックス表を入力する。左端の行は目的関数 (z) の係数、右端は定数を入力する。[STEP] を押すと1段階ごとに シンプレックス法を実行する。[RESET] を押すと、はじめの画面に戻る。

実行するときに実行可能基底解を表す表からはじめなければ、正しい答えは保証 されません。2段階シンプレックス法や罰金法などを用いて調整して下さい。

一般的な流儀では定数項を一番左に書いたり、目的関数を一番上に書いたりする かも知れませんが、その場合は適宜読みかえて下さい。

posted at 15:15 | category: /Program/OR | 固定リンク(シンプレックス法 )

ベータ分布

ベータ分布乱数生成プログラム(Java Web Start)

ベルヌイ分布に関するベイズ推測を行うと、 事後分布としてベータ分布が現れる。そこでベータ分布の 勉強をかねて、乱数生成プログラムを作成。

履歴

2003/11/03
乱数生成アルゴリズムおよび簡単なインタフェイス作成

実行形式

a,b の値を入力し、[SET PARAMETER] ボタンを押すと、 確率分布が更新される。START ボタンを押せば乱数が生成されます。結果はヒストグラム表示され ます。試行回数によってヒストグラムの幅は自動的に調整されます。

これだけで終わっては仕方ないので、KL距離を計算したり、AIC を計算したりする プログラムに発展させていきたいな。

posted at 15:04 | category: /Program/Math | 固定リンク(ベータ分布 )

正規分布

正規分布の数値計算(Java Web Start)

正規分布表が手元にないときに代わりに数値計算するプログラムです。

posted at 14:53 | category: /Program/Math | 固定リンク(正規分布 )