Open1

サブグラフを生成する自動微分のアニメーション自前実装

msakutamsakuta

サブグラフを生成する自動微分でノードが次々に生まれてくるのを可視化したくて次のようなアニメーションを作りました。

しかしながら、 Graphviz は静的グラフの描画に特化したレンダリングエンジンであり、アニメーションのフレーム間の関連がないため、毎回ノードが動いてしまって見にくくて仕方がありません。そこで自前でグラフ描画して位置をコントロールすることを考えました。

Rust では image クレートが画像の描画にはよく使われるのですが、 gif アニメはサポートされていないので、 gif クレートを使ってみます。

まずは祖先の世代数と同じ世代の兄弟の数でグリッド上に配置してみます。ピクセルバッファに直接書き込んでいるため文字列は描画できず、矩形と直線だけで何となく雰囲気を醸し出してみます。 TapeTerm::gen_graph_cb メソッドはコールバック関数を引数に取り、新たなノードが生まれるたびに描画の機会が訪れます。ここでフレームを追加すれば徐々にグラフが成長していくアニメーションになるというわけです。

確かにノードの位置は安定しましたが、エッジがノードを平然と横切るので依存関係を見て取るのは難しいです。