DawnC commited on
Commit
4910c95
1 Parent(s): 0d2f094

Update scoring_calculation_system.py

Browse files
Files changed (1) hide show
  1. scoring_calculation_system.py +10 -62
scoring_calculation_system.py CHANGED
@@ -2100,80 +2100,28 @@ def calculate_breed_compatibility_score(scores: dict, user_prefs: UserPreference
2100
 
2101
  return min(max_possible_score, max(min_possible_score, final_score))
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:
2156
- # """優化分數分布,提供更高的分數範圍"""
2157
- # def smooth_curve(x: float, steepness: float = 12) -> float:
2158
- # import math
2159
- # return 1 / (1 + math.exp(-steepness * (x - 0.5)))
2160
-
2161
- # if score >= 0.9:
2162
- # position = (score - 0.9) / 0.1
2163
- # return 0.96 + (position * 0.04) # 90-100的原始分映射到96-100
2164
-
2165
- # elif score >= 0.8:
2166
- # position = (score - 0.8) / 0.1
2167
- # return 0.90 + (position * 0.06) # 80-90的原始分映射到90-96
2168
-
2169
- # elif score >= 0.7:
2170
- # position = (score - 0.7) / 0.1
2171
- # return 0.82 + (position * 0.08) # 70-80的原始分映射到82-90
2172
-
2173
- # elif score >= 0.5:
2174
- # position = (score - 0.5) / 0.2
2175
- # return 0.75 + (smooth_curve(position) * 0.07) # 50-70的原始分映射到75-82
2176
-
2177
- # else:
2178
- # position = score / 0.5
2179
- # return 0.70 + (smooth_curve(position) * 0.05) # 50以下的原始分映射到70-75
 
2100
 
2101
  return min(max_possible_score, max(min_possible_score, final_score))
2102
 
 
2103
  def amplify_score_extreme(score: float) -> float:
2104
+ """優化分數分布,提供更高的分數範圍"""
 
 
 
 
 
2105
  def smooth_curve(x: float, steepness: float = 12) -> float:
 
 
 
 
 
 
2106
  import math
2107
  return 1 / (1 + math.exp(-steepness * (x - 0.5)))
2108
 
 
2109
  if score >= 0.9:
 
 
2110
  position = (score - 0.9) / 0.1
2111
+ return 0.96 + (position * 0.04) # 90-100的原始分映射到96-100
2112
+
 
2113
  elif score >= 0.8:
 
 
2114
  position = (score - 0.8) / 0.1
2115
+ return 0.90 + (position * 0.06) # 80-90的原始分映射到90-96
2116
+
 
2117
  elif score >= 0.7:
 
2118
  position = (score - 0.7) / 0.1
2119
+ return 0.82 + (position * 0.08) # 70-80的原始分映射到82-90
2120
+
 
2121
  elif score >= 0.5:
 
2122
  position = (score - 0.5) / 0.2
2123
+ return 0.75 + (smooth_curve(position) * 0.07) # 50-70的原始分映射到75-82
2124
+
 
2125
  else:
 
 
2126
  position = score / 0.5
2127
+ return 0.70 + (smooth_curve(position) * 0.05) # 50以下的原始分映射到70-75