@@ -10,25 +10,69 @@ using Random: Random, AbstractRNG, MersenneTwister
1010using Statistics: mean
1111
1212using Flux: Chain, Dense
13- # using Flux.Optimise
14- # using InferOpt
15- # using Random
16- # using JLD2
17- # using Plots
18- # using Distributions
19- # using LinearAlgebra
2013using Combinatorics: combinations
2114
15+ """
16+ $TYPEDEF
17+
18+ Benchmark for the dynamic assortment problem.
19+
20+ # Fields
21+ $TYPEDFIELDS
22+ """
23+ struct DynamicAssortmentBenchmark{exogenous,M} <: AbstractDynamicBenchmark{exogenous}
24+ " customer choice model (price, hype, saturation, and features)"
25+ customer_choice_model:: M
26+ " number of items"
27+ N:: Int
28+ " dimension of feature vectors (in addition to hype, satisfaction, and price)"
29+ d:: Int
30+ " assortment size constraint"
31+ K:: Int
32+ " number of steps per episode"
33+ max_steps:: Int
34+ end
35+
36+ function DynamicAssortmentBenchmark (;
37+ N= 20 ,
38+ d= 2 ,
39+ K= 4 ,
40+ max_steps= 80 ,
41+ customer_choice_model= Chain (Dense ([- 0.8 0.6 - 0.4 0.3 0.5 ]), vec),
42+ exogenous= false ,
43+ )
44+ return DynamicAssortmentBenchmark {exogenous,typeof(customer_choice_model)} (
45+ customer_choice_model, N, d, K, max_steps
46+ )
47+ end
48+
49+ include (" instance.jl" )
2250include (" environment.jl" )
2351
24- struct DynamicAssortmentBenchmark <: AbstractDynamicBenchmark end
52+ customer_choice_model (b:: DynamicAssortmentBenchmark ) = b. customer_choice_model
53+ item_count (b:: DynamicAssortmentBenchmark ) = b. N
54+ feature_count (b:: DynamicAssortmentBenchmark ) = b. d
55+ assortment_size (b:: DynamicAssortmentBenchmark ) = b. K
56+ max_steps (b:: DynamicAssortmentBenchmark ) = b. max_steps
57+
58+ function Utils. generate_sample (
59+ b:: DynamicAssortmentBenchmark , rng:: AbstractRNG = MersenneTwister (0 ); seed= nothing
60+ )
61+ Random. seed! (rng, seed)
62+ return DataSample (; instance= Instance (b, rng))
63+ end
2564
26- function Utils. generate_sample ( :: DynamicAssortmentBenchmark )
27- return DataSample (; instance = Instance ( ))
65+ function Utils. generate_maximizer (b :: DynamicAssortmentBenchmark )
66+ return TopKMaximizer ( assortment_size (b ))
2867end
2968
30- function Utils. generate_maximizer (:: DynamicAssortmentBenchmark )
31- return DAP_optimization
69+ function Utils. generate_environment (
70+ :: DynamicAssortmentBenchmark ,
71+ instance:: Instance ;
72+ seed= nothing ,
73+ rng:: AbstractRNG = MersenneTwister (seed),
74+ )
75+ return Environment (instance; seed= seed, rng= rng)
3276end
3377
3478export DynamicAssortmentBenchmark
0 commit comments