安定結婚問題をD3.js force layout で表示

D3.jsで表現するシリーズ。以前、安定結婚問題のブログを書いたけれど、

安定結婚問題のアルゴリズム - skzy's diary ... もろもろ書きのこす

安定結婚問題のアルゴリズムをD3.jsのforce layoutのノードの動きで表現してみました。

アルゴリズムそのまんまではなく、ノードの動作に沿って実装しているので、若干の不備があるかも知れないが、試してみると結構動きが面白い。

各人の好みの順序リストは均一なランダムで作成しているけれど、実際には人気は少数に集中していたりする。実装の中の、

var x=aveRandom(n-j,1);

というところの1を大きくすると、列の真ん中にいる人(例えば、10人だったら、5,6番目)に人気が偏る好みの順序リストができる。

これでアルゴリズムを実行してみると、当たり前なんだけれど、人気者同士がカップルになる、という社会の縮図を感じてしまう。

すべてを平等にはできない。しかし完全な階層化ではなく、多少は多様性があったほうが面白いわけで、じゃあ、階層的な順序に対し、どれぐらいのランダムな多様性が入ると、社会によい影響を与えるのか、っていうことに興味がある今日この頃である。

というわけで、D3.jsすばらしい。