Spaces:
Running
on
Zero
Running
on
Zero
Update scoring_calculation_system.py
Browse files- scoring_calculation_system.py +53 -35
scoring_calculation_system.py
CHANGED
|
@@ -1754,28 +1754,40 @@ def calculate_breed_compatibility_score(scores: dict, user_prefs: UserPreference
|
|
| 1754 |
return 0.6 + (0.4 * remaining)
|
| 1755 |
|
| 1756 |
def apply_special_adjustments(time_score, type_score, breed_type, pattern):
|
| 1757 |
-
"""
|
| 1758 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1759 |
if breed_type == 'sprint_type':
|
| 1760 |
if exercise_time > pattern['time_ranges']['penalty_start']:
|
| 1761 |
-
|
|
|
|
|
|
|
|
|
|
| 1762 |
if exercise_type != 'active_training':
|
| 1763 |
-
type_score *= 0.
|
| 1764 |
-
|
| 1765 |
-
#
|
| 1766 |
elif breed_type == 'endurance_type':
|
| 1767 |
if exercise_time < pattern['time_ranges']['penalty_start']:
|
| 1768 |
-
time_score *= 0.5 #
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1769 |
if exercise_type == 'light_walks':
|
| 1770 |
if exercise_time > 90:
|
| 1771 |
-
type_score *= 0.4 #
|
| 1772 |
-
|
| 1773 |
-
|
| 1774 |
-
|
| 1775 |
-
exercise_type in ['active_training', 'moderate_activity']):
|
| 1776 |
-
time_score = min(1.0, time_score * 1.2)
|
| 1777 |
-
type_score = min(1.0, type_score * 1.2)
|
| 1778 |
-
|
| 1779 |
return time_score, type_score
|
| 1780 |
|
| 1781 |
# 執行評估流程
|
|
@@ -1970,10 +1982,18 @@ def calculate_breed_compatibility_score(scores: dict, user_prefs: UserPreference
|
|
| 1970 |
return extremities
|
| 1971 |
|
| 1972 |
def calculate_weight_adjustments(extremities):
|
| 1973 |
-
"""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1974 |
adjustments = {}
|
|
|
|
|
|
|
|
|
|
| 1975 |
|
| 1976 |
-
#
|
| 1977 |
if extremities['space'][0] == 'highly_restricted':
|
| 1978 |
adjustments['space'] = 2.5
|
| 1979 |
adjustments['noise'] = 2.0
|
|
@@ -1984,46 +2004,44 @@ def calculate_breed_compatibility_score(scores: dict, user_prefs: UserPreference
|
|
| 1984 |
adjustments['space'] = 0.8
|
| 1985 |
adjustments['exercise'] = 1.4
|
| 1986 |
|
| 1987 |
-
#
|
| 1988 |
if extremities['exercise'][0] in ['extremely_low', 'extremely_high']:
|
| 1989 |
-
|
| 1990 |
-
|
| 1991 |
-
|
| 1992 |
-
|
| 1993 |
-
|
| 1994 |
-
adjustments['exercise'] = 3.0 # 提高工作犬的運動權重
|
| 1995 |
elif extremities['exercise'][0] in ['low', 'high']:
|
| 1996 |
adjustments['exercise'] = 1.8
|
| 1997 |
|
| 1998 |
-
#
|
| 1999 |
if extremities['experience'][0] == 'low':
|
| 2000 |
adjustments['experience'] = 2.2
|
| 2001 |
if breed_info.get('Care Level') == 'HIGH':
|
| 2002 |
adjustments['experience'] = 2.5
|
| 2003 |
elif extremities['experience'][0] == 'high':
|
| 2004 |
-
|
| 2005 |
-
|
| 2006 |
-
|
| 2007 |
-
|
| 2008 |
else:
|
| 2009 |
adjustments['experience'] = 1.8
|
| 2010 |
|
| 2011 |
# 綜合條件影響
|
| 2012 |
def adjust_for_combinations():
|
| 2013 |
-
#
|
| 2014 |
if (extremities['space'][0] == 'highly_restricted' and
|
| 2015 |
extremities['exercise'][0] in ['high', 'extremely_high']):
|
| 2016 |
adjustments['space'] = adjustments.get('space', 1.0) * 1.3
|
| 2017 |
adjustments['exercise'] = adjustments.get('exercise', 1.0) * 1.3
|
| 2018 |
|
| 2019 |
-
#
|
| 2020 |
if (extremities['experience'][0] == 'high' and
|
| 2021 |
extremities['space'][0] == 'spacious' and
|
| 2022 |
extremities['exercise'][0] in ['high', 'extremely_high'] and
|
| 2023 |
-
|
| 2024 |
-
|
| 2025 |
-
adjustments['
|
| 2026 |
-
adjustments['experience'] = adjustments.get('experience', 1.0) * 1.5
|
| 2027 |
|
| 2028 |
if extremities['space'][0] == 'spacious':
|
| 2029 |
for key in ['grooming', 'health', 'noise']:
|
|
|
|
| 1754 |
return 0.6 + (0.4 * remaining)
|
| 1755 |
|
| 1756 |
def apply_special_adjustments(time_score, type_score, breed_type, pattern):
|
| 1757 |
+
"""
|
| 1758 |
+
處理特殊情況,確保運動方式真正符合品種需求。
|
| 1759 |
+
特別加強:
|
| 1760 |
+
1. 短跑型犬種的長時間運動懲罰
|
| 1761 |
+
2. 耐力型犬種的獎勵機制
|
| 1762 |
+
3. 運動類型匹配的重要性
|
| 1763 |
+
"""
|
| 1764 |
+
# 短跑型品種的特殊處理
|
| 1765 |
if breed_type == 'sprint_type':
|
| 1766 |
if exercise_time > pattern['time_ranges']['penalty_start']:
|
| 1767 |
+
# 加重長時間運動的懲罰
|
| 1768 |
+
penalty_factor = min(0.8, (exercise_time - pattern['time_ranges']['penalty_start']) / 60)
|
| 1769 |
+
time_score *= max(0.3, 1 - penalty_factor) # 最低降到0.3
|
| 1770 |
+
# 運動類型不適合時的額外懲罰
|
| 1771 |
if exercise_type != 'active_training':
|
| 1772 |
+
type_score *= 0.3 # 更嚴重的懲罰
|
| 1773 |
+
|
| 1774 |
+
# 耐力型品種的特殊處理
|
| 1775 |
elif breed_type == 'endurance_type':
|
| 1776 |
if exercise_time < pattern['time_ranges']['penalty_start']:
|
| 1777 |
+
time_score *= 0.5 # 維持運動不足的懲罰
|
| 1778 |
+
elif exercise_time >= 150: # 新增:高運動量獎勵
|
| 1779 |
+
if exercise_type in ['active_training', 'moderate_activity']:
|
| 1780 |
+
time_bonus = min(0.3, (exercise_time - 150) / 150)
|
| 1781 |
+
time_score = min(1.0, time_score * (1 + time_bonus))
|
| 1782 |
+
type_score = min(1.0, type_score * 1.2)
|
| 1783 |
+
|
| 1784 |
+
# 運動強度不足的懲罰
|
| 1785 |
if exercise_type == 'light_walks':
|
| 1786 |
if exercise_time > 90:
|
| 1787 |
+
type_score *= 0.4 # 加重懲罰
|
| 1788 |
+
else:
|
| 1789 |
+
type_score *= 0.5
|
| 1790 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1791 |
return time_score, type_score
|
| 1792 |
|
| 1793 |
# 執行評估流程
|
|
|
|
| 1982 |
return extremities
|
| 1983 |
|
| 1984 |
def calculate_weight_adjustments(extremities):
|
| 1985 |
+
"""
|
| 1986 |
+
根據條件極端度計算權重調整,特別強化:
|
| 1987 |
+
1. 高運動量時對耐力型犬種的偏好
|
| 1988 |
+
2. 專家級別對工作犬種的偏好
|
| 1989 |
+
3. 條件組合的整體評估
|
| 1990 |
+
"""
|
| 1991 |
adjustments = {}
|
| 1992 |
+
temperament = breed_info.get('Temperament', '').lower()
|
| 1993 |
+
is_working_dog = any(trait in temperament
|
| 1994 |
+
for trait in ['herding', 'working', 'intelligent', 'tireless'])
|
| 1995 |
|
| 1996 |
+
# 空間權重調整邏輯保持不變
|
| 1997 |
if extremities['space'][0] == 'highly_restricted':
|
| 1998 |
adjustments['space'] = 2.5
|
| 1999 |
adjustments['noise'] = 2.0
|
|
|
|
| 2004 |
adjustments['space'] = 0.8
|
| 2005 |
adjustments['exercise'] = 1.4
|
| 2006 |
|
| 2007 |
+
# 改進運動需求權重調整
|
| 2008 |
if extremities['exercise'][0] in ['extremely_low', 'extremely_high']:
|
| 2009 |
+
base_adjustment = 2.5
|
| 2010 |
+
if extremities['exercise'][0] == 'extremely_high':
|
| 2011 |
+
if is_working_dog:
|
| 2012 |
+
base_adjustment = 3.0 # 工作犬在高運動量時獲得更高權重
|
| 2013 |
+
adjustments['exercise'] = base_adjustment
|
|
|
|
| 2014 |
elif extremities['exercise'][0] in ['low', 'high']:
|
| 2015 |
adjustments['exercise'] = 1.8
|
| 2016 |
|
| 2017 |
+
# 改進經驗需求權重調整
|
| 2018 |
if extremities['experience'][0] == 'low':
|
| 2019 |
adjustments['experience'] = 2.2
|
| 2020 |
if breed_info.get('Care Level') == 'HIGH':
|
| 2021 |
adjustments['experience'] = 2.5
|
| 2022 |
elif extremities['experience'][0] == 'high':
|
| 2023 |
+
if is_working_dog:
|
| 2024 |
+
adjustments['experience'] = 2.5 # 提高專家對工作犬的權重
|
| 2025 |
+
if extremities['exercise'][0] in ['high', 'extremely_high']:
|
| 2026 |
+
adjustments['experience'] = 2.8 # 特別強化高運動量工作犬
|
| 2027 |
else:
|
| 2028 |
adjustments['experience'] = 1.8
|
| 2029 |
|
| 2030 |
# 綜合條件影響
|
| 2031 |
def adjust_for_combinations():
|
| 2032 |
+
# 保持原有的基礎邏輯
|
| 2033 |
if (extremities['space'][0] == 'highly_restricted' and
|
| 2034 |
extremities['exercise'][0] in ['high', 'extremely_high']):
|
| 2035 |
adjustments['space'] = adjustments.get('space', 1.0) * 1.3
|
| 2036 |
adjustments['exercise'] = adjustments.get('exercise', 1.0) * 1.3
|
| 2037 |
|
| 2038 |
+
# 新增:專家 + 大空間 + 高運動量 + 工作犬的組合
|
| 2039 |
if (extremities['experience'][0] == 'high' and
|
| 2040 |
extremities['space'][0] == 'spacious' and
|
| 2041 |
extremities['exercise'][0] in ['high', 'extremely_high'] and
|
| 2042 |
+
is_working_dog):
|
| 2043 |
+
adjustments['exercise'] = adjustments.get('exercise', 1.0) * 1.4
|
| 2044 |
+
adjustments['experience'] = adjustments.get('experience', 1.0) * 1.4
|
|
|
|
| 2045 |
|
| 2046 |
if extremities['space'][0] == 'spacious':
|
| 2047 |
for key in ['grooming', 'health', 'noise']:
|