wakita / symdoc

Document Synthesis Project Based on Symbolic Algebra System
GNU General Public License v3.0
2 stars 3 forks source link

総合演習実験 #1

Open wakita opened 7 years ago

wakita commented 7 years ago

@Shimizu07190 @tanakaht @kabe7 総合演習実験で困ったことがでてきたら,ここに書いて下さい.

ディレクトリの構成ですが,この symdoc リポジトリは元々は一年前の論文(第一週に渡したもの)のシステムの例題集です.古い例題になりますが以下の例は演習をやる参考になるでしょう.

第二週に紹介した t3d.py の例題は,symdoc17 に置いてあります.こちらを使って下さい.

wakita commented 7 years ago

Sympy の基礎はここで学ぶといいです.

http://www.scipy-lectures.org/packages/sympy.html

wakita commented 7 years ago

総合演習実験参加のみなさんからの積極的な反応がないので,こちらからサポートすることができません.どんな風に取り組んでいるのか,どこで躓いているのか,ときどき(二日に一度ほど)こちらに報告を書いて下さい.

wakita commented 7 years ago

Windows のために open に encoding 指定を追加すること.

wakita commented 7 years ago

http://www.scipy-lectures.org/intro/language/python_language.html

kisabe commented 7 years ago

平方根のドキュメントを自動生成するプログラムnr_sqrt.pyを作成しました。 私のリポジトリのsymdoc/symdoc17に置いてあります。 気になる点や改善すべき点などあれば教えていただけると助かります。

tanakaht commented 7 years ago

私も同じくsqrt.pyを作成しました。 同じく私のリポジトリのsymdoc/symdoc17に置いてあります。 気になる点や改善すべき点などあれば教えていただけると助かります。

wakita commented 7 years ago

今日のミーティングで相互にレビューし合いましょう.

Shimizu07190 commented 7 years ago

ギリギリになってしまいましたが私もsqrt.pyを作成しました。 今日はよろしくお願いします。

kisabe commented 7 years ago

風邪を引いてしまったため、今日の演習に出ることができません。申し訳ないです。

wakita commented 7 years ago

@kabe7 どうぞお大事に

wakita commented 7 years ago

今日は,ひととおりレビューをしました.みなさん,よくできていました.基礎は整ったと思うので,いよいよ KK 法に挑戦しましょう.

SymPy の本格的なドキュメントです. http://docs.sympy.org/latest/index.html

wakita commented 7 years ago

IndexedBase, Idx あたりが大切です.

kisabe commented 7 years ago

kk法を実装できたのでテストケースを試してみたのですが、6粒子の最適化に40分近くかかりました。もっと短くできないか考えてみます。

ドキュメントを作る際に図があると嬉しいと思うのですが、自動生成するhtmlファイルに図(png,jpeg,gif等)を挿入することは可能でしょうか?

wakita commented 7 years ago

以下に研究室の別のシステムで使っているコードを貼り付けました.参考にして下さい.

https://gist.github.com/wakita/25d76329633d76436fb9202ca576801b

このコードはさまざまな実験パラメターについて複数のレイアウトアルゴリズムを適用していることと,時系列データについて各時点でのグラフ描画を PDF ファイルのページに描いている点で,みなさんの要望を越えたスペックのものです.

22 行目あたりの for 文は複数の描画アルゴリズムに対するループです.みなさんは KK 法のみですから,これは不要でしょう.

32 行目あたりの for 文は時系列データの各時点ごとに描画するためのループです.これも不要でしょう.

描画で肝心なのは 31行目 (PDF ファイルの作成),36 行目(X, Y 座標の確定),38-52 (グラフの描画),61-62 (PDF ファイルへの書き込み完了)くらいです.

詳しいことは matplotlib の解説で勉強して下さい.出力で PDF を使うのは珍しいです.普通はウィンドウを表示したり,PNG ファイルに保存します.ぼくらが PDF を使っているのは,時系列データから生成される画像が散乱しないようにひとつのファイルにまとめ書きしたかったからです.複数ページに対応する唯一の画像フォーマットが PDF のようです.

matplotlib@scipy lecture notes: http://www.scipy-lectures.org/intro/matplotlib/index.html ご本家のドキュメント: https://matplotlib.org/users/index.html

Matplotlib のドキュメントは読みにくいと思います.でも,仕様が頻繁に変っているので,古い情報はあてになりません.我慢して読んで下さい.わからないことは質問して下さい.

wakita commented 7 years ago

@kabe7 くん,あなたのコードを見ていないのでよくわからないのですが,40分というのはいくらなんでも遅すぎるように思います.もしかして,ループのなかで繰り返し SymPy の計算や lambdify を使っているんじゃないでしょうか.つまり,40分のほとんどを SymPy の計算に費やしているんではないでしょうか.KK の計算に必要なのは lambdify された関数です.その関数の引数で,その都度,最適化したい頂点あるいは頂点番号を受け取るような仕様になっていれば,一度生成した関数を再利用できるはずです.もしも,ぼくの予想が当っていれば,以上のテクニックで100倍以上高速化できるでしょう.

wakita commented 7 years ago

コードを変更する前に,まずは SymPy 部分の計算1回に要する時間を測定し,それが何回実行されるのか計測してみて下さい.

wakita commented 7 years ago

時間の計測方法はこんな感じ

from time import time as current_time
start_time = current_time()
# 重い計算
print("かかった時間: {}".format(current_time() - start_time)
kisabe commented 7 years ago

ご指摘ありがとうございます。 lambdifyの回数をできるだけ減らし、minimizeで2n頂点の最適化を一気にやるようにしたところ、6頂点の最適化が1分以内で実行できました。 jacobian,hessianに対してsimplifyを実行するとすごい時間がかかるのですが、無理にやらなくてもいいのでしょうか。

Shimizu07190 commented 7 years ago

初歩的な質問になってしまいとても申し訳ないのですが、Idx,IndexedBaseの使い方や何を表すクラスなのかが、ドキュメントを読んでも理解が中々進みません。他に使用例が分かりやすく書いているサイト等あるでしょうか。

wakita commented 7 years ago

プログラミングで悩んだら stackoverflow です.

https://stackoverflow.com/search?q=sympy+indexedbase

kisabe commented 7 years ago

ひとまず、kk法のドキュメントを作りました。画像がうまく入っているか少し心配です。 ヘッシアンの表示がやたら長く汚いので出来ればどうにかしたいと思ってます。

wakita commented 7 years ago

これを応用できますでしょうか.

http://docs.sympy.org/latest/index.html/modules/simplify/simplify.html#sympy.simplify.cse_main.cse

基本的には replacements -> reduced_exprs な写像を使って,hessian.subs(dict(zip(replacements, reduced_exprs))) とかしたら,簡単化できるかなと思います.

wakita commented 6 years ago

みなさん,風邪が長引いているために本日のミーティングはキャンセルとさせて下さい.

wakita commented 6 years ago

直前の通知になってすみません.