CYCLUS
Loading...
Searching...
No Matches
matl_buy_policy.cycpp.h
Go to the documentation of this file.
1/// This includes the required header to add a material buy policy to
2/// archetypes. One should only need to:
3/// - '#include "toolkit/matl_buy_policy.cycpp.h"' in the header of the
4/// archetype class (it is strongly recommended to inject this snippet as
5/// `private:`, but archetype developers are free to make other choices)
6/// - Add `InitBuyPolicyParameters()` to `EnterNotify()` in the cc file of the
7/// archetype class as needed.
8
9/// How to add parameters to this file:
10/// 1. Add the pragma. A default value MUST be added to ensure backwards
11/// compatibility.
12/// 2. Add "std::vector<int> cycpp_shape_<param_name> = {0};" to the end of the
13/// file with the other ones, reaplcing <param_name> with the name you put
14/// in the econ_params array (again, must match exactly).
15
16/// @addtogroup optionalparams
17/// @{
18/// active_buying_frequency_type is the type of distribution used to determine
19/// the length of the active buying period active_buying_val is the length of
20/// the active buying period if active_buying_frequency_type is Fixed
21/// active_buying_min is the minimum length of the active buying period if
22/// active_buying_frequency_type is Uniform (required) or Normal (optional)
23/// active_buying_max is the maximum length of the active buying period if
24/// active_buying_frequency_type is Uniform (required) or Normal (optional)
25/// active_buying_mean is the mean length of the active buying period if
26/// active_buying_frequency_type is Normal active_buying_stddev is the standard
27/// deviation of the active buying period if active_buying_frequency_type is
28/// Normal active_buying_end_probability is the probability that at any given
29/// timestep, the agent ends the active buying
30/// period if the active buying frequency type is
31/// Binomial
32/// active_buying_disruption_probability is the probability that in any given
33/// cycle, the agent undergoes a disruption
34/// (disrupted active period) if the active buying
35/// frequency type is FixedWithDisruption
36/// active_buying_disruption is the length of the disrupted active cycle if the
37/// active buying frequency type is
38/// FixedWithDisruption
39/// dormant_buying_frequency_type is the type of distribution used to determine
40/// the length of the dormant buying period dormant_buying_val is the length of
41/// the dormant buying period if dormant_buying_frequency_type is Fixed
42/// dormant_buying_min is the minimum length of the dormant buying period if
43/// dormant_buying_frequency_type is Uniform (required) or Normal (optional)
44/// dormant_buying_max is the maximum length of the dormant buying period if
45/// dormant_buying_frequency_type is Uniform (required) or Normal (optional)
46/// dormant_buying_mean is the mean length of the dormant buying period if
47/// dormant_buying_frequency_type is Normal dormant_buying_stddev is the
48/// standard deviation of the dormant buying period if
49/// dormant_buying_frequency_type is Normal dormant_buying_end_probability is
50/// the probability that at any given timestep, the agent ends the dormant
51/// buying period if
52/// the dormant buying frequency type is Binomial
53/// dormant_buying_disruption_probability is the probability that in any given
54/// cycle, the agent undergoes a disruption (disrupted
55/// offline period) if the dormant buying
56/// frequency type is FixedWithDisruption
57/// dormant_buying_disruption is the length of the disrupted dormant cycle if
58/// the dormant buying frequency type is
59/// FixedWithDisruption
60/// buying_size_type is the type of distribution used to determine the size of
61/// buy requests, as a fraction of the current capacity buying_size_val is the
62/// size of the buy request for Fixed buying_size_type buying_size_min is the
63/// minimum size of the buy request if buying_size_type is Uniform (required) or
64/// Normal (optional) buying_size_max is the maximum size of the buy request if
65/// buying_size_type is Uniform (required) or Normal (optional) buying_size_mean
66/// is the mean size of the buy request if buying_size_type is Normal
67/// buying_size_stddev is the standard deviation of the buy request if
68/// buying_size_type is Normal
69/// @}
70
71/// @brief sets up the distributions for the buy policy
73 /// set up active buying distribution
75 throw cyclus::ValueError("Active min larger than max.");
76 }
78 throw cyclus::ValueError("Dormant min larger than max.");
79 }
81 throw cyclus::ValueError("Buying size min larger than max.");
82 }
83
84 if (active_buying_frequency_type == "Fixed") {
87 } else if (active_buying_frequency_type == "Uniform") {
88 if ((active_buying_min == -1) || (active_buying_max == -1)) {
90 "Invalid active buying frequency range. Please provide both a min "
91 "and max value.");
92 }
95 } else if (active_buying_frequency_type == "Normal") {
96 if ((active_buying_mean == -1) || (active_buying_stddev == -1)) {
98 "Invalid active buying frequency range. Please provide both a mean "
99 "and standard deviation value.");
100 }
101 if (active_buying_min == -1) {
103 }
104 if (active_buying_max == -1) {
105 active_buying_max = std::numeric_limits<int>::max();
106 }
107
111 } else if (active_buying_frequency_type == "Binomial") {
114 throw cyclus::ValueError(
115 "Active buying end probability must be between 0 and 1");
116 }
117 int success =
118 1; // only one success is needed to end the active buying period
122 } else if (active_buying_frequency_type == "FixedWithDisruption") {
123 if (active_buying_disruption < 0) {
124 throw cyclus::ValueError("Disruption must be greater than or equal to 0");
125 }
129 } else {
130 throw cyclus::ValueError("Invalid active buying frequency type");
131 }
132
133 /// set up dormant buying distribution
134 if (dormant_buying_frequency_type == "Fixed") {
137 } else if (dormant_buying_frequency_type == "Uniform") {
138 if ((dormant_buying_min == -1) || (dormant_buying_max == -1)) {
139 throw cyclus::ValueError(
140 "Invalid dormant buying frequency range. Please provide both a min "
141 "and max value.");
142 }
145 } else if (dormant_buying_frequency_type == "Normal") {
146 if ((dormant_buying_mean == -1) || (dormant_buying_stddev == -1)) {
147 throw cyclus::ValueError(
148 "Invalid dormant buying frequency range. Please provide both a mean "
149 "and standard deviation value.");
150 }
151 if (dormant_buying_min == -1) {
153 }
154 if (dormant_buying_max == -1) {
155 dormant_buying_max = std::numeric_limits<int>::max();
156 }
160 } else if (dormant_buying_frequency_type == "Binomial") {
163 throw cyclus::ValueError(
164 "Dormant buying end probability must be between 0 and 1");
165 }
166 int success =
167 1; // only one success is needed to end the dormant buying period
171 } else if (dormant_buying_frequency_type == "FixedWithDisruption") {
173 throw cyclus::ValueError("Disruption must be greater than or equal to 0");
174 }
178 } else {
179 throw cyclus::ValueError("Invalid dormant buying frequency type");
180 }
181
182 /// set up buying size distribution
183 if (buying_size_type == "Fixed") {
186 } else if (buying_size_type == "Uniform") {
187 if ((buying_size_min == -1) || (buying_size_max == -1)) {
188 throw cyclus::ValueError(
189 "Invalid buying size range. Please provide both a min and max "
190 "value.");
191 }
194 } else if (buying_size_type == "Normal") {
195 if ((buying_size_mean == -1) || (buying_size_stddev == -1)) {
196 throw cyclus::ValueError(
197 "Invalid buying size range. Please provide both a mean and standard "
198 "deviation value.");
199 }
200 if (buying_size_min == -1) {
201 buying_size_min = 0;
202 }
203 if (buying_size_max == -1) {
204 buying_size_max = 1;
205 }
209 } else {
210 throw cyclus::ValueError("Invalid buying size type");
211 }
212}
213
214// clang-format off
215#pragma cyclus var {"default": "Fixed",\
216 "tooltip": "Type of active buying frequency",\
217 "doc": "Options: Fixed, Uniform, Normal, Binomial, FixedWithDisruption. "\
218 "Fixed requires active_buying_val. Uniform "\
219 "requires active_buying_min and active_buying_max. Normal "\
220 "requires active_buying_mean and active_buying_std, with optional "\
221 "active_buying_min and active_buying_max. Binomial requires active_buying_end_probability."\
222 "FixedWithDisruption has a probability that any given cycle will have a disrupted, "\
223 "active length. Once per cycle, a Bernoulli distribution (Binomial dist "\
224 "with N=1) will be sampled to determine if typical or disrupted cycle. If typical, "\
225 "active_buying_val is cycle length. If disrupted, active_buying_disruption.",\
226 "uitype": "combobox",\
227 "categorical": ["Fixed", "Uniform", "Normal", "Binomial", "FixedWithDisruption"],\
228 "uilabel": "Active Buying Frequency Type"}
230
231#pragma cyclus var {"default": -1,\
232 "tooltip": "Fixed active buying frequency",\
233 "doc": "The length in time steps of the active buying period. Required for fixed "\
234 "active_buying_frequency_type. Must be greater than or equal to 1 (i.e., agent "\
235 "cannot always be dormant)",\
236 "uitype": "range", \
237 "range": [1, CY_LARGE_INT], \
238 "uilabel": "Active Buying Frequency Value"}
240
241#pragma cyclus var {"default": -1,\
242 "tooltip": "Active buying distribution minimum",\
243 "doc": "The minimum length in time steps of the active buying period. Required for "\
244 "Uniform and optional for Normal active_buying_frequency_type. Must be greater than "\
245 "or equal to 1 ",\
246 "uitype": "range", \
247 "range": [1, CY_LARGE_INT], \
248 "uilabel": "Active Buying Frequency Minimum"}
250
251#pragma cyclus var {"default": -1,\
252 "tooltip": "Active buying distribution maximum",\
253 "doc": "The maximum length in time steps of the active buying period. Required for "\
254 "Uniform active_buying_frequency_type, optional for Normal. Must be greater than or equal to active_buying_min ",\
255 "uitype": "range", \
256 "range": [1, CY_LARGE_INT], \
257 "uilabel": "Active Buying Frequency Maximum"}
259
260#pragma cyclus var {"default": -1,\
261 "tooltip": "Active buying distribution mean",\
262 "doc": "The mean length in time steps of the active buying period. Required for "\
263 "Normal active_buying_frequency_type. Must be greater than or equal to 1 ",\
264 "uitype": "range", \
265 "range": [1.0, CY_LARGE_DOUBLE], \
266 "uilabel": "Active Buying Frequency Mean"}
268
269#pragma cyclus var {"default": -1,\
270 "tooltip": "Active buying distribution standard deviation",\
271 "doc": "The standard deviation of the length in time steps of the active buying period. "\
272 "Required for Normal active_buying_frequency_type. Must be greater than or equal to 0 ",\
273 "uitype": "range", \
274 "range": [0.0, CY_LARGE_DOUBLE], \
275 "uilabel": "Active Buying Frequency Standard Deviation"}
277
278#pragma cyclus var {"default": 0,\
279 "tooltip": "Probability that agent will go offline during the next time step",\
280 "doc": "Binomial distribution has a fixed probability of going dormant at any given "\
281 "timestep, like a weighted coin flip. Required for Binomial active_buying_frequency_type. "\
282 "Must be between 0 and 1",\
283 "uitype": "range", \
284 "range": [0.0, 1.0], \
285 "uilabel": "Active Buying Offline Probability"}
287
288#pragma cyclus var {"default": 0,\
289 "tooltip": "Probability that a cycle contains a disruption",\
290 "doc": "Probability that the agent undergoes a disruption (disrupted active period) "\
291 "during any given cycle. Required for FixedWithDisruption active_buying_frequency_type.",\
292 "uitype": "range",\
293 "range": [0.0, 1.0],\
294 "uilabel": "Active Buying Disruption Probability"}
296
297#pragma cyclus var {"default": -1,\
298 "tooltip": "Fixed length of disrupted active cycle",\
299 "doc": "When a active cycle is disrupted, this is length of the active period instead "\
300 "of active_buying_val. Required for FixedWithDisruption active_buying_frequency_type",\
301 "uitype": "range",\
302 "range": [0, CY_LARGE_INT]}
304
305#pragma cyclus var {"default": "Fixed",\
306 "tooltip": "Type of dormant buying frequency",\
307 "doc": "Options: Fixed, Uniform, Normal, Binomial, FixedWithDisruption. "\
308 "Fixed requires dormant_buying_val. "\
309 "Uniform requires dormant_buying_min and dormant_buying_max. Normal requires "\
310 "dormant_buying_mean and dormant_buying_std, with optional dormant_buying_min "\
311 "and dormant_buying_max. Binomial requires dormant_buying_end_probability. "\
312 "FixedWithDisruption has a probability that any given cycle will have a disrupted, "\
313 "or long, outage. Once per cycle, a Bernoulli distribution (Binomial dist "\
314 "with N=1) will be sampled to determine if typical or disrupted cycle. If typical, "\
315 "dormant_buying_val is cycle length. If disrupted, dormant_buying_disruption.",\
316 "uitype": "combobox",\
317 "categorical": ["Fixed", "Uniform", "Normal", "Binomial", "FixedWithDisruption"],\
318 "uilabel": "Dormant Buying Frequency Type"}
320
321#pragma cyclus var {"default": -1,\
322 "tooltip": "Fixed dormant buying frequency",\
323 "doc": "The length in time steps of the dormant buying period. Required for fixed "\
324 "dormant_buying_frequency_type. Default is -1, agent has no dormant period and stays active.",\
325 "uitype": "range", \
326 "range": [-1, CY_LARGE_INT], \
327 "uilabel": "Dormant Buying Frequency Value"}
329
330#pragma cyclus var {"default": -1,\
331 "tooltip": "Dormant buying distribution minimum",\
332 "doc": "The minimum length in time steps of the dormant buying period. Required for Uniform and optional for "\
333 "Normal dormant_buying_frequency_type.",\
334 "uitype": "range", \
335 "range": [0, CY_LARGE_INT], \
336 "uilabel": "Dormant Buying Frequency Minimum"}
338
339#pragma cyclus var {"default": -1,\
340 "tooltip": "Dormant buying distribution maximum",\
341 "doc": "The maximum length in time steps of the dormant buying period. Required for "\
342 "Uniform dormant_buying_frequency_type, optional for Normal. Must be greater than or equal to dormant_buying_min ",\
343 "uitype": "range", \
344 "range": [0, CY_LARGE_INT], \
345 "uilabel": "Dormant Buying Frequency Maximum"}
347
348#pragma cyclus var {"default": -1,\
349 "tooltip": "Dormant buying distribution mean",\
350 "doc": "The mean length in time steps of the dormant buying period. Required for "\
351 "Normal dormant_buying_frequency_type. Must be greater than or equal to 0 ",\
352 "uitype": "range", \
353 "range": [0.0, CY_LARGE_DOUBLE], \
354 "uilabel": "Dormant Buying Frequency Mean"}
356
357#pragma cyclus var {"default": -1,\
358 "tooltip": "Dormant buying distribution standard deviation",\
359 "doc": "The standard deviation of the length in time steps of the dormant buying period. "\
360 "Required for Normal dormant_buying_frequency_type. Must be greater than or equal to 0 ",\
361 "uitype": "range", \
362 "range": [0.0, CY_LARGE_DOUBLE], \
363 "uilabel": "Dormant Buying Frequency Standard Deviation"}
365
366#pragma cyclus var {"default": 0,\
367 "tooltip": "Probability that agent will return to active during the next time step",\
368 "doc": "Binomial distribution has a fixed probability of going active at any given "\
369 "timestep, like a weighted coin flip. Required for Binomial dormant_buying_frequency_type. "\
370 "Must be between 0 and 1",\
371 "uitype": "range", \
372 "range": [0.0, 1.0], \
373 "uilabel": "Dormant Buying Binomial Offline Probability"}
375
376#pragma cyclus var {"default": 0,\
377 "tooltip": "Probability that a cycle contains a disruption",\
378 "doc": "Probability that the agent undergoes a disruption (longer offline period) "\
379 "during any given cycle. Required for FixedWithDisruption dormant_buying_frequency_type.",\
380 "uitype": "range",\
381 "range": [0.0, 1.0],\
382 "uilabel": "Dormant Buying Disruption Probability"}
384
385#pragma cyclus var {"default": -1,\
386 "tooltip": "Fixed length of disrupted cycle",\
387 "doc": "When a dormant cycle is disrupted, this is length of the offline period instead "\
388 "of dormant_buying_val. Required for FixedWithDisruption dormant_buying_frequency_type",\
389 "uitype": "range",\
390 "range": [0, CY_LARGE_INT]}
392
393#pragma cyclus var {"default": "Fixed",\
394 "tooltip": "Type of behavior used to determine size of buy request",\
395 "doc": "Behavior function used to determine the size of requests made. All values are "\
396 "a fraction of maximum capacity, determined by the throughput and capacity remaining."\
397 " Options: Fixed, Uniform, Normal. Fixed is default behavior. Uniform requires "\
398 "buying_size_min and buying_size_max. Normal requires "\
399 "buying_size_mean and buying_size_stddev, optional buying_size_min and "\
400 "buying_size_max.",\
401 "uitype": "combobox",\
402 "categorical": ["Fixed", "Uniform", "Normal"],\
403 "uilabel": "Buying Size Type"}
405
406#pragma cyclus var {"default": 1.0,\
407 "tooltip": "Fixed buying size",\
408 "doc": "The size of the buy request as a fraction of maximum capacity. Optional for Fixed "\
409 "buying_size_type. Must be greater than or equal to 0.0",\
410 "uitype": "range", \
411 "range": [0.0, 1.0], \
412 "uilabel": "Buying Size Value"}
414
415#pragma cyclus var {"default": -1.0,\
416 "tooltip": "Buying size distribution minimum",\
417 "doc": "The minimum size of the buy request as a fraction of maximum capacity. "\
418 "Required for Uniform and optional for Normal buying_size_type. Must be greater than "\
419 "or equal to zero.",\
420 "uitype": "range", \
421 "range": [0.0, 1.0], \
422 "uilabel": "Buying Size Minimum"}
424
425#pragma cyclus var {"default": -1.0,\
426 "tooltip": "Buying size distribution maximum",\
427 "doc": "The maximum size of the buy request as a fraction of maximum capacity. "\
428 "Required for Uniform buying_size_type, optional for Normal. Must be greater than "\
429 "or equal to buying_size_min ",\
430 "uitype": "range", \
431 "range": [0.0, 1.0], \
432 "uilabel": "Buying Size Maximum"}
434
435#pragma cyclus var {"default": -1.0,\
436 "tooltip": "Buying size distribution mean",\
437 "doc": "The mean size of the buy request as a fraction of maximum capacity. "\
438 "Required for Normal buying_size_type.",\
439 "uitype": "range", \
440 "range": [0.0, 1.0], \
441 "uilabel": "Buying Size Mean"}
443
444#pragma cyclus var {"default": -1.0,\
445 "tooltip": "Buying size distribution standard deviation",\
446 "doc": "The standard deviation of the size of the buy request as a fraction of "\
447 "maximum capacity. Required for Normal buying_size_type.",\
448 "uitype": "range", \
449 "range": [0.0, 1.0], \
450 "uilabel": "Buying Size Standard Deviation"}
452
453#pragma cyclus var {"default": -1,\
454 "tooltip":"Reorder point",\
455 "doc":"The point at which the facility will request more material. "\
456 "Above this point, no request will be made. Must be less than max_inv_size."\
457 "If paired with reorder_quantity, this agent will have an (R,Q) inventory policy. "\
458 "If reorder_point is used alone, this agent will have an (s,S) inventory policy, "\
459 " with S (the maximum) being set at max_inv_size.",\
460 "uilabel":"Reorder Point"}
462
463#pragma cyclus var {"default": -1,\
464 "tooltip":"Reorder amount (R,Q inventory policy)",\
465 "doc":"The amount of material that will be requested when the reorder point is reached. "\
466 "Exclusive request, so will demand exactly reorder_quantity."\
467 "Reorder_point + reorder_quantity must be less than max_inv_size.",\
468 "uilabel":"Reorder Quantity"}
470
471#pragma cyclus var {"default": -1,\
472 "tooltip": "Total amount of material that can be recieved per cycle.",\
473 "doc": "After receiving this much material cumulatively, the agent will go dormant. "\
474 "Must be paired with dormant_buying_frequency_type and any other dormant parameters. "\
475 "The per-time step demand is unchanged except the cycle cap is almost reached.",\
476 "uilabel": "Cumulative Cap"}
478// clang-format on
479
480//// A policy for requesting material
482
486
487// Required for compilation but not added by the cycpp preprocessor. Do not
488// remove. Must be one for each variable.
490std::vector<int> cycpp_shape_active_buying_val = {0};
491std::vector<int> cycpp_shape_active_buying_min = {0};
492std::vector<int> cycpp_shape_active_buying_max = {0};
493std::vector<int> cycpp_shape_active_buying_mean = {0};
494std::vector<int> cycpp_shape_active_buying_stddev = {0};
499std::vector<int> cycpp_shape_dormant_buying_val = {0};
500std::vector<int> cycpp_shape_dormant_buying_min = {0};
501std::vector<int> cycpp_shape_dormant_buying_max = {0};
502std::vector<int> cycpp_shape_dormant_buying_mean = {0};
507std::vector<int> cycpp_shape_buying_size_type = {0};
508std::vector<int> cycpp_shape_buying_size_val = {0};
509std::vector<int> cycpp_shape_buying_size_min = {0};
510std::vector<int> cycpp_shape_buying_size_max = {0};
511std::vector<int> cycpp_shape_buying_size_mean = {0};
512std::vector<int> cycpp_shape_buying_size_stddev = {0};
513std::vector<int> cycpp_shape_reorder_point = {0};
514std::vector<int> cycpp_shape_reorder_quantity = {0};
515std::vector<int> cycpp_shape_cumulative_cap = {0};
Binary distribution requires twp options and a probability.
boost::shared_ptr< DoubleDistribution > Ptr
boost::shared_ptr< FixedDoubleDist > Ptr
boost::shared_ptr< FixedIntDist > Ptr
boost::shared_ptr< IntDistribution > Ptr
NegativeBinomialIntDist takes the number of successes desired and a probability of success on a singl...
boost::shared_ptr< NegativeBinomialIntDist > Ptr
boost::shared_ptr< NormalDoubleDist > Ptr
boost::shared_ptr< NormalIntDist > Ptr
boost::shared_ptr< UniformDoubleDist > Ptr
boost::shared_ptr< UniformIntDist > Ptr
For values that are too big, too small, etc.
Definition error.h:37
MatlBuyPolicy performs semi-automatic inventory management of a material buffer by making requests an...
std::vector< int > cycpp_shape_buying_size_stddev
std::vector< int > cycpp_shape_dormant_buying_end_probability
void InitBuyPolicyParameters()
sets up the distributions for the buy policy
std::vector< int > cycpp_shape_dormant_buying_max
std::vector< int > cycpp_shape_buying_size_val
std::vector< int > cycpp_shape_dormant_buying_disruption
int active_buying_disruption
double reorder_point
int dormant_buying_disruption
double dormant_buying_disruption_probability
double buying_size_mean
double reorder_quantity
double dormant_buying_end_probability
std::vector< int > cycpp_shape_active_buying_end_probability
std::vector< int > cycpp_shape_dormant_buying_min
std::vector< int > cycpp_shape_active_buying_mean
double buying_size_min
std::string dormant_buying_frequency_type
std::vector< int > cycpp_shape_active_buying_max
std::vector< int > cycpp_shape_buying_size_min
double active_buying_end_probability
double buying_size_stddev
std::vector< int > cycpp_shape_reorder_quantity
double active_buying_stddev
double cumulative_cap
std::vector< int > cycpp_shape_dormant_buying_disruption_probability
std::vector< int > cycpp_shape_cumulative_cap
std::vector< int > cycpp_shape_active_buying_stddev
std::vector< int > cycpp_shape_dormant_buying_stddev
std::vector< int > cycpp_shape_active_buying_val
double buying_size_max
std::string active_buying_frequency_type
std::vector< int > cycpp_shape_dormant_buying_val
double active_buying_disruption_probability
int dormant_buying_min
cyclus::toolkit::MatlBuyPolicy buy_policy
std::vector< int > cycpp_shape_buying_size_max
double active_buying_mean
cyclus::IntDistribution::Ptr dormant_dist_
std::vector< int > cycpp_shape_active_buying_disruption_probability
int active_buying_val
double buying_size_val
int dormant_buying_val
std::vector< int > cycpp_shape_active_buying_min
double dormant_buying_mean
int active_buying_min
std::vector< int > cycpp_shape_dormant_buying_frequency_type
std::vector< int > cycpp_shape_buying_size_mean
std::vector< int > cycpp_shape_buying_size_type
cyclus::IntDistribution::Ptr active_dist_
int dormant_buying_max
std::vector< int > cycpp_shape_active_buying_frequency_type
std::string buying_size_type
std::vector< int > cycpp_shape_reorder_point
std::vector< int > cycpp_shape_active_buying_disruption
double dormant_buying_stddev
cyclus::DoubleDistribution::Ptr size_dist_
std::vector< int > cycpp_shape_dormant_buying_mean
int active_buying_max