2016-06-20 13 views
2

私のアニロギープロジェクトでは、実行を終了してシミュレーションをN回実行したいと考えています。各シミュレーションでは、出力を実行回数に依存するExcelファイルに保存します。 クリックして停止して実行するのではなく、自動的に実行したいと思います。どうやってやるの? イベントを使用してwhileループ(myparm < = N)で書き込みしようとしましたが、ループでgetEngine()を実行しましたが、動作しませんでした。 可能であればお手伝いください。アニニックでシミュレーションをN回実行する

おかげ以下

+0

「シングルラン」シミュレーション実験から複数回モデルを実際に実行しますか?もしそうなら、なぜですか?入力の読み込み/複数回の初期化を避けるだけですか? (これを実現する他の方法もありますが、設定が非常に計算コストが高いかどうかは通常は気になります)。答えは、マルチラン実験を使用するのではなく、この特殊なケースを実行することを前提としていますこれは、この目的のために設計されている。 –

答えて

1

を使用して、モデル内のプログラム的「モデル時間」セクションの下でシミュレーション実験のページでこれを指定したりすることができ、トリガタイムアウトのアクション]フィールドに次のコードを使用してくださいイベントまたはOn destroyフィールドに入力します。

new Thread(){ 
    public void run(){ 
     // stops the model 
     getExperiment().stop(); 
     try { 
      // delay 
      this.sleep(1000); 
     } catch(Exception e) {}; 
     // runs it again 
     ((Simulation) getExperiment()).button.action(); 
    } 
}.start(); 

このコードを実行する前に、モデル結果をExcelファイルに書き込む必要があります。 Jaco-Benが提案したように、シミュレーション実験を再開する条件としてgetEngine()。getRunCount()を指定できます。

2

の複数の実行を実行するために、あなたはあなたがシミュレーションのセットアップを利用するために必要なAnyLogic

が使用する既存のシミュレーションフレームワークを使用してそれを行うことができる方法の方法論の概要ですモデルを作成し、出力を保存します。私の提案する設定は次のようになります:

複数のモデルの実行を開始するために使用するシミュレーション実験ページ(モデルの実行時に最初に表示されるページ)にボタンがあります。あなたも初期シードとあなたにも変更と、おそらくモデルの実行後に保存することができますいくつかの他のモデルパラメータを設定することをお勧めします

getEngine().setRealTimeMode(false); 

を使用して、リアルタイムモードで実行しないように、ここでは、エンジンを設定しました。モデルを設定したら、run()を使用してモデルの実行を開始します。

「Javaアクション」セクションの「シミュレーション実験」設定ページの下で、モデルの実行が完了した後にモデルが何をしなければならないかを指定する必要があります。 'After simulation run'セクションで、モデルからExcelファイルにデータを保存するコードを記述します。モデルから変数およびオブジェクトにアクセスするには、rootを使用します。

saveSomeDataは、ExcelファイルにmyDatasetというモデルで見つかった私のデータセットを、保存するためのシミュレーションページの機能である
saveSomeData(root.myDataset); 

。シードと特定のパラメータを変更した場合は、後で参照できるようにExcelファイルに保存することも有効です。

モデルからデータ出力を保存したら、新しいシードを指定し、おそらくパラメータを再度変更してから、run()をもう一度呼び出して、別の繰り返しのモデルを実行できます。モデルの実行が終了すると、ここで「シミュレーション実行後」コードが再び呼び出されるため、停止条件を設定します。それ以外の場合は、繰り返し実行されます。あなたは、モデルの数が)

getEngineを(使用して実行されますアクセスすることができます。getRunCount()

をまた、あなたのモデルは、それが停止することはありません実行を開始するそうでないと、一部の停止条件を持っている必要があります。あなたが周期的にモデルを実行するために

finishSimulation(); 
+0

ありがとうございました...それは役に立ちました:) – Elnaz91

関連する問題