You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 16:51:04