DawnC commited on
Commit
17ddc73
1 Parent(s): eec8a28

Update scoring_calculation_system.py

Browse files
Files changed (1) hide show
  1. scoring_calculation_system.py +5 -62
scoring_calculation_system.py CHANGED
@@ -2183,46 +2183,10 @@ def calculate_breed_compatibility_score(scores: dict, user_prefs: UserPreference
2183
  final_score = score * severity_multiplier
2184
  return max(0.2, min(1.0, final_score))
2185
 
2186
- # def calculate_base_score(scores: dict, weights: dict) -> float:
2187
- # """
2188
- # 計算基礎分數,加入更嚴格的評估機制。
2189
- # 就像學校的評分系統,某些科目不及格會嚴重影響總成績。
2190
- # """
2191
- # # 檢查關鍵指標是否有嚴重不足
2192
- # critical_thresholds = {
2193
- # 'space': 0.7,
2194
- # 'exercise': 0.7,
2195
- # 'experience': 0.7,
2196
- # 'noise': 0.65
2197
- # }
2198
-
2199
- # critical_failures = []
2200
- # for metric, threshold in critical_thresholds.items():
2201
- # if scores[metric] < threshold:
2202
- # critical_failures.append((metric, scores[metric]))
2203
-
2204
- # # 計算基礎加權分數
2205
- # base_score = sum(scores[k] * weights[k] for k in scores.keys())
2206
-
2207
- # # 根據關鍵指標的不足程度進行懲罰
2208
- # if critical_failures:
2209
- # # 計算最嚴重的不足程度
2210
- # worst_failure = min(score for _, score in critical_failures)
2211
- # penalty = (critical_thresholds['space'] - worst_failure) * 0.6
2212
- # base_score *= (1 - penalty)
2213
-
2214
- # # 多個指標不足時的額外懲罰
2215
- # if len(critical_failures) > 1:
2216
- # base_score *= (0.9 ** (len(critical_failures) - 1))
2217
-
2218
- # return base_score
2219
-
2220
  def calculate_base_score(scores: dict, weights: dict) -> float:
2221
  """
2222
- 計算基礎分數,特別加強:
2223
- 1. 公寓住戶高運動量的評估
2224
- 2. 確保理想匹配的最低分數
2225
- 3. 平衡空間限制與運動能力的關係
2226
  """
2227
  # 檢查關鍵指標是否有嚴重不足
2228
  critical_thresholds = {
@@ -2240,41 +2204,20 @@ def calculate_breed_compatibility_score(scores: dict, user_prefs: UserPreference
2240
  # 計算基礎加權分數
2241
  base_score = sum(scores[k] * weights[k] for k in scores.keys())
2242
 
2243
- # 特殊情況處理:公寓+高運動量
2244
- is_apartment_with_high_exercise = (
2245
- user_prefs.living_space == 'apartment' and
2246
- user_prefs.exercise_time >= 120 and
2247
- scores['exercise'] >= 0.7 # 確保運動能力符合
2248
- )
2249
-
2250
  # 根據關鍵指標的不足程度進行懲罰
2251
  if critical_failures:
2252
  # 計算最嚴重的不足程度
2253
  worst_failure = min(score for _, score in critical_failures)
2254
-
2255
- # 特殊情況:公寓+高運動量時降低空間限制的懲罰
2256
- if is_apartment_with_high_exercise:
2257
- penalty = (critical_thresholds['space'] - worst_failure) * 0.3 # 降低懲罰係數
2258
- else:
2259
- penalty = (critical_thresholds['space'] - worst_failure) * 0.6
2260
-
2261
  base_score *= (1 - penalty)
2262
 
2263
  # 多個指標不足時的額外懲罰
2264
  if len(critical_failures) > 1:
2265
- if is_apartment_with_high_exercise:
2266
- base_score *= (0.95 ** (len(critical_failures) - 1)) # 降低疊加懲罰
2267
- else:
2268
- base_score *= (0.9 ** (len(critical_failures) - 1))
2269
 
2270
- # 確保理想匹配的最低分數
2271
- if (user_prefs.living_space == 'apartment' and
2272
- scores['exercise'] >= 0.8 and
2273
- scores['noise'] >= 0.7):
2274
- base_score = max(base_score, 0.85) # 設定最低分數
2275
-
2276
  return base_score
2277
 
 
2278
  def evaluate_condition_interactions(scores: dict) -> float:
2279
  """
2280
  評估不同條件之間的相互影響。
 
2183
  final_score = score * severity_multiplier
2184
  return max(0.2, min(1.0, final_score))
2185
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2186
  def calculate_base_score(scores: dict, weights: dict) -> float:
2187
  """
2188
+ 計算基礎分數,加入更嚴格的評估機制。
2189
+ 就像學校的評分系統,某些科目不及格會嚴重影響總成績。
 
 
2190
  """
2191
  # 檢查關鍵指標是否有嚴重不足
2192
  critical_thresholds = {
 
2204
  # 計算基礎加權分數
2205
  base_score = sum(scores[k] * weights[k] for k in scores.keys())
2206
 
 
 
 
 
 
 
 
2207
  # 根據關鍵指標的不足程度進行懲罰
2208
  if critical_failures:
2209
  # 計算最嚴重的不足程度
2210
  worst_failure = min(score for _, score in critical_failures)
2211
+ penalty = (critical_thresholds['space'] - worst_failure) * 0.6
 
 
 
 
 
 
2212
  base_score *= (1 - penalty)
2213
 
2214
  # 多個指標不足時的額外懲罰
2215
  if len(critical_failures) > 1:
2216
+ base_score *= (0.9 ** (len(critical_failures) - 1))
 
 
 
2217
 
 
 
 
 
 
 
2218
  return base_score
2219
 
2220
+
2221
  def evaluate_condition_interactions(scores: dict) -> float:
2222
  """
2223
  評估不同條件之間的相互影響。