Quartz::AtomicModel
Inherits Quartz::Verifiable / Quartz::Observable / Quartz::Coupleable / Quartz::Transferable / Quartz::Stateful / Quartz::Model / Reference / Object
This class represent a PDEVS atomic model.
Constants
Constructors
Class methods
Passes the model off to the class or classes specified and allows them to add errors based on more complex conditions.
class MyModel
include Quartz::Verifiable
check_with MyVerifier
end
class MyVerifier < Quartz::Verifiers::RuntimeChecker
def validate(model)
if some_test
model.errors.add(:phase, "This model state is invalid")
end
end
# ...
end
Passes the model off to the class or classes specified and allows them to add errors based on more complex conditions.
class MyModel
include Quartz::Verifiable
check_with MyVerifier
end
class MyVerifier < Quartz::Verifiers::EachChecker
def check_each(model, attribute, value)
if some_test
model.errors.add(attribute, "This model attribute is invalid")
end
end
# ...
end
Instance methods
This is the default definition of the confluent transition. Here the internal transition is allowed to occur and this is followed by the effect of the external transition on the resulting state.
Override this method to obtain a different behavior. For example, the opposite order of effects (external transition before internal transition). Of course you can override without reference to the other transitions.
This attribute is updated automatically along simulation and represents the elapsed time since the last transition.
This attribute is updated automatically along simulation and represents the elapsed time since the last transition.
The external transition function (δext)
Override this method to implement the appropriate behavior of your model.
Example:
def external_transition(messages)
messages.each { |port, value|
puts "#{port} => #{value}"
}
end
Internal transition function (δint), called when the model should be
activated, e.g when #elapsed reaches #time_advance
Override this method to implement the appropriate behavior of your model.
Example:
def internal_transition
self.phase = :steady
end
The output function (λ)
Override this method to implement the appropriate behavior of
your model. See #post to send values to output ports.
Example:
def output
post(42, :output)
end
Time advance function (ta), called after each transition to give a chance to self to be active.
Override this method to implement the appropriate behavior of your model.
Example:
def time_advance
Quartz.infinity
end
Macros
Defines default input ports for each of the given arguments. Those default input ports will be available in all instances, including instances of subclasses (meaning that ports are inherited).
Writing:
class MyModel < AtomicModel
input port_name
end
Is the same as writing:
class MyModel < AtomicModel
def initialize(name)
super(name)
add_input_port :port_name
end
end
The arguments can be string literals, symbol literals or plain names. However, they will be converted to symbol literals when the model is instantiated.
class MyModel < AtomicModel
input :in1, "in2", in3
end
Defines default output ports for each of the given arguments. Those default output ports will be available in all instances, including instances of subclasses (meaning that ports are inherited).
Writing:
class MyModel < AtomicModel
output port_name
end
Is the same as writing:
class MyModel < AtomicModel
def initialize(name)
super(name)
add_output_port :port_name
end
end
The arguments can be string literals, symbol literals or plain names. However, they will be converted to symbols literals when the model is instantiated.
class MyModel < AtomicModel
output :out1, "out2", out3
end