Spaces:
Running
on
Zero
Running
on
Zero
Update scoring_calculation_system.py
Browse files
scoring_calculation_system.py
CHANGED
|
@@ -27,7 +27,6 @@ class UserPreferences:
|
|
| 27 |
living_environment: str = "ground_floor" # "ground_floor", "with_elevator", "walk_up" - 居住環境細節
|
| 28 |
|
| 29 |
def __post_init__(self):
|
| 30 |
-
"""在初始化後運行,用於設置派生值"""
|
| 31 |
if self.barking_acceptance is None:
|
| 32 |
self.barking_acceptance = self.noise_tolerance
|
| 33 |
|
|
@@ -96,7 +95,7 @@ def calculate_breed_bonus(breed_info: dict, user_prefs: 'UserPreferences') -> fl
|
|
| 96 |
'territorial': -0.05
|
| 97 |
}
|
| 98 |
|
| 99 |
-
#
|
| 100 |
age_adjustments = {
|
| 101 |
'toddler': {'bonus_mult': 0.7, 'penalty_mult': 1.3},
|
| 102 |
'school_age': {'bonus_mult': 1.0, 'penalty_mult': 1.0},
|
|
@@ -129,7 +128,7 @@ def calculate_breed_bonus(breed_info: dict, user_prefs: 'UserPreferences') -> fl
|
|
| 129 |
bonus += min(0.1, skill_bonus)
|
| 130 |
|
| 131 |
|
| 132 |
-
# 6. 適應性評估
|
| 133 |
adaptability_bonus = 0.0
|
| 134 |
if breed_info.get('Size') == "Small" and user_prefs.living_space == "apartment":
|
| 135 |
adaptability_bonus += 0.08 # 小型犬更適合公寓
|
|
@@ -165,7 +164,6 @@ def calculate_additional_factors(breed_info: dict, user_prefs: 'UserPreferences'
|
|
| 165 |
"""
|
| 166 |
計算額外的評估因素,結合品種特性與使用者需求的全面評估系統
|
| 167 |
|
| 168 |
-
此函數整合了:
|
| 169 |
1. 多功能性評估 - 品種的多樣化能力
|
| 170 |
2. 訓練性評估 - 學習和服從能力
|
| 171 |
3. 能量水平評估 - 活力和運動需求
|
|
@@ -229,7 +227,7 @@ def calculate_additional_factors(breed_info: dict, user_prefs: 'UserPreferences'
|
|
| 229 |
|
| 230 |
factors['versatility'] = min(1.0, trait_score + role_score)
|
| 231 |
|
| 232 |
-
# 2. 訓練性評估
|
| 233 |
trainable_traits = {
|
| 234 |
'intelligent': 0.3,
|
| 235 |
'eager to please': 0.3,
|
|
@@ -251,7 +249,7 @@ def calculate_additional_factors(breed_info: dict, user_prefs: 'UserPreferences'
|
|
| 251 |
factors['trainability'] = min(1.0, base_trainability *
|
| 252 |
experience_multipliers.get(user_prefs.experience_level, 1.0))
|
| 253 |
|
| 254 |
-
# 3. 能量水平評估
|
| 255 |
exercise_needs = breed_info.get('Exercise Needs', 'MODERATE').upper()
|
| 256 |
energy_levels = {
|
| 257 |
'VERY HIGH': {
|
|
@@ -288,7 +286,7 @@ def calculate_additional_factors(breed_info: dict, user_prefs: 'UserPreferences'
|
|
| 288 |
|
| 289 |
factors['energy_level'] = energy_score
|
| 290 |
|
| 291 |
-
# 4. 美容需求評估
|
| 292 |
grooming_needs = breed_info.get('Grooming Needs', 'MODERATE').upper()
|
| 293 |
grooming_levels = {
|
| 294 |
'HIGH': 1.0,
|
|
@@ -316,7 +314,7 @@ def calculate_additional_factors(breed_info: dict, user_prefs: 'UserPreferences'
|
|
| 316 |
factors['grooming_needs'] = min(1.0, base_grooming *
|
| 317 |
commitment_multipliers.get(user_prefs.grooming_commitment, 1.0))
|
| 318 |
|
| 319 |
-
# 5. 社交需求評估
|
| 320 |
social_traits = {
|
| 321 |
'friendly': 0.25,
|
| 322 |
'social': 0.25,
|
|
@@ -973,8 +971,7 @@ def calculate_compatibility_score(breed_info: dict, user_prefs: UserPreferences)
|
|
| 973 |
def calculate_health_score(breed_name: str, user_prefs: UserPreferences) -> float:
|
| 974 |
"""
|
| 975 |
計算品種健康分數,加強健康問題的影響力和與使用者敏感度的連結
|
| 976 |
-
|
| 977 |
-
重要改進:
|
| 978 |
1. 根據使用者的健康敏感度調整分數
|
| 979 |
2. 更嚴格的健康問題評估
|
| 980 |
3. 考慮多重健康問題的累積效應
|
|
@@ -1009,7 +1006,7 @@ def calculate_compatibility_score(breed_info: dict, user_prefs: UserPreferences)
|
|
| 1009 |
# 輕微健康問題 - 輕微扣分
|
| 1010 |
minor_conditions = {
|
| 1011 |
'dental issues': -0.08, # 牙齒問題,需要定期護理
|
| 1012 |
-
'weight gain tendency': -0.08,
|
| 1013 |
'minor allergies': -0.06, # 輕微過敏,可控制
|
| 1014 |
'seasonal allergies': -0.06 # 季節性過敏
|
| 1015 |
}
|
|
@@ -1080,7 +1077,7 @@ def calculate_compatibility_score(breed_info: dict, user_prefs: UserPreferences)
|
|
| 1080 |
|
| 1081 |
def calculate_noise_score(breed_name: str, user_prefs: UserPreferences) -> float:
|
| 1082 |
"""
|
| 1083 |
-
|
| 1084 |
"""
|
| 1085 |
if breed_name not in breed_noise_info:
|
| 1086 |
return 0.5
|
|
@@ -1601,7 +1598,6 @@ def calculate_breed_compatibility_score(scores: dict, user_prefs: UserPreference
|
|
| 1601 |
|
| 1602 |
def calculate_weights():
|
| 1603 |
"""
|
| 1604 |
-
計算動態權重,特別關注:
|
| 1605 |
1. 條件極端度對權重的影響
|
| 1606 |
2. 多重條件組合的權重調整
|
| 1607 |
3. 品種特性對權重分配的影響
|
|
@@ -1659,7 +1655,6 @@ def calculate_breed_compatibility_score(scores: dict, user_prefs: UserPreference
|
|
| 1659 |
|
| 1660 |
def calculate_weight_adjustments(extremities):
|
| 1661 |
"""
|
| 1662 |
-
根據條件極端度計算權重調整,特別強化:
|
| 1663 |
1. 高運動量時對耐力型犬種的偏好
|
| 1664 |
2. 專家級別對工作犬種的偏好
|
| 1665 |
3. 條件組合的整體評估
|
|
@@ -1762,7 +1757,6 @@ def calculate_breed_compatibility_score(scores: dict, user_prefs: UserPreference
|
|
| 1762 |
|
| 1763 |
def apply_special_case_adjustments(score):
|
| 1764 |
"""
|
| 1765 |
-
處理特殊情況的分數調整,著重:
|
| 1766 |
1. 條件組合的協同效應
|
| 1767 |
2. 品種特性的特殊要求
|
| 1768 |
3. 極端情況的處理
|
|
|
|
| 27 |
living_environment: str = "ground_floor" # "ground_floor", "with_elevator", "walk_up" - 居住環境細節
|
| 28 |
|
| 29 |
def __post_init__(self):
|
|
|
|
| 30 |
if self.barking_acceptance is None:
|
| 31 |
self.barking_acceptance = self.noise_tolerance
|
| 32 |
|
|
|
|
| 95 |
'territorial': -0.05
|
| 96 |
}
|
| 97 |
|
| 98 |
+
# 年齡評估
|
| 99 |
age_adjustments = {
|
| 100 |
'toddler': {'bonus_mult': 0.7, 'penalty_mult': 1.3},
|
| 101 |
'school_age': {'bonus_mult': 1.0, 'penalty_mult': 1.0},
|
|
|
|
| 128 |
bonus += min(0.1, skill_bonus)
|
| 129 |
|
| 130 |
|
| 131 |
+
# 6. 適應性評估
|
| 132 |
adaptability_bonus = 0.0
|
| 133 |
if breed_info.get('Size') == "Small" and user_prefs.living_space == "apartment":
|
| 134 |
adaptability_bonus += 0.08 # 小型犬更適合公寓
|
|
|
|
| 164 |
"""
|
| 165 |
計算額外的評估因素,結合品種特性與使用者需求的全面評估系統
|
| 166 |
|
|
|
|
| 167 |
1. 多功能性評估 - 品種的多樣化能力
|
| 168 |
2. 訓練性評估 - 學習和服從能力
|
| 169 |
3. 能量水平評估 - 活力和運動需求
|
|
|
|
| 227 |
|
| 228 |
factors['versatility'] = min(1.0, trait_score + role_score)
|
| 229 |
|
| 230 |
+
# 2. 訓練性評估
|
| 231 |
trainable_traits = {
|
| 232 |
'intelligent': 0.3,
|
| 233 |
'eager to please': 0.3,
|
|
|
|
| 249 |
factors['trainability'] = min(1.0, base_trainability *
|
| 250 |
experience_multipliers.get(user_prefs.experience_level, 1.0))
|
| 251 |
|
| 252 |
+
# 3. 能量水平評估
|
| 253 |
exercise_needs = breed_info.get('Exercise Needs', 'MODERATE').upper()
|
| 254 |
energy_levels = {
|
| 255 |
'VERY HIGH': {
|
|
|
|
| 286 |
|
| 287 |
factors['energy_level'] = energy_score
|
| 288 |
|
| 289 |
+
# 4. 美容需求評估
|
| 290 |
grooming_needs = breed_info.get('Grooming Needs', 'MODERATE').upper()
|
| 291 |
grooming_levels = {
|
| 292 |
'HIGH': 1.0,
|
|
|
|
| 314 |
factors['grooming_needs'] = min(1.0, base_grooming *
|
| 315 |
commitment_multipliers.get(user_prefs.grooming_commitment, 1.0))
|
| 316 |
|
| 317 |
+
# 5. 社交需求評估
|
| 318 |
social_traits = {
|
| 319 |
'friendly': 0.25,
|
| 320 |
'social': 0.25,
|
|
|
|
| 971 |
def calculate_health_score(breed_name: str, user_prefs: UserPreferences) -> float:
|
| 972 |
"""
|
| 973 |
計算品種健康分數,加強健康問題的影響力和與使用者敏感度的連結
|
| 974 |
+
|
|
|
|
| 975 |
1. 根據使用者的健康敏感度調整分數
|
| 976 |
2. 更嚴格的健康問題評估
|
| 977 |
3. 考慮多重健康問題的累積效應
|
|
|
|
| 1006 |
# 輕微健康問題 - 輕微扣分
|
| 1007 |
minor_conditions = {
|
| 1008 |
'dental issues': -0.08, # 牙齒問題,需要定期護理
|
| 1009 |
+
'weight gain tendency': -0.08, # 易胖體質,需要控制飲食
|
| 1010 |
'minor allergies': -0.06, # 輕微過敏,可控制
|
| 1011 |
'seasonal allergies': -0.06 # 季節性過敏
|
| 1012 |
}
|
|
|
|
| 1077 |
|
| 1078 |
def calculate_noise_score(breed_name: str, user_prefs: UserPreferences) -> float:
|
| 1079 |
"""
|
| 1080 |
+
計算品種噪音分數,特別加強噪音程度與生活環境的關聯性評估,很多人棄養就是因為叫聲
|
| 1081 |
"""
|
| 1082 |
if breed_name not in breed_noise_info:
|
| 1083 |
return 0.5
|
|
|
|
| 1598 |
|
| 1599 |
def calculate_weights():
|
| 1600 |
"""
|
|
|
|
| 1601 |
1. 條件極端度對權重的影響
|
| 1602 |
2. 多重條件組合的權重調整
|
| 1603 |
3. 品種特性對權重分配的影響
|
|
|
|
| 1655 |
|
| 1656 |
def calculate_weight_adjustments(extremities):
|
| 1657 |
"""
|
|
|
|
| 1658 |
1. 高運動量時對耐力型犬種的偏好
|
| 1659 |
2. 專家級別對工作犬種的偏好
|
| 1660 |
3. 條件組合的整體評估
|
|
|
|
| 1757 |
|
| 1758 |
def apply_special_case_adjustments(score):
|
| 1759 |
"""
|
|
|
|
| 1760 |
1. 條件組合的協同效應
|
| 1761 |
2. 品種特性的特殊要求
|
| 1762 |
3. 極端情況的處理
|