Magnus Held
Magnus Held

Reputation: 13

how to write data from Database Log to an output in anylogic?

I'm running a similation where i would lige to know the total amount of time agents spends in a delay block. I can access the data when running single simulations in the Dataset log under flowchart_stats_time_in_state_log

https://i.sstatic.net/BAn1r.jpg

However i would like to to write the data from block 5 (spraying) to an output in order to store the data when running multiple simulations.

https://i.sstatic.net/4pXd6.jpg

Im guessing that the value reffence should look something like the expression below. It is not working however so i would aprreciate it alot if anybody could help me out or suggest an alternate solution for getting the data.

flowchart_stats_time_in_state_log.total_seconds.spraying;

Btw. Time measures dose not work for this situation since i need to know the total amount of time spend in a block after a 12 hour shift. with time measures i do not get the data from the agents that are still in the block when the simulation ends.

Upvotes: 1

Views: 515

Answers (2)

Amy Brown Greer
Amy Brown Greer

Reputation: 726

Another alternative would be to have a variable to track time in block, incrementing when the agents leave. At end of the run, you would need to call a function to iterate over the agents still in the block to add their time. AnyLogic allows you to pretty easily loop over queues, delays, or anything that holds agents:

for( MyAgent agent : delayBlockName ){
   variable += time() - agent.enterBlockTime;
}

To implement this solution, you would need to create your own agent (name it something better than MyAgent) with a variable for when the agent enters the block. You would then need to then mark the time each agent enters the block.

Upvotes: 1

Amy Brown Greer
Amy Brown Greer

Reputation: 726

Based on the goal of summing all processing times, you could solve it mathematically. Set the output equal to block.statsUtilization.mean() * capacity * time() calculated on simulation end.

For example, if you have a capacity of 1 and a run length of 100 minutes, then if you had a utilization of 50%; that means you had an agent in the block for 50 minutes. Utilization = time busy / total time. Because of this relationship, we can calculate how long agents were actually in the block.

Upvotes: 1

Related Questions