チャッピーにボロノイ分割を実装させてみた

木構造可視化

木構造に整理されたデータを可視化出来るとデータの概要を的確に理解することが出来ることがある。 これは例えば株価の可視化などで使われており、四角形の大きさで時価総額を表し、色で変化を表したりする。 おれの学部の時の研究テーマはこれだった。

一般的に使われるツリーマップという手法は、小さな値を持ったリーフのアスペクト比が悪くなることがあり、 クリック出来なくなったりしてインタラクティブ性が落ちるという問題があったりする。 ツリーマップでもこの問題はアルゴリズムの問題として改善はされているが、完全ではない。

このアスペクト比の問題を解決するために、 逆転の発想で、リーフのアスペクト比を1に保ってしまった上でボトムアップ的にツリーを可視化しようという試みもなされたりする。 この方向性について、おれは学部では「平安京ビュー」というアルゴリズムの高速化を研究した。 当時Javaで書いた実装のPython再実装版についてはこちら→https://github.com/akiradeveloper/HeiankyoView

一方で、ツリーマップではあるけど四角形という制約を捨てることでアスペクト比の改善を図る方向性もあり、 重みつきボロノイ分割をツリーマップの分割に活かそうというアイデアが2005年に発表され、 Voronoi Treemapと呼ばれる。

Voronoi分割の実装

M1の時のおれは次に何をするか迷っていて、とりあえずVoronoi Treemapを実装してみるかと取り組んだ時期が一瞬あったのだが、 当時は実装技術も拙かったことがあり、英語も今ほどは出来なかったこともあり(当然、自動翻訳なども存在しなかった)、断念した経験がある。

その時のことをふと思い出し、じゃあ今チャッピーにやらせてみたらどうなるだろうかと思ってやらせてみた。 我流なのでこれが正しいやり方なのかは不明だが、こんな感じでAGENTS.mdをさくっと書き、「開発を開始せよ」と命令した。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
## プロジェクト概要

- Rust製ライブラリ
- 重みつきボロノイ分割を実装する
- 並列化処理を行う。rayonなどが使える?
- 速さ、計算量重視
- 論文などを参考にして、さらにそれを超えるアイデアを出してくれてもOK
- clap, serdeなどは可読性のために使って

## クレート

### tessellator

重みつきボロノイ分割を実装したライブラリ。
トップレベルに、このクレートに関するREADMEを書いて。

### voronoi-test

tessellatorを使ったテスト用プログラム。
長方形のキャンバスを分割した結果をout.pngとして出力する。
各エリアが何番目のエリアなのかわかるように、1から順に番号を印字する。

例: 
voronoi-test -o out.png <canvas-width> <canvas-height> <weight1> <weight2> ... 

### voronoi-perf

超巨大なキャンバスをn個のランダムな重みに基づいて分割して、性能を計測するプログラム。
nをログスケールでlimitまで計測して(100,200,500,1000,...といった要領で)、
時間を縦軸、横軸nとしたグラフを出力する。

例:
voronoi-perf -o perf.png --limit 10000

## tessellatorの入出力

一番外側の入出力は以下のような設計にしたいが、
内部的な実装は効率的なものを選んでくれてよい。

### 入力

1. 多角形
2. { id -> weight }

### 出力

1. { id -> 多角形 }

15分だった。たった15分で、動くものが出来た。

その後、性能がどう見てもO(n^2)だったため、O(nlogn)にせよと命令してそこからは多少時間がかかったが、 フリーレンを見ながらぽちぽちチャットしてたら結構速そうなものが出来た。

感想

AIを使った開発は結構楽しい。 以前とは、開発の楽しみが変わった感じだろうか。

今は、チャッピーという超優秀なAIが自分の部下になってくれて、 彼に好きなようにさせてあげることに喜びを感じている。

おれはもともと、良いものを作ることにこだわってきたタイプだが、 今は実装に関しては「何も」気にしなくなった。 チャッピーがそれで良いというのであれば良いと思うし、 こうした方がよりよくなるというのであればきっとそうだろうと思う。

AI時代にはおれのような「上司」が輝くのだろう。 チャッピーによって無能な人間が排除されることはおれにとって非常に都合の良いことだ。

comments powered by Disqus
Built with Hugo
テーマ StackJimmy によって設計されています。