1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2 /*                                                                           */
3 /*                  This file is part of the program and library             */
4 /*         SCIP --- Solving Constraint Integer Programs                      */
5 /*                                                                           */
6 /*    Copyright (C) 2002-2021 Konrad-Zuse-Zentrum                            */
7 /*                            fuer Informationstechnik Berlin                */
8 /*                                                                           */
9 /*  SCIP is distributed under the terms of the ZIB Academic License.         */
10 /*                                                                           */
11 /*  You should have received a copy of the ZIB Academic License              */
12 /*  along with SCIP; see the file COPYING. If not visit scipopt.org.         */
13 /*                                                                           */
14 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
15 
16 /**@file   bandit_epsgreedy.h
17  * @ingroup INTERNALAPI
18  * @brief  internal methods for epsilon greedy bandit selection
19  * @author Gregor Hendel
20  */
21 
22 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
23 
24 #ifndef __SCIP_BANDIT_EPSGREEDY_H__
25 #define __SCIP_BANDIT_EPSGREEDY_H__
26 
27 
28 #include "blockmemshell/memory.h"
29 #include "scip/def.h"
30 #include "scip/type_bandit.h"
31 #include "scip/type_retcode.h"
32 #include "scip/type_scip.h"
33 
34 #ifdef __cplusplus
35 extern "C" {
36 #endif
37 
38 /** creates the epsilon greedy bandit algorithm includes it in SCIP */
39 SCIP_RETCODE SCIPincludeBanditvtableEpsgreedy(
40    SCIP*                 scip                /**< SCIP data structure */
41    );
42 
43 /** callback to free bandit specific data structures */
44 SCIP_DECL_BANDITFREE(SCIPbanditFreeEpsgreedy);
45 
46 /** selection callback for bandit algorithm */
47 SCIP_DECL_BANDITSELECT(SCIPbanditSelectEpsgreedy);
48 
49 /** update callback for bandit algorithm */
50 SCIP_DECL_BANDITUPDATE(SCIPbanditUpdateEpsgreedy);
51 
52 /** reset callback for bandit algorithm */
53 SCIP_DECL_BANDITRESET(SCIPbanditResetEpsgreedy);
54 
55 
56 /** internal method to create and reset epsilon greedy bandit algorithm */
57 SCIP_RETCODE SCIPbanditCreateEpsgreedy(
58    BMS_BLKMEM*           blkmem,             /**< block memory */
59    BMS_BUFMEM*           bufmem,             /**< buffer memory */
60    SCIP_BANDITVTABLE*    vtable,             /**< virtual function table with epsilon greedy callbacks */
61    SCIP_BANDIT**         epsgreedy,          /**< pointer to store the epsilon greedy bandit algorithm */
62    SCIP_Real*            priorities,         /**< nonnegative priorities for each action, or NULL if not needed */
63    SCIP_Real             eps,                /**< parameter to increase probability for exploration between all actions */
64    SCIP_Bool             preferrecent,       /**< should the weights be updated in an exponentially decaying way? */
65    SCIP_Real             decayfactor,        /**< the factor to reduce the weight of older observations if exponential decay is enabled */
66    int                   avglim,             /**< nonnegative limit on observation number before the exponential decay starts,
67                                                *  only relevant if exponential decay is enabled
68                                                */
69    int                   nactions,           /**< the number of possible actions */
70    unsigned int          initseed            /**< initial random seed */
71    );
72 
73 #ifdef __cplusplus
74 }
75 #endif
76 
77 #endif
78