Mercurial > repos > siwaa > insilicow
view test-data/input/ALIEN-demo/farmer-plan_ALIEN-demo.txt @ 3:3fe3e1e6a40b draft default tip
"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 |
line wrap: on
line source
################################################################################################################# # # # InSiliCow # # Virtual farm specification # # # ################################################################################################################# ################################################################################################################# #====== GENERAL SETTINGS # ################################################################################################################# #______ Include files @include farmer-log.txt # providing log action and trigger @include farmer-base.txt # providing basic components #______ Models: specify models for individual cows param_general{ garuns_type = garuns_olivier rpm_type = rpm_lite abortion_type = abortion_olivier } #______ Simulation: provide time range, output database and code name init{ begin_date = $start_date$ 00:00:00 end_date = $stop_date$ 23:59:59 output_db = db_events.sqlite output_config = config.txt name = $sim_id$ } #______ Log Farm information link{ trigger = init action = log_db farm_tag $farm_tag$ action = log_db start_date $start_date$ action = log_db stop_date $stop_date$ action = log_db now_date $now_date$ action = log_db latitude $latitude$ action = log_db longitude $longitude$ } #______ End of simulation trigger{ type = chron name = tr_end_simu scheme = $stop_date$ 23:59:58 } #______ Past and future condition{ type = chron_range name = past from = $start_date$ 00:00:00 to = $now_date$ 00:00:01 } condition{ type = chron_range name = future from = $now_date$ 00:00:00 to = $stop_date$ 23:59:59 } #______ Day one trigger{ type = chron name = day_one_herd scheme = $start_date$ 23:59:59 } trigger{ type = custom name = day_one } link{ trigger = day_one_herd action = broadcast_now day_one } #______ Calving tag link{ trigger = calving condition = calf_sex male condition = future action = log_db birth_of_male no_tag } link{ trigger = calving condition = calf_sex female condition = future action = log_db birth_of_female no_tag } #______ Manage initial dam state{ state = INITIAL-DAM } link{ trigger = day_one action = state_add INITIAL-DAM } link{ trigger = parturition condition = is_in INITIAL-DAM condition = not is_in IN_WILD action = trigger_later tr_delete_cow 1 } trigger{ type = custom name = tr_delete_cow } link{ trigger = tr_delete_cow action = delete_cow remove_initial_dam } #______ Stoechio stoechio{ } ################################################################################################################# #====== FARMING # ################################################################################################################# #______ Keep cows and calves in farm: no natural mating link{ trigger = enter IN_WILD action = state_move IN_WILD IN_FARM } link{ trigger = enter WILD_COW action = state_move WILD_COW DRY_COW } #______ Remove calf from dam: no natural weaning link{ trigger = enter SUCKLING_CALF action = state_move SUCKLING_CALF NURSED_CALF } #______ Milk cows: no natural drying-off at calf weaning link{ trigger = enter NURSING_COW action = state_move NURSING_COW LACTATING_COW } #______ Optimal feeding link{ trigger = enter IN_FARM action = trigger_later tr_optimal_feeding 0 } trigger{ type = custom name = tr_optimal_feeding } link{ trigger = tr_optimal_feeding action = change_food optimal } ################################################################################################################# #====== FARM COMPONENTS: genotype # ################################################################################################################# #______ Genetic_sD: provide Mendelian sampling std dev for transmission of Genetic Scaling Parameters (GSP) # GSP_newborn ~ Normal [ (GSP_mother + GSP_father)/2 , GSP_sd ] | within (min, max) genetic_sd{ garuns_olivier.WM{ sd = 50 min = 200 max = 800 } garuns_olivier.khi_M { sd = 0.06 min = 0.1 max = 0.6 } garuns_olivier.b0{ sd = 0 min = 0.80 max = 2.40 } garuns_olivier.nu_X{ sd = 0 min = 0.2 max = 1.8 } garuns_olivier.nu_Y{ sd = 0.1 min = 0.2 max = 1.8 } garuns_olivier.nu_F{ sd = 0 min = 0.50 max = 1.50 } garuns_olivier.nu_P{ sd = 0 min = 0.50 max = 1.50 } garuns_olivier.eD_star{ sd = 0 min = 9.0 max = 15.0 } garuns_olivier.NDF_star{ sd = 0 min = 0.10 max = 0.90 } garuns_olivier.psi{ sd = 0 min = 0 max = 1 } rpm_lite.nu_I{ sd = 0.007 min = 0.00 max = 0.20 } rpm_lite.nu_B{ sd = 0.07 min = 1.20 max = 2.20 } rpm_lite.nu_Z{ sd = 0.02 min = 0.90 max = 1.10 } } ################################################################################################################# #====== FARM COMPONENTS: herd (genotype-based initialization of individual cows) # ################################################################################################################# #______ INITIALIZATION of ALIEN farm #______ Initial dam init_cow{ name=initial_dam ### ABORTION rules according to days in pregnancy (dip) abortion_olivier.delta = constant 3.0 abortion_olivier.enabled = never abortion_olivier.dip = vector constant 17 ; constant 64 abortion_olivier.abo = vector constant 0.02 ; constant 0.005 ; constant 0.0004 garuns_olivier.WM = norm99 450 50 #450 ± 25 garuns_olivier.khi_M = norm99 0.30 0.03 # 0.33 ± 0.03 garuns_olivier.b0 = norm99 1.6 0 # 1.6 ± 0.16 garuns_olivier.nu_X = norm99 1 0 # 1.0 ± 0.10 garuns_olivier.nu_Y = norm99 1.1 0.1 # 1.0 ± 0.10 garuns_olivier.nu_F = norm99 1 0 # 1.0 ± 0.02 garuns_olivier.nu_P = norm99 1 0 # 1.0 ± 0.02 garuns_olivier.eD_star = norm99 10.7 0 # 10.7 ± 0.5 garuns_olivier.NDF_star = norm99 0.5 0 # 0.5 ± 0.02 garuns_olivier.psi = norm99 0.5 0 rpm_lite.nu_B = norm99 1.7 0.07 # 1.7 ± 0.07 rpm_lite.nu_Z = norm99 1 0.02 # 1.0 ± 0.02 rpm_lite.nu_I = norm99 0.025 0.007 # 0.026 ± 0.007 } #______ Initial sire init_bull{ name=semen_initial_sire bull.breed_name = dairy bull.semens_quality = constant 1.0 bull.female_ratio = constant 1.0 garuns_olivier.WM = norm99 450 50 #450 ± 25 garuns_olivier.khi_M = norm99 0.30 0.03 # 0.33 ± 0.03 garuns_olivier.b0 = norm99 1.6 0 # 1.6 ± 0.16 garuns_olivier.nu_X = norm99 1 0 # 1.0 ± 0.10 garuns_olivier.nu_Y = norm99 1.1 0.1 # 1.0 ± 0.10 garuns_olivier.nu_F = norm99 1 0 # 1.0 ± 0.02 garuns_olivier.nu_P = norm99 1 0 # 1.0 ± 0.02 garuns_olivier.eD_star = norm99 10.7 0 # 10.7 ± 0.5 garuns_olivier.NDF_star = norm99 0.5 0 # 0.5 ± 0.02 garuns_olivier.psi = norm99 0.5 0 rpm_lite.nu_B = norm99 1.7 0.07 # 1.7 ± 0.07 rpm_lite.nu_Z = norm99 1 0.02 # 1.0 ± 0.02 rpm_lite.nu_I = norm99 0.025 0.007 # 0.026 ± 0.007 } #______ Generate dams of each individual cow to create action{ type = buy_cow name = buy_dam_of_id0001 init_cow = initial_dam init_bull = semen_initial_sire age = 600 days_after_conception = -1 number = 1 } action{ type = buy_cow name = buy_dam_of_id0002 init_cow = initial_dam init_bull = semen_initial_sire age = 600 days_after_conception = -30 number = 1 } action{ type = buy_cow name = buy_dam_of_id0003 init_cow = initial_dam init_bull = semen_initial_sire age = 600 days_after_conception = -600 number = 1 } link{ trigger = init action = buy_dam_of_id0001 action = buy_dam_of_id0002 action = buy_dam_of_id0003 } ################################################################################################################# #====== FARM COMPONENTS: semen (genotype-based initialization of semen from individual bulls) # ################################################################################################################# # Only the semen of individual bulls is generated and used for insemination breed{ breed = dairy breed = beef } init_bull{ name=semen_dairy_standard bull.breed_name = dairy ### QUALITY & SEX RATIO bull.semens_quality = norm99 0.95 0.05 # a number between 0.0 (=never works) and 1.0 (=perfect) bull.female_ratio = constant 0.5 # offspring sex ratio. 1.0 = 100%female, 0.0=0%female ### GARUNS & RPM_lite Genetic Scaling Parameters # Genotype sub-block (see genotype_generic.txt) garuns_olivier.WM = constant 450 #450 garuns_olivier.khi_M = constant 0.30 # 0.33 garuns_olivier.b0 = constant 1.6 # 1.6 garuns_olivier.nu_X = constant 1 # 1.0 garuns_olivier.nu_Y = constant 1.1 # 1.0 garuns_olivier.nu_F = constant 1 # 1.0 garuns_olivier.nu_P = constant 1 # 1.0 garuns_olivier.eD_star = constant 10.7 # 10.7 garuns_olivier.NDF_star = constant 0.5 # 0.5 garuns_olivier.psi = constant 0.5 rpm_lite.nu_B = constant 1.7 # 1.7 rpm_lite.nu_Z = constant 1 # 1.0 rpm_lite.nu_I = constant 0.025 # 0.026 } ################################################################################################################# #====== FARM COMPONENTS: heat detection # ################################################################################################################# #______ Estrous detection method estrous_detection_method{ name=estrous_detection_default #When do we observe oestruses time_slice = 06:00:00 18:00:00 #00:00:01 23:59:59 #estrogene is transformed to an expression using a Hill function expression_threshold=0.75 #default 0.75 expression_stiffness=7 #default 7 #the oestrus worth an insemination if the memory function is above this threshold #THIS threshold is scaled for an observation all the day long #if you observe half a day multiply this threshold by 0.5 #1.0 is a reasonable base value for all day observations detection_threshold=0.05 # 0.1 #then, the oestrus is truely detected with a chance of sensitivity = 0.75 #0.7 #then an average of wrong_oestrus_per_day are generated wrong_oestrus_per_day = 0 #0.00 } ################################################################################################################# #====== FARM COMPONENTS: feedstuffs # ################################################################################################################# ################################################################################################################# #====== FARM COMPONENTS: diets # ################################################################################################################# feed{ name = calf_diet type = mix feed = CPL.MLK proportion = 1.00 } feed{ name = heifer_diet type = mix feed = FO.STR proportion = 0.02 feed = FO.HAP proportion = 0.60 feed = FO.GSI proportion = 0.32 feed = CO.CER proportion = 0.05 feed = CPL.CMV proportion = 0.01 } feed{ name = lactation_diet type = mix feed = FO.STR proportion = 0.01 feed = FO.HAP proportion = 0.03 feed = FO.GSI proportion = 0.04 feed = FO.CSI proportion = 0.70 feed = CO.CER proportion = 0.05 feed = CO.OSC proportion = 0.13 feed = CO.ROO proportion = 0.03 feed = CPL.CMV proportion = 0.01 } feed{ name = drycow_diet type = mix feed = FO.STR proportion = 0.02 feed = FO.HAP proportion = 0.68 feed = FO.CSI proportion = 0.08 feed = CO.CER proportion = 0.05 feed = CO.OSC proportion = 0.13 feed = CO.ROO proportion = 0.03 feed = CPL.CMV proportion = 0.01 } feed{ name = pasture_diet type = mix feed = FO.FGX proportion = 0.778 feed = CO.CER proportion = 0.050 feed = CO.OSC proportion = 0.130 feed = CO.TUB proportion = 0.002 feed = CO.ROO proportion = 0.030 feed = CPL.CMV proportion = 0.010 } ################################################################################################################# #====== FARM COMPONENTS: time schemes # ################################################################################################################# #_______Breeding season: every year from *-03-21 00:00:00 to *-06-21 23:59:59 condition{ type = chron_range name = breeding_season from = *-03-21 00:00:00 #date_breeding_start to = *-06-21 23:59:59 #date_breeding_stop } trigger{ type = chron name = breeding_start scheme = *-03-21 00:00:00 #date_breeding_start } trigger{ type = chron name = breeding_stop scheme = *-06-21 23:59:59 #date_breeding_stop } #_______Outdoor date trigger{ type = chron name = outdoor_herd scheme = *-04-01 00:00:00 } trigger{ type = custom name = outdoor } link{ trigger = outdoor_herd action = broadcast_now outdoor } #_______Indoor date trigger{ type = chron name = indoor_herd scheme = *-10-01 00:00:00 } trigger{ type = custom name = indoor } link{ trigger = indoor_herd action = broadcast_now indoor } ################################################################################################################# #====== FARM COMPONENTS: groups # ################################################################################################################# state{ state = REARED_CALF state = WEANED_HEIFER state = UNEXPECTED_PREGNANT state = INSEMINATED state = EXPECTED_PREGNANT state = EXPECTED_TO_CALVE state = CALVED state = TO_BREED state = TO_CULL } action{ type = genericlog name = log_states_user log_type = sqlite sqlite_path = db_states.sqlite sqlite_table = user_states #log_type = file #file_path = states-user.txt #sep_col = \t #file_line_flush=no #--- from cow and simulator --- column{ value = time name = time sqlite_type = numeric } column{ value = state.count.REARED_CALF name = REARED_CALF sqlite_type = numeric } column{ value = state.count.WEANED_HEIFER name = WEANED_HEIFER sqlite_type = numeric } column{ value = state.count.UNEXPECTED_PREGNANT name = UNEXPECTED_PREGNANT sqlite_type = numeric } column{ value = state.count.INSEMINATED name = INSEMINATED sqlite_type = numeric } column{ value = state.count.EXPECTED_PREGNANT name = EXPECTED_PREGNANT sqlite_type = numeric } column{ value = state.count.EXPECTED_TO_CALVE name = EXPECTED_TO_CALVE sqlite_type = numeric } column{ value = state.count.CALVED name = CALVED sqlite_type = numeric } column{ value = state.count.TO_BREED name = TO_BREED sqlite_type = numeric } column{ value = state.count.TO_CULL name = TO_CULL sqlite_type = numeric } } link{ trigger = every_day_herd action = log_states_user } ################################################################################################################# #====== FARM COMPONENTS: operations # ################################################################################################################# #______ Rear calves at 6 d trigger{ type = custom name = tr_rear_calf } link{ trigger = enter NURSED_CALF action = trigger_later tr_rear_calf 6 } link{ trigger = tr_rear_calf action = state_add REARED_CALF } #______ Sell calves according to calf pen capacity link{ trigger = every_day condition = state_size REARED_CALF > 25 #calf_pen_capacity action = sell_calves } trigger{ type = custom name = tr_sell_calves } action{ type = broadcast_now name = sell_calves condition = is_in REARED_CALF sortby = age reverse = no limit = 1 trigger = tr_sell_calves } link{ trigger = tr_sell_calves action = state_delete REARED_CALF action = delete_cow sale of calves } #______ Wean calves at 100 days link{ trigger = every_day condition = age >= 100 action = state_move REARED_CALF WEANED_HEIFER } #______ Open breeding link{ trigger = every_day condition = age > 450 #breeding_age condition = breeding_season action = state_move WEANED_HEIFER UNEXPECTED_PREGNANT action = state_move TO_BREED UNEXPECTED_PREGNANT action = state_move EXPECTED_TO_CALVE UNEXPECTED_PREGNANT } #______ Start estrous detection link{ trigger = enter UNEXPECTED_PREGNANT action = estrous_start estrous_detection_default } #______ Detect estrous link{ trigger = estrous condition = is_in IN_FARM action = state_move EXPECTED_PREGNANT UNEXPECTED_PREGNANT } #______ Inseminate once a day when estrous is detected trigger{ type = custom name = tr_move_to_EXPECTED_PREGNANT } link{ trigger = tr_move_to_EXPECTED_PREGNANT action = state_move INSEMINATED EXPECTED_PREGNANT } link{ trigger = estrous condition = is_in IN_FARM condition = future condition = is_in UNEXPECTED_PREGNANT action = state_move UNEXPECTED_PREGNANT INSEMINATED action = trigger_later tr_move_to_EXPECTED_PREGNANT 1 action = log_db 01_INSEMINATION action = inseminate semen_dairy_standard } #______ Close breeding link{ trigger = every_day condition = is_in IN_FARM condition = not breeding_season action = state_move EXPECTED_PREGNANT EXPECTED_TO_CALVE action = state_move INSEMINATED EXPECTED_TO_CALVE action = estrous_stop } link{ trigger = every_day condition = is_in IN_FARM condition = is_in UNEXPECTED_PREGNANT condition = not breeding_season action = state_move UNEXPECTED_PREGNANT TO_CULL action = log_db delete_cow: unexpected pregnant at the end of breeding season action = estrous_stop } #_______ Postpartum management trigger{ type = custom name = tr_postpartum } link{ trigger = parturition action = state_move EXPECTED_TO_CALVE CALVED action = trigger_later tr_postpartum 40 # VWP } link{ trigger = tr_postpartum action = state_move CALVED TO_BREED } #_______ Late abortion management #Abortions after 210 days in pregnancy are managed by culling link{ trigger = abortion condition = days_after_conception > 210 #action = log_db TO_CULL_from_PREGNANT_after_late_fetal_death action = log_db delete_cow: after fetal death > 210 days action = state_move EXPECTED_PREGNANT TO_CULL action = state_move EXPECTED_TO_CALVE TO_CULL } #_______ Drying-off after 305 days in milk if cow is expected to calve link{ trigger = every_day condition = is_in IN_FARM condition = is_milking condition = is_in EXPECTED_TO_CALVE condition = days_after_calving >= 305 action = stop_milking action = log_db stop_milking: pregnant & days_after_calving >= 305 days } #_______ Drying-off if milk yield < 5 kg/d link{ trigger = every_day condition = is_in IN_FARM condition = is_milking condition = milk_yield < 5 action = stop_milking action = log_db stop_milking: milk_yield < 5 kg/d } #_______ Remove non-milking cows to cull link{ trigger = every_week condition = is_in TO_CULL condition = not is_milking ## #condition = not is_pregnant #action = log_db Remove_ojm action = delete_cow every week } #_______ Individual pregnancy diagnosis 28 days after insemination trigger{ type = custom name = tr_cow_pregnancy_diagnosis } link{ trigger = insemination condition = is_in IN_FARM action = trigger_later tr_cow_pregnancy_diagnosis 28 } link{ trigger = tr_cow_pregnancy_diagnosis condition = is_in IN_FARM condition = is_in EXPECTED_PREGNANT condition = not is_pregnant action = state_move EXPECTED_PREGNANT UNEXPECTED_PREGNANT } link{ trigger = tr_cow_pregnancy_diagnosis condition = is_in IN_FARM condition = is_in EXPECTED_TO_CALVE condition = not is_pregnant action = state_move EXPECTED_TO_CALVE TO_CULL action = log_db delete_cow: Negative cow pregnancy diagnosis } #_______ Herd pregnancy diagnosis 45 days after end of breeding season trigger{ type = custom name = tr_herd_pregnancy_diagnosis } link{ trigger = breeding_stop action = trigger_later tr_herd_pregnancy_diagnosis 45 } link{ trigger = tr_herd_pregnancy_diagnosis # action = log_db Herd_pregnancy_diagnosis action = broadcast_now tr_cow_pregnancy_diagnosis } #______ Culling rules during breeding season: Cull unexpected pregnant nulliparous at age > 800 days link{ trigger = enter UNEXPECTED_PREGNANT condition = parity = 0 condition = age > 800 #nulliparous_max_breeding_age #action = log_db TO_CULL_from_CYCLING_because_too_old_heifer action = state_move UNEXPECTED_PREGNANT TO_CULL action = log_db delete_cow: heifer of age > 800 days } #______ Culling rules during breeding season: Cull unexpected pregnant 320 days_after_calving link{ trigger = enter UNEXPECTED_PREGNANT condition = days_after_calving > 320 #action = log_db TO_CULL_from_CYCLING_because_too_late_after_calving action = log_db delete_cow: days after calving > 320 days action = state_move UNEXPECTED_PREGNANT TO_CULL } #______ Culling rules during breeding season: Cull unexpected pregnant after 5 inseminations link{ trigger = enter UNEXPECTED_PREGNANT condition = parity > 0 condition = num_insemination_lactation >= 5 #action = log_db TO_CULL_from_BREEDING_max_nb_ins action = log_db delete_cow: nb of insemination >= 5 action = state_move UNEXPECTED_PREGNANT TO_CULL } #______ Stop estrous detection of cows to cull link{ trigger = enter TO_CULL action = estrous_stop } #______ Feeding plan according to groups # > at rearing: on calf diet link{ trigger = enter REARED_CALF action = change_food calf_diet } # > at weaning: on heifer diet link{ trigger = enter WEANED_HEIFER action = change_food heifer_diet } # > at parturition: on lactation diet link{ trigger = parturition action = change_food lactation_diet } # > at drying-off: on drycow_diet link{ trigger = stop_milking action = change_food drycow_diet } # > OUTDOOR: on pasture diet link{ trigger = outdoor condition = not is_in REARED_CALF action = change_food pasture_diet } # > INDOOR: back to diet according to state link{ trigger = indoor condition = is_in WEANED_HEIFER action = change_food heifer_diet } link{ trigger = indoor condition = not is_milking action = change_food drycow_diet } link{ trigger = indoor condition = is_milking action = change_food lactation_diet } #______ Veal production / use semen from meat breed if expected pregnant > calf_pen_capacity #______ Detect high producing cows > use high-grade semen > rear preferentially high-grade calves (=Renewal) #______ Use extended lactation #______ Cull oldest cow ################################################################################################################# #====== FARM COMPONENTS: transfers # ################################################################################################################# ################################################################################################################# #====== FARM COMPONENTS: perturbations # ################################################################################################################# ################################################################################################################# #====== FARM COMPONENTS: parcels # #################################################################################################################