Research

Publications

査読付き国際会議で発表した論文。

研究テーマ:自己組織化による環状化合物の選択的生成のシミュレーション

シミュレーション画像1 シミュレーション画像2

研究の背景・目的

特定の分子が自発的に集まり、秩序だった構造を形成する「自己組織化」という現象がある。本研究では、ある化学反応において、なぜ完璧な選択性で四角形の環状化合物だけが生成するのか、その起源を明らかにすることを目指している。

  • なぜ直線やその他の構造ではなく、四角形だけが選択的に作られるのか。
  • なぜ原料の濃度を高くしても、選択性が落ちずに効率よく反応が進むのか。

※選択性とは?
化学反応における「選択性」とは、いくつかの反応が起こりうる状況で、特定の化合物だけが優先的に作られる性質のことである。

アプローチ

本研究における私の役割は、この化学現象を再現するためのシミュレーションモデルを設計し、C++ と物理演算ライブラリ PhysX を用いて実行・分析することである。複雑な化学反応のメカニズムを解明するため、現実の分子を単純な剛体モデルに置き換え、それらが空間内でどのように振る舞うかをシミュレーションで観察する。

具体的には、現実の分子を単純なモデルに置き換え、いくつかの物理的な制約(ルール)を与えた状態でシミュレーションを行う。ユニット同士の相互作用と構造形成の過程を追跡することで、化学的な詳細ではなく「形」と「結合ルール」だけから何が再現できるかを切り分けている。

このシミュレーションで分かること

本シミュレーションの重要な点は、「単純なルールだけで、現実世界で観測されるような高い選択性が再現できるか」を検証することにある。シンプルなモデルでも四角形構造が優先的に生成されれば、完璧な選択性は分子の複雑な化学的性質ではなく、基本的な「形」と「結合ルール」に起因するという強力な証拠になる。

また、シミュレーション空間内のユニットの密度を変化させることで、「高濃度でも選択性が落ちない理由」についても、物理的な観点から明らかにできると期待している。

研究で開発したソフトウェア

研究遂行の過程で書いた、公開可能な範囲のリポジトリ。論文の数値結果はこれらのコードで生成している。

macrocycle-rigid-body-sim

論文の本体となる物理シミュレータ。大環状分子を剛体粒子の鎖として近似し、結合長・結合角・二面角といった幾何条件を D6Joint で課して時間発展させる。Iwamoto ら(2024)が提示した解析モデルを数値的に検証するために書いた。

GitHub: mogmog-0110/macrocycle-rigid-body-sim →

Tech Stack

  • C++17 / CMake
  • NVIDIA PhysX 5.6.1(剛体ダイナミクスと D6Joint)
  • OpenGL + freeglut(リアルタイム可視化)
  • RAII を徹底した構造、ヘッダ分離、Warnings-as-Errors(/W4 /WX)でコンパイル

実装している主な機能

  • 剛体粒子の鎖と、結合長・結合角・二面角を保つ D6Joint compliant mode の組み合わせ
  • 26 個のゴーストアクターによる周期境界条件(PBC)の近似
  • 結合グラフを UnionFind で解析し、環の連結性・サイクル数をフレーム毎にトラッキング
  • MSER による定常状態の自動検出と、定常区間に絞った統計量算出
  • マルチレプリカ・バッチ実行と乱数シード制御による再現可能なアンサンブル
  • 独自バイナリフォーマット .pxrf(Adler-32 CRC 付き)でトラジェクトリを保存
  • 記録済みトラジェクトリのリプレイ機能(描画用と解析用を分離)
  • JSON 設定ファイルからシナリオを駆動するランナー
  • ヘッドレス実行モード(CI と長時間計算用)

品質と再現性

  • 112 ユニットテスト(GoogleTest)でジョイント・PBC・グラフ解析・MSER の各レイヤを検証
  • 固定シードと決定論的ステップで、論文の図表をそのまま再生成できるようにしてある
  • 厳格コンパイル設定と静的解析で、リリースビルドでも警告ゼロを維持

mser-cpp

上記シミュレータの解析側として書いた、MSER(Marginal Standard Error Rule)の単独実装。シミュレーションが定常状態に達したフレームを統計的に判定するためのアルゴリズムで、長時間トラジェクトリから過渡状態を捨て、定常区間だけを集計する処理を自動化している。スタンドアロンのライブラリとして切り出してあるので、他のシミュレーション系プロジェクトからも使い回せる。

GitHub: mogmog-0110/mser-cpp →