R语言优化算法收敛迭代路径可视化实现求助
R语言优化算法迭代路径动效实现方案
1. 依赖准备
- 先安装并加载所需工具包:
install.packages(c("optimization", "gganimate", "ggplot2", "dplyr", "stringr")) library(optimization) library(gganimate) library(ggplot2) library(dplyr) library(stringr)
2. 基础求解逻辑实现(匹配需求场景)
2.1 构造模拟数据集
# 构造含a1、b1、c1字段的模拟训练集 set.seed(123) train_data <- data.frame( a1 = rnorm(100, 5, 2), b1 = rnorm(100, 3, 1), c1 = rnorm(100, 10, 3) )
2.2 自定义7参数适应度函数
# 7个待优化参数:p1-p7,可替换为你实际的适应度计算规则 fitness <- function(params) { p1 <- params[1] p2 <- params[2] p3 <- params[3] p4 <- params[4] p5 <- params[5] p6 <- params[6] p7 <- params[7] pred <- p1*train_data$a1 + p2*train_data$b1^p3 + p4*log(train_data$c1*p5) + p6 + p7 mse <- mean((pred - (1.2*train_data$a1 + 0.8*train_data$b1^2 + 0.5*log(2*train_data$c1) + 2))^2) return(mse) }
2.3 带trace的优化求解
# 初始参数设置 init_params <- rep(1, 7) # 开启trace模式捕捉迭代过程 tmp <- tempfile() sink(tmp) opt_res <- optim_nm(fun = fitness, k = 7, start = init_params, trace = TRUE) sink() # 读取迭代trace内容 trace_content <- readLines(tmp)
3. 迭代轨迹数据清洗
# 提取含迭代参数的有效行,正则匹配数值内容 trace_rows <- trace_content[str_detect(trace_content, "^[0-9]+\\s+")] # 转换为结构化数据框 iter_df <- lapply(trace_rows, function(x) { nums <- as.numeric(str_split(str_squish(x), "\\s+")[[1]]) data.frame( iter = nums[1], p1 = nums[2], p2 = nums[3], p3 = nums[4], p4 = nums[5], p5 = nums[6], p6 = nums[7], p7 = nums[8], fitness = nums[9] ) }) %>% bind_rows()
4. 双维度迭代路径动效实现
# 可自行替换x、y为任意两个参数维度,例:p1和p2、p3和p5等 anim <- ggplot(iter_df, aes(x = p1, y = p2)) + geom_path(color = "gray", alpha = 0.7) + geom_point(aes(color = fitness), size = 3) + scale_color_viridis_c() + labs(title = "优化迭代路径:第{frame}次迭代", x = "参数p1", y = "参数p2") + # 按迭代次数逐帧推进 transition_reveal(iter) + ease_aes("linear") # 渲染动效,可调整fps、duration控制播放速度 animate(anim, fps = 5, duration = 10, width = 600, height = 400) # 如需保存为本地gif文件,执行: # anim_save("迭代路径.gif", anim)
若需切换展示的参数维度,仅需修改
aes(x = , y = )中的参数列名即可,例如改为x = p3, y = p7即可展示第3和第7个参数的迭代轨迹。
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

