From 078fadb033da9fc2c8d1d9fac058b99fa216625b Mon Sep 17 00:00:00 2001 From: hxuanyu <2252193204@qq.com> Date: Wed, 2 Apr 2025 10:32:36 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E7=94=9F=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/weights_config.yaml | 138 ++++++++++++++++++++++++++++++------- generate_weights_config.py | 133 +++++++++++++++++++++++++++++++++++ get_data.py | 33 +++++++++ 3 files changed, 280 insertions(+), 24 deletions(-) create mode 100644 generate_weights_config.py create mode 100644 get_data.py diff --git a/data/weights_config.yaml b/data/weights_config.yaml index be200cc..50492b2 100644 --- a/data/weights_config.yaml +++ b/data/weights_config.yaml @@ -2,36 +2,126 @@ # 基础权重配置 base_weights: - synergy_level_weight: 1.0 # 羁绊等级权重 - synergy_count_weight: 0.5 # 羁绊种类数量权重 - chess_cost_weight: 0.1 # 棋子费用权重 + synergy_level_weight: 1.0 + synergy_count_weight: 0.5 + chess_cost_weight: 0.1 # 羁绊权重配置(值越大,该羁绊在评分中的权重越高) synergy_weights: # 职业羁绊 + 人造人: 1.4 + 召唤物: 0.7 + 堡垒卫士: 1.4 + 强袭射手: 1.4 + 战略分析师: 1.1 + 斗士: 1.5 + 杀手: 1.4 + 裁决使: 1.4 + 超频战士: 1.6 + 迅捷射手: 1.5 重装战士: 1.5 - 魔法师: 1.2 - 神谕者: 1.3 - 斗士: 1.1 - 刺客: 1.4 - 狙神: 1.6 - 守护者: 1.3 - + 高级工程师: 1.5 + # 特质羁绊 - 星神: 1.4 - 耀光使: 1.3 - 海克斯科技: 1.5 - 赏金猎人: 1.2 - 未来战士: 1.3 + 圣灵使者: 1.5 + 幻灵战队: 1.4 + 弑魂者: 1.6 + 战地机甲: 1.2 + 执事: 1.3 + 源计划: 1.5 + 病毒魔人: 1.0 + 福牛守护者: 1.2 + 网络之神: 1.6 + 街头恶魔: 1.4 + 赛博老大: 1.3 + 辛迪加: 1.3 + 魔装机神: 1.1 + 鳄霸: 1.6 + +# 棋子费用等级权重(费用越高权重越大) +cost_weights: + '1': 1.0 + '2': 1.2 + '3': 1.5 + '4': 1.8 + '5': 2.0 # 棋子权重配置(值越大,该棋子在评分中的权重越高) chess_weights: - 亚索: 1.5 - 艾希: 1.2 - 璐璐: 1.3 - 金克斯: 1.4 - 薇恩: 1.3 - 赛娜: 1.4 - 塔姆: 1.2 - 纳尔: 1.3 - 塞拉斯: 1.2 \ No newline at end of file + R-080T: 0.8 + T-43X: 0.8 + T-URR37: 0.8 + 乐芙兰: 1.1 + 伊莉丝: 1.2 + 佛耶戈: 1.7 + 俄洛伊: 1.1 + 克格莫: 1.0 + 加里奥: 1.2 + 劫: 1.3 + 千珏: 1.0 + 厄加特: 1.4 + 厄斐琉斯: 1.3 + 厄运小姐: 1.3 + 古拉加斯: 1.2 + 可酷伯: 1.4 + 吉格斯: 1.3 + 嘉文四世: 1.2 + 塞拉斯: 1.0 + 奈德丽: 1.0 + 妮蔻: 1.3 + 婕拉: 1.0 + 安妮: 1.3 + 崔斯特: 1.1 + 布兰德: 1.5 + 布隆: 1.2 + 希瓦娜: 1.1 + 德莱厄斯: 1.1 + 德莱文: 1.2 + 悠米: 1.2 + 扎克: 1.7 + 拉亚斯特: 1.1 + 斯卡纳: 1.1 + 格雷福斯: 1.1 + 波比: 1.0 + 泽丽: 1.3 + 烬: 1.1 + 瑟庄妮: 1.3 + 盖伦: 1.7 + 科加斯: 1.3 + 纳亚菲利: 1.1 + 维迦: 1.1 + 艾克: 1.1 + 莎弥拉: 1.4 + 莫德凯撒: 1.2 + 莫甘娜: 1.0 + 萨勒芬妮: 1.0 + 萨科: 1.0 + 蒙多医生: 1.0 + 蔚: 1.0 + 蕾欧娜: 1.3 + 薇古丝: 1.3 + 薇恩: 1.5 + 费德提克: 1.2 + 贾克斯: 1.0 + 赛娜: 1.5 + 金克丝: 1.5 + 阿利斯塔: 1.0 + 阿萝拉: 1.7 + 雷克顿: 1.4 + 雷恩加尔: 1.2 + 霞: 1.3 + 韦鲁斯: 1.2 + 魔像: 0.8 + +# 羁绊等级权重(不同等级的羁绊权重不同) +synergy_level_weights: + '1': 1.0 + '2': 1.2 + '3': 1.5 + '4': 1.8 + '5': 2.0 + '6': 2.3 + '7': 2.6 + '8': 3.0 + '9': 3.3 + '10': 3.5 diff --git a/generate_weights_config.py b/generate_weights_config.py new file mode 100644 index 0000000..51feb14 --- /dev/null +++ b/generate_weights_config.py @@ -0,0 +1,133 @@ +""" +生成完整的weights_config.yaml配置文件 +""" +from src.data_provider import DataQueryAPI +import yaml +import random + +def generate_weights_config(): + """生成完整的权重配置文件""" + api = DataQueryAPI() + + # 获取所有数据 + jobs = api.get_all_jobs() + races = api.get_all_races() + chess = api.get_all_chess() + + # 生成配置字典 + config = { + "base_weights": { + "synergy_level_weight": 1.0, + "synergy_count_weight": 0.5, + "chess_cost_weight": 0.1 + }, + "synergy_weights": {}, + "chess_weights": {}, + "cost_weights": { + "1": 1.0, + "2": 1.2, + "3": 1.5, + "4": 1.8, + "5": 2.0 + }, + "synergy_level_weights": { + "1": 1.0, + "2": 1.2, + "3": 1.5, + "4": 1.8, + "5": 2.0, + "6": 2.3, + "7": 2.6, + "8": 3.0, + "9": 3.3, + "10": 3.5 + } + } + + # 添加职业羁绊权重 + for job in jobs: + # 根据职业类型设置不同的基础权重 + base_weight = round(random.uniform(1.0, 1.6), 1) + # 对于一些特殊职业进行调整 + if job['name'] == '召唤物': + base_weight = 0.7 + elif job['name'] in ['重装战士', '高级工程师', '斗士']: + base_weight = 1.5 + elif job['name'] in ['堡垒卫士', '强袭射手']: + base_weight = 1.4 + + config["synergy_weights"][job['name']] = base_weight + + # 添加特质羁绊权重 + for race in races: + # 根据特质类型设置不同的基础权重 + base_weight = round(random.uniform(1.0, 1.6), 1) + # 对于一些特殊特质进行调整 + if race['name'] in ['弑魂者', '网络之神', '鳄霸']: + base_weight = 1.6 + elif race['name'] in ['圣灵使者', '源计划']: + base_weight = 1.5 + + config["synergy_weights"][race['name']] = base_weight + + # 添加棋子权重 + for c in chess: + if c.get('price') == '0': + # 召唤物权重较低 + config["chess_weights"][c['displayName']] = 0.8 + else: + # 根据费用调整权重基础值 + cost = int(c.get('price', '1')) + base_weight = 1.0 + (cost - 1) * 0.1 + # 对于一些特殊棋子进行调整 + if c['displayName'] in ['佛耶戈', '扎克', '盖伦', '阿萝拉']: + base_weight = 1.7 + elif c['displayName'] in ['薇恩', '赛娜', '金克丝', '布兰德']: + base_weight = 1.5 + + config["chess_weights"][c['displayName']] = round(base_weight, 1) + + # 将配置写入YAML文件 + with open('data/weights_config.yaml', 'w', encoding='utf-8') as f: + # 添加注释 + f.write("# 云顶之弈阵容评分权重配置文件\n\n") + + # 写入基础权重配置 + f.write("# 基础权重配置\n") + yaml.dump({"base_weights": config["base_weights"]}, f, allow_unicode=True, sort_keys=False) + + # 写入羁绊权重配置 + f.write("\n# 羁绊权重配置(值越大,该羁绊在评分中的权重越高)\n") + f.write("synergy_weights:\n") + + # 先写入职业羁绊 + f.write(" # 职业羁绊\n") + for job in sorted(jobs, key=lambda x: x['name']): + f.write(f" {job['name']}: {config['synergy_weights'][job['name']]}\n") + + # 再写入特质羁绊 + f.write("\n # 特质羁绊\n") + for race in sorted(races, key=lambda x: x['name']): + f.write(f" {race['name']}: {config['synergy_weights'][race['name']]}\n") + + # 写入棋子费用等级权重 + f.write("\n# 棋子费用等级权重(费用越高权重越大)\n") + yaml.dump({"cost_weights": config["cost_weights"]}, f, allow_unicode=True, sort_keys=False) + + # 写入棋子权重配置 + f.write("\n# 棋子权重配置(值越大,该棋子在评分中的权重越高)\n") + f.write("chess_weights:\n") + for c_name, c_weight in sorted(config["chess_weights"].items()): + f.write(f" {c_name}: {c_weight}\n") + + # 写入羁绊等级权重 + f.write("\n# 羁绊等级权重(不同等级的羁绊权重不同)\n") + yaml.dump({"synergy_level_weights": config["synergy_level_weights"]}, f, allow_unicode=True, sort_keys=False) + + print(f"已生成权重配置文件: data/weights_config.yaml") + print(f"职业羁绊: {len(jobs)}个") + print(f"特质羁绊: {len(races)}个") + print(f"棋子: {len(chess)}个") + +if __name__ == "__main__": + generate_weights_config() \ No newline at end of file diff --git a/get_data.py b/get_data.py new file mode 100644 index 0000000..0f913d5 --- /dev/null +++ b/get_data.py @@ -0,0 +1,33 @@ +""" +获取TFT数据脚本 +""" +from src.data_provider import DataQueryAPI + +def main(): + """获取所有棋子和羁绊数据""" + api = DataQueryAPI() + + # 获取所有数据 + jobs = api.get_all_jobs() + races = api.get_all_races() + chess = api.get_all_chess() + + print(f'职业数量: {len(jobs)}') + print(f'特质数量: {len(races)}') + print(f'棋子数量: {len(chess)}') + + print('\n职业列表:') + for job in sorted(jobs, key=lambda x: x['name']): + print(f'- {job["name"]}') + + print('\n特质列表:') + for race in sorted(races, key=lambda x: x['name']): + print(f'- {race["name"]}') + + print('\n棋子列表:') + for c in sorted(chess, key=lambda x: x['displayName']): + if c.get('price') != '0': # 排除费用为0的召唤物 + print(f'- {c["displayName"]} ({c["price"]}费)') + +if __name__ == "__main__": + main() \ No newline at end of file