In my model I use a schedule to define the capacity of a transporter fleet. Now I want the capacity to be a variable which can change based on the user input, but when I want to type the variable name (see red circle in inmage) in the value function of schedule block this will not work is there a method to do this?
The only way to so this is to use the load from database option and read in the values from the database.
Alternative is to create the schedules programmatically
Related
I refer to a similar problem here.
I implemented a programmatically created schedule same as in the example model from AnyLogic Cloud. Then I added the suggested code in the capacity field.
Still, my problem is the following runtime error: "The parameter capacitySchedule cannot be changed dynamically". Does it just basically does not work with the resource pool compared to the Transporter Fleet presented in the similar problem? Unfortunately it does not work with a fake schedule either.
Here are some screenshots from my model. Thanks in advance.
To work with dynamic capacity of ResourcePool, I use a schedule shift by plan.
in some cases it meets the need.
The implementation of this is simple, in the schedule you give values 1,2,3 etc. They actually point to a position in the array.
Example of the schedule
And inside the ResourcePool you define it as follows:
Example of the ResourcePool by plane
In my example, at times when the schedule value is 4 the capacity of the ResourcePool is 0 and at other times it is as per my parameters.
Change the "Kapaziät definiert" to "By schedule".
Create a fake schedule object fakeSchedule (normally, not programmatically). Make sure it always returns 0 as the value.
Then, use this call for "Kapazität":
' mySchedule == null ? fakeSchedule : mySchedule`
This will tell the pool to use your schedule if it exists, else the fake one
for an analysis of a production process, I want to spawn agents in my source block according to past real data.
For that, I want to use an arrival table to make sure that the agents spawn at the correct time.
But I also need to give my agents different parameter variations.
For that, I want to use the "Set agent parameters from DB" checkmark.
However, it seems that I can't use both of them combined. Is there a way to use an arrival table and a parameter DB combined?
Thanks a lot in advance.
Yes, you can. You need to use a single table for all the information regarding the agent.
See the example table below
You also need to create a customer agent for your source with parameters you want to populate from the DB
Then in the source you can select to generate this agent at the "new Agent" dropdown. Then you will be able to populate all the agent parameters from table you specified
I am trying to figure out which are the main default attributes of agents in Anylogic, e.g., the Id, the position and the index. So far I haven't found them in the help or at stackoverflow.
1) Do you know where this can be found or can you summarize the main you know? For instance the id used as unique identifier or the index used as the position inside of the population.
2) Are there any attributes regarding the agent history? For example time stamps as the creation time or the blocks it has passed through?
3) Is it possible to change the default id attribute of an agent? Can two agents have the same id?
4) As the split block doesn't copy any of the parameters or variables values to the copy, what is the proper way to copy an agent? I noticed in other publication Benjamin mentioned using agent.set_MyParam(original.MyParam). What would be "MyParam" in this code? Would this copy the value of parameters, variables and the current state in the statechart? Is it possible to make a copy and initialize its current state in the statechart as the original agent's current state?
Thank you for your help.
There are many things that are generated when you generate an agent... the best you can do is to check the api for the agent here: agent api
You can only see these things on the log if you activate it, but not from the API
the id is a unique identifier and i've never been in a situation where i need to change it,but if you want to change it, you can use the setId method, in which case, 2 or more agents may have the same id.
you can only use set_MyParam if the MyParam is a parameter, you can't do the same with variables. Nevertheless, if you want to copy an agent, you need to do it variable by variable, state by state, everything from scratch. There's no magical way to copy the exact same agent with all its current values and states and connections etc
I am using discrete event simulation methodology in my project. I have a variable in my simulation called RuleBreak which can be either 0 or 1 which is evaluated for each Agent upon entering the Sink block. I am trying to store every value of the RuleBreak variable in a data frame. I have already tried using the Data Set element in the Analytics palette. However, this only allows you to obtain the value of the variable at a specific recurring time. I need the value of RuleBreak only when an agent enters the Sink block. Can anyone help me with this?
Below is an image of the Sink block, where I set the value of RuleBreak to be either 0 or 1.
Then here is an image of the Data Set element that I use from the Analytics palette. Notice, that I can only collect the value of RuleBreak at a specific recurring time and cannot obtain the values for all Agents that enter the Sink block.
Thanks!
in your dataset element use "Do not update data automatically" and at the end of your "on enter" action of your sink do:
dataset.update();
And that's it :)
Is there a way to add agents through pedSource but give them nominal values for added parameters?
We have different parameters within a specific agent that are in a DB and want them to be initialized when agent is created in population.
We tried doing it using the advanced option in pedSource but the "from DB " option does not have our added parameters, only the default ones for pedestrian agent.
good to see you here :-)
Sounds like you need to create your own Agent Type to be used for your pedestrians. Create a new agent type and set it up to be used as pedestrians as below:
Next, make your PedSource object create these MyPeds and not the default peds:
Now, you can add your parameters to MyPed as you like. Let's say it has 1 param myParam. To load values from the dbase, also create a MyPed population (drag in the MyPed class onto Main), set it as below:
Last, you need to tell the source object to add any MyPed created to your new population as it will fill the params:
hope this helps