DawnC commited on
Commit
334c093
1 Parent(s): 24bdb2a

Update scoring_calculation_system.py

Browse files
Files changed (1) hide show
  1. scoring_calculation_system.py +31 -11
scoring_calculation_system.py CHANGED
@@ -2,7 +2,6 @@ from dataclasses import dataclass
2
  from breed_health_info import breed_health_info
3
  from breed_noise_info import breed_noise_info
4
  import traceback
5
- import math
6
 
7
  @dataclass
8
  class UserPreferences:
@@ -2328,33 +2327,54 @@ def calculate_breed_compatibility_score(scores: dict, user_prefs: UserPreference
2328
 
2329
  def amplify_score_extreme(score: float) -> float:
2330
  """
2331
- 優化分數分布:
2332
- - 提高高分的區別度
2333
- - 維持低分的合理性
 
 
 
 
 
 
 
2334
  """
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2335
  if score >= 0.9:
2336
- # 完美匹配:92-99%
2337
- position = (score - 0.9) / 0.1
2338
- return 0.92 + (position * 0.07)
2339
 
 
2340
  elif score >= 0.8:
2341
- # 優秀匹配:85-92%
2342
  position = (score - 0.8) / 0.1
2343
  return 0.85 + (position * 0.07)
2344
 
 
2345
  elif score >= 0.7:
2346
- # 良好匹配:78-85%
2347
  position = (score - 0.7) / 0.1
2348
  return 0.78 + (position * 0.07)
2349
 
 
2350
  elif score >= 0.5:
2351
- # 一般匹配:70-78%
2352
  position = (score - 0.5) / 0.2
2353
  base = 0.70
2354
  return base + (smooth_curve(position) * 0.08)
2355
 
 
2356
  else:
2357
- # 較差匹配:60-70%
2358
  position = score / 0.5
2359
  base = 0.60
2360
  return base + (smooth_curve(position) * 0.10)
 
2
  from breed_health_info import breed_health_info
3
  from breed_noise_info import breed_noise_info
4
  import traceback
 
5
 
6
  @dataclass
7
  class UserPreferences:
 
2327
 
2328
  def amplify_score_extreme(score: float) -> float:
2329
  """
2330
+ 優化分數分布,使結果更具區別性並維持合理範圍
2331
+
2332
+ 透過分段函數來調整分數:
2333
+ - 90-100的原始分數會被映射到92-99%
2334
+ - 80-90的原始分數會被映射到85-92%
2335
+ - 70-80的原始分數會被映射到78-85%
2336
+ - 50-70的原始分數會被映射到70-78%
2337
+ - 50以下的原始分數會被映射到60-70%
2338
+
2339
+ 使用sigmoid曲線來平滑較低分數的轉換,避免突兀的分數跳變
2340
  """
2341
+ def smooth_curve(x: float, steepness: float = 12) -> float:
2342
+ """
2343
+ 使用sigmoid曲線來平滑分數轉換
2344
+
2345
+ 參數:
2346
+ x: 0-1之間的位置值
2347
+ steepness: 曲線的陡峭程度,較大的值會使轉換更加陡峭
2348
+
2349
+ 返回:
2350
+ 0-1之間的平滑轉換值
2351
+ """
2352
+ import math
2353
+ return 1 / (1 + math.exp(-steepness * (x - 0.5)))
2354
+
2355
+ # 處理最高分數範圍:90-100 -> 92-99
2356
  if score >= 0.9:
2357
+ position = (score - 0.9) / 0.1 # 計算在這個區間內的相對位置
2358
+ return 0.92 + (position * 0.07) # 線性映射到92-99
 
2359
 
2360
+ # 處理優秀分數範圍:80-90 -> 85-92
2361
  elif score >= 0.8:
 
2362
  position = (score - 0.8) / 0.1
2363
  return 0.85 + (position * 0.07)
2364
 
2365
+ # 處理良好分數範圍:70-80 -> 78-85
2366
  elif score >= 0.7:
 
2367
  position = (score - 0.7) / 0.1
2368
  return 0.78 + (position * 0.07)
2369
 
2370
+ # 處理一般分數範圍:50-70 -> 70-78
2371
  elif score >= 0.5:
 
2372
  position = (score - 0.5) / 0.2
2373
  base = 0.70
2374
  return base + (smooth_curve(position) * 0.08)
2375
 
2376
+ # 處理較低分數範圍:0-50 -> 60-70
2377
  else:
 
2378
  position = score / 0.5
2379
  base = 0.60
2380
  return base + (smooth_curve(position) * 0.10)