This function orchestrates the forecast iteration process for a Finn agent, including exploratory data analysis,

iterate_forecast(
  agent_info,
  max_iter = 3,
  weighted_mape_goal = 0.03,
  parallel_processing = NULL,
  inner_parallel = FALSE,
  num_cores = NULL,
  seed = 123
)

Arguments

agent_info

Agent info from set_agent_info()

max_iter

Maximum number of iterations for forecast optimization.

weighted_mape_goal

Weighted MAPE goal the agent is trying to achieve for each time series

parallel_processing

Default of NULL runs no parallel processing and forecasts each individual time series one after another. 'local_machine' leverages all cores on current machine Finn is running on. 'spark' runs time series in parallel on a spark cluster in Azure Databricks or Azure Synapse. Parallel agent workflows require ellmer 0.4.0 or later on the main process and every worker.

inner_parallel

Run components of forecast process inside a specific time series in parallel. Can only be used if parallel_processing is set to NULL or 'spark'.

num_cores

Number of cores to run when parallel processing is set up. Used when running parallel computations on local machine or within Azure. Default of NULL uses total amount of cores on machine minus one. Can't be greater than number of cores on machine minus 1.

seed

Set seed for random number generator. Numeric value.

Details

Future quality is evaluated when final_models() selects the winner within each iteration. Iteration ranking starts from the earliest minimum WMAPE and may prefer a later eligible iteration within 10 percent relative WMAPE when its average model WMAPE is strictly lower. Local mean, median, and standard deviation summarize individual-model backtests, excluding simple averages. This retains evidence that a setting improves other models even if the current best model does not improve. Global summary fields retain their original meaning: run WMAPE for mean and median, and zero standard deviation. Agent comparisons and stopping use WMAPE rounded to four decimal places. Search-context selection does not overwrite a better saved local forecast. Global promotion applies to one complete iteration, and all saved global winners must reference that same iteration. Individual models and averages may differ within it. Mixed global iteration metadata is rejected before publication or update; interrupted writes are not treated as successful. Normal accuracy-goal stopping requires a complete eligible result and finite WMAPE, not another soft-quality check. A winner with soft concerns may therefore beat an earlier winner on accuracy. Loaded backtests, run history, and best-run metrics are reused without re-evaluating past future paths. Rejected evaluations still consume iteration budget without repeating the same fit as an infrastructure retry. If no eligible result exists, the workflow fails or an enabled local phase handles unresolved global series. Rankings are kept in memory, not new files. Hierarchical accuracy uses reconciled backtests; later comparisons and reconciliation do not require retained source-node quality rankings. Final reconciliation publishes the selected mixture without future-quality scoring, whole-set fallback, or extra refitting.

Examples

if (FALSE) { # \dontrun{
# load example data
hist_data <- timetk::m4_monthly %>%
  dplyr::filter(date >= "2013-01-01") %>%
  dplyr::rename(Date = date) %>%
  dplyr::mutate(id = as.character(id))

# set up Finn project
project <- set_project_info(
  project_name = "Demo_Project",
  combo_variables = c("id"),
  target_variable = "value",
  date_type = "month"
)

# set up LLM
llm <- ellmer::chat_azure_openai(model = "gpt-4o-mini")

# set up agent info
agent_info <- set_agent_info(
  project_info = project,
  llm = llm,
  input_data = hist_data,
  forecast_horizon = 6
)

# run the forecast iteration process
iterate_forecast(
  agent_info = agent_info,
  max_iter = 3,
  weighted_mape_goal = 0.03
)
} # }