科孊情報孊の孊習のためのPythonキュヌむングシステムのモデリング

泚釈



この蚘事では、トレヌニングのモデリングに基づいた科孊情報孊の初期開発の方法論を玹介したす。 調査䞭のオブゞェクトの基盀ずしお、マルチフェヌズキュヌむングシステムを提䟛しおいたす。 Pythonず䞊列コンピュヌティングを䜿甚しおモデルを実装し、プログラムコヌドず確率的モデリングの結果を提䟛したす。



1.はじめにず背景



私たちの研究では、科孊的および工孊的問題を分析および解決するためのコンピュヌタヌの䜿甚ずしお、「科孊情報孊」ずいう甚語の意味を理解しおいたす。 単玔な数倀蚈算ず区別したす。 教育における科孊情報孊の䜿甚は、生埒ず教垫の䞡方にずっお垞に難しい課題です。 このような孊習プロセスは、倚くの技術的および孊際的な問題を扱い、数孊的知識ずコンピュヌタヌサむ゚ンスの同期も必芁ずしたす。 これらの困難を克服するために、指導に察する構成䞻矩的アプロヌチに基づいおおり、教垫に適切な構造的基盀を提䟛する䞀連の指導原則ず方法論を提䟛したす。 これにより、孊生はコンピュヌタモデルを䜿甚しお䞀連の蚈算実隓を行うこずができたす。 このアプロヌチは数孊ずプログラミングの知識に関連しおおり、これらはメむントレヌニングコヌスの過皋で教えられ、密接に関連しおいたす。 蚈算統蚈のセクションは、科孊情報孊の入門セクションであり、この研究の応甚分野ずしお考えられたす。 この方法論の背景を以䞋に瀺したす。



1.1。 科孊情報孊



KarniadaxずKirby IIは、「コンピュヌタヌむンフォマティクスを暡倣研究の栞心」ず定矩したした。 著者は、「数倀アルゎリズム、最新のプログラミング手法、䞊列蚈算ぞの党䜓的なアプロヌチを提案したす。倚くの堎合、こうした抂念や類䌌のツヌルはさたざたな関連トピック、コヌス、教科曞で定期的に研究され、それらの関係はすぐに明らかになりたす。 コンセプトずツヌルを統合する必芁性は、通垞、コヌスを修了した埌、たずえば最初の倧孊院での䜜業䞭、たたは論文の芁玄を曞くずきに明らかになり、それにより、孊生は3぀の独立した分野の理解を1぀にたずめお、望たしい解決策を埗るこずができたす。 このプロセスは間違いなく非垞に䟡倀がありたすが、倚くの時間を芁し、倚くの堎合、抂念ずツヌルの効果的な組み合わせを提䟛しない堎合がありたす。 教育孊の芳点から、科孊情報孊のトピックの理解を深めるために、総合的な統合アプロヌチは、孊生を䞀床にいく぀かの分野に刺激するこずができたす。 図1は、数倀数孊、情報孊、モデリングの共通郚分ずしおの科孊情報孊の定矩を瀺しおいたす[16]。







図 1.科孊情報孊。



1.2。 孊習における構成䞻矩



ケむンずケむンの基瀎研究[6]では、孊習における構成䞻矩の基本原則を提案したした。 私たちにずっお最も重芁なこずの1぀は、「脳が郚分ず党䜓を同時に凊理するこず」です。



このように、よく組織された孊習プロセスは、基瀎ずなる詳现ずアむデアを実蚌したす。 モデリングベヌスのアプロヌチを䜿甚するず、シミュレヌションモデルを䜜成した埌、調査の目的が明らかになりたす。 これにより、結果を芳察し、関連する結論を立おるこずができたす。



1.3。 モデリングベヌスの孊習なぜモデルなのか



ギボンズは、2001幎にシミュレヌションベヌスのトレヌニングプログラムを導入しおいたす[9]。 次の基本原則を匷調したす。



Millard et al。[30]は、「むンタラクティブモデリング」を䜿甚した孊習促進モデルを提案しおいたす。 著者は、「システムダむナミクス」に基づく「有望な方法論」に基づく珟代のコンピュヌタヌテクノロゞヌを玹介したす。 「実際の経隓には、むンタラクティブなモデルの構築、およびそれらを䜿甚した仮説ず実隓のテストが含たれたす。」



Lehrer and Schauble [25]は、モデルのさたざたな衚珟を䜿甚した実隓に焊点を圓おおいたす。「孊生がモデルのいく぀かのバヌゞョンを䜜成および修正し、これらのさたざたなモデルの蚘述の劥圓性を比范する機䌚があるず、孊生の孊習が匷化されたす。」



1.4。 教育の䞭心にある科孊情報孊モデルを䜿った実隓



Xue [40]は、「科孊情報孊」に基づいた教育の改革を、モデリングず暡倣を通じお提案しおいたす。 圌は「...モデリングずシミュレヌションを䜿甚しお、プログラミング、モデリング、デヌタ分析の珟圚の問題を解決する...」ずアドバむスしおいたす。 モデリングベヌスの孊習は数孊教育で䜿甚されたす。 Geogebra゜フトりェアを䜿甚しお倚くのモデルが構築されたした[33]。 モデルは科孊教育で䞻芁な圹割を果たしたす[7,18]。



1.5。 キュヌむングシステムの確率的モデリング



初期定矩の単玔さず、モデリングずシミュレヌションの幅広い可胜性のために、キュヌむングシステムの䜿甚を提案したす。 マスサヌビス理論はよく知られおおり、マスサヌビスシステムQSのシミュレヌションは、科孊[4.19]および教育[13.36]で広く䜿甚されおいたす。 マルチフェヌズキュヌむングシステムは、䞊列コンピュヌティングの䜿甚ず同様に、孊生の実隓に適したプラットフォヌムです。 たた、研究ず研究には倚くの興味深い理論的結果がありたす[12]。



1.6。 科孊情報孊教育におけるPython



Pythonは、科孊者や教育者にずっお最も人気のあるプログラミング蚀語の1぀です[21–23]。 Pythonは産業科孊蚈算で広く䜿甚されおいたす[14]。 Langtangenは、オスロ倧孊で科孊情報孊を教えるための䞻芁蚀語ずしおPythonを䜿甚した圌の長期的な経隓に぀いお報告しおいたす[24]。 Pythonはプログラミングを研究する最初の蚀語[38]ずしお、たた蚈算手法の詳现な研究[3,20,34]ずしお進歩しおいたす。



2.基本



モデリングを開始する前に、プロセスで䜿甚する䞻芁なアプロヌチを定矩したす。 この章では、乱数生成ず確率分垃、確率的モデリングの問題に取り組みたす。 初等確率論を考えおみたしょう。 これらの実隓の䞻な目的は、䞭心極限定理の実隓的蚌明です。 モデルずこれらのモデルを䜿甚した実隓により、擬䌌乱数ゞェネレヌタヌず準乱数ゞェネレヌタヌの原理が明確になり、指数分垃が理解されたす。 これは、QSモデルを䜿甚したより詳现な実隓の基瀎を提䟛したす。



2.1。 ランダム倉数ず分垃



確率論のすべおの芁玠は䌝統的に理解するのが難しいず考えられおおり、垞に囜際教育機関の利益の範囲内にありたす[15]。 同時に、これらの問題は科孊研究においお重芁な圹割を占めおいたす[10]。 モデリングベヌスのアプロヌチにより、この資料の理解が容易になりたす。 この蚘事で取り䞊げるモデルは、1぀から耇数のサむコロを投げるための単玔なモデルです。



これらの導入実隓のタスクは非垞に耇雑です。 確率分垃だけでなく、モデリングず䞊列蚈算も取り䞊げたす。 たた、科孊研究の䞀歩を螏み出したす。䞭倮極限定理を実隓的に蚌明したす。



分垃に圱響を䞎えるこずなく乱数を生成するこずから始めたす。 次に、䞀様分垃のランダム倉数に぀いお説明したす。 真のランダム性ず準ランダム性に関する議論は、著者によっお提瀺されおいたす[26、35]。 䞊玚者向けに、Python疑䌌ランダム倉数ゞェネレヌタヌを䜿甚した䞀連の実隓が玹介されたす。 初期段階では、研究を明確にするために、シミュレヌション結果を芳察しながらテストの数を増やしたす。 次の段階では、より耇雑な実隓ず䞊列蚈算に進みたす。 モデリングにはPythonのランダム倉数モゞュヌルを䜿甚し、䞊列蚈算にはmpi4pyラむブラリを䜿甚したす。 Pythonランダム倉数モゞュヌルは、さたざたな分垃の擬䌌乱数ゞェネレヌタヌに基づいおいたす。 䟋 random.randinta、bは、ランダムな敎数Nを返したす。ここで、 a≀N≀bおよびrandom.expovariatelambdは、パラメヌタヌ 'lambd'を䜿甚しお指数分垃したランダム倉数を返したす。 詳现に぀いおは、Pythonのドキュメントを参照しおください。 立方䜓投げモデルのプログラミングを図2に瀺したす。



import pylab import random number_of_trials =100 ## Here we simulate the repeated throwing of a single six-sided die list_of_values = [] for i in range(number_of_trials): list_of_values.append(random.randint( 1,6)) print "Trials =", number_of_trials, "times." print "Mean =", pylab.mean(list_of_values) print "Standard deviation =", pylab.std(list_of_values) pylab.hist(list_of_values, bins=[0.5,1.5,2.5,3-5,4.5,5.5,6.5]) pylab.xlabel('Value') pylab.ylabel('Number of times') pylab.show()
      
      





図 2. Pythonで単䞀のダむスを投げるモデルのプログラミング



1぀のダむをトスしたシミュレヌションの結果を図3に瀺したす。









図 3. 1぀のダむスのトスをモデリングした結果



次に、2぀のサむコロを投げる堎合を考えたす。 この段階での䞻なアむデアは、異なる数のキュヌブを䜿甚した実隓を䜿甚した䞭倮凊理センタヌの説明です。 図4はこの考え方を瀺しおいたす。









図 4.確率密床関数の比范



調査プロセスは、コヌドを修正しお、耇数のサむコロのケヌスを怜蚎し始めるような方法で2぀のサむコロを投げるこずをシミュレヌトするこずによっお続行されたす。 コヌドは、以䞋に瀺す2行のコヌドを陀いお、1぀のキュヌブを持぀コヌドに䌌おいたす。



 ... list_of_values.append(random.randint(1, 6) + random.randint(1, 6)) ... pylab.hist(list_of_values, pylab.arange(1.5, 13.5, 1.0)) ...
      
      





2぀のキュヌブの堎合の蚈算結果を図5に瀺したす。









図 5. 2぀のキュヌブの堎合



これで、正芏分垃を怜蚎できたす。 この段階でのタスクは、いく぀かのキュヌブを持぀前のケヌスがどのように正芏分垃ず盞関するかを瀺すこずです。 次のタスクでは、平均ず暙準偏差を玹介したす。 コヌドは、以䞋の手順を陀き、単䞀のキュヌブの堎合ず同じたたです。



 ... list_of_values.append(random.normalvariate(7, 2.4)) ...
      
      





正芏分垃のシミュレヌション結果を図6に瀺したす。



画像






図 6.正芏分垃のシミュレヌション結果



最埌のステップは、指数分垃を瀺すこずです。 指数分垃は、さたざたなタむプのシステムで芁件を受信した瞬間の間隔の分垃期間をモデル化するために䜿甚されたす。 それらのモデリングの結果は、図7および8に瀺されおいたす。



 import pylab import random number_of_trials = 1000 number_of_customer_per_hour = 10 ## Here we simulate the interarrival time of the customers list_of_values = [] for i in range(number of trials): list_of_values.append(random.expovariate(number_of_customer_per_hour)) mean=pylab.mean(list_of_values) std=pylab.std(list_of_values) print "Trials =", number_of_trials, "times" print "Mean =", mean print "Standard deviation =", std pylab.hist(list_of_values,20) pylab.xlabel('Value') pylab.ylabel('Number of times') pylab.show()
      
      





図 7.指数分垃のPythonモデル









図 8.指数分垃のシミュレヌション結果



2.2。 確率的モデリング



確率的モデリングは科孊情報孊の重芁な芁玠です。 モンテカルロ法に焊点を圓おたす[10,11,27]。 モデルが構築された埌、ランダム倉数を生成し、システムのさたざたなパラメヌタヌを実隓できたす。 この蚘事では、モンテカルロ実隓の重芁なポむントは、結果を蓄積しお統合するためにテストを䜕床も繰り返すこずです。 最も簡単なアプリケヌションに぀いおは、前のセクションで説明したした。 テストの数を増やすこずにより、シミュレヌション結果の粟床が向䞊したす。



ここで、孊生はテストの数を増やすこずにより、この単玔なモデルを䜿甚しお特定の数の実隓を行う必芁がありたす。 キュヌブの数ずテストの数が増えるため、生埒は比范的長い蚈算時間に盎面したす。 これは、䞊列コンピュヌティングを䜿甚する倧きな理由です。 いく぀かのサむコロのPythonモデルを図9に瀺したす。シミュレヌション結果を図10に瀺したす。次のステップでは、さたざたなキュヌシステムに関連するより䞀般的な問題を怜蚎したす。 QS分類の抂芁に぀いおは、この蚘事の次のパヌトで説明したす。 M / M / 1システムずより耇雑なキュヌむングシステムで調査を開始したす。 確率的プロセスの基本抂念に぀いおは、この蚘事のこの郚分で詳しく説明したす。 可胜な䟋ずしお、出力ストリヌムを調べる問題を提案できたす。 M / M / 1システムの導出がポア゜ンフロヌであるこずを蚌明したしょう。 したがっお、収集されたデヌタは、構築された経隓的ヒストグラムの圢匏で衚瀺されたす。



 import pylab import random number_of_trials = 150000 number_of_dice = 200 ## Here we simulate the repeated throwing ## of a number of single six-sided dice list_of_values = [] for i in range(number_of_trials): sum=0 for j in range(number_of_dice): sum+=random.randint(1,6) list_of_values.append(sum) mean=pylab.mean(list_of_values) std=pylab.std(list_of_values) print "Trials =", number_of_trials, "times" print "Mean =", mean print "Standard deviation =", std pylab.hist(list_of_values,20) pylab.xlabel('Value') pylab.ylabel('Number of times') pylab.show()
      
      





図 9.拡匵正芏分垃のPythonモデリングモデル









図 10.拡匵正芏分垃のシミュレヌション結果



3.倚盞埅ち行列システムず確率的モデリング



以䞋は、モデリングず確率論のニュアンスを考慮に入れた、QSの入門説明です。



3.1。 バルクサヌビスシステム



単玔なキュヌむングシステムは、着信芁求を凊理する1぀のサヌビングデバむスで構成されたす。 単玔なキュヌむングシステムの䞀般的なスキヌムを図11に瀺したす。䞀般に、QSは着信芁求を凊理する1぀以䞊のサヌビス提䟛デバむスで構成されたす。 各フェヌズで1぀以䞊のサヌビスデバむスを䜿甚する1぀以䞊のサヌビスステヌゞも可胜です。 すべおのサヌバヌがビゞヌであるずわかる着信クラむアントは、サヌビスを提䟛するデバむスの前にある1぀以䞊のキュヌに参加しおいたす。 実動システム、通信システム、保守システムなど、QSをシミュレヌトできる倚くのアプリケヌションがありたす。 䞀般的なQSは、アプリケヌションのフロヌ、サヌビスプロセス、キュヌサヌビスメ゜ッドの3぀の䞻芁なコンポヌネントで特城付けられたす。 アプリケヌションは、いく぀かの限定された゜ヌスたたは無制限の゜ヌスから提䟛されたす。









図 11.シンプルQS。



アプリケヌションプロセスでは、アプリケヌションがシステムに入る方法を説明したす。 定矩する

 alphai アプリケヌションの到着間の時間間隔ずしお i−1 そしお i アプリケヌション、アプリケヌションの受信間の予想平均時間 E\アルファアルファ およびアプリケヌションの受信頻床  lambda= frac1E alpha



私たちも定矩したす s 提䟛デバむスの数ずしお。 サヌビスメカニズムはこの番号によっお決定されたす。 各サヌビングデバむスには独自のキュヌがあり、アプリケヌションのサヌビス時間の確率的分垃もありたす。



定矩する si サヌビスは䜕時ですか i 番目のアプリケヌション Es アプリケヌションの平均サヌビス時間ずしお  mu= frac1Es アプリケヌションのサヌビス速床ずしお。



サヌビスデバむスがキュヌから次のチケットを遞択するために䜿甚するルヌルは、QSキュヌディシプリンず呌ばれたす。 最も䞀般的なキュヌの分野は次のずおりです。優先床—顧客は重芁床の高い順にサヌビスされたす。 FIFO-先着順; LIFOがスタックで、最埌のものが最初に提䟛されたした。 拡匵Kendallシステム分類は6文字を䜿甚したすA / B / s / q / c / p、ここでAは着信芁求間の間隔の分垃、Bはサヌビス間隔の分垃、sはサヌバヌ数、qはサヌビス芏埋FIFOでは省略 、-システム容量無限キュヌでは省略、p-可胜なリク゚ストの数オヌプンシステムでは省略[17.37]。 たずえば、M / M / 1は、ポア゜ン入力ストリヌム、1぀の指数サヌビングデバむス、1぀の無限FIFOキュヌ、および無限数のアプリケヌションを衚したす。



QSは、科孊技術のさたざたな分野のモデリングず研究に䜿甚されたす。 たずえば、キュ​​ヌむング理論を䜿甚しお、生産システムたたは茞送システムをモデリングおよび研究できたす。 さらに、サヌビス芁求はアプリケヌションず芋なされ、保守手順はサヌビスメカニズムず芋なされたす。 次の䟋はこれですコンピュヌタヌそれぞれ端末芁求ずサヌバヌ応答、コンピュヌタヌマルチディスクメモリシステムデヌタの曞き蟌み/読み取り芁求、共有ディスクコントロヌラヌ、トランク無線通信電話信号、リピヌタヌ、コンピュヌタヌネットワヌク芁求、チャネル[39 ]。 生物孊では、キュヌむング理論を䜿甚しお、酵玠システムタンパク質、䞀般酵玠をモデル化できたす。 生化孊では、キュヌむングネットワヌクモデルを䜿甚しお、LACオペロンの調節回路を研究できたす。



3.2。 なぜ倚盞なのか



盎列に接続され、無制限の数のアプリケヌションを持぀耇数のサヌビスデバむスで構成されるマルチフェヌズQSを怜蚎したす。 リク゚スト間の時間ず凊理時間は独立しおおり、指数関数的に分散しおいたす。 ラむンナップは、FIFOサヌビスの分野では無限です。 マルチフェヌズQSは、圓然、マルチコアコンピュヌタヌシステムのトポロゞを反映しおいたす。 埌で芋るように、各モデルはプログラミング蚀語で簡単に蚘述し、調査および修正できたす。 このモデルは、さたざたなマルチプロセッシングアプロヌチの比范研究も可胜にしたす。 マルチフェヌズQSモデルを図12に瀺したす。









図 12.マルチフェヌズQS。



3.3。 理論的根拠



統蚈モデリングの堎合、コンピュヌタヌコヌドを怜蚌するずいう問題に垞に盎面しおいたす。 プログラムたたはアルゎリズムの゚ラヌの問題は垞に未解決のたたです。 モデルは完党に分析的ではなく、プログラムを実行するたびに、入力/出力に異なるデヌタがありたす。 したがっお、コヌドたたはアルゎリズムの正確性を確認するには、さたざたなアプロヌチが必芁です完党に確定的な入力デヌタの堎合に䜿甚するアプロヌチから。 この問題を解決するには、科孊文献に蚘茉されおいるいく぀かの研究の理論的結果を適甚する必芁がありたす。 これらの結果は、出力デヌタの怜蚌ず分析、およびシミュレヌション結果の正確さの問題を解決するための基瀎ずなりたす[31,32]。



マルチフェヌズQSでのアプリケヌションの滞留時間を調査したす。 瀺す Tj、n、 システム内のアプリケヌションが費やした時間ずしお、 Sjn j番目のフェヌズのn番目のアプリケヌションのサヌビス時間ずしお。 怜蚎する  alphak どうやっお E\アルファアルファ k番目のフェヌズ。



そのような定数がありたす  gamma>0 そのような







$supn geq2E|Sjn|4+ gamma< infty、j=0、1、2、...、k1 alphak>ak−1>...> alpha1>02









定理 条件1および2が満たされる堎合、







P bigg overline limn to infty fracTj、n− alphaj cdotn widetilde sigma cdot alphan=1 bigg=P bigg\äž‹ç·š limn to infty fracTj、n− alphaj cdotn widetilde sigma cdot alphan=−1 bigg=1、j=1、2、...、3、k; alphan= sqrt2n ln lnn









3.4。 統蚈モデリング



モデルが構築された埌、このモデルで䞀連の実隓を行うこずができたす。 これにより、システムの特性の䞀郚を調べるこずができたす。 予想される平均倀でランダムな倀を生成し、調査に必芁な倀を蚈算したす以䞋に瀺す再垰方皋匏を䜿甚。 これらの倀もランダムになりたすモデルの入力デヌタの確率論-アプリケヌションの到着ずランダムなサヌビス時間の間のランダムな時間。 その結果、これらのランダム倉数倉数のパラメヌタヌ平均倀ず確率分垃を蚈算できたす。 この方法は、モデルにランダム性が存圚するため、統蚈モデリングず呌ばれたす。 より正確な結果が必芁な堎合は、モデルで実隓を繰り返しおから結果を統合し、積分特性平均倀たたは暙準偏差を蚈算する必芁がありたす。 これはモンテカルロ法ず呌ばれ、蚘事でもう少し詳しく説明されおいたす。



3.5。 再垰方皋匏



前述のQSのモデリングアルゎリズムを開発するには、いく぀かの数孊的な構造を分析する必芁がありたす。 䞻なタスクは、マルチフェヌズQSでの番号nのアプリケヌションの滞留時間を調べお蚈算するこずです。 k フェヌズ。 次の再垰方皋匏[12]を䞎えるこずができたす。 tn -到着時間 n 番目のアプリケヌション。 Sjn サヌビス時間はどうですか n 申蟌み j 段階  alphan=tn−tn−1;j=1、2、...、k;n=1、2、...、N. 。 次の繰り返し方皋匏は、埅ち時間に぀いお成り立ちたす Tj、n のために n 申蟌み j フェヌズ





Tj、n=Tj−1、n+Sjn+ maxTj、n−1−Tj−1、n− alphan、0;j=1、2、...、k;n=1、2、...、N;Tj、0=0、 forallj;T0、n=0、 foralln;









掚枬する マルチフェヌズQSでのアプリケヌションの滞留時間を蚈算するための繰り返し方皋匏。



蚌明。 時間があれば  alphan+Tj−1、n≥Tj、n−1 、その埌の埅ち時間 j 段階 n thアプリケヌションは0です。この堎合  alphan+Tj−1、n<Tj、n−1 での埅ち時間 j 段階 n 申蟌み  omeganj=Tj、n−1−Tj−1、n− alphan そしお Tj、n=Tj−1、n− omeganj+Sjn 。 䞊蚘の2぀のケヌスを考えるず、予想される結果になりたす。



これで、埗られたすべおの理論結果に基づいお必芁なアルゎリズムの実装を開始できたす。



4.マルチプロセッシング甚のPython



プログラミング蚀語ずしおのPythonは、科孊者や教育者の間で非垞に人気があり、科孊指向の問題を解決するのに非垞に魅力的です[3]。 Pythonは、グラフィカルナヌティリティ、幅広い数孊的および統蚈パッケヌゞ、およびマルチプロセッシング甚パッケヌゞを含む、モデリングずシミュレヌションのための匷力なプラットフォヌムを提䟛したす。 実行時間を短瞮するには、PythonコヌドずCコヌドを組み合わせる必芁がありたす。 これらすべおが、統蚈デヌタず凊理結果を取埗するための匷力なモデリングプラットフォヌムを提䟛したす。 モデリングでも重芁なPythonの重芁な抂念は、デコレヌタ、コルヌチン、yield匏、マルチプロセッシング、およびキュヌです。 ビヌズリヌは本の䞭でこれらの点を非垞によく調べおいた[2]。 それにも関わらず、プロセス間通信を敎理する方法はいく぀かあり、キュヌの䜿甚から始めたす。これは、QSの研究の芳点から非垞に自然なこずです。



以䞋は、マルチプロセッシングを䜿甚しおプログラムコヌドの効率ず有効性を高める利点の簡単な䟋です。 孊生は、スヌパヌコンピュヌタヌたたはクラスタヌシステムで䞊列蚈算を䜿甚するこずにより、シミュレヌション結果を改善できたす[28、29]。 䞀方で、マルチプロセッシングを䜿甚するず、マルチフェヌズモデルをマルチコアプロセッサのリ゜ヌスず比范できたす。他方では、マルチプロセッシングを䜿甚しお䞀連の䞊列モンテカルロテストを実行できたす。 次のセクションでは、これら2぀のアプロヌチを怜蚎したす。 やる気のある孊生のために、Pythonを䜿甚したマルチプロセッシングの簡単な玹介を以䞋に瀺したす。



たず、mpi4pyモゞュヌルを䜿甚したす。 これは、MPIがどのように機胜するかの䞻芁なアむデアを提瀺するために重芁です。 提䟛されたプログラムをナヌザヌ定矩のプロセッサコアの1぀にコピヌし、gatherメ゜ッドを䜿甚した埌に結果を統合したす。 Pythonコヌドの䟋図13ずシミュレヌション結果図14を以䞋に瀺したす。



 #!/usr/bin/python import pylab import random import numpy as np from mpi4py import MPI dice=200 trials= 150000 rank = MPI.COMM_WORLD.Get_rank() size = MPI.COMM WORLD.Get_size() name = MPI.Get_processor_name() random.seed(rank) ## Each process - one throwing of a number of six-sided dice values= np.zeros(trials) for i in range(trials): sum=0 for j in range(dice): sum+=random.randint(l,6) values[i]=sum data=np.array(MPI.COMM_WORLD.gather(values, root=0)) if rank == 0: data=data.flatten() mean=pylab.mean(data) std=pylab.std(data) print "Number of trials =", size*trials, "times." print "Mean =", mean print "Standard deviation =", std pylab.hist(data,20) pylab.xlabel('Value') pylab.ylabel('Number of times') pylab.savefig('multi_dice_mpi.png')
      
      





図 13. MPIを䜿甚した拡匵正芏分垃のPythonモデル。









図 14. MPIを䜿甚した正芏分垃。



5.モデリングベヌスの教育アプロヌチ



マルチフェヌズQSは、適切なシミュレヌションベヌスのアプロヌチを開発するためのコアを提䟛したす。 このアプロヌチには、前のセクションで説明した基本的な抂念ず、より耇雑な理論的な結果ず方法が含たれたす。 䞻なアむデアは、本質的に確率論的ですランダム倉数、ランダムな数倀分垃、乱数ゞェネレヌタヌ、䞭倮極限定理。 Pythonプログラミング構成

デコレヌタ、コルヌチン、およびyeild匏。 より耇雑な結果には、システムでのアプリケヌションの滞留時間、QSでのアプリケヌションの滞留時間を蚈算するための回垰方皋匏、確率的モデリング手法、マルチプロセッサテクノロゞヌなどの理論的抂念が含たれたす。 図15は、孊歎を説明する䞻な抂芁を瀺しおいたす。









図 15.モデリングベヌスの教育アプロヌチ



これらすべおの理論的およびプログラム的構造により、孊生は倚盞QSのさたざたなモデルで実隓を行うこずができたす。 このような実隓の目的は2぀ありたす。 第䞀に、これにより、孊生は次のシヌケンスを理解するこずができたす。これは、あらゆる科孊研究で重芁です理論的事実、数孊モデル、゜フトりェア構成、コンピュヌタヌモデル、確率モデル、および孊習に必芁なシミュレヌション結果の芳察。 これにより、孊生は䞀般的な研究の党䜓像を埗るこずができたす図16。









図 16.研究分野



このようなアプロヌチは、確率的モデリングず、マルチプロセッシングや䞊列プログラミングなどの基本的な゜フトりェア構成のより深い理解を提䟛したす。 これらの芏定は、科孊蚈算の分野で最も重芁です。



5.1。 モデル実隓



このセクションでは、マルチフェヌズQSの3぀のコンピュヌタヌモデルに぀いお怜蚎したす。 これらのモデルはすべお、哲孊的および䞻芁な機胜が異なりたす。 実隓の目的は統蚈モデルを䜜成し、倚盞システムの䞻なパラメヌタヌを研究するこずであるずいう事実にもかかわらず、これらのモデルの抂念的な考え方は完党に異なっおいたす。 これらの基本的な考え方を比范するこずで、孊生は䞊列蚈算、マルチプロセッサ統蚈、シミュレヌションモデリングの基瀎ずなる基本原則を理解するのに圹立ちたす。



最初に玹介したモデルはリアルタむムの蚘録に基づいおおり、シミュレヌションモデルず呌ばれたす。 Pythonマルチプロセッサモゞュヌルを䜿甚したす。このモデルの粟床は、timeメ゜ッドの粟床ず解像床に䟝存したす。さたざたな汎甚オペレヌティングシステムの堎合は非垞に䜎く、リアルタむムシステムの堎合は非垞に高くなりたす。孊生は、以前に提案された反埩方皋匏を䜿甚しおこのモデルを倉曎しシステムでのアプリケヌションの滞留時間を蚈算するため、䞡方のケヌスで結果を比范できたす。



次のモデルは、システム内のアプリケヌションの滞留時間を蚈算し、確率的モデリングに基づいおいたす。モデルはマルチプロセッサを盎接䜿甚したせん。マルチプロセッシングは、Pythonのyield匏を䜿甚しお゚ミュレヌトされたす。



Python MPI mpi4pyモゞュヌルを䜿甚しお、最新モデルがここに衚瀺されたす。ここでは、統蚈モデリングに実際のMPIマルチプロセッサアプロヌチを䜿甚したす。これにより、モンテカルロ法のテスト数を増やすこずができたす。



䞀般に、孊生の課題は、提䟛されたモデルを䜿甚しお䞀連の実隓を䜜成し、マルチフェヌズQSでのアプリケヌションの滞留時間に察する反埩察数の法則の実隓的蚌拠を取埗するこずです。



5.2。 マルチプロセッササヌビスを䜿甚したシミュレヌションモデル



以䞋はシミュレヌションモデルです。怜蚎すべき䞻な問題は、シミュレヌションモデルず統蚈モデルの違いです。もう1぀の重芁な問題は、シミュレヌションモデルの正確さず粟床です。たた、提瀺されたモデルの正確さず粟床の問題も重芁です。孊生は、凊理の間隔や頻床、アプリケヌションの数、サヌビングノヌドの数などのさたざたなパラメヌタヌに応じお、シミュレヌション結果を調べお比范できたす。モデルの䞀般的なスキヌムを図17に瀺したす。









図 17.シミュレヌションモデル



プログラムコヌドコヌドは2぀の䞻芁郚分で構成されおいたす。前者は蚈算を盎接目的ずし、次は結果を構築するためのものです。蚈算甚のモゞュヌルには、3぀の䞻芁な機胜が含たれおいたす。producer-アプリケヌションを受け取り、そもそも配眮するためのもの。サヌバヌ-アプリケヌションのサヌビス甚。 consumer-結果を取埗したす。この゜フトりェアモデルは実際のシミュレヌションに基づいおおり、蚈算に数匏を䜿甚したせん。その粟床は、Python䞀時モゞュヌルの粟床に䟝存し、原則ずしお、オペレヌティングシステムに䟝存したす。サヌビングデバむスの動䜜の蚈算は、マルチプロセッサシステム内のさたざたなプロセス間で分散されたす。䞊蚘のモデルを実装するためのコンピュヌタヌコヌドを図18に瀺したす。



 import multiprocessing import time import random import numpy as np def server(input_q,next_q,i): while True: item = input_q.get() if i==0:item.st=time.time() ## start recording time ## (first phase) timc.sleep(random.expovariate(glambda|i])) ##stop recording time (last phase) if i==M-1 :item.st=time.time()-item.st next_q.put(item) input_q.task_done() print("Server%d stop" % i) ##will be never printed why? def producer(sequence,output_q): for item in sequence: time.sleep(random.expovariate(glambda[0])) output_q.put(ilem) def consumer(input_q): "Finalizing procedures" ## start recording processing time ptime=time.time() in_seq=[] while True: item = input_q.get() in_scq+=[item] input_q.task_done() if item.cid == N-1: break print_results(in_seq) print("END") print("Processing time sec. %d" %(time.time()-ptime)) ## stop recording processing time printf("CPU used %d" %(multiprocessing.cpu_count())) def print_resulls(in_seq): "Output rezults" f=open("out.txt","w") f.write("%d\n" % N) for l in range(M): f.write("%d%s" % (glambda[t],",")) f.write("%d\n" % glambda[M]) for t in range(N-1): f.write("%f%s" % (in_seq[t].st,",")) f.write("%f\n" % (in_seq[N-1].st)) f.close() class Client(object): "Class client" def __init__(self,cid,st): self.cid=cid ## customer id self.st=st ## sojourn time of the customer ###GLOBALS N=100 ## total number of customers arrived M=5 ## number of servers ### glambda - arrival + servicing frequency ### = customers/per time unit glambda=np.array([30000]+[i for i in np.linspace(25000,5000,M)]) ###START if __name__ == "__main__": all_clients=[Client(num,0) for num in range(0,N)] q=[multiprocessing.JoinableQueue() for i in range(M+1)] for i in range(M): serv = multiprocessing.Process(target=server,args=(q[i],q[i+1],i)) serv.daemon=True serv.start() cons = multiprocessing.Process(target=consumer,args=(q[M],)) cons.start() ### start 'produsing' customers producer(all_clients,q[0]) for i in q: i.join()
      
      





図 18.マルチプロセッササヌビスを䜿甚したシミュレヌションモデルのPythonコヌド。



勉匷する質問



これで、matplotlibモゞュヌルを䜿甚しお結果を印刷し、チャヌトを衚瀺した埌、結果を芖芚的に分析できたす。モデルをさらに改善する必芁があるこずがわかりたす図19。したがっお、より匷力なモデルに進むこずができたす。









図 19.マルチプロセッササヌビスのシミュレヌションモデルをモデル化した結果。



5.3。 統蚈モデル単䜍プロセス



統蚈モデルの䞻な特城は次のずおりです。珟圚、再垰方皋匏を䜿甚しお、システム内のアプリケヌションの滞留時間を正確に蚈算したす。特定のPythonコルヌチン関数を䜿甚しお、すべおのデヌタを単䞀のプロセスで凊理したす。蚈算の信頌性を最倧限に高めるために、䞀定数のモンテカルロシミュレヌションを実行したす。このモデルにより、システム内のアプリケヌションの滞留時間を「正確に」蚈算できたす。モデルの䞻な抂芁を図20に瀺したす。孊生は、シミュレヌションモデルず統蚈モデルの違いを調べるこずができたす。









図 20.統蚈モデルの単䞀プロセス



䞊蚘のモデルを実装するためのプログラムコヌドを図21に瀺したす。シミュレヌション結果を図22に瀺したす。



 #!/usr/bin/python import random import time import numpy as np from numpy import linspace def coroutine(func): del start(*args,**kwargs): g = func(*args,**kwargs) g.next() return g return start def print_header(): "Output rezults - header" f=open("out.txt","w") f.write("%d\n" % N) ##number of points in printing template f.write("%d\n" % TMPN) for t in range(M): f.write("%d%s" % (glambda[t],",")) f.write("%d\n" % glambda[M]) f.close() def print_results(in_seq): "Output rezults" f=open("out.txt","a") k=() for i in range(N-2): if in_seq[i].cid==template[k]: f.write("%f%s" % (in_seq[i].st,",")) k+=1 f.write("%f\n" % (in_seq[N-1 ].st)) f.close() coroutine def server(i): ST=0 ##sojourn time for the previous client item=None while True: item = (yield item) ##get item if item == None: ##new Monte Carlo iteration ST=0 continue waiting_time=max(0.0,ST-item.st-item.tau) item.st+=random.expovariate(glambda[i+1])+waiting_time ST=item.st def producer(): results=[] i=0 while True: if i == N: break c=Client(i,0.,0.) if i!=0: c.tau=random.expovariate(glambda[0]) i+= 1 for s in p: c=s.send(c) results+=[c] for s in p: c=s.send(None) ##final signal return results class Client(object): def __init__(self,cid,st,tau): self.cid=cid self.st=st self.tau=tau def params(self): return (self.cid,self.st,self.tau) stt=time.time() N=1000000 ## Clients M=5 ## Servers ## Input/sevice frequency glambda= [30000]+[i for i in linspace(25000,5000,M)] MKS=20 ## Monte Carlo simulation results ## Number of points in the printing template TMPN=N/10000 ##printing template template= map(int,linspace(0,N-1,TMPN)) print_header() p=[] for i in range(M):p +=[server(i)] for i in range! MKS): print_results(producer()) print("Step=%d" % i) sys.stdout.write("Processing time:%d\n" % int(time.time()-stt))
      
      





図 21.単䞀プロセス統蚈モデルのPythonコヌド









図 22.統蚈モデルの単䞀プロセスのシミュレヌション結果



5.4。 MPIの統蚈モデル



モデル開発の次のステップは、Python MPIモゞュヌル-mpi4pyの䜿甚です。これにより、倚数のモンテカルロシミュレヌションで䜜業し、クラスタヌを䜿甚しおモデルを実行およびテストできたす。次のステップは、Python甚のCプログラミング蚀語、「実際の」MPIたたはSWIGhttps://ru.wikipedia.org/wiki/SWIGテクノロゞヌの䜿甚に基づいお、モデルをさらに改善するこずです。このモデルは以前のモデルずほずんど同じですが、mpi4pyがマルチプロセッシングず結果の統合に䜿甚される点が異なりたす図23。



画像






図 23.統蚈MPIモデル



前のモデルに加えお、いく぀かの远加モゞュヌルをむンポヌトする必芁がありたす。この段階でさらにテストを行うため、print_results関数も曞き換える必芁がありたす。たた、プログラムの䞻芁郚分を曞き換える必芁がありたす。図24では、以前のモデルのコヌドずは異なるプログラムコヌドの郚分のみを提䟛しおいたす。シミュレヌション結果を図25に瀺したす。



 .................... import sys from mpi4py import MPI .................... def print_results(in_seq): "Output rezults" f=open("out.txt","a") for m in range(int(size)): for j in range(MKS): for i in range(TMPN-l): f.write("%f%s" % (in_seq[m][i+j*TMPN].st,",")) f.write("%f\n" % (in_seq[m][(TMPN-l)+j*TMPN].st)) f.close() .................... stt=time.time() #start time for the process rank = MPI.COMM_WORLD.Get_rank() size = MPI.COMM_WORLD.Get_size() name = MPI.Get_processor_name() N= 10**3 ## Clients M=5 ## Servers ## Input/sevice frequency glambda=[30000]+[i for i in linspace(25000,5000,M)] ## Number of Monte-Carlo simulations for this particuar process MKS=20 TMPN=200 ## Number of points in printing templat template= map(int,linspace(0,N-1,TMPN)) ## points for printing p=[] results=[] ## this process results total_results=[] ## overall results for i in range(M):p +=[server(i)] for i in range(MKS):results+=producer() total_results=MPI.COMM_WORLD.gather(results,0) random.seed(rank) if rank == 0: print_header() print_results(total_results) sys.stdout.write("Processing time: %d\n" % int(time.time()-stt))
      
      





図 24. MPIベヌスの統蚈モデルのPythonコヌド









図 25.統蚈モデルMPIのシミュレヌション結果



6.結論



この蚘事では、シミュレヌションベヌスの孊習のためのいく぀かのモデルを調べたした。これらのモデルにより、孊生は䞀連の実隓を実斜し、科孊情報孊の分野に察する理解を深めるこずができたす。提瀺されたモデルずそのようなモデルの実隓には、いく぀かのレベルの耇雑さがありたす。最初のレベルは基本です。ランダム倉数の理解に぀ながり、たた科孊研究の分野の䞻芁な理解を䞎えたす。次のレベルはより耇雑で、䞊列プログラミングず確率的モデリングのより深い理解を提䟛したす。関連する理論的知識が提瀺され、必芁に応じお、远加資料ずしお䜿甚できたす。これらはすべお、科孊情報孊入門甚の基本的なツヌルキットを提䟛したす。そしお、結論ずしお、モデルのさらなる研究ず改善のための提案をしたいず思いたす。



6.1。 モデルの線圢性ずQSの統蚈パラメヌタヌ



この蚘事で玹介した倚盞QSモデルは線圢ではありたせん[12]。これは、非線圢数孊関数maxを含むため、再垰方皋匏から明らかになりたす。特にQSの統蚈パラメヌタヌを蚈算する堎合に、正しいシミュレヌション結果を取埗する堎合は、蚈算に郚分線圢モデルを䜿甚する必芁がありたす。これは、ロヌドされおいないトランスポヌトシステムにずっお特に重芁です。そうしないず、蚈算でかなり倧きな誀差が生じる可胜性があるためです。



6.2。 Pythonモゞュヌルの拡匵機胜ずCプログラミング



熟緎した孊生にずっお、プログラムコヌドの有効性を改善し続けるこずは興味深いかもしれたせん。これは、SWINGテクノロゞヌを䜿甚しお実装されたC関数でPythonモゞュヌルを拡匵するこずで実行できたす。Cython、Cプログラミング蚀語、「実際の」MPIテクノロゞヌ、およびクラスタヌシステムのHTC高性胜コンピュヌティングを䜿甚しお、コヌド蚈算を改善し、蚈算を高速化するこずができたす[5、28、29]。



6.3。゜フトりェア゜リュヌションの効率性ずさらなる開発



このセクションでは、孊生はさたざたな゜フトりェア゜リュヌションの有効性を調べるこずができたす。このトピックは、䞊列蚈算に基づく゜フトりェアモデルにずっお重芁です。孊生は、さたざたな゜フトりェアモデルの有効性を研究し、段階的にアルゎリズムを改善しようずするこずができたす。ここでの重芁なポむントは、情報フロヌの数ずさたざたな゜フトりェアプロセスの蚈算の比率の研究です。したがっお、この比率は、䞊列コンピュヌティングを䜿甚したプログラムの最も効果的な開発を構築する䞊で重芁です。別の興味深いトピックは、アルゎリズム構造をHTCクラスタヌ構造に倉換する可胜性の研究です。



研究の远加タスクずしお、著者はQSモデリングを怜蚎したす。QSモデリングはモデル化および分析する必芁がありたす。QSの比范的耇雑な性質ず察応する皮類のアプリケヌションでは、より広範なプログラミング手法を䜿甚する必芁がありたす。このようにしお、継承、カプセル化、ポリモヌフィズムなどの䞀般的なプログラミング抂念を実装するための優れた基本プラットフォヌムが衚瀺されたす。䞀方、コンピュヌタヌサむ゚ンスの基本的な理論的抂念も匷調する必芁がありたす。これらすべおに加えお、QSの統蚈およびシミュレヌションモデリングには、確率理論の分野でのより高床な知識、より倚くのコンピュヌティングリ゜ヌスの䜿甚、実際の科孊的コンピュヌティング環境の提䟛、および䞊玚孊生に察する優れたモチベヌションが必芁です。



文孊



参照の完党なリスト
[1] A. Arazi, E. Ben-Jacob and U. Yechiali, Bridging genetic net- works and queueing theory, Physica A: Statistical Mechanics and Its Applications 332 (2004), 585–616.

[2] DM Beazley, Python Essential Reference, Addison-Wesley Professional, 2009.

[3] J. Bernard, Use Python for scientific computing, Linux Journal 175 (2008), 7.

[4] UN Bhat, An Introduction to Queueing Theory Modeling and Analysis in Applications, BirkhÀuser, Boston, MA, 2008.

[5] KJ Bogacev, Basics of Parallel Programming, Binom, Moscow, 2003.

[6] RN Caine and G. Caine, Making Connections: Teaching andthe Human Brain, Association for Supervision and Curriculum Development, Alexandria, 1991.

[7] J. Clement and MA Rea, Model Based Learning and Instruction in Science, Springer, The Netherlands, 2008.

[8] NA Cookson, WH Mather, T. Danino, O. Mondragón- Palomino, RJ Williams, LS Tsimring and J. Hasty, Queue- ing up for enzymatic processing: correlated signaling through coupled degradation, Molecular Systems Biology 7 (2011), 1. [9] AS Gibbons, Model-centered instruction, Journal of Structural Learning and Intelligent Systems 4 (2001), 511–540. [10] MT Heath, Scientific Computing an Introductory Survey, McGraw-Hill, New York, 1997.

[11] A. Hellander, Stochastic Simulation and Monte Carlo Meth- ods, 2009.

[12] GI Ivcenko, VA Kastanov and IN Kovalenko, Queuing System Theory, Visshaja Shkola, Moscow, 1982.

[13] ZL Joel, NW Wei, J. Louis and TS Chuan, Discrete–event

simulation of queuing systems, in: Sixth Youth Science Con- ference, Singapore Ministry of Education, Singapore, 2000, pp. 1–5.

[14] E. Jones, Introduction to scientific computing with Python, in: SciPy, California Institute of Technology, Pasadena, CA, 2007, p. 333.

[15] M. Joubert and P. Andrews, Research and developments in probability education internationally, in: British Congress for Mathematics Education, 2010, p. 41。

[16] GE Karniadakis and RM Kyrby, Parallel Scientific Comput- ing in C++ and MPI. A Seamless Approach to Parallel Al- gorithms and Their Implementation, Cambridge Univ. Press, 2003.

[17] DG Kendall, Stochastic processes occurring in the theory of queues and their analysis by the method of the imbedded Markov chain, The Annals of Mathematical Statistics 1 (1953), 338–354.

[18] MS Khine and IM Saleh, Models and modeling, cognitive tools for scientific enquiry, in: Models and Modeling in Science Education, Springer, 2011, p. 290.

[19] T. Kiesling and T. Krieger, Efficient parallel queuing system simulation, in: The 38th Conference on Winter Simulation, Winter Simulation Conference, 2006, pp. 1020–1027.

[20] J. Kiusalaas, Numerical Methods in Engineering with Python, Cambridge Univ. Press, 2010.

[21] A. Kumar, Python for Education. Learning Maths & Science Using Python and Writing Them in LATEX, Inter University Accelerator Centre, New Delhi, 2010.

[22] HP Langtangen, Python Scripting for Computational Science, Springer-Verlag, Berlin, 2009.

[23] HP Langtangen, A Primer on Scientific Programming with Python, Springer-Verlag, Berlin, 2011.

[24] HP Langtangen, Experience with using Python as a primary language for teaching scientific computing at the University of Oslo, University of Oslo, 2012.

[25] R. Lehrer and L. Schauble, Cultivating model-based reason- ing in science education, in: The Cambridge Handbook of the Learning Sciences, Cambridge Univ. Press, 2005, pp. 371–388.

[26] G. Levy, An introduction to quasi-random numbers, in: Nu- merical Algorithms, Group, 2012.

[27] JS Liu, Monte Carlo Strategies in Scientific Computing, Har- vard Univ., 2001.

[28] VE Malishkin and VD Korneev, Parallel Programming of Multicomputers, Novosibirsk Technical Univ., Novosibirsk, 2006.

[29] N. Matloff, Programming on Parallel Machines: GPU, Multi- core, Clusters and More, University of California, 2012.

[30] M. Milrad, JM Spector and PI Davidsen, Model facilitated learning, in: Instructional Design, Development and Evalua- tion, Syracuse Univ. Press, 2003.

[31] S. Minkevicˇius, On the law of the iterated logarithm in multi- phase queueing systems, Informatica II (1997), 367–376.

[32] S. Minkevicˇius and V. Dolgopolovas, Analysis of the law of the iterated logarithm for the idle time of a customer in multiphase queues, Int. J. Pure Appl. Math. 66 (2011), 183–190.

[33] Model-Centered Learning, Pathways to mathematical under- standing using GeoGebra, in: Modeling and Simulations for Learning and Instruction, Sense Publishers, The Netherlands, 2011.

[34] CR Myers and JP Sethna, Python for education: Computa- tional methods for nonlinear systems, Computing in Science & Engineering 9 (2007), 75–79.

[35] H. Niederreiter, Random Number Generation and Quasi- Monte Carlo Methods, SIAM, 1992.

[36] FB Nilsen, Queuing systems: Modeling, analysis and simu- lation, Department of Informatics, University of Oslo, Oslo, 1998.

[37] RP Sen, Operations Research: Algorithms and Applications, PHI Learning, 2010.

[38] F. Stajano, Python in education: Raising a generation of native speakers, in: 8th International Python Conference, Washing- ton, DC, 2000, pp. 1–5.

[39] J. Sztrik, Finite-source queueing systems and their applica- tions, Formal Methods in Computing 1 (2001), 7–10.

[40] L. Xue, Modeling and simulation in scientific computing ed- ucation, in: International Conference on Scalable Computing and Communications, 2009, pp. 577–580.




All Articles