Files
AlphaGenerator/change72/run.py
T
2026-01-30 18:04:58 +08:00

102 lines
4.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import json
import os
# 获取当前目录下的JSON文件路径
file_path = os.path.join(os.path.dirname(__file__), 'Alpha_candidates.json')
if not os.path.exists(file_path):
print('not find json file')
exit(1)
with open(file_path, 'r', encoding='utf-8') as file:
json_data = json.load(file)
# 打开输出文件
output_path = os.path.join(os.path.dirname(__file__), 'output.txt')
with open(output_path, 'w', encoding='utf-8') as output_file:
first_alpha = True # 用于控制空行
total_expressions = 0 # 统计生成的表达式总数
for formula_template, data in json_data.items():
# 获取占位符和候选数据
placeholder_candidates = data.get('placeholder_candidates', {})
if not placeholder_candidates:
# 如果没有占位符,直接输出原始公式
if not first_alpha:
output_file.write('\n') # 空一行
output_file.write(formula_template + '\n')
first_alpha = False
total_expressions += 1
continue
# 收集所有占位符的候选值
placeholder_values = []
placeholder_names = []
for placeholder_name, candidate_info in placeholder_candidates.items():
candidates = candidate_info.get('candidates', [])
values = [candidate['id'] for candidate in candidates]
placeholder_values.append(values)
placeholder_names.append(placeholder_name)
# 计算该公式会生成多少表达式(每个占位符候选数的乘积)
formula_count = 1
for values in placeholder_values:
formula_count *= len(values)
# 生成所有可能的组合(笛卡尔积)
def generate_combinations(values_list, current_index=0, current_combination=None):
if current_combination is None:
current_combination = {}
if current_index == len(values_list):
# 生成最终的表达式
expression = formula_template
for placeholder_name, value in current_combination.items():
expression = expression.replace(placeholder_name, value)
yield expression
else:
placeholder_name = placeholder_names[current_index]
for value in values_list[current_index]:
current_combination[placeholder_name] = value
yield from generate_combinations(values_list, current_index + 1, current_combination.copy())
# 输出所有生成的表达式
expressions_generated = 0
for expression in generate_combinations(placeholder_values):
# if not first_alpha:
# output_file.write('\n') # 空一行
output_file.write(expression + '\n')
first_alpha = False
expressions_generated += 1
# 验证生成数量是否正确
if expressions_generated != formula_count:
print(f"警告: 公式 '{formula_template}' 预期生成 {formula_count} 个表达式,实际生成 {expressions_generated} 个")
total_expressions += expressions_generated
print(f"Alpha表达式已生成到: {output_path}")
print(f"共处理了 {len(json_data)} 条公式模板")
print(f"总共生成了 {total_expressions} 个alpha表达式")
# 可选:显示每个公式的生成数量统计
print("\n详细统计:")
for formula_template, data in json_data.items():
placeholder_candidates = data.get('placeholder_candidates', {})
if not placeholder_candidates:
print(f" '{formula_template}': 1个表达式(无占位符)")
else:
placeholder_counts = []
for placeholder_name, candidate_info in placeholder_candidates.items():
candidates = candidate_info.get('candidates', [])
placeholder_counts.append(f"{placeholder_name}({len(candidates)}个候选)")
formula_count = 1
for placeholder_name, candidate_info in placeholder_candidates.items():
candidates = candidate_info.get('candidates', [])
formula_count *= len(candidates)
placeholders_str = " × ".join(placeholder_counts)
print(f" '{formula_template}': {formula_count}个表达式 ({placeholders_str})")