Mercurial > repos > siwaa > insilicow
comparison test-data/input/ALIEN-demo/farmer-plan_ALIEN-demo.txt @ 3:3fe3e1e6a40b draft
"planemo upload for repository https://forgemia.inra.fr/insilicow/insilicow-tool commit b530a8209615f225696abe3e0ba49093ff3dc4ad"
author | siwaa |
---|---|
date | Mon, 25 Aug 2025 16:37:43 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
2:2722892ff716 | 3:3fe3e1e6a40b |
---|---|
1 ################################################################################################################# | |
2 # # | |
3 # InSiliCow # | |
4 # Virtual farm specification # | |
5 # # | |
6 ################################################################################################################# | |
7 | |
8 ################################################################################################################# | |
9 #====== GENERAL SETTINGS # | |
10 ################################################################################################################# | |
11 | |
12 #______ Include files | |
13 @include farmer-log.txt # providing log action and trigger | |
14 @include farmer-base.txt # providing basic components | |
15 | |
16 #______ Models: specify models for individual cows | |
17 param_general{ | |
18 garuns_type = garuns_olivier | |
19 rpm_type = rpm_lite | |
20 abortion_type = abortion_olivier | |
21 } | |
22 | |
23 #______ Simulation: provide time range, output database and code name | |
24 init{ | |
25 begin_date = $start_date$ 00:00:00 | |
26 end_date = $stop_date$ 23:59:59 | |
27 output_db = db_events.sqlite | |
28 output_config = config.txt | |
29 name = $sim_id$ | |
30 } | |
31 | |
32 #______ Log Farm information | |
33 link{ | |
34 trigger = init | |
35 action = log_db farm_tag $farm_tag$ | |
36 action = log_db start_date $start_date$ | |
37 action = log_db stop_date $stop_date$ | |
38 action = log_db now_date $now_date$ | |
39 action = log_db latitude $latitude$ | |
40 action = log_db longitude $longitude$ | |
41 } | |
42 | |
43 #______ End of simulation | |
44 trigger{ | |
45 type = chron | |
46 name = tr_end_simu | |
47 scheme = $stop_date$ 23:59:58 | |
48 } | |
49 | |
50 #______ Past and future | |
51 condition{ | |
52 type = chron_range | |
53 name = past | |
54 from = $start_date$ 00:00:00 | |
55 to = $now_date$ 00:00:01 | |
56 } | |
57 | |
58 condition{ | |
59 type = chron_range | |
60 name = future | |
61 from = $now_date$ 00:00:00 | |
62 to = $stop_date$ 23:59:59 | |
63 } | |
64 | |
65 #______ Day one | |
66 trigger{ | |
67 type = chron | |
68 name = day_one_herd | |
69 scheme = $start_date$ 23:59:59 | |
70 } | |
71 trigger{ | |
72 type = custom | |
73 name = day_one | |
74 } | |
75 link{ | |
76 trigger = day_one_herd | |
77 action = broadcast_now day_one | |
78 } | |
79 | |
80 #______ Calving tag | |
81 link{ | |
82 trigger = calving | |
83 condition = calf_sex male | |
84 condition = future | |
85 action = log_db birth_of_male no_tag | |
86 } | |
87 link{ | |
88 trigger = calving | |
89 condition = calf_sex female | |
90 condition = future | |
91 action = log_db birth_of_female no_tag | |
92 } | |
93 | |
94 #______ Manage initial dam | |
95 state{ | |
96 state = INITIAL-DAM | |
97 } | |
98 | |
99 link{ | |
100 trigger = day_one | |
101 action = state_add INITIAL-DAM | |
102 } | |
103 link{ | |
104 trigger = parturition | |
105 condition = is_in INITIAL-DAM | |
106 condition = not is_in IN_WILD | |
107 action = trigger_later tr_delete_cow 1 | |
108 } | |
109 trigger{ | |
110 type = custom | |
111 name = tr_delete_cow | |
112 } | |
113 link{ | |
114 trigger = tr_delete_cow | |
115 action = delete_cow remove_initial_dam | |
116 } | |
117 | |
118 #______ Stoechio | |
119 stoechio{ | |
120 | |
121 } | |
122 | |
123 ################################################################################################################# | |
124 #====== FARMING # | |
125 ################################################################################################################# | |
126 | |
127 #______ Keep cows and calves in farm: no natural mating | |
128 | |
129 link{ | |
130 trigger = enter IN_WILD | |
131 action = state_move IN_WILD IN_FARM | |
132 } | |
133 | |
134 link{ | |
135 trigger = enter WILD_COW | |
136 action = state_move WILD_COW DRY_COW | |
137 } | |
138 | |
139 #______ Remove calf from dam: no natural weaning | |
140 | |
141 link{ | |
142 trigger = enter SUCKLING_CALF | |
143 action = state_move SUCKLING_CALF NURSED_CALF | |
144 } | |
145 | |
146 #______ Milk cows: no natural drying-off at calf weaning | |
147 | |
148 link{ | |
149 trigger = enter NURSING_COW | |
150 action = state_move NURSING_COW LACTATING_COW | |
151 } | |
152 | |
153 #______ Optimal feeding | |
154 | |
155 link{ | |
156 trigger = enter IN_FARM | |
157 action = trigger_later tr_optimal_feeding 0 | |
158 } | |
159 trigger{ | |
160 type = custom | |
161 name = tr_optimal_feeding | |
162 } | |
163 link{ | |
164 trigger = tr_optimal_feeding | |
165 action = change_food optimal | |
166 } | |
167 | |
168 | |
169 ################################################################################################################# | |
170 #====== FARM COMPONENTS: genotype # | |
171 ################################################################################################################# | |
172 | |
173 #______ Genetic_sD: provide Mendelian sampling std dev for transmission of Genetic Scaling Parameters (GSP) | |
174 # GSP_newborn ~ Normal [ (GSP_mother + GSP_father)/2 , GSP_sd ] | within (min, max) | |
175 | |
176 genetic_sd{ | |
177 garuns_olivier.WM{ | |
178 sd = 50 | |
179 min = 200 | |
180 max = 800 | |
181 } | |
182 | |
183 garuns_olivier.khi_M { | |
184 sd = 0.06 | |
185 min = 0.1 | |
186 max = 0.6 | |
187 } | |
188 | |
189 garuns_olivier.b0{ | |
190 sd = 0 | |
191 min = 0.80 | |
192 max = 2.40 | |
193 } | |
194 | |
195 garuns_olivier.nu_X{ | |
196 sd = 0 | |
197 min = 0.2 | |
198 max = 1.8 | |
199 } | |
200 | |
201 garuns_olivier.nu_Y{ | |
202 sd = 0.1 | |
203 min = 0.2 | |
204 max = 1.8 | |
205 } | |
206 | |
207 garuns_olivier.nu_F{ | |
208 sd = 0 | |
209 min = 0.50 | |
210 max = 1.50 | |
211 } | |
212 | |
213 garuns_olivier.nu_P{ | |
214 sd = 0 | |
215 min = 0.50 | |
216 max = 1.50 | |
217 } | |
218 | |
219 garuns_olivier.eD_star{ | |
220 sd = 0 | |
221 min = 9.0 | |
222 max = 15.0 | |
223 } | |
224 | |
225 garuns_olivier.NDF_star{ | |
226 sd = 0 | |
227 min = 0.10 | |
228 max = 0.90 | |
229 } | |
230 | |
231 garuns_olivier.psi{ | |
232 sd = 0 | |
233 min = 0 | |
234 max = 1 | |
235 } | |
236 | |
237 rpm_lite.nu_I{ | |
238 sd = 0.007 | |
239 min = 0.00 | |
240 max = 0.20 | |
241 } | |
242 | |
243 rpm_lite.nu_B{ | |
244 sd = 0.07 | |
245 min = 1.20 | |
246 max = 2.20 | |
247 } | |
248 | |
249 rpm_lite.nu_Z{ | |
250 sd = 0.02 | |
251 min = 0.90 | |
252 max = 1.10 | |
253 } | |
254 } | |
255 | |
256 ################################################################################################################# | |
257 #====== FARM COMPONENTS: herd (genotype-based initialization of individual cows) # | |
258 ################################################################################################################# | |
259 | |
260 #______ INITIALIZATION of ALIEN farm | |
261 | |
262 #______ Initial dam | |
263 init_cow{ | |
264 name=initial_dam | |
265 | |
266 ### ABORTION rules according to days in pregnancy (dip) | |
267 abortion_olivier.delta = constant 3.0 | |
268 abortion_olivier.enabled = never | |
269 abortion_olivier.dip = vector constant 17 ; constant 64 | |
270 abortion_olivier.abo = vector constant 0.02 ; constant 0.005 ; constant 0.0004 | |
271 garuns_olivier.WM = norm99 450 50 #450 ± 25 | |
272 garuns_olivier.khi_M = norm99 0.30 0.03 # 0.33 ± 0.03 | |
273 garuns_olivier.b0 = norm99 1.6 0 # 1.6 ± 0.16 | |
274 garuns_olivier.nu_X = norm99 1 0 # 1.0 ± 0.10 | |
275 garuns_olivier.nu_Y = norm99 1.1 0.1 # 1.0 ± 0.10 | |
276 garuns_olivier.nu_F = norm99 1 0 # 1.0 ± 0.02 | |
277 garuns_olivier.nu_P = norm99 1 0 # 1.0 ± 0.02 | |
278 garuns_olivier.eD_star = norm99 10.7 0 # 10.7 ± 0.5 | |
279 garuns_olivier.NDF_star = norm99 0.5 0 # 0.5 ± 0.02 | |
280 garuns_olivier.psi = norm99 0.5 0 | |
281 rpm_lite.nu_B = norm99 1.7 0.07 # 1.7 ± 0.07 | |
282 rpm_lite.nu_Z = norm99 1 0.02 # 1.0 ± 0.02 | |
283 rpm_lite.nu_I = norm99 0.025 0.007 # 0.026 ± 0.007 | |
284 } | |
285 | |
286 #______ Initial sire | |
287 init_bull{ | |
288 name=semen_initial_sire | |
289 bull.breed_name = dairy | |
290 bull.semens_quality = constant 1.0 | |
291 bull.female_ratio = constant 1.0 | |
292 garuns_olivier.WM = norm99 450 50 #450 ± 25 | |
293 garuns_olivier.khi_M = norm99 0.30 0.03 # 0.33 ± 0.03 | |
294 garuns_olivier.b0 = norm99 1.6 0 # 1.6 ± 0.16 | |
295 garuns_olivier.nu_X = norm99 1 0 # 1.0 ± 0.10 | |
296 garuns_olivier.nu_Y = norm99 1.1 0.1 # 1.0 ± 0.10 | |
297 garuns_olivier.nu_F = norm99 1 0 # 1.0 ± 0.02 | |
298 garuns_olivier.nu_P = norm99 1 0 # 1.0 ± 0.02 | |
299 garuns_olivier.eD_star = norm99 10.7 0 # 10.7 ± 0.5 | |
300 garuns_olivier.NDF_star = norm99 0.5 0 # 0.5 ± 0.02 | |
301 garuns_olivier.psi = norm99 0.5 0 | |
302 rpm_lite.nu_B = norm99 1.7 0.07 # 1.7 ± 0.07 | |
303 rpm_lite.nu_Z = norm99 1 0.02 # 1.0 ± 0.02 | |
304 rpm_lite.nu_I = norm99 0.025 0.007 # 0.026 ± 0.007 | |
305 } | |
306 | |
307 | |
308 #______ Generate dams of each individual cow to create | |
309 | |
310 action{ | |
311 type = buy_cow | |
312 name = buy_dam_of_id0001 | |
313 init_cow = initial_dam | |
314 init_bull = semen_initial_sire | |
315 age = 600 | |
316 days_after_conception = -1 | |
317 number = 1 | |
318 } | |
319 | |
320 action{ | |
321 type = buy_cow | |
322 name = buy_dam_of_id0002 | |
323 init_cow = initial_dam | |
324 init_bull = semen_initial_sire | |
325 age = 600 | |
326 days_after_conception = -30 | |
327 number = 1 | |
328 } | |
329 | |
330 action{ | |
331 type = buy_cow | |
332 name = buy_dam_of_id0003 | |
333 init_cow = initial_dam | |
334 init_bull = semen_initial_sire | |
335 age = 600 | |
336 days_after_conception = -600 | |
337 number = 1 | |
338 } | |
339 | |
340 link{ | |
341 trigger = init | |
342 action = buy_dam_of_id0001 | |
343 action = buy_dam_of_id0002 | |
344 action = buy_dam_of_id0003 | |
345 } | |
346 | |
347 | |
348 ################################################################################################################# | |
349 #====== FARM COMPONENTS: semen (genotype-based initialization of semen from individual bulls) # | |
350 ################################################################################################################# | |
351 | |
352 # Only the semen of individual bulls is generated and used for insemination | |
353 | |
354 breed{ | |
355 breed = dairy | |
356 breed = beef | |
357 } | |
358 | |
359 init_bull{ | |
360 name=semen_dairy_standard | |
361 bull.breed_name = dairy | |
362 | |
363 ### QUALITY & SEX RATIO | |
364 bull.semens_quality = norm99 0.95 0.05 # a number between 0.0 (=never works) and 1.0 (=perfect) | |
365 bull.female_ratio = constant 0.5 # offspring sex ratio. 1.0 = 100%female, 0.0=0%female | |
366 | |
367 ### GARUNS & RPM_lite Genetic Scaling Parameters | |
368 # Genotype sub-block (see genotype_generic.txt) | |
369 | |
370 garuns_olivier.WM = constant 450 #450 | |
371 garuns_olivier.khi_M = constant 0.30 # 0.33 | |
372 garuns_olivier.b0 = constant 1.6 # 1.6 | |
373 garuns_olivier.nu_X = constant 1 # 1.0 | |
374 garuns_olivier.nu_Y = constant 1.1 # 1.0 | |
375 garuns_olivier.nu_F = constant 1 # 1.0 | |
376 garuns_olivier.nu_P = constant 1 # 1.0 | |
377 garuns_olivier.eD_star = constant 10.7 # 10.7 | |
378 garuns_olivier.NDF_star = constant 0.5 # 0.5 | |
379 garuns_olivier.psi = constant 0.5 | |
380 rpm_lite.nu_B = constant 1.7 # 1.7 | |
381 rpm_lite.nu_Z = constant 1 # 1.0 | |
382 rpm_lite.nu_I = constant 0.025 # 0.026 | |
383 } | |
384 | |
385 | |
386 | |
387 ################################################################################################################# | |
388 #====== FARM COMPONENTS: heat detection # | |
389 ################################################################################################################# | |
390 | |
391 #______ Estrous detection method | |
392 estrous_detection_method{ | |
393 name=estrous_detection_default | |
394 | |
395 #When do we observe oestruses | |
396 time_slice = 06:00:00 18:00:00 #00:00:01 23:59:59 | |
397 | |
398 #estrogene is transformed to an expression using a Hill function | |
399 expression_threshold=0.75 #default 0.75 | |
400 expression_stiffness=7 #default 7 | |
401 | |
402 #the oestrus worth an insemination if the memory function is above this threshold | |
403 #THIS threshold is scaled for an observation all the day long | |
404 #if you observe half a day multiply this threshold by 0.5 | |
405 #1.0 is a reasonable base value for all day observations | |
406 detection_threshold=0.05 # 0.1 | |
407 | |
408 #then, the oestrus is truely detected with a chance of | |
409 sensitivity = 0.75 #0.7 | |
410 | |
411 #then an average of wrong_oestrus_per_day are generated | |
412 wrong_oestrus_per_day = 0 #0.00 | |
413 } | |
414 | |
415 ################################################################################################################# | |
416 #====== FARM COMPONENTS: feedstuffs # | |
417 ################################################################################################################# | |
418 | |
419 | |
420 ################################################################################################################# | |
421 #====== FARM COMPONENTS: diets # | |
422 ################################################################################################################# | |
423 | |
424 feed{ | |
425 name = calf_diet | |
426 type = mix | |
427 | |
428 feed = CPL.MLK | |
429 proportion = 1.00 | |
430 } | |
431 | |
432 feed{ | |
433 name = heifer_diet | |
434 type = mix | |
435 | |
436 feed = FO.STR | |
437 proportion = 0.02 | |
438 feed = FO.HAP | |
439 proportion = 0.60 | |
440 feed = FO.GSI | |
441 proportion = 0.32 | |
442 feed = CO.CER | |
443 proportion = 0.05 | |
444 feed = CPL.CMV | |
445 proportion = 0.01 | |
446 } | |
447 | |
448 feed{ | |
449 name = lactation_diet | |
450 type = mix | |
451 | |
452 feed = FO.STR | |
453 proportion = 0.01 | |
454 feed = FO.HAP | |
455 proportion = 0.03 | |
456 feed = FO.GSI | |
457 proportion = 0.04 | |
458 feed = FO.CSI | |
459 proportion = 0.70 | |
460 feed = CO.CER | |
461 proportion = 0.05 | |
462 feed = CO.OSC | |
463 proportion = 0.13 | |
464 feed = CO.ROO | |
465 proportion = 0.03 | |
466 feed = CPL.CMV | |
467 proportion = 0.01 | |
468 } | |
469 | |
470 feed{ | |
471 name = drycow_diet | |
472 type = mix | |
473 | |
474 feed = FO.STR | |
475 proportion = 0.02 | |
476 feed = FO.HAP | |
477 proportion = 0.68 | |
478 feed = FO.CSI | |
479 proportion = 0.08 | |
480 feed = CO.CER | |
481 proportion = 0.05 | |
482 feed = CO.OSC | |
483 proportion = 0.13 | |
484 feed = CO.ROO | |
485 proportion = 0.03 | |
486 feed = CPL.CMV | |
487 proportion = 0.01 | |
488 } | |
489 | |
490 feed{ | |
491 name = pasture_diet | |
492 type = mix | |
493 | |
494 feed = FO.FGX | |
495 proportion = 0.778 | |
496 feed = CO.CER | |
497 proportion = 0.050 | |
498 feed = CO.OSC | |
499 proportion = 0.130 | |
500 feed = CO.TUB | |
501 proportion = 0.002 | |
502 feed = CO.ROO | |
503 proportion = 0.030 | |
504 feed = CPL.CMV | |
505 proportion = 0.010 | |
506 } | |
507 | |
508 | |
509 | |
510 | |
511 ################################################################################################################# | |
512 #====== FARM COMPONENTS: time schemes # | |
513 ################################################################################################################# | |
514 | |
515 | |
516 | |
517 #_______Breeding season: every year from *-03-21 00:00:00 to *-06-21 23:59:59 | |
518 | |
519 condition{ | |
520 type = chron_range | |
521 name = breeding_season | |
522 from = *-03-21 00:00:00 #date_breeding_start | |
523 to = *-06-21 23:59:59 #date_breeding_stop | |
524 } | |
525 | |
526 trigger{ | |
527 type = chron | |
528 name = breeding_start | |
529 scheme = *-03-21 00:00:00 #date_breeding_start | |
530 } | |
531 | |
532 trigger{ | |
533 type = chron | |
534 name = breeding_stop | |
535 scheme = *-06-21 23:59:59 #date_breeding_stop | |
536 } | |
537 | |
538 #_______Outdoor date | |
539 | |
540 trigger{ | |
541 type = chron | |
542 name = outdoor_herd | |
543 scheme = *-04-01 00:00:00 | |
544 } | |
545 trigger{ | |
546 type = custom | |
547 name = outdoor | |
548 } | |
549 link{ | |
550 trigger = outdoor_herd | |
551 action = broadcast_now outdoor | |
552 } | |
553 | |
554 #_______Indoor date | |
555 | |
556 trigger{ | |
557 type = chron | |
558 name = indoor_herd | |
559 scheme = *-10-01 00:00:00 | |
560 } | |
561 trigger{ | |
562 type = custom | |
563 name = indoor | |
564 } | |
565 link{ | |
566 trigger = indoor_herd | |
567 action = broadcast_now indoor | |
568 } | |
569 | |
570 | |
571 | |
572 | |
573 ################################################################################################################# | |
574 #====== FARM COMPONENTS: groups # | |
575 ################################################################################################################# | |
576 | |
577 state{ | |
578 state = REARED_CALF | |
579 state = WEANED_HEIFER | |
580 state = UNEXPECTED_PREGNANT | |
581 state = INSEMINATED | |
582 state = EXPECTED_PREGNANT | |
583 state = EXPECTED_TO_CALVE | |
584 state = CALVED | |
585 state = TO_BREED | |
586 state = TO_CULL | |
587 } | |
588 | |
589 action{ | |
590 type = genericlog | |
591 name = log_states_user | |
592 | |
593 log_type = sqlite | |
594 sqlite_path = db_states.sqlite | |
595 sqlite_table = user_states | |
596 | |
597 #log_type = file | |
598 #file_path = states-user.txt | |
599 #sep_col = \t | |
600 #file_line_flush=no | |
601 | |
602 | |
603 #--- from cow and simulator --- | |
604 column{ | |
605 value = time | |
606 name = time | |
607 sqlite_type = numeric | |
608 } | |
609 | |
610 column{ | |
611 value = state.count.REARED_CALF | |
612 name = REARED_CALF | |
613 sqlite_type = numeric | |
614 } | |
615 | |
616 column{ | |
617 value = state.count.WEANED_HEIFER | |
618 name = WEANED_HEIFER | |
619 sqlite_type = numeric | |
620 } | |
621 | |
622 column{ | |
623 value = state.count.UNEXPECTED_PREGNANT | |
624 name = UNEXPECTED_PREGNANT | |
625 sqlite_type = numeric | |
626 } | |
627 | |
628 column{ | |
629 value = state.count.INSEMINATED | |
630 name = INSEMINATED | |
631 sqlite_type = numeric | |
632 } | |
633 | |
634 column{ | |
635 value = state.count.EXPECTED_PREGNANT | |
636 name = EXPECTED_PREGNANT | |
637 sqlite_type = numeric | |
638 } | |
639 | |
640 column{ | |
641 value = state.count.EXPECTED_TO_CALVE | |
642 name = EXPECTED_TO_CALVE | |
643 sqlite_type = numeric | |
644 } | |
645 | |
646 column{ | |
647 value = state.count.CALVED | |
648 name = CALVED | |
649 sqlite_type = numeric | |
650 } | |
651 | |
652 column{ | |
653 value = state.count.TO_BREED | |
654 name = TO_BREED | |
655 sqlite_type = numeric | |
656 } | |
657 | |
658 column{ | |
659 value = state.count.TO_CULL | |
660 name = TO_CULL | |
661 sqlite_type = numeric | |
662 } | |
663 | |
664 } | |
665 | |
666 link{ | |
667 trigger = every_day_herd | |
668 action = log_states_user | |
669 } | |
670 | |
671 ################################################################################################################# | |
672 #====== FARM COMPONENTS: operations # | |
673 ################################################################################################################# | |
674 | |
675 | |
676 #______ Rear calves at 6 d | |
677 | |
678 trigger{ | |
679 type = custom | |
680 name = tr_rear_calf | |
681 } | |
682 | |
683 link{ | |
684 trigger = enter NURSED_CALF | |
685 action = trigger_later tr_rear_calf 6 | |
686 } | |
687 | |
688 link{ | |
689 trigger = tr_rear_calf | |
690 action = state_add REARED_CALF | |
691 } | |
692 | |
693 #______ Sell calves according to calf pen capacity | |
694 | |
695 link{ | |
696 trigger = every_day | |
697 condition = state_size REARED_CALF > 25 #calf_pen_capacity | |
698 action = sell_calves | |
699 } | |
700 | |
701 trigger{ | |
702 type = custom | |
703 name = tr_sell_calves | |
704 } | |
705 | |
706 action{ | |
707 type = broadcast_now | |
708 name = sell_calves | |
709 condition = is_in REARED_CALF | |
710 sortby = age | |
711 reverse = no | |
712 limit = 1 | |
713 trigger = tr_sell_calves | |
714 } | |
715 | |
716 link{ | |
717 trigger = tr_sell_calves | |
718 action = state_delete REARED_CALF | |
719 action = delete_cow sale of calves | |
720 } | |
721 | |
722 #______ Wean calves at 100 days | |
723 | |
724 link{ | |
725 trigger = every_day | |
726 condition = age >= 100 | |
727 action = state_move REARED_CALF WEANED_HEIFER | |
728 } | |
729 | |
730 #______ Open breeding | |
731 link{ | |
732 trigger = every_day | |
733 condition = age > 450 #breeding_age | |
734 condition = breeding_season | |
735 action = state_move WEANED_HEIFER UNEXPECTED_PREGNANT | |
736 action = state_move TO_BREED UNEXPECTED_PREGNANT | |
737 action = state_move EXPECTED_TO_CALVE UNEXPECTED_PREGNANT | |
738 } | |
739 | |
740 #______ Start estrous detection | |
741 | |
742 link{ | |
743 trigger = enter UNEXPECTED_PREGNANT | |
744 action = estrous_start estrous_detection_default | |
745 } | |
746 | |
747 #______ Detect estrous | |
748 | |
749 link{ | |
750 trigger = estrous | |
751 condition = is_in IN_FARM | |
752 action = state_move EXPECTED_PREGNANT UNEXPECTED_PREGNANT | |
753 } | |
754 | |
755 #______ Inseminate once a day when estrous is detected | |
756 | |
757 trigger{ | |
758 type = custom | |
759 name = tr_move_to_EXPECTED_PREGNANT | |
760 } | |
761 | |
762 link{ | |
763 trigger = tr_move_to_EXPECTED_PREGNANT | |
764 action = state_move INSEMINATED EXPECTED_PREGNANT | |
765 } | |
766 | |
767 link{ | |
768 trigger = estrous | |
769 condition = is_in IN_FARM | |
770 condition = future | |
771 condition = is_in UNEXPECTED_PREGNANT | |
772 action = state_move UNEXPECTED_PREGNANT INSEMINATED | |
773 action = trigger_later tr_move_to_EXPECTED_PREGNANT 1 | |
774 action = log_db 01_INSEMINATION | |
775 action = inseminate semen_dairy_standard | |
776 } | |
777 | |
778 #______ Close breeding | |
779 link{ | |
780 trigger = every_day | |
781 condition = is_in IN_FARM | |
782 condition = not breeding_season | |
783 action = state_move EXPECTED_PREGNANT EXPECTED_TO_CALVE | |
784 action = state_move INSEMINATED EXPECTED_TO_CALVE | |
785 action = estrous_stop | |
786 } | |
787 | |
788 link{ | |
789 trigger = every_day | |
790 condition = is_in IN_FARM | |
791 condition = is_in UNEXPECTED_PREGNANT | |
792 condition = not breeding_season | |
793 action = state_move UNEXPECTED_PREGNANT TO_CULL | |
794 action = log_db delete_cow: unexpected pregnant at the end of breeding season | |
795 action = estrous_stop | |
796 } | |
797 | |
798 | |
799 | |
800 | |
801 | |
802 | |
803 | |
804 #_______ Postpartum management | |
805 | |
806 trigger{ | |
807 type = custom | |
808 name = tr_postpartum | |
809 } | |
810 | |
811 link{ | |
812 trigger = parturition | |
813 action = state_move EXPECTED_TO_CALVE CALVED | |
814 action = trigger_later tr_postpartum 40 # VWP | |
815 } | |
816 | |
817 link{ | |
818 trigger = tr_postpartum | |
819 action = state_move CALVED TO_BREED | |
820 } | |
821 | |
822 #_______ Late abortion management | |
823 | |
824 #Abortions after 210 days in pregnancy are managed by culling | |
825 link{ | |
826 trigger = abortion | |
827 condition = days_after_conception > 210 | |
828 #action = log_db TO_CULL_from_PREGNANT_after_late_fetal_death | |
829 action = log_db delete_cow: after fetal death > 210 days | |
830 action = state_move EXPECTED_PREGNANT TO_CULL | |
831 action = state_move EXPECTED_TO_CALVE TO_CULL | |
832 } | |
833 | |
834 #_______ Drying-off after 305 days in milk if cow is expected to calve | |
835 | |
836 link{ | |
837 trigger = every_day | |
838 condition = is_in IN_FARM | |
839 condition = is_milking | |
840 condition = is_in EXPECTED_TO_CALVE | |
841 condition = days_after_calving >= 305 | |
842 action = stop_milking | |
843 action = log_db stop_milking: pregnant & days_after_calving >= 305 days | |
844 | |
845 } | |
846 | |
847 #_______ Drying-off if milk yield < 5 kg/d | |
848 | |
849 link{ | |
850 trigger = every_day | |
851 condition = is_in IN_FARM | |
852 condition = is_milking | |
853 condition = milk_yield < 5 | |
854 action = stop_milking | |
855 action = log_db stop_milking: milk_yield < 5 kg/d | |
856 | |
857 } | |
858 | |
859 #_______ Remove non-milking cows to cull | |
860 | |
861 link{ | |
862 trigger = every_week | |
863 condition = is_in TO_CULL | |
864 condition = not is_milking | |
865 ## #condition = not is_pregnant | |
866 #action = log_db Remove_ojm | |
867 action = delete_cow every week | |
868 } | |
869 | |
870 #_______ Individual pregnancy diagnosis 28 days after insemination | |
871 | |
872 trigger{ | |
873 type = custom | |
874 name = tr_cow_pregnancy_diagnosis | |
875 } | |
876 | |
877 link{ | |
878 trigger = insemination | |
879 condition = is_in IN_FARM | |
880 action = trigger_later tr_cow_pregnancy_diagnosis 28 | |
881 } | |
882 | |
883 link{ | |
884 trigger = tr_cow_pregnancy_diagnosis | |
885 condition = is_in IN_FARM | |
886 condition = is_in EXPECTED_PREGNANT | |
887 condition = not is_pregnant | |
888 action = state_move EXPECTED_PREGNANT UNEXPECTED_PREGNANT | |
889 } | |
890 | |
891 link{ | |
892 trigger = tr_cow_pregnancy_diagnosis | |
893 condition = is_in IN_FARM | |
894 condition = is_in EXPECTED_TO_CALVE | |
895 condition = not is_pregnant | |
896 action = state_move EXPECTED_TO_CALVE TO_CULL | |
897 action = log_db delete_cow: Negative cow pregnancy diagnosis | |
898 } | |
899 | |
900 | |
901 #_______ Herd pregnancy diagnosis 45 days after end of breeding season | |
902 | |
903 trigger{ | |
904 type = custom | |
905 name = tr_herd_pregnancy_diagnosis | |
906 } | |
907 | |
908 link{ | |
909 trigger = breeding_stop | |
910 action = trigger_later tr_herd_pregnancy_diagnosis 45 | |
911 } | |
912 | |
913 link{ | |
914 trigger = tr_herd_pregnancy_diagnosis | |
915 # action = log_db Herd_pregnancy_diagnosis | |
916 action = broadcast_now tr_cow_pregnancy_diagnosis | |
917 } | |
918 | |
919 #______ Culling rules during breeding season: Cull unexpected pregnant nulliparous at age > 800 days | |
920 | |
921 link{ | |
922 trigger = enter UNEXPECTED_PREGNANT | |
923 condition = parity = 0 | |
924 condition = age > 800 #nulliparous_max_breeding_age | |
925 #action = log_db TO_CULL_from_CYCLING_because_too_old_heifer | |
926 action = state_move UNEXPECTED_PREGNANT TO_CULL | |
927 action = log_db delete_cow: heifer of age > 800 days | |
928 } | |
929 | |
930 #______ Culling rules during breeding season: Cull unexpected pregnant 320 days_after_calving | |
931 link{ | |
932 trigger = enter UNEXPECTED_PREGNANT | |
933 condition = days_after_calving > 320 | |
934 #action = log_db TO_CULL_from_CYCLING_because_too_late_after_calving | |
935 action = log_db delete_cow: days after calving > 320 days | |
936 action = state_move UNEXPECTED_PREGNANT TO_CULL | |
937 } | |
938 | |
939 #______ Culling rules during breeding season: Cull unexpected pregnant after 5 inseminations | |
940 link{ | |
941 trigger = enter UNEXPECTED_PREGNANT | |
942 condition = parity > 0 | |
943 condition = num_insemination_lactation >= 5 | |
944 #action = log_db TO_CULL_from_BREEDING_max_nb_ins | |
945 action = log_db delete_cow: nb of insemination >= 5 | |
946 action = state_move UNEXPECTED_PREGNANT TO_CULL | |
947 } | |
948 | |
949 #______ Stop estrous detection of cows to cull | |
950 | |
951 link{ | |
952 trigger = enter TO_CULL | |
953 action = estrous_stop | |
954 } | |
955 | |
956 | |
957 #______ Feeding plan according to groups # > at rearing: on calf diet | |
958 link{ | |
959 trigger = enter REARED_CALF | |
960 action = change_food calf_diet | |
961 } | |
962 | |
963 # > at weaning: on heifer diet | |
964 link{ | |
965 trigger = enter WEANED_HEIFER | |
966 action = change_food heifer_diet | |
967 } | |
968 | |
969 # > at parturition: on lactation diet | |
970 link{ | |
971 trigger = parturition | |
972 action = change_food lactation_diet | |
973 } | |
974 | |
975 # > at drying-off: on drycow_diet | |
976 link{ | |
977 trigger = stop_milking | |
978 action = change_food drycow_diet | |
979 } | |
980 | |
981 # > OUTDOOR: on pasture diet | |
982 link{ | |
983 trigger = outdoor | |
984 condition = not is_in REARED_CALF | |
985 action = change_food pasture_diet | |
986 } | |
987 | |
988 # > INDOOR: back to diet according to state | |
989 | |
990 link{ | |
991 trigger = indoor | |
992 condition = is_in WEANED_HEIFER | |
993 action = change_food heifer_diet | |
994 } | |
995 | |
996 link{ | |
997 trigger = indoor | |
998 condition = not is_milking | |
999 action = change_food drycow_diet | |
1000 } | |
1001 | |
1002 link{ | |
1003 trigger = indoor | |
1004 condition = is_milking | |
1005 action = change_food lactation_diet | |
1006 } | |
1007 | |
1008 | |
1009 #______ Veal production / use semen from meat breed if expected pregnant > calf_pen_capacity | |
1010 | |
1011 #______ Detect high producing cows > use high-grade semen > rear preferentially high-grade calves (=Renewal) | |
1012 | |
1013 #______ Use extended lactation | |
1014 | |
1015 #______ Cull oldest cow | |
1016 | |
1017 | |
1018 ################################################################################################################# | |
1019 #====== FARM COMPONENTS: transfers # | |
1020 ################################################################################################################# | |
1021 | |
1022 | |
1023 ################################################################################################################# | |
1024 #====== FARM COMPONENTS: perturbations # | |
1025 ################################################################################################################# | |
1026 | |
1027 | |
1028 ################################################################################################################# | |
1029 #====== FARM COMPONENTS: parcels # | |
1030 ################################################################################################################# | |
1031 | |
1032 |