y_petri 2.1.40 → 2.1.42
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/y_petri/net/data_set.rb +17 -10
- data/lib/y_petri/net/state/features/record.rb +3 -2
- data/lib/y_petri/simulation/recorder.rb +9 -2
- data/lib/y_petri/simulation/timed.rb +2 -0
- data/lib/y_petri/simulation/timeless.rb +2 -0
- data/lib/y_petri/simulation.rb +12 -5
- data/lib/y_petri/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9369cc58d87b6dc7099f4852e0c1d65b6a115389
|
4
|
+
data.tar.gz: 7fb31e526e167b754b573a16e8d5cd0157beafa0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 90562c12028bb711b27e2cfce1e3436d0100da72c9aae434ed87c38146e7d85974a5fbda2c3ac953e7b093055aa1fff1c13e9d07878045e05a2b95d785068d91
|
7
|
+
data.tar.gz: 77d2083ca5e0db3c5c5c95ec214f0804608f65857e228e77fc1d32d13396be48c1fee4d84254eb600d43025cbc2d2c6c1788eceae651f1bdbaba637b49773d43
|
data/lib/y_petri/net/data_set.rb
CHANGED
@@ -33,7 +33,8 @@ class YPetri::Net::DataSet < Hash
|
|
33
33
|
:Marking, :Firing, :Flux, :Gradient, :Delta,
|
34
34
|
to: "self.class"
|
35
35
|
|
36
|
-
attr_reader :type # more like event_type, idea not matured yet
|
36
|
+
attr_reader :type, # more like event_type, idea not matured yet
|
37
|
+
:settings
|
37
38
|
|
38
39
|
# Type of the dataset.
|
39
40
|
#
|
@@ -75,9 +76,10 @@ class YPetri::Net::DataSet < Hash
|
|
75
76
|
|
76
77
|
# Recreates the simulation at a given event label.
|
77
78
|
#
|
78
|
-
def reconstruct event: (fail "No event given!"),
|
79
|
-
|
79
|
+
def reconstruct event: (fail "No event given!"), **settings
|
80
|
+
# settings may include marking clamps, marking, inital marking...
|
80
81
|
rec = interpolate( event )
|
82
|
+
settings = settings().merge settings if settings()
|
81
83
|
if timed? then
|
82
84
|
rec.reconstruct time: event, **settings
|
83
85
|
else
|
@@ -136,6 +138,7 @@ class YPetri::Net::DataSet < Hash
|
|
136
138
|
# Returns the data series for the specified features.
|
137
139
|
#
|
138
140
|
def series arg=nil
|
141
|
+
|
139
142
|
return records.transpose if arg.nil?
|
140
143
|
reduce_features( State().features( arg ) ).series
|
141
144
|
end
|
@@ -174,12 +177,10 @@ class YPetri::Net::DataSet < Hash
|
|
174
177
|
end
|
175
178
|
end
|
176
179
|
else
|
177
|
-
line = reduced_features.map do |
|
178
|
-
if absent_features.include?
|
179
|
-
|
180
|
-
else
|
181
|
-
record.fetch feature
|
182
|
-
end
|
180
|
+
line = reduced_features.map do |feat|
|
181
|
+
if absent_features.include? feat then
|
182
|
+
feat.extract_from( sim )
|
183
|
+
else record.fetch( feat ) end
|
183
184
|
end
|
184
185
|
end
|
185
186
|
end
|
@@ -272,7 +273,8 @@ class YPetri::Net::DataSet < Hash
|
|
272
273
|
time = nn.may_have :time, syn!: :time_range
|
273
274
|
events = events()
|
274
275
|
if element_ids.nil? then
|
275
|
-
|
276
|
+
nn_ff = nn.slice [ :marking, :flux, :firing, :gradient, :delta ]
|
277
|
+
ff = nn_ff.empty? ? features : net.State.features( nn_ff )
|
276
278
|
else
|
277
279
|
ff = net.State.Features.infer_from_elements( element_ids )
|
278
280
|
end
|
@@ -297,6 +299,11 @@ class YPetri::Net::DataSet < Hash
|
|
297
299
|
Gnuplot.open do |gp|
|
298
300
|
Gnuplot::Plot.new gp do |plot|
|
299
301
|
plot.xrange x_range
|
302
|
+
if nn.has? :yrange, syn!: :y_range then
|
303
|
+
if nn[:yrange].is_a? Range then
|
304
|
+
plot.yrange "[#{nn[:yrange].begin}:#{nn[:yrange].end}]"
|
305
|
+
else fail TypeError, "Argument :yrange is not a range!" end
|
306
|
+
end
|
300
307
|
plot.title nn[:title] || "#{net} plot"
|
301
308
|
plot.ylabel nn[:ylabel] || "Values"
|
302
309
|
plot.xlabel nn[:xlabel] || "Time [s]"
|
@@ -71,9 +71,10 @@ class YPetri::Net::State::Features::Record < Array
|
|
71
71
|
# has need for any special settings, these must be supplied to this method.
|
72
72
|
# (Timed nets eg. require +:time+ named argument for successful construction.)
|
73
73
|
#
|
74
|
-
def reconstruct
|
74
|
+
def reconstruct **settings
|
75
|
+
marking_clamps = settings[:marking_clamps] || {}
|
75
76
|
m_hsh = features.marking.map { |feat| feat.place } >> marking
|
76
|
-
net.simulation marking_clamps:
|
77
|
+
net.simulation marking_clamps: marking_clamps, marking: m_hsh, **settings
|
77
78
|
end
|
78
79
|
|
79
80
|
# Expects a marking feature identifier (place identifier or Marking instance),
|
@@ -11,7 +11,14 @@ class YPetri::Simulation::Recorder
|
|
11
11
|
|
12
12
|
SAMPLING_DECIMAL_PLACES = 5
|
13
13
|
|
14
|
-
attr_reader :features
|
14
|
+
attr_reader :features
|
15
|
+
|
16
|
+
def recording
|
17
|
+
@recording.tap { |ds|
|
18
|
+
ds.instance_variable_set :@settings, simulation.settings( true )
|
19
|
+
}
|
20
|
+
end
|
21
|
+
|
15
22
|
delegate :simulation, to: "self.class"
|
16
23
|
delegate :reconstruct, :reduce, to: :recording
|
17
24
|
|
@@ -26,7 +33,7 @@ class YPetri::Simulation::Recorder
|
|
26
33
|
if recording then reset! recording: recording else reset! end
|
27
34
|
end
|
28
35
|
|
29
|
-
# Construct a new recording based on
|
36
|
+
# Construct a new recording based on the parametrized class Recording().
|
30
37
|
#
|
31
38
|
def new_recording
|
32
39
|
features.new_dataset
|
@@ -152,6 +152,7 @@ module YPetri::Simulation::Timed
|
|
152
152
|
# +@recorder+ attribute.
|
153
153
|
#
|
154
154
|
def init **settings
|
155
|
+
method = settings[:method] # the simulation method
|
155
156
|
if settings.has? :time, syn!: :time_range then # time range given
|
156
157
|
case settings[:time]
|
157
158
|
when Range then
|
@@ -175,6 +176,7 @@ module YPetri::Simulation::Timed
|
|
175
176
|
reset_time!
|
176
177
|
@step = settings[:step] || time_unit
|
177
178
|
@default_sampling = settings[:sampling] || step
|
179
|
+
@core = Core().new( method: method, guarded: guarded )
|
178
180
|
@recorder = Recorder().new sampling: settings[:sampling]
|
179
181
|
end
|
180
182
|
|
@@ -19,7 +19,9 @@ class YPetri::Simulation
|
|
19
19
|
# and initializes the +@recorder+ attribute.
|
20
20
|
#
|
21
21
|
def init **settings
|
22
|
+
method = settings[:method] # the simulation method
|
22
23
|
init_core_and_recorder_subclasses
|
24
|
+
@core = Core().new( method: method, guarded: guarded )
|
23
25
|
@recorder = Recorder().new # init the recorder
|
24
26
|
end
|
25
27
|
|
data/lib/y_petri/simulation.rb
CHANGED
@@ -99,11 +99,10 @@ class YPetri::Simulation
|
|
99
99
|
# arguments has to be set for timed simulations.
|
100
100
|
#
|
101
101
|
def initialize **settings
|
102
|
-
method = settings[:method] # the simulation method
|
103
102
|
@guarded = settings[:guarded] # guarding on / off
|
104
103
|
m_clamps = settings[:marking_clamps] || {}
|
105
104
|
m = settings[:marking]
|
106
|
-
init_m = settings[:initial_marking] ||
|
105
|
+
init_m = settings[:initial_marking] || {}
|
107
106
|
use_default_marking = if settings.has? :use_default_marking then
|
108
107
|
settings[ :use_default_marking ]
|
109
108
|
else true end
|
@@ -125,7 +124,17 @@ class YPetri::Simulation
|
|
125
124
|
# Clamped places' mapping to the clamp values.
|
126
125
|
@marking_clamps = MarkingClamps().load( m_clamps )
|
127
126
|
# Free places' mapping to the initial marking values.
|
128
|
-
|
127
|
+
|
128
|
+
# Use :marking as :initial_marking when possible.
|
129
|
+
if m then
|
130
|
+
init_m_from_init_m = PlaceMapping().load( init_m )
|
131
|
+
init_m_from_marking = PlaceMapping().load( m )
|
132
|
+
rslt = init_m_from_marking.merge init_m_from_init_m
|
133
|
+
@initial_marking = InitialMarking().load( rslt )
|
134
|
+
else
|
135
|
+
@initial_marking = InitialMarking().load( init_m )
|
136
|
+
end
|
137
|
+
|
129
138
|
# Set up the place and transition collections.
|
130
139
|
@places.complete_initial_marking( use_default_marking: use_default_marking )
|
131
140
|
# Correspondence matrix free --> all
|
@@ -157,8 +166,6 @@ class YPetri::Simulation
|
|
157
166
|
@Ts_gradient_closure = transitions.Ts.gradient_closure
|
158
167
|
@TS_rate_closure = transitions.TS.rate_closure
|
159
168
|
end
|
160
|
-
# Init the core.
|
161
|
-
@core = Core().new( method: method, guarded: guarded )
|
162
169
|
# Reset.
|
163
170
|
if m then reset! marking: m else reset! end
|
164
171
|
end
|
data/lib/y_petri/version.rb
CHANGED