Hey guys,
So I'm writing this short paper for my Game AI course which compares the Agent Architecture of prisoners in Prison Architect and a Sim in The Sims franchise [their free-will mode]. I've managed to find extensive documentation on how the AI for the Sims use. It seems they use the paradigm of 'Smart Objects' where the objects (bed, toilet) broadcast their benefits/the-needs-they-serve as opposed to having all this knowledge programmed inside each Sim.
I've been looking for similar matter for the prisoners in Prison Architect. I've searched high and low and can't find any low-level technical details.
It would be really helpful if any of you who've come across this type of material, could point me to the same. Or if you have a fair idea about how things work, I'd really appreciate it if you could briefly explain the same.
Thanks people!
EDIT: This article does a great job of explain the AI in The Sims, specifically the parts of Smart Objects http://aigamedev.com/open/review/the-sims-ai/
Agent -AI Architecture for prisoners.
Moderator: NBJeff
Re: Agent -AI Architecture for prisoners.
Broadcasting is a relatively common method, generally because it is more efficient resources (CPU) wise (particularly as the number of SIMS increases).
Have you had a troll through the LUA. From a quick look at the WIKIA it seems the NEEDS system is exposed and understood so I would suggest unpacking the .DAT files and having a look yourself. If the code is there then it will not be hard to work out what is going on.
Of course perhaps the underlying implementation may be in C/C++ and therefor unavailable, but that said the implementation could still be deduced from the LUA if you are lucky.
Check out this link : http://devwiki.introversion.co.uk/pa/index.php/Modding (You will need to have PURCHASED PA and ACTIVATED your account, for this link to work).
Have you had a troll through the LUA. From a quick look at the WIKIA it seems the NEEDS system is exposed and understood so I would suggest unpacking the .DAT files and having a look yourself. If the code is there then it will not be hard to work out what is going on.
Of course perhaps the underlying implementation may be in C/C++ and therefor unavailable, but that said the implementation could still be deduced from the LUA if you are lucky.
Check out this link : http://devwiki.introversion.co.uk/pa/index.php/Modding (You will need to have PURCHASED PA and ACTIVATED your account, for this link to work).
- paktsardines
- level5
- Posts: 1752
- Joined: Mon Oct 01, 2012 11:10 am
- Location: Australia
Re: Agent -AI Architecture for prisoners.
I know objects like the laundry card actually issue tasks to the prisoners to complete.. eg: 'pick me up, move me over there..'
I think it's in one of the sketches from Chris' notebook.
I think it's in one of the sketches from Chris' notebook.
Re: Agent -AI Architecture for prisoners.
In PA, the AI can be split up in two distinct systems that drives entity actions: needs (only prisoners) and jobs (both prisoners and staff).
Every update cycle of the prisoner, the needs are updated, if a need crosses a certain treshold (time to action) they will try and satisfy that need by looking for an object closest to them that can satisfy the need and is not busy and is reachable. If a need crosses a second treshold (time to failure), the need will be in failure mode (hunger, tired, dirty,...) which will make the prisoners temperature rise.
Jobs are generated externally by all sorts of triggers, and are always linked to an object. Arrival of ingredients in the deliveries zone creates a job request "move ingredients to kitchen". A person blocked by a locked door generates "open locked door" job request for this door. A cooker filled with ingredients creates a job "operate cooker", etc... Whenever a job request is created it ends up in the queue, a list of jobs globally in the game. Whenever an entity is idle, it will pick up a job in the queue, depending on the type of job, priority and distance to the object. If there is a valid path to the object, the job gets assigned to this entity and the job goes to In Progress state (so it isn't picked up by another entity).
Every update cycle of the prisoner, the needs are updated, if a need crosses a certain treshold (time to action) they will try and satisfy that need by looking for an object closest to them that can satisfy the need and is not busy and is reachable. If a need crosses a second treshold (time to failure), the need will be in failure mode (hunger, tired, dirty,...) which will make the prisoners temperature rise.
Jobs are generated externally by all sorts of triggers, and are always linked to an object. Arrival of ingredients in the deliveries zone creates a job request "move ingredients to kitchen". A person blocked by a locked door generates "open locked door" job request for this door. A cooker filled with ingredients creates a job "operate cooker", etc... Whenever a job request is created it ends up in the queue, a list of jobs globally in the game. Whenever an entity is idle, it will pick up a job in the queue, depending on the type of job, priority and distance to the object. If there is a valid path to the object, the job gets assigned to this entity and the job goes to In Progress state (so it isn't picked up by another entity).
Who is online
Users browsing this forum: No registered users and 9 guests