Files
bocai/PyModel/predict_model_v6.py
2026-01-22 18:02:21 +08:00

85 lines
4.1 KiB
Python

import json
from datetime import datetime
class LotteryPredictorV6:
def __init__(self, stats_path):
with open(stats_path, 'r', encoding='utf-8') as f:
self.stats = json.load(f)
# self.result_weights = {'time': 0.83, 'week': 0.14, 'date': 0.03}
self.result_weights = {'time': 0.9, 'week': 0.05, 'date': 0.05}
self.result_detail_weights = {'time': 0.9, 'week': 0.05, 'date': 0.05}
self.winner_weights = {'time': 0.9, 'week': 0.05, 'date': 0.05}
self.gd_weights = {'time': 0.9, 'week': 0.05, 'date': 0.05}
self.glh_weights = {'time': 0.9, 'week': 0.05, 'date': 0.05}
def predict(self, date_str, time_str):
dt = datetime.strptime(date_str, '%Y-%m-%d')
day_of_month = str(dt.day)
day_of_week = str(dt.weekday())
t_stats = self.stats['by_time'].get(time_str, {})
d_stats = self.stats['by_date'].get(day_of_month, {})
w_stats = self.stats['by_week'].get(day_of_week, {})
raw_probs = {
'digital_pos': {},
'pos_detail': {},
'winner_prob': {},
'direct_gd1': {},
'direct_gd2': {},
'glh_pos': {}
}
# 1. 数字位置概率
for i in range(10):
pos_key = f'pos_{i}'
combined = {}
for val in range(1, 11):
v = str(val)
p = (t_stats.get('result_pos_prob', {}).get(pos_key, {}).get(v, 0) * self.result_weights['time'] +
w_stats.get('result_pos_prob', {}).get(pos_key, {}).get(v, 0) * self.result_weights['week'] +
d_stats.get('result_pos_prob', {}).get(pos_key, {}).get(v, 0) * self.result_weights['date'])
combined[v] = p
raw_probs['digital_pos'][pos_key] = combined
# 2. 位置详情 (单双大小)
for i in range(10):
pos_key = f'pos_{i}'
raw_probs['pos_detail'][pos_key] = {'big_small': {}, 'odd_even': {}}
for cat in ['big_small', 'odd_even']:
options = ['', ''] if cat == 'big_small' else ['', '']
for opt in options:
p = (t_stats.get('result_pos_detail_prob', {}).get(pos_key, {}).get(cat, {}).get(opt, 0) * self.result_detail_weights['time'] +
w_stats.get('result_pos_detail_prob', {}).get(pos_key, {}).get(cat, {}).get(opt, 0) * self.result_detail_weights['week'] +
d_stats.get('result_pos_detail_prob', {}).get(pos_key, {}).get(cat, {}).get(opt, 0) * self.result_detail_weights['date'])
raw_probs['pos_detail'][pos_key][cat][opt] = p
# 3. 冠亚和
for val in range(3, 20):
v = str(val)
p = (t_stats.get('winner_prob', {}).get(v, 0) * self.winner_weights['time'] +
w_stats.get('winner_prob', {}).get(v, 0) * self.winner_weights['week'] +
d_stats.get('winner_prob', {}).get(v, 0) * self.winner_weights['date'])
raw_probs['winner_prob'][v] = p
# 4. GD1 & GD2
for cat, opts in [('direct_gd1', ['冠亚大', '冠亚小']), ('direct_gd2', ['冠亚单', '冠亚双'])]:
stat_key = 'GD1_prob' if cat == 'direct_gd1' else 'GD2_prob'
for opt in opts:
p = (t_stats.get(stat_key, {}).get(opt, 0) * self.gd_weights['time'] +
w_stats.get(stat_key, {}).get(opt, 0) * self.gd_weights['week'] +
d_stats.get(stat_key, {}).get(opt, 0) * self.gd_weights['date'])
raw_probs[cat][opt] = p
# 5. 龙虎
for i in range(5):
pos_key = f'pos_{i}'
raw_probs['glh_pos'][pos_key] = {}
for opt in ['', '']:
p = (t_stats.get('GLH_pos_prob', {}).get(pos_key, {}).get(opt, 0) * self.glh_weights['time'] +
w_stats.get('GLH_pos_prob', {}).get(pos_key, {}).get(opt, 0) * self.glh_weights['week'] +
d_stats.get('GLH_pos_prob', {}).get(pos_key, {}).get(opt, 0) * self.glh_weights['date'])
raw_probs['glh_pos'][pos_key][opt] = p
return raw_probs