DawnC commited on
Commit
0d2f094
1 Parent(s): 82609ed

Update scoring_calculation_system.py

Browse files
Files changed (1) hide show
  1. scoring_calculation_system.py +36 -29
scoring_calculation_system.py CHANGED
@@ -2102,47 +2102,54 @@ def calculate_breed_compatibility_score(scores: dict, user_prefs: UserPreference
2102
 
2103
 
2104
  def amplify_score_extreme(score: float) -> float:
2105
- """
2106
- 優化分數分布,增加區分度
2107
- 1. 擴大分數區間差異
2108
- 2. 更合理的分數映射
 
2109
  """
2110
  def smooth_curve(x: float, steepness: float = 12) -> float:
 
 
 
 
 
 
2111
  import math
2112
  return 1 / (1 + math.exp(-steepness * (x - 0.5)))
2113
 
2114
- def apply_distinction_factor(base_score: float, distinction: float = 0.05) -> float:
2115
- """增加分數的區分度"""
2116
- # 根據原始分數的位置增加區分
2117
- position_factor = base_score - int(base_score * 10) / 10
2118
- return base_score + (position_factor * distinction)
2119
-
2120
  if score >= 0.9:
2121
- # 優秀匹配:92-100%
2122
- base = 0.92 + ((score - 0.9) * 0.08)
2123
- return apply_distinction_factor(base, 0.06)
2124
-
 
 
2125
  elif score >= 0.8:
2126
- # 很好匹配:85-92%
2127
- base = 0.85 + ((score - 0.8) * 0.07)
2128
- return apply_distinction_factor(base, 0.05)
2129
-
 
 
2130
  elif score >= 0.7:
2131
- # 良好匹配:76-85%
2132
- base = 0.76 + ((score - 0.7) * 0.09)
2133
- return apply_distinction_factor(base, 0.04)
2134
-
 
2135
  elif score >= 0.5:
2136
- # 一般匹配:65-76%
2137
  position = (score - 0.5) / 0.2
2138
- base = 0.65 + (smooth_curve(position) * 0.11)
2139
- return apply_distinction_factor(base, 0.03)
2140
-
2141
  else:
2142
- # 較低匹配:60-65%
 
2143
  position = score / 0.5
2144
- base = 0.60 + (smooth_curve(position) * 0.05)
2145
- return apply_distinction_factor(base, 0.02)
2146
 
2147
 
2148
  # def amplify_score_extreme(score: float) -> float:
 
2102
 
2103
 
2104
  def amplify_score_extreme(score: float) -> float:
2105
+ """
2106
+ 1. 提供更廣的分數範圍,讓優秀匹配能獲得更高分數
2107
+ 2. 在各個分數區間保持平滑的轉換
2108
+ 3. 確保即使是較低匹配也有參考價值
2109
+ 4. 對所有情況都使用一致的評分標準
2110
  """
2111
  def smooth_curve(x: float, steepness: float = 12) -> float:
2112
+ """
2113
+ 使用 sigmoid 曲線來實現平滑的分數轉換
2114
+ steepness 參數控制曲線的陡峭程度:
2115
+ - 較高的值會產生更陡峭的曲線
2116
+ - 較低的值會產生更平緩的曲線
2117
+ """
2118
  import math
2119
  return 1 / (1 + math.exp(-steepness * (x - 0.5)))
2120
 
2121
+ # 處理最高分數範圍(原始分數 0.9-1.0)
 
 
 
 
 
2122
  if score >= 0.9:
2123
+ # 將 90-100% 的原始分數映射到 88-96% 的最終分數
2124
+ # 這確保了最佳匹配能獲得顯著高的分數,但仍保留改進空間
2125
+ position = (score - 0.9) / 0.1
2126
+ return 0.88 + (position * 0.08)
2127
+
2128
+ # 處理優秀分數範圍(原始分數 0.8-0.9)
2129
  elif score >= 0.8:
2130
+ # 將 80-90% 的原始分數映射到 82-88% 的最終分數
2131
+ # 這個範圍表示非常好但不是完美的匹配
2132
+ position = (score - 0.8) / 0.1
2133
+ return 0.82 + (position * 0.06)
2134
+
2135
+ # 處理良好分數範圍(原始分數 0.7-0.8)
2136
  elif score >= 0.7:
2137
+ # 將 70-80% 的原始分數映射到 76-82% 的最終分數
2138
+ position = (score - 0.7) / 0.1
2139
+ return 0.76 + (position * 0.06)
2140
+
2141
+ # 處理中等分數範圍(原始分數 0.5-0.7)
2142
  elif score >= 0.5:
2143
+ # 使用平滑曲線將 50-70% 的原始分數映射到 70-76% 的最終分數
2144
  position = (score - 0.5) / 0.2
2145
+ return 0.70 + (smooth_curve(position) * 0.06)
2146
+
2147
+ # 處理較低分數範圍(原始分數 < 0.5)
2148
  else:
2149
+ # 使用平滑曲線將 0-50% 的原始分數映射到 65-70% 的最終分數
2150
+ # 即使是較差的匹配也保持基本的參考價值
2151
  position = score / 0.5
2152
+ return 0.65 + (smooth_curve(position) * 0.05)
 
2153
 
2154
 
2155
  # def amplify_score_extreme(score: float) -> float: