Spaces:
Sleeping
Sleeping
Update scoring_calculation_system.py
Browse files- 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.
|
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.
|
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.
|
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.
|
2146 |
-
|
2147 |
-
# 處理較低分數範圍(原始分數 < 0.5)
|
2148 |
else:
|
2149 |
-
# 使用平滑曲線將 0-50% 的原始分數映射到 65-70% 的最終分數
|
2150 |
-
# 即使是較差的匹配也保持基本的參考價值
|
2151 |
position = score / 0.5
|
2152 |
-
return 0.
|
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|