# 進捗報告 2020/11/16 ## 前回 ### シミュレーション条件 粒子数 $\rm{N} = 36$ ステップ数 $\rm{step}=1000$ 溶液温度 $T \simeq 300$ ( $[K]$ ではない。大きさの目安) 溶液濃度 $C \simeq 0.3$ (面積あたりの粒子数) 質量 $M = \rm{arm\_num} \times \rm{arm\_len} = 2.1, 2.8, 4.2$ 熱運動:各粒子は $\mathcal{N} (0,a\sqrt{T/M})$ の正規分布でx,y方向に移動する。 熱運動の比例定数 $a = 0.01$ 分子間力:「結合粒子間距離 $d$ 」および「1未満の粒子間距離 $d$ 」について、$d$ を $1$ に近づける。先述の粒子が近づく方向に $(d-1) \times b/M$ だけ移動する。 分子間力の比例定数 $b = 0.6$ 評価値:最大の液滴に結合するモチーフの数 ### 問題点 溶液濃度が評価値に与える影響が大きすぎて、それ以外のパラメータが比較できなかった。 * $C < 0.2:$ 評価値は $\rm{N}/10$ 未満 * $C > 0.3:$ 評価値は理論値 $\rm{N}$ (全粒子が結合) ### 原因 #### 溶液濃度が小さい時に結合が発生しない問題 * ステップ数不足 * 溶液濃度が低いと粒子が散らばっているため、結合が起こるには $\sqrt{M/T}$ に比例するステップ数が必要である。 * 今回は温度が実質9倍にしたが、評価値が安定するのは1000ステップ程度から。前回は安定までに3000ステップ程度必要だったと思う。 #### 溶液濃度0.3を超えたあたりから評価値が理論値(N)に到達する * 濃度が高い * 前述の通り。この濃度ではモチーフが孤立する方が難しい。 * 熱運動が小さい * そもそも、分離もあまり起こらなかったと思う。 ### その他 $C > 0.3$ において、評価値は理論値に到達し、比較不能になってしまう。 当初は解決のために評価基準を増やすつもりだった。特に、ゲル的なモチーフを低く評価するような評価基準(例:粒子の分離した回数)を新たに設けることを考えていた。 しかし、シミュレーション条件を変更すると、評価値が理論値に到達しなくなり、比較可能になった。問題が解決したため、評価基準の追加は見送った。 ## 今回 パラメータの設定を見直した。 ### シミュレーション条件 粒子数 $\rm{N} = 100$ ステップ数 $1000<\rm{step}<10000$ 溶液温度 $T \simeq 300$ 溶液濃度 $C = 0.05$ 質量 $M = \rm{arm\_num} \times \rm{arm\_len} = 2.1, 2.8, 4.2$ 熱運動の比例定数 $a = 0.03$ 分子間力の比例定数 $b = 1.1$ ### 変更した理由 * 粒子数 $\rm{N} = 36 → 100$ * プログラムの計算量は$O(\rm{N^2})$だが、$\rm{N} < 144$ では実行時間 $t_\rm{exe}\propto\rm{N}$だった。特に $\rm{N} \simeq 100$ が効率的だった。$(t_{\rm{exe,\ N}=36}:t_{\rm{exe,\ N}=100}=1:2)$ * 溶液濃度 $C \simeq 0.3 → C = 0.05$ * DNA液滴の形成時、モチーフは水中に偏在している。液滴周辺に観測範囲を絞ったシミュレーションだとしても、$C > 0.3$ は高いように感じた。一時的に $C = 0.05$ で固定した。 * 実験における濃度、またはシミュレーションにおける濃度について、データや知見があれば教えてください。 * 熱運動の比例係数 $a = 0.01 → 0.03$ * $300<T<400$ で評価値が大きく下がるように調整した。 * 分子間力の比例係数 $b = 0.6 → 0.52 →1.1$ * モチーフの分散温度 $T_d$ と$M (\propto \rm{arm\_num})$ が佐藤さんの論文のデータにしたがうとき、モチーフの腕の数によらず粒子間距離の分布が一定になると仮定し、数式的に $b$ の値を求めた。(仮定の正当性は不明なので、結局いろいろ値を試している。) * 距離 $1$ で結合する2粒子の $1\rm{step}$ 後の粒子間距離の分布は $\mathcal{N}(1,2a\sqrt{T/M}\times(1-2b/M))$ * $\rm{arm\_flex}$ を実装にすると最適な $b$ の値はまた変わりそう。 ## 進捗 * シミュレーション条件の変更 * 前回の問題点が解決した。 * チューニング * $T=300$ が $300[K]$ に近づいた。 * パラメータの値に対する感覚が良くなった。 * 高速化 * 結合する粒子を探索するアルゴリズム $O(\rm{N^3})→O(\rm{N^2})$ * 不要な機能を除外 * 1000ステップあたりの実行時間↓ | | 前回 | 今回 | | :--------: | --------: | --------: | | $\rm{N=36}$ | $1.0$ | $0.47$ | | $\rm{N=100}$ | $4.0$ | $0.88$ | * $\rm{arm\_flex}$ の実装方法を考えた * 粒子の結合(最大$\rm{arm\_num}$個)ごとに配位角度(最大$\rm{arm\_num}-1$個)を計算し、適切な角度に向かうような復元力を粒子に与える。 * 計算量は$O(\rm{N\times arm\_num^2})$ * numpyの行列演算があまり利用できずに計算時間がかかりそう。