## ---- include = FALSE---------------------------------------------------------
knitr::opts_chunk$set(
    collapse = TRUE,
    comment = "#>"
)

## ----eval=FALSE---------------------------------------------------------------
#  galgo(...,
#      start_galgo_callback = callback_default,# `galgo()` is about to start.
#      end_galgo_callback = callback_default,  # `galgo()` is about to finish.
#      start_gen_callback = callback_default, # At the beginning of each generation
#      end_gen_callback = callback_default,    # At the end of each generation
#      report_callback = callback_default,     # In the middle of the generation,
#                                              #  right after the new mating pool
#                                              #  have been created.
#      ...)

## -----------------------------------------------------------------------------
library(GSgalgoR)

## -----------------------------------------------------------------------------


my_callback <-
    function(userdir = "",
        generation,
            pop_pool,
            pareto,
            prob_matrix,
            current_time) {
    # code starts  here
    if (generation%%2 == 0)
        message(paste0("generation: ",generation,
                    " current_time: ",current_time))
    }

## ----message=FALSE------------------------------------------------------------
library(breastCancerTRANSBIG)

## -----------------------------------------------------------------------------
data(transbig)
train <- transbig
rm(transbig)
expression <- Biobase::exprs(train)
clinical <- Biobase::pData(train)
OS <- survival::Surv(time = clinical$t.rfs, event = clinical$e.rfs)
# use a reduced dataset for the example
expression <- expression[sample(1:nrow(expression), 100), ]
# scale the expression matrix
expression <- t(scale(t(expression)))

## ----message=FALSE------------------------------------------------------------
library(GSgalgoR)

## -----------------------------------------------------------------------------
# Running galgo
GSgalgoR::galgo(generations = 6, 
            population = 15, 
            prob_matrix = expression, 
            OS = OS,
    start_galgo_callback = GSgalgoR::callback_default, 
    end_galgo_callback = GSgalgoR::callback_default,
    report_callback = my_callback,      # call `my_callback()` in the mile 
                                        # of each generation/iteration.
    start_gen_callback = GSgalgoR::callback_default,
    end_gen_callback = GSgalgoR::callback_default) 


## -----------------------------------------------------------------------------
my_save_pop_callback <-
    function(userdir = "",
            generation,
            pop_pool,
            pareto,
            prob_matrix,
            current_time) {
        directory <- paste0(tempdir(), "/")
        if (!dir.exists(directory)) {
            dir.create(directory, recursive = TRUE)
        }
        filename <- paste0(directory, generation, ".rda")
        if (generation%%2 == 0){
            save(file = filename, pop_pool)
        }
        message(paste("solution file saved in",filename))
    }

## -----------------------------------------------------------------------------
# Running galgo
GSgalgoR::galgo(
    generations = 6, 
    population = 15, 
    prob_matrix = expression, 
    OS = OS,
    start_galgo_callback = GSgalgoR::callback_default, 
    end_galgo_callback = GSgalgoR::callback_default,   
    report_callback = my_callback,# call `my_callback()` 
                                #  in the middle of each generation/iteration.
    start_gen_callback = GSgalgoR::callback_default,
    end_gen_callback = my_save_pop_callback # call `my_save_pop_callback()` 
                                            # at the end of each 
                                            #   generation/iteration
    ) 

## -----------------------------------------------------------------------------
# Running galgo
GSgalgoR::galgo(
    generations = 6, 
    population = 15, 
    prob_matrix = expression, 
    OS = OS,
    start_galgo_callback = GSgalgoR::callback_default, 
    end_galgo_callback = my_save_pop_callback,
    report_callback = my_callback,  # call `my_callback()` 
                                    # in the middle of each generation/iteration
    start_gen_callback = GSgalgoR::callback_default,
    end_gen_callback = GSgalgoR::callback_default
    ) 


## ----eval=FALSE---------------------------------------------------------------
#  
#  another_callback <-
#      function(userdir = "",
#              generation,
#              pop_pool,
#              pareto,
#              prob_matrix,
#              current_time) {
#      # code starts  here
#  
#      # code ends here
#      callback_base_return_pop(userdir,
#                              generation,
#                              pop_pool,
#                              prob_matrix,
#                              current_time)
#      }

## ----sess_info, eval=TRUE-----------------------------------------------------
sessionInfo()