DawnC commited on
Commit
1fd2c2a
1 Parent(s): 3e0fc3d

Update scoring_calculation_system.py

Browse files
Files changed (1) hide show
  1. scoring_calculation_system.py +66 -67
scoring_calculation_system.py CHANGED
@@ -1660,9 +1660,34 @@ def calculate_compatibility_score(breed_info: dict, user_prefs: UserPreferences)
1660
 
1661
  # 確保最終分數在合理範圍內
1662
  return max(0.15, min(1.0, final_score))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1663
 
 
 
 
 
 
1664
 
1665
- # 1. 計算基礎分數
 
 
 
1666
  print("\n=== 開始計算品種相容性分數 ===")
1667
  print(f"處理品種: {breed_info.get('Breed', 'Unknown')}")
1668
  print(f"品種信息: {breed_info}")
@@ -1701,27 +1726,24 @@ def calculate_compatibility_score(breed_info: dict, user_prefs: UserPreferences)
1701
  )
1702
  }
1703
 
1704
- final_score = calculate_breed_compatibility_score(
1705
- scores=scores,
1706
- user_prefs=user_prefs,
1707
- breed_info=breed_info
1708
- )
1709
-
1710
  # 計算環境適應性加成
1711
  adaptability_bonus = calculate_environmental_fit(breed_info, user_prefs)
1712
-
1713
  # 整合最終分數和加成
1714
  final_score = (final_score * 0.9) + (adaptability_bonus * 0.1)
1715
  final_score = amplify_score_extreme(final_score)
1716
-
1717
  # 更新並返回完整的評分結果
1718
  scores.update({
1719
  'overall': final_score,
1720
  'adaptability_bonus': adaptability_bonus
1721
  })
1722
-
1723
  return scores
1724
-
1725
  except Exception as e:
1726
  print(f"\n!!!!! 發生嚴重錯誤 !!!!!")
1727
  print(f"錯誤類型: {type(e).__name__}")
@@ -1731,29 +1753,6 @@ def calculate_compatibility_score(breed_info: dict, user_prefs: UserPreferences)
1731
  return {k: 0.6 for k in ['space', 'exercise', 'grooming', 'experience', 'health', 'noise', 'overall']}
1732
 
1733
 
1734
- def calculate_environmental_fit(breed_info: dict, user_prefs: UserPreferences) -> float:
1735
- """計算品種與環境的適應性加成"""
1736
- adaptability_score = 0.0
1737
- description = breed_info.get('Description', '').lower()
1738
- temperament = breed_info.get('Temperament', '').lower()
1739
-
1740
- # 環境適應性評估
1741
- if user_prefs.living_space == 'apartment':
1742
- if 'adaptable' in temperament or 'apartment' in description:
1743
- adaptability_score += 0.1
1744
- if breed_info.get('Size') == 'Small':
1745
- adaptability_score += 0.05
1746
- elif user_prefs.living_space == 'house_large':
1747
- if 'active' in temperament or 'energetic' in description:
1748
- adaptability_score += 0.1
1749
-
1750
- # 氣候適應性
1751
- if user_prefs.climate in description or user_prefs.climate in temperament:
1752
- adaptability_score += 0.05
1753
-
1754
- return min(0.2, adaptability_score)
1755
-
1756
-
1757
  # def calculate_breed_compatibility_score(scores: dict, user_prefs: UserPreferences, breed_info: dict) -> float:
1758
  # """
1759
  # 改進的品種相容性評分系統
@@ -1846,6 +1845,39 @@ def calculate_environmental_fit(breed_info: dict, user_prefs: UserPreferences) -
1846
  # return min(1.0, max(0.0, (final_score * 0.85) + (breed_bonus * 0.15)))
1847
 
1848
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1849
  def calculate_compatibility_score(scores: dict, user_prefs: UserPreferences, breed_info: dict) -> float:
1850
  """
1851
  計算品種與使用者的整體相容性分數
@@ -1993,39 +2025,6 @@ def calculate_compatibility_score(scores: dict, user_prefs: UserPreferences, bre
1993
 
1994
  # 確保分數在合理範圍內並保留兩位小數
1995
  return round(max(60.0, min(95.0, final_score)), 2)
1996
-
1997
-
1998
- # def amplify_score_extreme(score: float) -> float:
1999
- # """
2000
- # 改進的分數轉換函數
2001
- # 提供更大的分數範圍和更明顯的差異
2002
-
2003
- # 轉換邏輯:
2004
- # - 極差匹配 (0.0-0.3) -> 60-68%
2005
- # - 較差匹配 (0.3-0.5) -> 68-75%
2006
- # - 中等匹配 (0.5-0.7) -> 75-85%
2007
- # - 良好匹配 (0.7-0.85) -> 85-92%
2008
- # - 優秀匹配 (0.85-1.0) -> 92-95%
2009
- # """
2010
- # if score < 0.3:
2011
- # # 極差匹配:快速線性增長
2012
- # return 0.60 + (score / 0.3) * 0.08
2013
- # elif score < 0.5:
2014
- # # 較差匹配:緩慢增長
2015
- # position = (score - 0.3) / 0.2
2016
- # return 0.68 + position * 0.07
2017
- # elif score < 0.7:
2018
- # # 中等匹配:穩定線性增長
2019
- # position = (score - 0.5) / 0.2
2020
- # return 0.75 + position * 0.10
2021
- # elif score < 0.85:
2022
- # # 良好匹配:加速增長
2023
- # position = (score - 0.7) / 0.15
2024
- # return 0.85 + position * 0.07
2025
- # else:
2026
- # # 優秀匹配:最後衝刺
2027
- # position = (score - 0.85) / 0.15
2028
- # return 0.92 + position * 0.03
2029
 
2030
 
2031
  def amplify_score_extreme(score: float) -> float:
 
1660
 
1661
  # 確保最終分數在合理範圍內
1662
  return max(0.15, min(1.0, final_score))
1663
+
1664
+
1665
+ def calculate_environmental_fit(breed_info: dict, user_prefs: UserPreferences) -> float:
1666
+ """計算品種與環境的適應性加成"""
1667
+ adaptability_score = 0.0
1668
+ description = breed_info.get('Description', '').lower()
1669
+ temperament = breed_info.get('Temperament', '').lower()
1670
+
1671
+ # 環境適應性評估
1672
+ if user_prefs.living_space == 'apartment':
1673
+ if 'adaptable' in temperament or 'apartment' in description:
1674
+ adaptability_score += 0.1
1675
+ if breed_info.get('Size') == 'Small':
1676
+ adaptability_score += 0.05
1677
+ elif user_prefs.living_space == 'house_large':
1678
+ if 'active' in temperament or 'energetic' in description:
1679
+ adaptability_score += 0.1
1680
 
1681
+ # 氣候適應性
1682
+ if user_prefs.climate in description or user_prefs.climate in temperament:
1683
+ adaptability_score += 0.05
1684
+
1685
+ return min(0.2, adaptability_score)
1686
 
1687
+
1688
+ def calculate_breed_matching(breed_info: dict, user_prefs: UserPreferences) -> dict:
1689
+ """計算品種的整體評分與匹配度"""
1690
+ try:
1691
  print("\n=== 開始計算品種相容性分數 ===")
1692
  print(f"處理品種: {breed_info.get('Breed', 'Unknown')}")
1693
  print(f"品種信息: {breed_info}")
 
1726
  )
1727
  }
1728
 
1729
+ # 計算最終相容性分數
1730
+ final_score = calculate_compatibility_score(scores, user_prefs, breed_info)
1731
+
 
 
 
1732
  # 計算環境適應性加成
1733
  adaptability_bonus = calculate_environmental_fit(breed_info, user_prefs)
1734
+
1735
  # 整合最終分數和加成
1736
  final_score = (final_score * 0.9) + (adaptability_bonus * 0.1)
1737
  final_score = amplify_score_extreme(final_score)
1738
+
1739
  # 更新並返回完整的評分結果
1740
  scores.update({
1741
  'overall': final_score,
1742
  'adaptability_bonus': adaptability_bonus
1743
  })
1744
+
1745
  return scores
1746
+
1747
  except Exception as e:
1748
  print(f"\n!!!!! 發生嚴重錯誤 !!!!!")
1749
  print(f"錯誤類型: {type(e).__name__}")
 
1753
  return {k: 0.6 for k in ['space', 'exercise', 'grooming', 'experience', 'health', 'noise', 'overall']}
1754
 
1755
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1756
  # def calculate_breed_compatibility_score(scores: dict, user_prefs: UserPreferences, breed_info: dict) -> float:
1757
  # """
1758
  # 改進的品種相容性評分系統
 
1845
  # return min(1.0, max(0.0, (final_score * 0.85) + (breed_bonus * 0.15)))
1846
 
1847
 
1848
+ # def amplify_score_extreme(score: float) -> float:
1849
+ # """
1850
+ # 改進的分數轉換函數
1851
+ # 提供更大的分數範圍和更明顯的差異
1852
+
1853
+ # 轉換邏輯:
1854
+ # - 極差匹配 (0.0-0.3) -> 60-68%
1855
+ # - 較差匹配 (0.3-0.5) -> 68-75%
1856
+ # - 中等匹配 (0.5-0.7) -> 75-85%
1857
+ # - 良好匹配 (0.7-0.85) -> 85-92%
1858
+ # - 優秀匹配 (0.85-1.0) -> 92-95%
1859
+ # """
1860
+ # if score < 0.3:
1861
+ # # 極差匹配:快速線性增長
1862
+ # return 0.60 + (score / 0.3) * 0.08
1863
+ # elif score < 0.5:
1864
+ # # 較差匹配:緩慢增長
1865
+ # position = (score - 0.3) / 0.2
1866
+ # return 0.68 + position * 0.07
1867
+ # elif score < 0.7:
1868
+ # # 中等匹配:穩定線性增長
1869
+ # position = (score - 0.5) / 0.2
1870
+ # return 0.75 + position * 0.10
1871
+ # elif score < 0.85:
1872
+ # # 良好匹配:加速增長
1873
+ # position = (score - 0.7) / 0.15
1874
+ # return 0.85 + position * 0.07
1875
+ # else:
1876
+ # # 優秀匹配:最後衝刺
1877
+ # position = (score - 0.85) / 0.15
1878
+ # return 0.92 + position * 0.03
1879
+
1880
+
1881
  def calculate_compatibility_score(scores: dict, user_prefs: UserPreferences, breed_info: dict) -> float:
1882
  """
1883
  計算品種與使用者的整體相容性分數
 
2025
 
2026
  # 確保分數在合理範圍內並保留兩位小數
2027
  return round(max(60.0, min(95.0, final_score)), 2)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2028
 
2029
 
2030
  def amplify_score_extreme(score: float) -> float: