-
Notifications
You must be signed in to change notification settings - Fork 0
/
vsm model - V4_Git.lisp
342 lines (308 loc) · 7.68 KB
/
vsm model - V4_Git.lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
;;Siyu Wu May 24th 2024, Bosch PA
;revised using Dan's feedback, cancel deterministric, add noise to the utility, change the reward to the result production rules rather than the same ones with utility, delete unneccessary parameter setting, while still keep the weight and blank the same (need further work on this though)
;;This is an ACT-R model to optimize time reduction within assembly sectors. This model has two levels of expertise in decision making, one is novice and one is expert.
;;Here's how expert level will work:
;;Calculate Predicted Defect Rate Increase: The model will first calculate the predicted increase in defect rate for both the pre-assembly and assembly ;;phases after a time reduction using variables of OEE CT and time.
;;Compare Defect Rate Increases: The model will then compare the predicted defect rate increases for both sections.
;;Choose Optimal Sector: The section with the lower predicted defect rate increase will be identified as the optimal choice for time reduction.
;;ACT-R
(clear-all)
(define-model vsm
;; parameters
;(sgp :seed (10000 100))
(sgp :v t :esc t :trace-detail low :MODEL-WARNINGS NIL :ul t :ult t :egs 3)
;chunk-type
(chunk-type decision strategy state time OEE1 OEE2 CT1 CT2)
(chunk-type decision-metrics preweight weight defect-rate1 defect-rate2 dif)
;goal-chunk
(define-chunks
(goer isa decision state choose-strategy time blank OEE1 blank OEE2 blank CT1 blank CT2 blank)
(choose-strategy)(decide-strategy)(brute-strategy)(brute-decision)(naive-decision) (perceive)(weight)(next-weight) (preassemble)(assemble)(assemble-perceive)(compare)(decide)(next-decide)(result)(stop)(blank))
;start goal buffer
(goal-focus goer)
;prodcution rules
;; expert production sets
;;choose -strategy
(p choose-strategy
=goal>
isa decision
state choose-strategy
==>
=goal>
isa decision
state decide-strategy
)
;; choose expert strategy
( p expert-strategy
=goal>
isa decision
state decide-strategy
==>
=goal>
isa decision
state perceive
)
;; start retrival chunks for task target and decision metrics
(p perceive
=goal>
isa decision
state perceive
==>
=goal>
isa decision
state weight
time X
OEE1 X
CT1 X
OEE2 X
CT2 X
)
;;Consider the weights of preassemble in decision making
(p preassemble-weight
=goal>
isa decision
state weight
time =time
OEE1 =OEE1
CT1 =CT1
OEE2 =OEE2
CT2 =CT2
?imaginal>
buffer empty
state free
==>
=goal>
!bind! =aval (/ (* =CT1 =OEE2) (+ (* =CT1 =OEE2) (* =CT2 =OEE1)))
; !bind! =bval (/ (* =CT2 =OEE1) (+ (* =CT1 =OEE2) (* =CT2 =OEE1)))
!output! (=aval)
!output! ("caculate the preassemble defect decision weight")
; !output! (=bval)
; !output! ("calculate the assemble defect decision weight")
+Imaginal>
preweight =aval
weight nil
=goal>
isa decision
state next-weight
)
;; consider weights of assemble in decision making
(p assemble-weight
=goal>
isa decision
state next-weight
time =time
OEE1 =OEE1
CT1 =CT1
OEE2 =OEE2
CT2 =CT2
=imaginal>
preweight =aval
weight nil
==>
!bind! =bval (/ (* =CT2 =OEE1) (+ (* =CT1 =OEE2) (* =CT2 =OEE1)))
!output! (=bval)
!output! ("calculate the assemble defect decision weight")
=goal>
isa decision
state preassemble
+Imaginal>
preweight =aval
weight =bval
)
;; calculate preassemble defect rate1 increase and put into imaginal
(p preassemble
=goal>
isa decision
state preassemble
time =time
OEE1 =OEE1
CT1 =CT1
OEE2 =OEE2
CT2 =CT2
=imaginal>
preweight =aval
weight =bval
defect-rate1 nil
==>
!bind! =cval(* (* =time (- 1 =OEE1) ) =aval)
!output! (=cval)
!output! ("calculate the final preassemble defect rate")
;!bind! =dval(* (* =time (- 1 =OEE2) ) =bval)
+Imaginal>
; preweight =aval
weight =bval
defect-rate1 =cval
defect-rate2 nil
=goal>
isa decision
state assemble-perceive
)
;;calculate assemble defectrate2 increase and put into imaginal buffer
(p assemble
=Imaginal>
; preweight =aval
weight =bval
defect-rate1 =cval
defect-rate2 nil
=goal>
isa decision
state assemble-perceive
time =time
OEE2 =OEE2
CT2 =CT2
==>
!bind! =dval(* (* =time (- 1 =OEE2) ) =bval)
!output! (=dval)
!output! ("calclate the assemble defect rate")
+imaginal>
defect-rate1 =cval
defect-rate2 =dval
=goal>
isa decision
state compare
)
;; compare the defect rate increase
(p compare
=goal>
isa decision
state compare
=imaginal>
defect-rate1 =cval
defect-rate2 =dval
==>
=goal>
isa decision
state decide
!bind! =val(- =cval =dval)
!output! (=val)
=imaginal>
dif =val
)
;;Decide which sector to reduce
(p decide
=goal>
isa decision
state decide
=imaginal>
< dif 0
==>
=goal>
isa decision
state result
!output! ("choose preassemble has better stable output!")
)
(p redecide
=goal>
isa decision
state decide
=imaginal>
> dif 0
==>
=goal>
isa decision
state result
!output! ("choose assemble has better stable output!")
)
;; finish task and loop back to start another trail
(p stop
=goal>
isa decision
state result
==>
=goal>
isa decision
state choose-strategy
!output! ("this is the end of one decision making")
)
;; production sets for intermediate strategy
; choose intermediate strategy
(P decide-brute
=goal>
isa decision
state decide-strategy
==>
=goal>
isa decision
state brute-strategy
time X
OEE1 X
CT1 X
OEE2 X
CT2 X
)
; retrival chunks and compare the OEE of preassemble and assemble
(p brute-strategy
=goal>
isa decision
state brute-strategy
time =time
OEE1 =OEE1
CT1 =CT1
OEE2 =OEE2
CT2 =CT2
?imaginal>
buffer empty
state free
==>
!bind! =val(- =OEE1 =OEE2)
!output! (=val)
=goal>
isa decision
state brute-decision
+imaginal>
dif =val
)
;; compare the dif and make decison using intuition "It's not wise to cutting off the good part from a fruit", then loop back to next trail
(p brute-choice
=goal>
isa decision
state brute-decision
=imaginal>
> dif 0
==>
=goal>
isa decision
state choose-strategy
!output! ("choose assemble has better stable output!")
)
(p brute-next-choice
=goal>
isa decision
state brute-decision
=imaginal>
< dif 0
==>
=goal>
isa decision
state choose-strategy
!output! ("choose preassemble has better stable output!")
)
;; novice production sets
;; make the decision using intuition " defect happen in the preassemble will amplified during the later phases" and only goal chunk, then loop back to next trail.
(p naive-choice
=goal>
isa decision
state decide-strategy
==>
=goal>
isa decision
state naive-decision
)
(p naive-decision
=goal>
isa decision
state naive-decision
==>
=goal>
isa decision
state choose-strategy
!output! ("assebly is always the right place to reduce time!")
)
(spp naive-choice :u 10) ;higher than other to emulate the situation of all the tasks start with beginer decision making
(spp decide-brute :u 0)
(spp expert-strategy :u 0)
;reward or penalty each decision's result
(spp naive-decision :reward 0)
(spp brute-strategy :reward 5)
(spp compare :reward 20) ; Increased to make it more attractive
)