自定义配置文件生成

This commit is contained in:
hxuanyu 2025-04-02 10:32:36 +08:00
parent 9ea4c5d4d5
commit 078fadb033
3 changed files with 280 additions and 24 deletions

View File

@ -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
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

133
generate_weights_config.py Normal file
View File

@ -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()

33
get_data.py Normal file
View File

@ -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()