Skip to content

Create option for flexible customized semen allocation strategies #2779

Description

@jadamchick

update 6/17 -- need to update the design to...

  • eliminate the "basic v advanced" functionality, and work out how to toggle the expanded selections here on/off and which inputs to have required in all cases
  • include the ability to specify a certain # of AI's per time period to a specific semen type for a given population (eg 10 AI's per week to sexed semen in first lactation cows)

Is your feature request related to a problem? Please describe.
current behavior only allows a single weighted average male calf rate that applies to all breedings, with no further differentiation of semen types given to distinct populations of animals, and resulting differences in calves born or conception rates

The idea is that this design is developed in parallel with Issue #1700 so that the genetic ranking method is implemented with an eye for future expansion.

Describe the solution you'd like
1- allow the user the option to enter basic or advanced repro information
2- if advanced, allow the user to define their own semen types and animal breeding populations who are assigned a specific semen type and conception rate

I created a new section ("repro_inputs") that would be used in animal.json and have pasted an example below (no specific herd, for illustration purposes only).
The basic structure is:

  • choose repro inputs level of detail (basic or advanced)
  • basic repro inputs: heifer, cow
  • advanced repro inputs:
    • semen types
    • option to enter custom genetic index
    • heifers: general inputs, define breeding populations and assign semen type to each
    • cows: general inputs, define breeding populations and assign semen type to each

High points:

  • Create basic & advanced repro inputs sections and the user can choose which they would like to use

  • If you choose advanced, you create user-defined semen types and breeding populations, with the option to define a custom genetic index

    • Semen types are characterized by % of dairy females, dairy males, beef females, beef males
    • Breeding populations can be defined by as many or few attributes as the user wants
      - Example attributes you might use: parity, breed, [custom genetic index], insemination_number, breeding_method (eg TAI v. ED breedings)
      - Attributes can be type "rank" or type "value"
      - Rank attributes will be assessed based on percentile when all cows (or heifers) are ranked
      - Value attributes will be assessed based on value of the attribute
      - Attributes are evaluated by an expression that can be a point value, a range, or an inequality
      - For example: > 1 or 50-80 or 3
  • User assigns a semen type to each breeding population

  • User assigns a conception risk for each breeding population

Additional notes:

  • I moved some of the repro inputs around to be more grouped into logical groupings... nothing is final, just to get a flavor for what it could be like
  • If we actually want to use "breed" to create crossbred calves (i.e. breed HO to JE to get Hol-Jersey crosses), then we will need to develop out the semen type a bit more to specify breed and downstream effects
  • I know that some of this will depend on SWE magic (able to choose which inputs to use, referencing the custom genetic index, evaluating expressions written in as strings...) but hoping that we can iterate and figure out something doable!

Example repro_inputs section of animal.json:

	"repro_information": {
		"repro_input_level": "advanced",
		"basic_repro_inputs": {
			"heifers": {
				"breeding_start_day": 400,
				"estrus_detection_rate": 0.9,
				"conception_rate": 0.65,
				"percent_dairy_females": 0.9,
				"pregnancy_loss_rate": 0.03,
				"heifer_repro_cull_time": 450
			},
			"cows": {
				"voluntary_waiting_period": 60,
				"estrus_detection_rate": 0.6,
				"conception_rate": 0.4,
				"percent_dairy_females": 0.65,
				"do_not_breed_time": 180
			}
		},
		"advanced_repro_inputs": {
			"semen_types": [
				{
					"semen_type": "1 sexed",
					"semen_percent_dairy_females": 90,
					"semen_percent_dairy_males": 10,
					"semen_percent_beef_females": 0,
					"semen_percent_beef_males": 0
				},
				{
					"semen_type": "2 beef",
					"semen_percent_dairy_females": 0,
					"semen_percent_dairy_males": 0,
					"semen_percent_beef_females": 50,
					"semen_percent_beef_males": 50
				}
			],
			"use_custom_genetic_index": true,
			"custom_genetic_indices": [
				{
					"name": "fat_protein_genetic_index",
					"input_1": "milk_fat",
					"weight_1": 0.71,
					"input_2": "milk_protein",
					"weight_2": 0.29
				}
			],
			"heifer_advanced_repro": {
				"breeding_start_day": 400,
				"estrus_detection_rate": 0.9,
				"pregnancy_loss_rate": 0.03,
				"repro_method": "SynchED",
				"repro_subprotocol": "2P",
				"subprotocol_estrus_detection_rate": 0.9,
				"heifer_repro_cull_time": 450,
				"heifer_breeding_populations": [
					{
						"population_name": "1",
						"population_attributes": [
							{
								"name": "fat_protein_genetic_index",
								"type": "rank",
								"expression": "> 50"
							},
							{
								"name": "insemination_number",
								"type": "value",
								"expression": "< 3"
							}
						],
						"semen_type": "1 sexed",
						"conception_risk": 0.65
					},
					{
						"population_name": "2",
						"population_attributes": [
							{
								"name": "fat_protein_genetic_inex",
								"type": "rank",
								"expression": "> 50"
							},
							{
								"name": "insemination_number",
								"type": "value",
								"expression": "> 2"
							}
						],
						"semen_type": "2 beef",
						"conception_risk": 0.7
					},
					{
						"population_name": "3",
						"population_attributes": [
							{
								"name": "fat_protein_genetic_index",
								"type": "rank",
								"expression": "< 51"
							}
						],
						"semen_type": "2 beef",
						"conception_risk": 0.7
					}
				]
			},
			"cow_advanced_repro": {
				"voluntary_waiting_period": 60,
				"do_not_breed_time": 150,
				"estrus_detection_rate": 0.6,
				"repro_method": "TAI",
				"presynch_program": "None",
				"presynch_program_start_day": 0,
				"ovsynch_program": "OvSynch",
				"ovsynch_program_start_day": 55,
				"resynch_program": "TAI_at_preg_check",
				"cow_breeding_populations": [
					{
						"population_name": "1",
						"population_attributes": [
							{
								"name": "parity",
								"type": "value",
								"expression": 1
							}
						],
						"semen_type": "1 sexed",
						"conception_risk": 0.45
					},
					{
						"population_name": "2",
						"population_attributes": [
							{
								"name": "parity",
								"type": "value",
								"expression": "> 1"
							},
							{
								"name": "M305",
								"type": "rank",
								"expression": "> 50"
							}
						],
						"semen_type": "1 sexed",
						"conception_risk": 0.4
					},
					{
						"population_name": "3",
						"population_attributes": [
							{
								"name": "parity",
								"type": "value",
								"expression": "> 1"
							},
							{
								"name": "M305",
								"type": "rank",
								"expression": "0-50"
							}
						],
						"semen_type": "2 beef",
						"conception_risk": 0.44
					}
				]
			}
		}
	},

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

Target Deadline
By when should this issue be done.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions