feat(ml_predict): 启用 ml_log_ideal_attempt 日志函数

将原本被注释掉的 ml_log_ideal_attempt 函数启用,用于记录理想尝试的相关数据。
该函数会将每次尝试的时间戳、次数、范数、迹、核阶数、预测概率及成功标志写入 CSV 文件。
确保在项目根目录下生成 dataset 文件夹,并将日志持久化存储于 ideal_data.csv 中。
This commit is contained in:
2025-11-26 22:40:43 +08:00
parent 0c2d61119b
commit 22b7b12751

View File

@@ -78,47 +78,47 @@ double ml_predict_success(long norm_val, int trace_val, int kernel_order) {
// 日志函数:记录一次理想尝试 // 日志函数:记录一次理想尝试
// 记录到 CSV 文件,包含时间戳 // 记录到 CSV 文件,包含时间戳
// void ml_log_ideal_attempt(int attempt, void ml_log_ideal_attempt(int attempt,
// const quat_left_ideal_t *lideal_com, const quat_left_ideal_t *lideal_com,
// int kernel_order, int kernel_order,
// int success_flag) int success_flag)
// { {
// const char *dir_path = "./dataset"; const char *dir_path = "./dataset";
// struct stat st = {0}; struct stat st = {0};
// if (stat(dir_path, &st) == -1) { if (stat(dir_path, &st) == -1) {
// mkdir(dir_path, 0755); mkdir(dir_path, 0755);
// } }
// // 使用固定文件名,避免频繁创建文件 // 使用固定文件名,避免频繁创建文件
// char csv_path[512]; char csv_path[512];
// snprintf(csv_path, sizeof(csv_path), "%s/ideal_data.csv", dir_path); snprintf(csv_path, sizeof(csv_path), "%s/ideal_data.csv", dir_path);
// // 使用追加模式,避免覆盖 // 使用追加模式,避免覆盖
// FILE *logfile = fopen(csv_path, "a+"); FILE *logfile = fopen(csv_path, "a+");
// if (!logfile) { if (!logfile) {
// perror("无法打开 ideal_data CSV 文件"); perror("无法打开 ideal_data CSV 文件");
// return; return;
// } }
// // 如果是第一次写入,添加表头 // 如果是第一次写入,添加表头
// if (ftell(logfile) == 0) { if (ftell(logfile) == 0) {
// fprintf(logfile, "Timestamp,Attempt,Norm,Trace,KernelOrder,Prob,Success\n"); fprintf(logfile, "Timestamp,Attempt,Norm,Trace,KernelOrder,Prob,Success\n");
// } }
// // 提取特征和记录 // 提取特征和记录
// long norm_val = ibz_to_long_safe(&lideal_com->norm); long norm_val = ibz_to_long_safe(&lideal_com->norm);
// int trace_val = quat_ideal_trace(lideal_com); int trace_val = quat_ideal_trace(lideal_com);
// double prob = ml_predict_success(norm_val, trace_val, kernel_order); double prob = ml_predict_success(norm_val, trace_val, kernel_order);
// time_t t = time(NULL); time_t t = time(NULL);
// struct tm tm_info; struct tm tm_info;
// localtime_r(&t, &tm_info); localtime_r(&t, &tm_info);
// char time_str[32]; char time_str[32];
// strftime(time_str, sizeof(time_str), "%Y-%m-%d-%H-%M-%S", &tm_info); strftime(time_str, sizeof(time_str), "%Y-%m-%d-%H-%M-%S", &tm_info);
// fprintf(logfile, "%s,%d,%ld,%d,%d,%.3f,%d\n", fprintf(logfile, "%s,%d,%ld,%d,%d,%.3f,%d\n",
// time_str, attempt, norm_val, trace_val, kernel_order, prob, success_flag); time_str, attempt, norm_val, trace_val, kernel_order, prob, success_flag);
// fclose(logfile); fclose(logfile);
// } }