SimPlay in depth¶
How a simulation is set up, and how to work with processes is explained in Getting started.
Using Resources¶
The following example shows how to use the VisualResource
class:
from simplay import VisualEnvironment, VisualResource
class MyResource(VisualResource):
def __init__(self, env):
super().__init__(env, "MyResource", 3, visual="SOMEPNG", tint=0x00FF00)
self.is_at(5, 5)
self.is_visible()
env = VisualEnvironment()
grid = VisualGrid(1000, 1000, 10, 10)
grid.set_area("area51", "ALIENS!", 5, 2, 0, 0, 0xFF0000)
env.visualization_manager.set_grid(grid)
resource = MyResource(env)
env.run()
The VisualResource
class inherits from the Resource
class from the simpy
package.
The API is the same, except that the request
and release
methods are overridden to
reflect for changes in the utilization and capacity of the resource, and will automatically create the
corresponding events.
Specialized classes like PreemptiveResource
and PriorityResource
are also supported,
and are inherited by the VisualPreemptiveResource
and VisualPriorityResource
respectively.
The code example above creates a custom class for the resource, and by doing so declares the visibility and position of the resource in the constructor. Alternatively, you can create the resource without a custom class.
from simplay import VisualEnvironment, VisualResource
env = VisualEnvironment()
grid = VisualGrid(1000, 1000, 10, 10)
grid.set_area("area51", "ALIENS!", 5, 2, 0, 0, 0xFF0000)
env.visualization_manager.set_grid(grid)
resource = VisualResource(env, "MyResource", 3, visual="SOMEPNG", tint=0x00FF00)
resource.is_at(5, 5)
resource.is_visible()
env.run()
Using Containers¶
The following example shows how to use the VisualContainer
class:
from simplay import VisualEnvironment, VisualContainer
class MyContainer(VisualContainer):
def __init__(self, env):
super().__init__(env, "MyContainer", 3, visual="SOMEPNG", tint=0x00FF00)
self.is_at(5, 5)
self.is_visible()
env = VisualEnvironment()
grid = VisualGrid(1000, 1000, 10, 10)
grid.set_area("area51", "ALIENS!", 5, 2, 0, 0, 0xFF0000)
env.visualization_manager.set_grid(grid)
container = MyContainer(env)
env.run()
The VisualContainer
class inherits from the Container
class from the simpy
package.
The API is the same, except that the put
and get
methods are overridden to
reflect for changes in the level and capacity of the container, and will automatically create the
corresponding events.
The code example above creates a custom class for the container, and by doing so declares the visibility and position of the container. Alternatively, you can create the container without a custom class.
from simplay import VisualEnvironment, VisualContainer
env = VisualEnvironment()
grid = VisualGrid(1000, 1000, 10, 10)
grid.set_area("area51", "ALIENS!", 5, 2, 0, 0, 0xFF0000)
env.visualization_manager.set_grid(grid)
container = VisualContainer(env, "MyContainer", 3, visual="SOMEPNG", tint=0x00FF00)
container.is_at(5, 5)
container.is_visible()
env.run()
Using Stores¶
The following example shows how to use the VisualStore
class:
from simplay import VisualEnvironment, VisualStore
class MyStore(VisualStore):
def __init__(self, env):
super().__init__(env, "MyStore", 3, visual="SOMEPNG", tint=0x00FF00)
self.is_at(5, 5)
self.is_visible()
env = VisualEnvironment()
grid = VisualGrid(1000, 1000, 10, 10)
grid.set_area("area51", "ALIENS!", 5, 2, 0, 0, 0xFF0000)
env.visualization_manager.set_grid(grid)
store = MyStore(env)
env.run()
The VisualStore
class inherits from the Store
class from the simpy
package.
The API is the same, except that the put
and get
methods are overridden to
reflect for changes in the contents and capacity of the store, and will automatically create the
corresponding events.
The specialized FilterStore
is also supported, and is inherited by the
VisualStore
class.
The code example above creates a custom class for your store, and by doing so declares the visibility and position of the store. Alternatively, you can create the store without a custom class.
from simplay import VisualEnvironment, VisualStore
env = VisualEnvironment()
grid = VisualGrid(1000, 1000, 10, 10)
grid.set_area("area51", "ALIENS!", 5, 2, 0, 0, 0xFF0000)
env.visualization_manager.set_grid(grid)
store = VisualStore(env, "MyStore", 3, visual="SOMEPNG", tint=0x00FF00)
store.is_at(5, 5)
store.is_visible()
env.run()
More details about the functions and classes of SimPlay are available in API Reference.