Difference between revisions of "ALPS using Python/ja"

From ALPS
Jump to: navigation, search
m (Text replace - "http://alps.comp-phys.org/static/tutorials2.1.0" to "http://alps.comp-phys.org/static/tutorials2.2.0")
(Pythonの起動)
Line 18: Line 18:
  
 
<!--which sets the paths needed to find the ALPS extensions and then calls your Python interpreter.-->
 
<!--which sets the paths needed to find the ALPS extensions and then calls your Python interpreter.-->
このスクリプトは、ALPSの拡張機能を利用するためのパスを設定し、Pythonインタラプタを呼び出します。
+
このスクリプトは、ALPSの拡張機能を利用するためのパスを設定し、Pythonインタプリタを呼び出します。
 
<!--If, on the other hand, you install the binary ALPS package for MacOS or Windows you will need to download and install also Vistrails since the ALPS packages were built against the Python interpreter shipped with Vistrails. To do so call-->
 
<!--If, on the other hand, you install the binary ALPS package for MacOS or Windows you will need to download and install also Vistrails since the ALPS packages were built against the Python interpreter shipped with Vistrails. To do so call-->
  

Revision as of 04:40, 21 May 2014


Pythonを利用したALPSプログラムの実行

Pythonを利用して、シンプルな古典モンテカルロシミュレーションをおこないます。MC法チュートリアルのMC-02も参考にしてください。

Pythonの起動

Pythonの使用には標準拡張機能を用いてください。たとえば、LINUX上でALPSをソースからビルドする場合には、ALPSのビルド構成を決めるときにPython インタプリタを選択できます。ALPSはalpspythonスクリプトを生成します。

alpspython

このスクリプトは、ALPSの拡張機能を利用するためのパスを設定し、Pythonインタプリタを呼び出します。

また、MacOSやWindows上でALPSバイナリをインストールする場合は、Vistrailsも同時にインストールする必要があります。ALPSパッケージはVistrailsに同封されているPythonインタラプタに対してビルドされています。呼び出すときは次のコマンドを用います。

vispython

Vistrailsの使用を望まなくても、Vistrailsのような巨大なパッケージのインストールを要求されることに対して疑問に思うかもしれません。しかし、Vistrailsアプリケーションの内容物のほとんどはライブラリやPythonモジュールです。そしてこれらのモジュール群はALPSに必要なのです。ALPSのインストーラをVistrailsに非依存にすると、結局Vistrailsと同じ規模のサイズになってしまいます。

詳細な手順

ALPSモジュールのインポート

Python起動後にインポートが必要となるモジュールは、

import pyalps
import matplotlib.pyplot as plt
import pyalps.plot

すべてのPythonスクリプトが収められたチュートリアルはこちらを参照してください。

入力ファイル 

物理パラメータを含んだシミュレーション情報を次の用に指定してインプットファイルを準備します。

parms = []
for t in [1.5,2,2.5]:
   parms.append(
       { 
         'LATTICE'        : "square lattice", 
         'T'              : t,
         'J'              : 1 ,
         'THERMALIZATION' : 1000,
         'SWEEPS'         : 100000,
         'UPDATE'         : "cluster",
         'MODEL'          : "Ising",
         'L'              : 8
       }
   )


次に、シミュレーション用の入力ファイルを指定します。

input_file = pyalps.writeInputFiles('parm1',parms)

全シミュレーションファイルに対して'parm1'を設定します。例の指定では、メインのシミュレーションファイル名は'parm1.in.xml'となります。

シミュレーションの実行

シミュレーションの実行(シリアル)

runApplication関数を用いてシミュレーションを実行します。

pyalps.runApplication('spinmc',input_file,Tmin=5,writexml=True)

パラメータwritexml=Trueは、全計算結果をXMLファイルに出力する事を意味します。それによって、I/O処理が増大しますが、計算結果が容易にwebブラウザで確認できます。大規模な系の計算をおこなう場合は、出力が巨大になり処理時間が遅くなります。

シミュレーションの実行(並列)

MPIを用いて並列シミュレーションをおこなう場合は、次のように記述してください。

pyalps.runApplication('spinmc',input_file,Tmin=5,writexml=True,MPI=4)

MPIのプロセッサー数はMPI引数で与えます。

シミュレーション結果のロード

計算結果の取得

計算結果をロードする前に、結果ファイルのリストを得る必要があります。次のコードを見てください。parm1の結果リストを生成しています。

result_files = pyalps.getResultFiles(prefix='parm1')
print result_files

計算結果のロード

次に、どのような物理量が計算されたのか知るために、物理量リストを読み込むことができます。

print pyalps.loadObservableList(result_files)

例として、magnetizationの平均値、二乗値をロードし、選択した物理量を書き出します。

data = pyalps.loadMeasurements(result_files,['|Magnetization|','Magnetization^2'])
print data


計算結果のプロット

例えば、温度に対する|Magnetization| をプロットする場合、y軸に|Magnetization| 、x軸に温度Tを選択します。

plotdata = pyalps.collectXY(data,'T','|Magnetization|')

Python matplotlibを利用したプロット

matplotlibを使用したプロットが可能です。以下のように記述してください。

pyalps.plotモジュール:

plt.figure()
pyalps.plot.plot(plotdata)
plt.xlim(0,3)
plt.ylim(0,1)
plt.title('Ising model')
plt.show()

フォーマット変換

データセットをテキスト、grace、gnuplotなど、他のプロットフォーマットに変換が可能です。

print pyalps.plot.convertToText(plotdata)
print pyalps.plot.makeGracePlot(plotdata)
print pyalps.plot.makeGnuplotPlot(plotdata)

データ解析

Binder cumulant比 \langle m^2 \rangle / \langle |m|\rangle ^2 などの計算結果を容易に解析することができます。以下のように記述します。


binder = pyalps.DataSet()
binder.props = pyalps.dict_intersect([d[0].props for d in data])
binder.x = [d[0].props['T'] for d in data]
binder.y = [d[1].y[0]/(d[0].y[0]*d[0].y[0]) for d in data]
print binder

d[1].y[0]/(d[0].y[0]*d[0].y[0])のようにモンテカルロ平均値を用いた式を書くと、ジャックナイフ法を用いて自動的に統計誤差の伝搬を計算します。図の作成を行うために次のように記述します。


plt.figure()
pyalps.plot.plot(binder)
plt.xlabel('T')
plt.ylabel('Binder cumulant')
plt.show()

サンプルスクリプト

全シミュレーション過程を記述したスクリプトファイル tutorials/intro-01-basics/tutorial-full.py .


以下に、各過程別に記述したスクリプトを紹介します。

実行とプロット

詳細な解析

サブタスクに分割

計算の前準備、シミュレーションの実行、結果の解析は各サブタスクとして分割ができます。これらはVisTrailsの代わりとして実行が可能です。

その他の例

チュートリアルには、様々な関数や高度なアプリケーションの使い方が用意されています。__doc__メンバを使用して、様々な機能のドキュメントを見ることができます。次のように記述してください。


print pyalps.plot.plot.__doc__