| | from fastapi import FastAPI |
| | from pydantic import BaseModel |
| | import joblib |
| | import pandas as pd |
| |
|
| | |
| | model = joblib.load("speed_hit_model.pkl") |
| |
|
| | |
| | label_reverse = {0: "Player attacks twice and counters twice", |
| | 1: "Enemy attacks twice and counters twice", |
| | 2: "Both attack once"} |
| |
|
| | |
| | class BattleStats(BaseModel): |
| | player_speed: int |
| | player_weight: int |
| | player_attack_accuracy: float |
| | player_hit_accuracy: float |
| | player_avoidance: float |
| | enemy_speed: int |
| | enemy_weight: int |
| | enemy_attack_accuracy: float |
| | enemy_hit_accuracy: float |
| | enemy_avoidance: float |
| |
|
| | |
| | app = FastAPI() |
| |
|
| | @app.post("/predict") |
| | def predict(stats: BattleStats): |
| | |
| | player_base_speed = stats.player_speed - stats.player_weight |
| | enemy_base_speed = stats.enemy_speed - stats.enemy_weight |
| | player_hit_chance = stats.player_attack_accuracy * stats.player_hit_accuracy * (1 - stats.enemy_avoidance) |
| | enemy_hit_chance = stats.enemy_attack_accuracy * stats.enemy_hit_accuracy * (1 - stats.player_avoidance) |
| |
|
| | |
| | features = pd.DataFrame([{ |
| | "Player Speed": stats.player_speed, |
| | "Player Weight": stats.player_weight, |
| | "Player Base Speed": player_base_speed, |
| | "Player Attack Accuracy": stats.player_attack_accuracy, |
| | "Player Hit Accuracy": stats.player_hit_accuracy, |
| | "Player Avoidance": stats.player_avoidance, |
| | "Player Hit Chance": player_hit_chance, |
| |
|
| | "Enemy Speed": stats.enemy_speed, |
| | "Enemy Weight": stats.enemy_weight, |
| | "Enemy Base Speed": enemy_base_speed, |
| | "Enemy Attack Accuracy": stats.enemy_attack_accuracy, |
| | "Enemy Hit Accuracy": stats.enemy_hit_accuracy, |
| | "Enemy Avoidance": stats.enemy_avoidance, |
| | "Enemy Hit Chance": enemy_hit_chance |
| | }]) |
| |
|
| | pred = model.predict(features)[0] |
| | return {"outcome": label_reverse[pred]} |
| |
|