Spaces:
Running
on
Zero
Running
on
Zero
Update scoring_calculation_system.py
Browse files- scoring_calculation_system.py +64 -29
scoring_calculation_system.py
CHANGED
|
@@ -674,43 +674,78 @@ def calculate_compatibility_score(breed_info: dict, user_prefs: UserPreferences)
|
|
| 674 |
temperament_adjustments -= 0.12 # 加重對特定類型品種的懲罰
|
| 675 |
|
| 676 |
elif user_experience == "intermediate":
|
| 677 |
-
|
| 678 |
-
|
| 679 |
-
|
| 680 |
-
|
| 681 |
-
'versatile': 0.04, # 獎勵多功能性
|
| 682 |
-
'stubborn': -0.06, # 輕微懲罰固執
|
| 683 |
-
'independent': -0.05, # 輕微懲罰獨立性
|
| 684 |
-
'protective': -0.04 # 輕微懲罰保護性
|
| 685 |
}
|
|
|
|
| 686 |
|
| 687 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 688 |
if trait in temperament_lower:
|
| 689 |
-
temperament_adjustments +=
|
| 690 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 691 |
else: # advanced
|
| 692 |
-
|
| 693 |
-
|
| 694 |
-
|
| 695 |
-
|
| 696 |
-
'intelligent': 0.05,
|
| 697 |
-
'protective': 0.02,
|
| 698 |
-
'strong-willed': 0.02,
|
| 699 |
-
'aggressive': -0.04, # 新增負面特徵
|
| 700 |
-
'nervous': -0.03,
|
| 701 |
-
'dominant': -0.02
|
| 702 |
}
|
|
|
|
| 703 |
|
| 704 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 705 |
if trait in temperament_lower:
|
| 706 |
-
|
| 707 |
-
|
| 708 |
-
|
| 709 |
-
|
| 710 |
-
|
| 711 |
-
|
| 712 |
-
|
| 713 |
-
|
| 714 |
|
| 715 |
# 確保最終分數在合理範圍內
|
| 716 |
final_score = max(0.2, min(1.0, score + temperament_adjustments))
|
|
|
|
| 674 |
temperament_adjustments -= 0.12 # 加重對特定類型品種的懲罰
|
| 675 |
|
| 676 |
elif user_experience == "intermediate":
|
| 677 |
+
base_scores = {
|
| 678 |
+
"High": {"intermediate": 0.65},
|
| 679 |
+
"Moderate": {"intermediate": 0.75},
|
| 680 |
+
"Low": {"intermediate": 0.85}
|
|
|
|
|
|
|
|
|
|
|
|
|
| 681 |
}
|
| 682 |
+
score = base_scores.get(care_level, base_scores["Moderate"])[user_experience]
|
| 683 |
|
| 684 |
+
# 中級玩家特徵評估 - 參考 beginner 的邏輯結構
|
| 685 |
+
challenging_traits = {
|
| 686 |
+
'stubborn': -0.10, # 仍然需要扣分,但比 beginner 輕
|
| 687 |
+
'independent': -0.08,
|
| 688 |
+
'dominant': -0.08,
|
| 689 |
+
'protective': -0.06,
|
| 690 |
+
'aggressive': -0.12, # 仍然嚴重扣分
|
| 691 |
+
'nervous': -0.08
|
| 692 |
+
}
|
| 693 |
+
|
| 694 |
+
positive_traits = {
|
| 695 |
+
'intelligent': 0.06,
|
| 696 |
+
'trainable': 0.06,
|
| 697 |
+
'adaptable': 0.05,
|
| 698 |
+
'calm': 0.04,
|
| 699 |
+
'friendly': 0.04
|
| 700 |
+
}
|
| 701 |
+
|
| 702 |
+
# 計算特徵調整
|
| 703 |
+
for trait, penalty in challenging_traits.items():
|
| 704 |
if trait in temperament_lower:
|
| 705 |
+
temperament_adjustments += penalty
|
| 706 |
|
| 707 |
+
for trait, bonus in positive_traits.items():
|
| 708 |
+
if trait in temperament_lower:
|
| 709 |
+
if temperament_adjustments + bonus <= 0.12: # 限制正面特徵累積
|
| 710 |
+
temperament_adjustments += bonus
|
| 711 |
+
|
| 712 |
else: # advanced
|
| 713 |
+
base_scores = {
|
| 714 |
+
"High": {"advanced": 0.75}, # 降低基礎分數
|
| 715 |
+
"Moderate": {"advanced": 0.82},
|
| 716 |
+
"Low": {"advanced": 0.88}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 717 |
}
|
| 718 |
+
score = base_scores.get(care_level, base_scores["Moderate"])[user_experience]
|
| 719 |
|
| 720 |
+
# 即使是進階玩家也需要考慮的風險特徵
|
| 721 |
+
risk_traits = {
|
| 722 |
+
'aggressive': -0.15, # 最嚴重的風險特徵
|
| 723 |
+
'nervous': -0.12,
|
| 724 |
+
'unpredictable': -0.12,
|
| 725 |
+
'territorial': -0.10,
|
| 726 |
+
'dominant': -0.08,
|
| 727 |
+
'strong-willed': -0.06
|
| 728 |
+
}
|
| 729 |
+
|
| 730 |
+
# 進階玩家可以處理的特徵,但仍需謹慎
|
| 731 |
+
manageable_traits = {
|
| 732 |
+
'intelligent': 0.05,
|
| 733 |
+
'trainable': 0.04,
|
| 734 |
+
'independent': 0.03,
|
| 735 |
+
'protective': 0.02
|
| 736 |
+
}
|
| 737 |
+
|
| 738 |
+
# 先計算風險特徵
|
| 739 |
+
for trait, penalty in risk_traits.items():
|
| 740 |
if trait in temperament_lower:
|
| 741 |
+
temperament_adjustments += penalty
|
| 742 |
+
|
| 743 |
+
# 再加上可控制特徵,但有限制
|
| 744 |
+
positive_adjustment = 0
|
| 745 |
+
for trait, bonus in manageable_traits.items():
|
| 746 |
+
if trait in temperament_lower:
|
| 747 |
+
positive_adjustment += bonus
|
| 748 |
+
temperament_adjustments += min(0.10, positive_adjustment) # 限制正面特徵的總影響
|
| 749 |
|
| 750 |
# 確保最終分數在合理範圍內
|
| 751 |
final_score = max(0.2, min(1.0, score + temperament_adjustments))
|