添加python脚本
This commit is contained in:
84
PyModel/predict_model_v6.py
Normal file
84
PyModel/predict_model_v6.py
Normal file
@@ -0,0 +1,84 @@
|
||||
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
|
||||
Reference in New Issue
Block a user