Мы стремимся сделать наш проект максимально прозрачным и доступным для всех, кто интересуется технологиями прогнозирования и анализа в киберспорте. В связи с этим, в ближайшее время мы планируем запустить проект в формате Open Source, чтобы каждый желающий мог изучить его, внести свой вклад и помочь в его развитии.
def train_model(model, criterion, optimizer,
train_loader, epochs=50):
"""Функция для обучения модели"""
model.train()
for epoch in range(epochs):
running_loss = 0.0
for inputs, labels in train_loader:
optimizer.zero_grad()
outputs = model(inputs)
loss = criterion(outputs.squeeze(), labels)
loss.backward()
optimizer.step()
running_loss += loss.item()
logging.info(f'Epoch {epoch + 1}/{epochs}, Loss: {running_loss / len(train_loader)}')
def evaluate_model(model, test_loader):
"""Функция для оценки модели"""
model.eval()
predictions, labels = [], []
with
torch.no_grad():
for inputs, label in test_loader:
outputs = model(inputs)
predictions.extend(outputs.squeeze().numpy())
labels.extend(label.numpy())
return np.array(predictions), np.array(labels)
def simulate_matches(draft_list, model, preprocessor, num_simulations=100):
"""Функция для симуляции матчей на основе предоставленных драфтов"""
predictions = {
'win_probability': [],
'radiant_kills': [],
'dire_kills': [],
'match_duration': []
}
for draft in draft_list:
draft_data = np.array(draft)
draft_data = np.pad(draft_data, (0, 16 + 3 - len(draft_data)), mode='constant')
draft_df = pd.DataFrame([draft_data])
draft_encoded = preprocessor.transform(draft_df)
draft_tensor = torch.tensor(draft_encoded, dtype=torch.float32)
pred_class = torch.sigmoid(model(draft_tensor)).item()
# Placeholder predictions for kills and duration
predictions['win_probability'].append(pred_class)
avg_predictions = {
'win_probability': np.mean(predictions['win_probability']),
'average_radiant_kills': np.mean(predictions['radiant_kills']),
'average_dire_kills': np.mean(predictions['dire_kills']),
'average_match_duration': np.mean(predictions['match_duration'])
}
return avg_predictions