2016-12-29 14 views
1

AnyLogic PMIライブラリの「分割」コンポーネントに関する質問があります。このケースをよりよく説明するために、私が構築しているシナリオの一部の写真を掲載します。 AnyLogic circuitAnyLogicスプリットコンポーネントで、1つのエージェントを複数のエージェントに分割できますか?

上記の図の左側のソース要素は、「要件」タイプのオブジェクトを生成します(これは、エージェントクラスを継承するカスタムクラスです)。このクラスは、すべての顧客「CI」(行列の例が与えられている)ごとに製品「PI」の要件を有するマトリックスを表し:

Requirement Matrix

ためごとこのマトリックスは、薬剤の集まりとして見ることができます行は、私の回路ブロックの最初のものが関係するエージェント(論理的には、製品供給者から注文される製品Piの量に関する情報を含む)であり、すべての列は、 (論理的には、顧客Ciの販売予測を含む)。

スプリットブロックの "on at enter"イベントでは、最初に行を繰り返し、 "out"スプリットのポートでそれぞれを出力し、次に列を反復してそれぞれを出力するスクリプトを作成します「アウトコピー」スプリットのポート。

matrix = (Requirement)agent; 
Iterator<Object> reqIter = matrix.getRequirements(); //iterate the rows 
while (reqIter.hasNext()) 
{ 
    Object current = reqIter.next(); 
    //PUSH current in the out port of the split 
} 

Iterator<Object> sellIter = matrix.getRequirements(); //iterate the columns 
while (sellIter.hasNext()) 
{ 
    Object current = sellIter.next(); 
    //PUSH current in the out-copy port of the split 
} 

答えて

2

私はnuove matriciSinkまたはExitブロックを置く:私は「上で入力して、」イベントに配置するために思っているスクリプトの擬似コードを掲載します。エージェントの生成後に初期エージェントマトリックスを破棄できる場合はSinkを使用し、後で何らかの形で保存して再使用する場合はExitを使用してください。 Splitブロックを取り外すことができます。ブロックの代わりに、2つのEnterブロックをそれぞれの次のキューに接続します。

On Enterの内部には、Sink\Exitのコードが実行されます。生成されたエージェントがenterBlockName.take(new MyAgent(args...));

例えばとともに各キュー内に注入することができ、そのコードを考慮するAgentタイプのインスタンスを生成し、それは次のようになります

matrix = (Requirement)agent; 
Iterator<Object> reqIter = matrix.getRequirements(); //iterate the rows 
while (reqIter.hasNext()) 
{ 
    Object current = reqIter.next(); 
    enter.take(new MyAgent(current)); //PUSH current in the top flow 
} 

Iterator<Object> sellIter = matrix.getRequirements(); //iterate the columns 
while (sellIter.hasNext()) 
{ 
    Object current = sellIter.next(); 
    enter1.take(new MyAgent(current)); //PUSH current in the bottom flow 
} 
関連する問題