Stock Market Simulator main e8c3612
A game that provides a realistic stock buying experience with unpredictable trends to test investment strategies.
Loading...
Searching...
No Matches
events.cpp
Go to the documentation of this file.
1/// @file events.cpp
2/// Stores the event texts and modifiers.
3/*
4This program is free software: you can redistribute it and/or modify it under the
5terms of the GNU Lesser General Public License as published by the Free Software
6Foundation, either version 3 of the License, or (at your option) any later version.
7
8This program is distributed in the hope that it will be useful, but WITHOUT ANY
9WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
10PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
11
12You should have received a copy of the GNU Lesser General Public License along with this
13program. If not, see <https://www.gnu.org/licenses/>.
14*/
15
16#include "events.h"
17
18#include "random_price.h"
19
20#include <algorithm>
21#include <cassert>
22#include <iostream>
23
24/** @brief The list of all events that can be applied to the stocks.
25 * @ref category_list
26 * @details
27 * | Event ID Range | Affected Category |
28 * | -------------- | ----------------- |
29 * | 0 to 7 | All Stocks |
30 * | 8 to 11 | Adv&Market |
31 * | 12 to 16 | Aero&Def |
32 * | 17 to 22 | Airlines |
33 * | 23 to 27 | RenewEnergy |
34 * | 28 to 31 | Auto |
35 * | 32 to 34 | Banks |
36 * | 35 to 37 | Biotech |
37 * | 38 to 40 | Broadcast |
38 * | 41 to 46 | Casinos&Gaming |
39 * | 47 to 51 | E-Commerce |
40 * | 52 to 55 | FinServices |
41 * | 56 to 61 | Food&Beverage |
42 * | 62 to 66 | Healthcare |
43 * | 67 to 74 | Tech |
44 * | 75 to 79 | RealEstate |
45 * | 80 to 85 | Retail |
46 * | 86 to 91 | Telecom |
47 * | 92 to 98 | pick_random_stock |
48 */
49const std::vector<Stock_event> all_stock_events = {
50 // event_id 0 to 7 affect all stocks
51 {
52 /** event_id */ 0,
53 /** mutually_exclusive_events */ {1},
54 /** text */ "The FED has decreased the interest rate!",
55 /** duration */ 5,
56 /** percentage_permille */ 4,
57 /** type_of_event */ all_stocks,
58 /** category */ 0,
59 /** modifiers*/
60 {{standard_deviation, 0.1}, {mean, 20}, {lower_limit, 0}, {upper_limit, 20}},
61 },
62 {
63 /** event_id */ 1,
64 /** mutually_exclusive_events */ {0, 3},
65 /** text */ "The FED has increased the interest rate!",
66 /** duration */ 5,
67 /** percentage_permille */ 4,
68 /** type_of_event */ all_stocks,
69 /** category */ 0,
70 /** modifiers*/
71 {{standard_deviation, 0.1}, {mean, -20}, {lower_limit, -20}, {upper_limit, 0}},
72 },
73 {
74 /** event_id */ 2,
75 /** mutually_exclusive_events */ {},
76 /** text */ "Economic Recession: Market Downturn Signals Investor Concerns",
77 /** duration */ 7,
78 /** percentage_permille */ 2,
79 /** type_of_event */ all_stocks,
80 /** category */ 0,
81 /** modifiers*/
82 {{standard_deviation, 0.2}, {mean, -30}, {lower_limit, -30}, {upper_limit, 0}},
83 },
84 {
85 /** event_id */ 3,
86 /** mutually_exclusive_events */ {1},
87 /** text */
88 "Central Bank Cuts Interest Rates: Market Stimulus Boosts Investor Sentiment",
89 /** duration */ 3,
90 /** percentage_permille */ 4,
91 /** type_of_event */ all_stocks,
92 /** category */ 0,
93 /** modifiers*/
94 {{standard_deviation, 0.05}, {mean, 10}, {lower_limit, 0}, {upper_limit, 10}},
95 },
96 {
97 /** event_id */ 4,
98 /** mutually_exclusive_events */ {},
99 /** text */
100 "Trade War Escalates: Global Market Volatility Amidst Rising Tensions",
101 /** duration */ 5,
102 /** percentage_permille */ 4,
103 /** type_of_event */ all_stocks,
104 /** category */ 0,
105 /** modifiers*/
106 {{standard_deviation, 0.15}, {mean, -30}, {lower_limit, -30}, {upper_limit, 0}},
107 },
108 {
109 /** event_id */ 5,
110 /** mutually_exclusive_events */ {},
111 /** text */
112 "Natural Disaster Strikes: Stock Market Reacts to Catastrophic Event",
113 /** duration */ 7,
114 /** percentage_permille */ 4,
115 /** type_of_event */ all_stocks,
116 /** category */ 0,
117 /** modifiers*/
118 {{standard_deviation, 0.1}, {mean, -20}, {lower_limit, -20}, {upper_limit, 0}},
119 },
120 {
121 /** event_id */ 6,
122 /** mutually_exclusive_events */ {},
123 /** text */ "Government Policy Change: Market Impacted by New Regulations",
124 /** duration */ 4,
125 /** percentage_permille */ 4,
126 /** type_of_event */ all_stocks,
127 /** category */ 0,
128 /** modifiers*/
129 {{standard_deviation, 0.08}, {mean, -10}, {lower_limit, -15}, {upper_limit, 5}},
130 },
131 {
132 /** event_id */ 7,
133 /** mutually_exclusive_events */ {},
134 /** text */ "Inflation Surges: Market Concerns Rise as Prices Soar",
135 /** duration */ 6,
136 /** percentage_permille */ 12,
137 /** type_of_event */ all_stocks,
138 /** category */ 0,
139 /** modifiers*/
140 {{standard_deviation, 0.12}, {mean, 0}, {lower_limit, -25}, {upper_limit, 0}},
141 },
142 // event_id 8 to 11 affect category "Adv&Market"
143 {
144 /** event_id */ 8,
145 /** mutually_exclusive_events */ {},
146 /** text */ "New Social Media Platform Disrupts Advertising Landscape",
147 /** duration */ 4,
148 /** percentage_permille */ 8,
149 /** type_of_event */ category,
150 /** category */ 0,
151 /** modifiers */
152 {{standard_deviation, 0.08}, {mean, -3}, {lower_limit, -10}, {upper_limit, 0}},
153 },
154 {
155 /** event_id */ 9,
156 /** mutually_exclusive_events */ {},
157 /** text */ "Digital Advertising Spend Reaches All-Time High",
158 /** duration */ 6,
159 /** percentage_permille */ 15,
160 /** type_of_event */ category,
161 /** category */ 0,
162 /** modifiers */
163 {{standard_deviation, 0.10}, {mean, 5}, {lower_limit, 0}, {upper_limit, 30}},
164 },
165 {
166 /** event_id */ 10,
167 /** mutually_exclusive_events */ {},
168 /** text */ "Marketing Automation Tools Gain Popularity Among Businesses",
169 /** duration */ 5,
170 /** percentage_permille */ 10,
171 /** type_of_event */ category,
172 /** category */ 0,
173 /** modifiers */
174 {{standard_deviation, 0.12}, {mean, 2}, {lower_limit, 0}, {upper_limit, 15}},
175 },
176 {
177 /** event_id */ 11,
178 /** mutually_exclusive_events */ {},
179 /** text */ "Artificial Intelligence Revolutionizes Targeted Advertising",
180 /** duration */ 5,
181 /** percentage_permille */ 12,
182 /** type_of_event */ category,
183 /** category */ 0,
184 /** modifiers */
185 {{standard_deviation, 0.10}, {mean, 4}, {lower_limit, 0}, {upper_limit, 25}},
186 },
187 // event_id 12 to 16 affect category "Aero&Def"
188 {
189 /** event_id */ 12,
190 /** mutually_exclusive_events */ {16},
191 /** text */
192 "Government Increases Defense Spending Amid Rising Geopolitical Tensions",
193 /** duration */ 4,
194 /** percentage_permille */ 5,
195 /** type_of_event */ category,
196 /** category */ 1,
197 /** modifiers */
198 {{standard_deviation, 0.10}, {mean, 5}, {lower_limit, 0}, {upper_limit, 30}},
199 },
200 {
201 /** event_id */ 13,
202 /** mutually_exclusive_events */ {15},
203 /** text */ "Emerging Technologies Transform Aerospace Industry",
204 /** duration */ 5,
205 /** percentage_permille */ 10,
206 /** type_of_event */ category,
207 /** category */ 1,
208 /** modifiers */
209 {{standard_deviation, 0.08}, {mean, 3}, {lower_limit, 0}, {upper_limit, 20}},
210 },
211 {
212 /** event_id */ 14,
213 /** mutually_exclusive_events */ {},
214 /** text */ "Space Exploration Companies Achieve Major Milestones",
215 /** duration */ 5,
216 /** percentage_permille */ 12,
217 /** type_of_event */ category,
218 /** category */ 1,
219 /** modifiers */
220 {{standard_deviation, 0.12}, {mean, 2}, {lower_limit, 0}, {upper_limit, 15}},
221 },
222 {
223 /** event_id */ 15,
224 /** mutually_exclusive_events */ {13},
225 /** text */ "Supply Chain Disruptions Hinder Aerospace Manufacturing",
226 /** duration */ 6,
227 /** percentage_permille */ 12,
228 /** type_of_event */ category,
229 /** category */ 1,
230 /** modifiers */
231 {{standard_deviation, 0.10}, {mean, -3}, {lower_limit, -10}, {upper_limit, 0}},
232 },
233 {
234 /** event_id */ 16,
235 /** mutually_exclusive_events */ {12},
236 /** text */ "Budget Cuts Lead to Decreased Defense Contracts",
237 /** duration */ 5,
238 /** percentage_permille */ 10,
239 /** type_of_event */ category,
240 /** category */ 1,
241 /** modifiers */
242 {{standard_deviation, 0.12}, {mean, -2}, {lower_limit, -15}, {upper_limit, 0}},
243 },
244 // event_id 17 to 22 affect category "Airlines"
245 {
246 /** event_id */ 17,
247 /** mutually_exclusive_events */ {},
248 /** text */ "Airline Industry Experiences Surge in Travel Demand",
249 /** duration */ 7,
250 /** percentage_permille */ 15,
251 /** type_of_event */ category,
252 /** category */ 2,
253 /** modifiers */
254 {{standard_deviation, 0.10}, {mean, 5}, {lower_limit, 0}, {upper_limit, 30}},
255 },
256 {
257 /** event_id */ 18,
258 /** mutually_exclusive_events */ {},
259 /** text */
260 "Fuel Prices Skyrocket, Putting Pressure on Airlines' Profit Margins",
261 /** duration */ 6,
262 /** percentage_permille */ 10,
263 /** type_of_event */ category,
264 /** category */ 2,
265 /** modifiers */
266 {{standard_deviation, 0.08}, {mean, -3}, {lower_limit, -20}, {upper_limit, 0}},
267 },
268 {
269 /** event_id */ 19,
270 /** mutually_exclusive_events */ {},
271 /** text */ "Airline Strikes Disrupt Travel Plans for Thousands of Passengers",
272 /** duration */ 5,
273 /** percentage_permille */ 12,
274 /** type_of_event */ category,
275 /** category */ 2,
276 /** modifiers */
277 {{standard_deviation, 0.12}, {mean, -2}, {lower_limit, -15}, {upper_limit, 0}},
278 },
279 {
280 /** event_id */ 20,
281 /** mutually_exclusive_events */ {},
282 /** text */ "New Low-Cost Airline Enters the Market, Intensifying Competition",
283 /** duration */ 6,
284 /** percentage_permille */ 12,
285 /** type_of_event */ category,
286 /** category */ 2,
287 /** modifiers */
288 {{standard_deviation, 0.10}, {mean, 3}, {lower_limit, 0}, {upper_limit, 20}},
289 },
290 {
291 /** event_id */ 21,
292 /** mutually_exclusive_events */ {},
293 /** text */
294 "Natural Disasters Disrupt Airline Operations and Cause Flight Cancellations",
295 /** duration */ 3,
296 /** percentage_permille */ 10,
297 /** type_of_event */ category,
298 /** category */ 2,
299 /** modifiers */
300 {{standard_deviation, 0.12}, {mean, -2}, {lower_limit, -15}, {upper_limit, 0}},
301 },
302 {
303 /** event_id */ 22,
304 /** mutually_exclusive_events */ {},
305 /** text */ "New Security Regulations Increase Operational Costs for Airlines",
306 /** duration */ 6,
307 /** percentage_permille */ 10,
308 /** type_of_event */ category,
309 /** category */ 2,
310 /** modifiers */
311 {{standard_deviation, 0.08}, {mean, -1}, {lower_limit, -10}, {upper_limit, 0}},
312 },
313 // event_id 23 to 27 affect category "RenewEnergy"
314 {
315 /** event_id */ 23,
316 /** mutually_exclusive_events */ {26},
317 /** text */
318 "Government Implements New Incentives to Promote Renewable Energy Adoption",
319 /** duration */ 6,
320 /** percentage_permille */ 12,
321 /** type_of_event */ category,
322 /** category */ 3,
323 /** modifiers */
324 {{standard_deviation, 0.10}, {mean, 3}, {lower_limit, 0}, {upper_limit, 20}},
325 },
326 {
327 /** event_id */ 24,
328 /** mutually_exclusive_events */ {},
329 /** text */
330 "Breakthrough in Solar Panel Technology Increases Efficiency by 20%",
331 /** duration */ 5,
332 /** percentage_permille */ 10,
333 /** type_of_event */ category,
334 /** category */ 3,
335 /** modifiers */
336 {{standard_deviation, 0.12}, {mean, 2}, {lower_limit, 0}, {upper_limit, 15}},
337 },
338 {
339 /** event_id */ 25,
340 /** mutually_exclusive_events */ {},
341 /** text */ "Investment in Wind Farms Surges as Costs of Wind Energy Decrease",
342 /** duration */ 7,
343 /** percentage_permille */ 16,
344 /** type_of_event */ category,
345 /** category */ 3,
346 /** modifiers */
347 {{standard_deviation, 0.10}, {mean, 5}, {lower_limit, 0}, {upper_limit, 30}},
348 },
349 {
350 /** event_id */ 26,
351 /** mutually_exclusive_events */ {23},
352 /** text */
353 "Government Cuts Subsidies for Renewable Energy Projects, Slowing Down "
354 "Progress",
355 /** duration */ 6,
356 /** percentage_permille */ 10,
357 /** type_of_event */ category,
358 /** category */ 3,
359 /** modifiers */
360 {{standard_deviation, 0.08}, {mean, -3}, {lower_limit, -20}, {upper_limit, 0}},
361 },
362 {
363 /** event_id */ 27,
364 /** mutually_exclusive_events */ {},
365 /** text */ "Persistent Cloud Cover Reduces Solar Power Generation",
366 /** duration */ 5,
367 /** percentage_permille */ 8,
368 /** type_of_event */ category,
369 /** category */ 3,
370 /** modifiers */
371 {{standard_deviation, 0.10}, {mean, -2}, {lower_limit, -15}, {upper_limit, 0}},
372 },
373 // event_id 28 to 31 affect category "Auto"
374 {
375 /** event_id */ 28,
376 /** mutually_exclusive_events */ {},
377 /** text */
378 "Breakthrough in Electric Vehicle Battery Technology Extends Range and Reduces "
379 "Charging Time",
380 /** duration */ 6,
381 /** percentage_permille */ 12,
382 /** type_of_event */ category,
383 /** category */ 4,
384 /** modifiers */
385 {{standard_deviation, 0.08}, {mean, 3}, {lower_limit, 0}, {upper_limit, 20}},
386 },
387 {
388 /** event_id */ 29,
389 /** mutually_exclusive_events */ {},
390 /** text */
391 "Sudden Increase in Oil Prices Impacts Affordability and Demand for "
392 "Conventional Vehicles",
393 /** duration */ 5,
394 /** percentage_permille */ 12,
395 /** type_of_event */ category,
396 /** category */ 4,
397 /** modifiers */
398 {{standard_deviation, 0.08}, {mean, -5}, {lower_limit, -20}, {upper_limit, 0}},
399 },
400 {
401 /** event_id */ 30,
402 /** mutually_exclusive_events */ {31},
403 /** text */
404 "Introduction of Advanced Driver Assistance Systems Enhances Vehicle Safety",
405 /** duration */ 5,
406 /** percentage_permille */ 8,
407 /** type_of_event */ category,
408 /** category */ 4,
409 /** modifiers */
410 {{standard_deviation, 0.06}, {mean, 5}, {lower_limit, 0}, {upper_limit, 15}},
411 },
412 {
413 /** event_id */ 31,
414 /** mutually_exclusive_events */ {30},
415 /** text */ "Frequent Accidents raise safety Concerns",
416 /** duration */ 6,
417 /** percentage_permille */ 10,
418 /** type_of_event */ category,
419 /** category */ 4,
420 /** modifiers */
421 {{standard_deviation, 0.10}, {mean, -5}, {lower_limit, -30}, {upper_limit, 0}},
422 },
423 // event_id 32 to 34 affect category "Banks"
424 {
425 /** event_id */ 32,
426 /** mutually_exclusive_events */ {},
427 /** text */
428 "Economic Recession Triggers Increase in Non-Performing Loans, Putting Banks "
429 "at Risk",
430 /** duration */ 7,
431 /** percentage_permille */ 10,
432 /** type_of_event */ category,
433 /** category */ 5,
434 /** modifiers */
435 {{standard_deviation, 0.10}, {mean, -4}, {lower_limit, -25}, {upper_limit, 0}},
436 },
437 {
438 /** event_id */ 33,
439 /** mutually_exclusive_events */ {},
440 /** text */
441 "Government Introduces Stimulus Package to Boost Lending and Economic Growth",
442 /** duration */ 6,
443 /** percentage_permille */ 15,
444 /** type_of_event */ category,
445 /** category */ 5,
446 /** modifiers */
447 {{standard_deviation, 0.08}, {mean, 5}, {lower_limit, 0}, {upper_limit, 25}},
448 },
449 {
450 /** event_id */ 34,
451 /** mutually_exclusive_events */ {},
452 /** text */
453 "Government Implements Excessive Money Printing, Leading to Inflation and "
454 "Currency Devaluation",
455 /** duration */ 8,
456 /** percentage_permille */ 16,
457 /** type_of_event */ category,
458 /** category */ 5,
459 /** modifiers */
460 {{standard_deviation, 0.12}, {mean, 0}, {lower_limit, -40}, {upper_limit, 0}},
461 },
462 // event_id 35 to 37 affect category "Biotech"
463 {
464 /** event_id */ 35,
465 /** mutually_exclusive_events */ {},
466 /** text */
467 "Breakthrough in Gene Therapy Offers Potential Cure for Genetic Diseases",
468 /** duration */ 7,
469 /** percentage_permille */ 14,
470 /** type_of_event */ category,
471 /** category */ 6,
472 /** modifiers */
473 {{standard_deviation, 0.10}, {mean, 4}, {lower_limit, 0}, {upper_limit, 25}},
474 },
475 {
476 /** event_id */ 36,
477 /** mutually_exclusive_events */ {},
478 /** text */
479 "Clinical Trial Failure Delays Development of Promising Drug Candidate",
480 /** duration */ 5,
481 /** percentage_permille */ 10,
482 /** type_of_event */ category,
483 /** category */ 6,
484 /** modifiers */
485 {{standard_deviation, 0.08}, {mean, -3}, {lower_limit, -20}, {upper_limit, 0}},
486 },
487 {
488 /** event_id */ 37,
489 /** mutually_exclusive_events */ {},
490 /** text */
491 "Successful FDA Approval Expedites Commercialization of Innovative Biotech "
492 "Products",
493 /** duration */ 6,
494 /** percentage_permille */ 12,
495 /** type_of_event */ category,
496 /** category */ 6,
497 /** modifiers */
498 {{standard_deviation, 0.09}, {mean, 3}, {lower_limit, 0}, {upper_limit, 20}},
499 },
500 // event_id 38 to 40 affect category "Broadcast"
501 {
502 /** event_id */ 38,
503 /** mutually_exclusive_events */ {},
504 /** text */
505 "New Streaming Service Launches with Extensive Content Library and Innovative "
506 "Features",
507 /** duration */ 6,
508 /** percentage_permille */ 10,
509 /** type_of_event */ category,
510 /** category */ 7,
511 /** modifiers */
512 {{standard_deviation, 0.08}, {mean, 3}, {lower_limit, 0}, {upper_limit, 20}},
513 },
514 {
515 /** event_id */ 39,
516 /** mutually_exclusive_events */ {},
517 /** text */
518 "Broadcast Network Faces Significant Revenue Losses Due to Declining "
519 "Viewership",
520 /** duration */ 7,
521 /** percentage_permille */ 12,
522 /** type_of_event */ category,
523 /** category */ 7,
524 /** modifiers */
525 {{standard_deviation, 0.10}, {mean, -4}, {lower_limit, -25}, {upper_limit, 0}},
526 },
527 {
528 /** event_id */ 40,
529 /** mutually_exclusive_events */ {},
530 /** text */
531 "Broadcast Network Strikes Exclusive Deal for Live Coverage of Major Sporting "
532 "Event",
533 /** duration */ 5,
534 /** percentage_permille */ 8,
535 /** type_of_event */ category,
536 /** category */ 7,
537 /** modifiers */
538 {{standard_deviation, 0.07}, {mean, 2}, {lower_limit, 0}, {upper_limit, 15}},
539 },
540 // event_id 41 to 46 affect category "Casinos&Gaming"
541 {
542 /** event_id */ 41,
543 /** mutually_exclusive_events */ {},
544 /** text */ "Stringent Gambling Regulations Restrict Casino Operations",
545 /** duration */ 6,
546 /** percentage_permille */ 12,
547 /** type_of_event */ category,
548 /** category */ 8,
549 /** modifiers */
550 {{standard_deviation, 0.10}, {mean, -4}, {lower_limit, -25}, {upper_limit, 0}},
551 },
552 {
553 /** event_id */ 42,
554 /** mutually_exclusive_events */ {},
555 /** text */
556 "Innovative Strategies Help Casinos Navigate Stringent Regulations and "
557 "Minimize Revenue Losses",
558 /** duration */ 7,
559 /** percentage_permille */ 10,
560 /** type_of_event */ category,
561 /** category */ 8,
562 /** modifiers */
563 {{standard_deviation, 0.08}, {mean, 3}, {lower_limit, 0}, {upper_limit, 20}},
564 },
565 {
566 /** event_id */ 43,
567 /** mutually_exclusive_events */ {45},
568 /** text */
569 "Online Gaming Goes Viral, Attracting Millions of Players Worldwide",
570 /** duration */ 5,
571 /** percentage_permille */ 20,
572 /** type_of_event */ category,
573 /** category */ 8,
574 /** modifiers */
575 {{standard_deviation, 0.1}, {mean, 5}, {lower_limit, 0}, {upper_limit, 30}},
576 },
577 {
578 /** event_id */ 44,
579 /** mutually_exclusive_events */ {},
580 /** text */ "New Esports Tournament Breaks Viewership Records",
581 /** duration */ 4,
582 /** percentage_permille */ 15,
583 /** type_of_event */ category,
584 /** category */ 8,
585 /** modifiers */
586 {{standard_deviation, 0.1}, {mean, 7}, {lower_limit, 0}, {upper_limit, 25}},
587 },
588 {
589 /** event_id */ 45,
590 /** mutually_exclusive_events */ {43},
591 /** text */
592 "Major Data Breach Affects Gaming Platforms, Raising Concerns About Player "
593 "Privacy",
594 /** duration */ 6,
595 /** percentage_permille */ 10,
596 /** type_of_event */ category,
597 /** category */ 8,
598 /** modifiers */
599 {{standard_deviation, 0.12}, {mean, -4}, {lower_limit, -20}, {upper_limit, 0}},
600 },
601 {
602 /** event_id */ 46,
603 /** mutually_exclusive_events */ {},
604 /** text */
605 "Introduction of Virtual Reality Gaming Enhances Player Immersion and "
606 "Experience",
607 /** duration */ 5,
608 /** percentage_permille */ 12,
609 /** type_of_event */ category,
610 /** category */ 8,
611 /** modifiers */
612 {{standard_deviation, 0.1}, {mean, 6}, {lower_limit, 0}, {upper_limit, 20}},
613 },
614 // event_id 47 to 51 affect category "E-Commerce"
615 {
616 /** event_id */ 47,
617 /** mutually_exclusive_events */ {},
618 /** text */
619 "E-commerce Sales Reach All-Time High, Exceeding Market Expectations",
620 /** duration */ 6,
621 /** percentage_permille */ 12,
622 /** type_of_event */ category,
623 /** category */ 9,
624 /** modifiers */
625 {{standard_deviation, 0.1}, {mean, 6}, {lower_limit, 0}, {upper_limit, 20}},
626 },
627 {
628 /** event_id */ 48,
629 /** mutually_exclusive_events */ {},
630 /** text */
631 "Supply Chain Disruptions Cause Delivery Delays and Inventory Shortages in "
632 "E-commerce",
633 /** duration */ 7,
634 /** percentage_permille */ 10,
635 /** type_of_event */ category,
636 /** category */ 9,
637 /** modifiers */
638 {{standard_deviation, 0.12}, {mean, -4}, {lower_limit, -20}, {upper_limit, 0}},
639 },
640 {
641 /** event_id */ 49,
642 /** mutually_exclusive_events */ {},
643 /** text */
644 "Introduction of Innovative Payment Solutions Boosts E-commerce Conversion "
645 "Rates",
646 /** duration */ 5,
647 /** percentage_permille */ 8,
648 /** type_of_event */ category,
649 /** category */ 9,
650 /** modifiers */
651 {{standard_deviation, 0.1}, {mean, 4}, {lower_limit, 0}, {upper_limit, 15}},
652 },
653 {
654 /** event_id */ 50,
655 /** mutually_exclusive_events */ {},
656 /** text */
657 "Cybersecurity Breach Raises Concerns About Online Shopping Privacy and Data "
658 "Protection",
659 /** duration */ 6,
660 /** percentage_permille */ 15,
661 /** type_of_event */ category,
662 /** category */ 9,
663 /** modifiers */
664 {{standard_deviation, 0.1}, {mean, -7}, {lower_limit, -25}, {upper_limit, 0}},
665 },
666 {
667 /** event_id */ 51,
668 /** mutually_exclusive_events */ {},
669 /** text */
670 "Advancements in Artificial Intelligence Revolutionize Personalized Shopping "
671 "Experiences",
672 /** duration */ 5,
673 /** percentage_permille */ 10,
674 /** type_of_event */ category,
675 /** category */ 9,
676 /** modifiers */
677 {{standard_deviation, 0.1}, {mean, 5}, {lower_limit, 0}, {upper_limit, 20}},
678 },
679 // event_id 52 to 55 affect category "FinServices"
680 {
681 /** event_id */ 52,
682 /** mutually_exclusive_events */ {53},
683 /** text */
684 "Fintech Startups Disrupt Traditional Banking, Providing Innovative Financial "
685 "Services",
686 /** duration */ 6,
687 /** percentage_permille */ 15,
688 /** type_of_event */ category,
689 /** category */ 10,
690 /** modifiers */
691 {{standard_deviation, 0.1}, {mean, 7}, {lower_limit, 0}, {upper_limit, 25}},
692 },
693 {
694 /** event_id */ 53,
695 /** mutually_exclusive_events */ {52, 54, 55},
696 /** text */ "Stock Market Crash Leads to Financial Turmoil and Investor Losses",
697 /** duration */ 7,
698 /** percentage_permille */ 12,
699 /** type_of_event */ category,
700 /** category */ 10,
701 /** modifiers */
702 {{standard_deviation, 0.12}, {mean, -4}, {lower_limit, -20}, {upper_limit, 0}},
703 },
704 {
705 /** event_id */ 54,
706 /** mutually_exclusive_events */ {53},
707 /** text */
708 "Introduction of Blockchain Technology Enhances Security and Efficiency in "
709 "Financial Transactions",
710 /** duration */ 5,
711 /** percentage_permille */ 10,
712 /** type_of_event */ category,
713 /** category */ 10,
714 /** modifiers */
715 {{standard_deviation, 0.1}, {mean, 5}, {lower_limit, 0}, {upper_limit, 20}},
716 },
717 {
718 /** event_id */ 55,
719 /** mutually_exclusive_events */ {53},
720 /** text */
721 "Digital Wallets Gain Popularity, Simplifying Payment Processes and Increasing "
722 "Financial Inclusion",
723 /** duration */ 5,
724 /** percentage_permille */ 8,
725 /** type_of_event */ category,
726 /** category */ 10,
727 /** modifiers */
728 {{standard_deviation, 0.1}, {mean, 4}, {lower_limit, 0}, {upper_limit, 15}},
729 },
730 // event_id 56 to 61 affect category "Food&Beverage"
731 {
732 /** event_id */ 56,
733 /** mutually_exclusive_events */ {},
734 /** text */
735 "Plant-Based Food Trend Continues to Grow, Offering Healthier and Sustainable "
736 "Options",
737 /** duration */ 6,
738 /** percentage_permille */ 10,
739 /** type_of_event */ category,
740 /** category */ 11,
741 /** modifiers */
742 {{standard_deviation, 0.1}, {mean, 5}, {lower_limit, 0}, {upper_limit, 20}},
743 },
744 {
745 /** event_id */ 57,
746 /** mutually_exclusive_events */ {},
747 /** text */
748 "Food Safety Scandal Raises Concerns About Contaminated Products and Consumer "
749 "Health",
750 /** duration */ 7,
751 /** percentage_permille */ 12,
752 /** type_of_event */ category,
753 /** category */ 11,
754 /** modifiers */
755 {{standard_deviation, 0.12}, {mean, -4}, {lower_limit, -20}, {upper_limit, 0}},
756 },
757 {
758 /** event_id */ 58,
759 /** mutually_exclusive_events */ {},
760 /** text */
761 "Introduction of Innovative Cooking Techniques Enhances Culinary Experiences",
762 /** duration */ 5,
763 /** percentage_permille */ 8,
764 /** type_of_event */ category,
765 /** category */ 11,
766 /** modifiers */
767 {{standard_deviation, 0.1}, {mean, 4}, {lower_limit, 0}, {upper_limit, 15}},
768 },
769 {
770 /** event_id */ 59,
771 /** mutually_exclusive_events */ {},
772 /** text */
773 "Global Food Shortage Crisis Impacts Prices and Availability of Essential "
774 "Commodities",
775 /** duration */ 6,
776 /** percentage_permille */ 15,
777 /** type_of_event */ category,
778 /** category */ 11,
779 /** modifiers */
780 {{standard_deviation, 0.1}, {mean, -7}, {lower_limit, -25}, {upper_limit, 0}},
781 },
782 {
783 /** event_id */ 60,
784 /** mutually_exclusive_events */ {},
785 /** text */
786 "Rise of Food Delivery Services Provides Convenient and Wide-ranging Dining "
787 "Options",
788 /** duration */ 5,
789 /** percentage_permille */ 8,
790 /** type_of_event */ category,
791 /** category */ 11,
792 /** modifiers */
793 {{standard_deviation, 0.1}, {mean, 4}, {lower_limit, 0}, {upper_limit, 15}},
794 },
795 {
796 /** event_id */ 61,
797 /** mutually_exclusive_events */ {},
798 /** text */
799 "Growing Demand for Organic and Locally Sourced Food Drives Sustainable "
800 "Farming Practices",
801 /** duration */ 6,
802 /** percentage_permille */ 10,
803 /** type_of_event */ category,
804 /** category */ 11,
805 /** modifiers */
806 {{standard_deviation, 0.1}, {mean, 5}, {lower_limit, 0}, {upper_limit, 20}},
807 },
808 // event_id 62 to 66 affect category "Healthcare"
809 {
810 /** event_id */ 62,
811 /** mutually_exclusive_events */ {},
812 /** text */
813 "Advancements in Telemedicine Improve Access to Medical Care for Remote Areas",
814 /** duration */ 6,
815 /** percentage_permille */ 12,
816 /** type_of_event */ category,
817 /** category */ 12,
818 /** modifiers */
819 {{standard_deviation, 0.1}, {mean, 6}, {lower_limit, 0}, {upper_limit, 20}},
820 },
821 {
822 /** event_id */ 63,
823 /** mutually_exclusive_events */ {},
824 /** text */
825 "Outbreak of Global Pandemic Leads to Overwhelmed Healthcare Systems and High "
826 "Mortality Rates",
827 /** duration */ 8,
828 /** percentage_permille */ 15,
829 /** type_of_event */ category,
830 /** category */ 12,
831 /** modifiers */
832 {{standard_deviation, 0.12}, {mean, 7}, {lower_limit, 0}, {upper_limit, 25}},
833 },
834 {
835 /** event_id */ 64,
836 /** mutually_exclusive_events */ {},
837 /** text */
838 "Development of Personalized Medicine Leads to More Effective Treatment and "
839 "Prevention Strategies",
840 /** duration */ 7,
841 /** percentage_permille */ 10,
842 /** type_of_event */ category,
843 /** category */ 12,
844 /** modifiers */
845 {{standard_deviation, 0.1}, {mean, 5}, {lower_limit, 0}, {upper_limit, 20}},
846 },
847 {
848 /** event_id */ 65,
849 /** mutually_exclusive_events */ {},
850 /** text */
851 "Shortage of Healthcare Professionals Causes Strain on Medical Services and "
852 "Longer Wait Times",
853 /** duration */ 6,
854 /** percentage_permille */ 12,
855 /** type_of_event */ category,
856 /** category */ 12,
857 /** modifiers */
858 {{standard_deviation, 0.12}, {mean, -4}, {lower_limit, -20}, {upper_limit, 0}},
859 },
860 {
861 /** event_id */ 66,
862 /** mutually_exclusive_events */ {},
863 /** text */
864 "Advancements in Gene Editing Technology Open New Avenues for Precision "
865 "Medicine",
866 /** duration */ 7,
867 /** percentage_permille */ 12,
868 /** type_of_event */ category,
869 /** category */ 12,
870 /** modifiers */
871 {{standard_deviation, 0.1}, {mean, 6}, {lower_limit, 0}, {upper_limit, 20}},
872 },
873 // event_id 67 to 74 affect category "Tech"
874 {
875 /** event_id */ 67,
876 /** mutually_exclusive_events */ {},
877 /** text */
878 "Breakthrough in Artificial Intelligence Leads to Significant Advancements in "
879 "Automation and Machine Learning",
880 /** duration */ 6,
881 /** percentage_permille */ 12,
882 /** type_of_event */ category,
883 /** category */ 13,
884 /** modifiers */
885 {{standard_deviation, 0.1}, {mean, 6}, {lower_limit, 0}, {upper_limit, 20}},
886 },
887 {
888 /** event_id */ 68,
889 /** mutually_exclusive_events */ {},
890 /** text */
891 "Cybersecurity Breach Exposes Sensitive Data and Raises Concerns Over Digital "
892 "Privacy",
893 /** duration */ 7,
894 /** percentage_permille */ 10,
895 /** type_of_event */ category,
896 /** category */ 13,
897 /** modifiers */
898 {{standard_deviation, 0.3}, {mean, -5}, {lower_limit, -15}, {upper_limit, 0}},
899 },
900 {
901 /** event_id */ 69,
902 /** mutually_exclusive_events */ {},
903 /** text */
904 "Emergence of 5G Technology Revolutionizes Connectivity and Enables Faster "
905 "Data Transfer",
906 /** duration */ 5,
907 /** percentage_permille */ 10,
908 /** type_of_event */ category,
909 /** category */ 13,
910 /** modifiers */
911 {{standard_deviation, 0.1}, {mean, 5}, {lower_limit, 0}, {upper_limit, 15}},
912 },
913 {
914 /** event_id */ 70,
915 /** mutually_exclusive_events */ {},
916 /** text */
917 "Failure of Major Tech Infrastructure Disrupts Services and Causes Widespread "
918 "Outages",
919 /** duration */ 6,
920 /** percentage_permille */ 12,
921 /** type_of_event */ category,
922 /** category */ 13,
923 /** modifiers */
924 {{standard_deviation, 0.12}, {mean, -4}, {lower_limit, -20}, {upper_limit, 0}},
925 },
926 {
927 /** event_id */ 71,
928 /** mutually_exclusive_events */ {},
929 /** text */
930 "Advancements in Quantum Computing Unlock New Possibilities for Solving "
931 "Complex Problems",
932 /** duration */ 7,
933 /** percentage_permille */ 12,
934 /** type_of_event */ category,
935 /** category */ 13,
936 /** modifiers */
937 {{standard_deviation, 0.1}, {mean, 6}, {lower_limit, 0}, {upper_limit, 20}},
938 },
939 {
940 /** event_id */ 72,
941 /** mutually_exclusive_events */ {},
942 /** text */
943 "Rapid Advancements in Augmented Reality (AR) and Virtual Reality (VR) Enhance "
944 "User Experiences",
945 /** duration */ 6,
946 /** percentage_permille */ 10,
947 /** type_of_event */ category,
948 /** category */ 13,
949 /** modifiers */
950 {{standard_deviation, 0.1}, {mean, 5}, {lower_limit, 0}, {upper_limit, 20}},
951 },
952 {
953 /** event_id */ 73,
954 /** mutually_exclusive_events */ {},
955 /** text */
956 "Advancements in Robotics and Automation Transform Manufacturing and Increase "
957 "Efficiency",
958 /** duration */ 6,
959 /** percentage_permille */ 12,
960 /** type_of_event */ category,
961 /** category */ 13,
962 /** modifiers */
963 {{standard_deviation, 0.1}, {mean, 6}, {lower_limit, 0}, {upper_limit, 20}},
964 },
965 {
966 /** event_id */ 74,
967 /** mutually_exclusive_events */ {},
968 /** text */
969 "Emergence of Artificial General Intelligence (AGI) Raises Ethical and "
970 "Societal Concerns",
971 /** duration */ 7,
972 /** percentage_permille */ 10,
973 /** type_of_event */ category,
974 /** category */ 13,
975 /** modifiers */
976 {{standard_deviation, 0.1}, {mean, -5}, {lower_limit, -15}, {upper_limit, 0}},
977 },
978 // event_id 75 to 79 affect category "RealEstate"
979 {
980 /** event_id */ 75,
981 /** mutually_exclusive_events */ {76},
982 /** text */
983 "Strong Demand and Low Mortgage Rates Drive Real Estate Market Growth",
984 /** duration */ 6,
985 /** percentage_permille */ 10,
986 /** type_of_event */ category,
987 /** category */ 14,
988 /** modifiers */
989 {{standard_deviation, 0.1}, {mean, 5}, {lower_limit, 0}, {upper_limit, 20}},
990 },
991 {
992 /** event_id */ 76,
993 /** mutually_exclusive_events */ {75},
994 /** text */
995 "Economic Downturn Leads to Decline in Real Estate Prices and Sales",
996 /** duration */ 7,
997 /** percentage_permille */ 10,
998 /** type_of_event */ category,
999 /** category */ 14,
1000 /** modifiers */
1001 {{standard_deviation, 0.1}, {mean, -5}, {lower_limit, -15}, {upper_limit, 0}},
1002 },
1003 {
1004 /** event_id */ 77,
1005 /** mutually_exclusive_events */ {},
1006 /** text */
1007 "Rapid Urbanization and Infrastructure Development Boost Real Estate "
1008 "Investments",
1009 /** duration */ 6,
1010 /** percentage_permille */ 12,
1011 /** type_of_event */ category,
1012 /** category */ 14,
1013 /** modifiers */
1014 {{standard_deviation, 0.1}, {mean, 6}, {lower_limit, 0}, {upper_limit, 20}},
1015 },
1016 {
1017 /** event_id */ 78,
1018 /** mutually_exclusive_events */ {},
1019 /** text */
1020 "Natural Disasters Cause Property Damage and Impact Real Estate Market",
1021 /** duration */ 7,
1022 /** percentage_permille */ 10,
1023 /** type_of_event */ category,
1024 /** category */ 14,
1025 /** modifiers */
1026 {{standard_deviation, 0.1}, {mean, -5}, {lower_limit, -15}, {upper_limit, 0}},
1027 },
1028 {
1029 /** event_id */ 79,
1030 /** mutually_exclusive_events */ {},
1031 /** text */
1032 "Investigation Reveals Widespread Cases of Substandard Construction Projects",
1033 /** duration */ 5,
1034 /** percentage_permille */ 10,
1035 /** type_of_event */ category,
1036 /** category */ 14,
1037 /** modifiers */
1038 {{standard_deviation, 0.12}, {mean, -4}, {lower_limit, -20}, {upper_limit, 0}},
1039 },
1040 // event_id 80 to 85 affect category "RealEstate"
1041 {
1042 /** event_id */ 80,
1043 /** mutually_exclusive_events */ {},
1044 /** text */
1045 "Shift in Consumer Behavior Leads to Decline in Brick-and-Mortar Retail Stores",
1046 /** duration */ 7,
1047 /** percentage_permille */ 10,
1048 /** type_of_event */ category,
1049 /** category */ 15,
1050 /** modifiers */
1051 {{standard_deviation, 0.1}, {mean, -5}, {lower_limit, -15}, {upper_limit, 0}},
1052 },
1053 {
1054 /** event_id */ 81,
1055 /** mutually_exclusive_events */ {},
1056 /** text */
1057 "Adoption of Technology Enhances Customer Experience in Physical Retail Stores",
1058 /** duration */ 6,
1059 /** percentage_permille */ 12,
1060 /** type_of_event */ category,
1061 /** category */ 15,
1062 /** modifiers */
1063 {{standard_deviation, 0.1}, {mean, 6}, {lower_limit, 0}, {upper_limit, 20}},
1064 },
1065 {
1066 /** event_id */ 82,
1067 /** mutually_exclusive_events */ {},
1068 /** text */
1069 "Integration of Augmented Reality Enhances In-Store Shopping Experience",
1070 /** duration */ 6,
1071 /** percentage_permille */ 10,
1072 /** type_of_event */ category,
1073 /** category */ 15,
1074 /** modifiers */
1075 {{standard_deviation, 0.1}, {mean, 5}, {lower_limit, 0}, {upper_limit, 20}},
1076 },
1077 {
1078 /** event_id */ 83,
1079 /** mutually_exclusive_events */ {},
1080 /** text */
1081 "Increase in Online Counterfeit Products Impacts Consumer Trust in E-commerce",
1082 /** duration */ 7,
1083 /** percentage_permille */ 10,
1084 /** type_of_event */ category,
1085 /** category */ 15,
1086 /** modifiers */
1087 {{standard_deviation, 0.1}, {mean, -5}, {lower_limit, -15}, {upper_limit, 0}},
1088 },
1089 {
1090 /** event_id */ 84,
1091 /** mutually_exclusive_events */ {},
1092 /** text */
1093 "Retailers Embrace Sustainable Practices, Driving Eco-friendly Consumer "
1094 "Choices",
1095 /** duration */ 6,
1096 /** percentage_permille */ 12,
1097 /** type_of_event */ category,
1098 /** category */ 15,
1099 /** modifiers */
1100 {{standard_deviation, 0.1}, {mean, 6}, {lower_limit, 0}, {upper_limit, 20}},
1101 },
1102 {
1103 /** event_id */ 85,
1104 /** mutually_exclusive_events */ {},
1105 /** text */ "Supply Chain Disruptions Impact Retail Inventory and Availability",
1106 /** duration */ 7,
1107 /** percentage_permille */ 10,
1108 /** type_of_event */ category,
1109 /** category */ 15,
1110 /** modifiers */
1111 {{standard_deviation, 0.1}, {mean, -5}, {lower_limit, -15}, {upper_limit, 0}},
1112 },
1113 // event_id 86 to __ affect category "Telecom"
1114 {
1115 /** event_id */ 86,
1116 /** mutually_exclusive_events */ {},
1117 /** text */
1118 "Deployment of 5G Networks Enables Faster and More Reliable Connectivity",
1119 /** duration */ 6,
1120 /** percentage_permille */ 10,
1121 /** type_of_event */ category,
1122 /** category */ 16,
1123 /** modifiers */
1124 {{standard_deviation, 0.1}, {mean, 5}, {lower_limit, 0}, {upper_limit, 20}},
1125 },
1126 {
1127 /** event_id */ 87,
1128 /** mutually_exclusive_events */ {},
1129 /** text */
1130 "Cybersecurity Breach in Telecom Networks Raises Concerns over Data Privacy",
1131 /** duration */ 7,
1132 /** percentage_permille */ 10,
1133 /** type_of_event */ category,
1134 /** category */ 16,
1135 /** modifiers */
1136 {{standard_deviation, 0.1}, {mean, -5}, {lower_limit, -15}, {upper_limit, 0}},
1137 },
1138 {
1139 /** event_id */ 88,
1140 /** mutually_exclusive_events */ {},
1141 /** text */
1142 "Advancements in Voice Recognition Technology Enhance Telecommunication "
1143 "Services",
1144 /** duration */ 6,
1145 /** percentage_permille */ 12,
1146 /** type_of_event */ category,
1147 /** category */ 16,
1148 /** modifiers */
1149 {{standard_deviation, 0.1}, {mean, 6}, {lower_limit, 0}, {upper_limit, 20}},
1150 },
1151 {
1152 /** event_id */ 89,
1153 /** mutually_exclusive_events */ {},
1154 /** text */
1155 "Network Outage Disrupts Telecommunication Services in Several Regions",
1156 /** duration */ 7,
1157 /** percentage_permille */ 10,
1158 /** type_of_event */ category,
1159 /** category */ 16,
1160 /** modifiers */
1161 {{standard_deviation, 0.1}, {mean, -5}, {lower_limit, -15}, {upper_limit, 0}},
1162 },
1163 {
1164 /** event_id */ 90,
1165 /** mutually_exclusive_events */ {},
1166 /** text */
1167 "Telecom Service Outage Caused by Natural Disaster Disrupts Communication",
1168 /** duration */ 7,
1169 /** percentage_permille */ 10,
1170 /** type_of_event */ category,
1171 /** category */ 16,
1172 /** modifiers */
1173 {{standard_deviation, 0.1}, {mean, -5}, {lower_limit, -15}, {upper_limit, 0}},
1174 },
1175 {
1176 /** event_id */ 91,
1177 /** mutually_exclusive_events */ {},
1178 /** text */
1179 "Telecom Regulatory Changes Affect Pricing and Service Plans for Consumers",
1180 /** duration */ 7,
1181 /** percentage_permille */ 10,
1182 /** type_of_event */ category,
1183 /** category */ 16,
1184 /** modifiers */
1185 {{standard_deviation, 0.1}, {mean, -5}, {lower_limit, -15}, {upper_limit, 0}},
1186 },
1187 // event_id 92 to 98 affect pick_random_stock
1188 {
1189 /** event_id */ 92,
1190 /** mutually_exclusive_events */ {},
1191 /** text */ "Leadership Change: CEO Resigns, New CEO Appointed",
1192 /** duration */ 3,
1193 /** percentage_permille */ 10,
1194 /** type_of_event */ pick_random_stock,
1195 /** category */ 0,
1196 /** modifiers */
1197 {{standard_deviation, 0.2}, {mean, 0}, {lower_limit, -15}, {upper_limit, 15}},
1198 },
1199 {
1200 /** event_id */ 93,
1201 /** mutually_exclusive_events */ {},
1202 /** text */
1203 "Labor Strike: Employees Go on Strike Demanding Better Working Conditions",
1204 /** duration */ 3,
1205 /** percentage_permille */ 12,
1206 /** type_of_event */ pick_random_stock,
1207 /** category */ 0,
1208 /** modifiers */
1209 {{standard_deviation, 0.1}, {mean, -6}, {lower_limit, -20}, {upper_limit, 0}},
1210 },
1211 {
1212 /** event_id */ 94,
1213 /** mutually_exclusive_events */ {97},
1214 /** text */ "Acquires a Competitor, Expands Market Presence",
1215 /** duration */ 4,
1216 /** percentage_permille */ 10,
1217 /** type_of_event */ pick_random_stock,
1218 /** category */ 0,
1219 /** modifiers */
1220 {{standard_deviation, 0.2}, {mean, 5}, {lower_limit, 0}, {upper_limit, 15}},
1221 },
1222 {
1223 /** event_id */ 95,
1224 /** mutually_exclusive_events */ {98},
1225 /** text */ "Market Slump Leads to Business Contraction",
1226 /** duration */ 4,
1227 /** percentage_permille */ 10,
1228 /** type_of_event */ pick_random_stock,
1229 /** category */ 0,
1230 /** modifiers */
1231 {{standard_deviation, 0.3}, {mean, -7}, {lower_limit, -20}, {upper_limit, 0}},
1232 },
1233 {
1234 /** event_id */ 96,
1235 /** mutually_exclusive_events */ {},
1236 /** text */ "Regulatory Non-Compliance: Fails to Meet Environmental Standards",
1237 /** duration */ 5,
1238 /** percentage_permille */ 10,
1239 /** type_of_event */ pick_random_stock,
1240 /** category */ 0,
1241 /** modifiers */
1242 {{standard_deviation, 0.1}, {mean, -2}, {lower_limit, -10}, {upper_limit, 0}},
1243 },
1244 {
1245 /** event_id */ 97,
1246 /** mutually_exclusive_events */ {94, 98},
1247 /** text */ "Faces Bankruptcy, Forced to Cease Operations",
1248 /** duration */ 6,
1249 /** percentage_permille */ 10,
1250 /** type_of_event */ pick_random_stock,
1251 /** category */ 0,
1252 /** modifiers */
1253 {{standard_deviation, 0.5}, {mean, -9}, {lower_limit, -30}, {upper_limit, 0}},
1254 },
1255 {
1256 /** event_id */ 98,
1257 /** mutually_exclusive_events */ {95, 97},
1258 /** text */ "Opens New Branches in Multiple Locations",
1259 /** duration */ 6,
1260 /** percentage_permille */ 10,
1261 /** type_of_event */ pick_random_stock,
1262 /** category */ 0,
1263 /** modifiers */
1264 {{standard_deviation, 0.5}, {mean, 7}, {lower_limit, 0}, {upper_limit, 20}},
1265 },
1266};
1267
1268// print a map
1269void print_map(const std::map<unsigned int, std::vector<unsigned int>> & map) {
1270 for (const auto & i : map) {
1271 std::cout << i.first << ": ";
1272 for (unsigned int j : i.second) {
1273 std::cout << j << " ";
1274 }
1275 std::cout << std::endl;
1276 }
1277}
1278
1279/*
1280int main() {
1281 // This outputs 0.1
1282 std::cout << all_stock_events[0].modifiers[standard_deviation] << std::endl;
1283 // Checks the events for mutual exclusivity
1284 print_map(check_mutual_exclusivity(all_stock_events));
1285 // Outputs:
1286 // 0: 2
1287 // 1: 2
1288 // 2:
1289 return 0;
1290}
1291*/
1292
1294 const std::vector<Stock_event> & all_events) {
1295 mutuallyExclusiveMap mut_excl_map;
1296 // Build the map
1297 for (unsigned int i = 0; i < all_events.size(); i++) {
1298 for (unsigned int j = 0; j < all_events[i].mutually_exclusive_events.size();
1299 j++) {
1300 mut_excl_map[all_events[i].event_id].emplace_back(
1301 all_events[i].mutually_exclusive_events[j]);
1302 }
1303 }
1304 return mut_excl_map;
1305}
1306
1308 const std::vector<Stock_event> & all_events) {
1309 mutuallyExclusiveMap mut_excl_map = build_mutual_exclusivity_map(all_events);
1310
1311 // If two events are mutually exclusive, they should be in each other's list.
1312 // Remove such two events from the map.
1313 // E.g. {0: [1,2], 1: [0], 2:[]} -> {0: [2]}
1314 // In this case, 2 does not state that it is mutually exclusive with 0.
1315 for (const auto & i : mut_excl_map) {
1316 for (unsigned int j : i.second) {
1317 if (std::find(mut_excl_map[j].begin(), mut_excl_map[j].end(), i.first) !=
1318 mut_excl_map[j].end()) {
1319 mut_excl_map[i.first].erase(std::remove(mut_excl_map[i.first].begin(),
1320 mut_excl_map[i.first].end(), j),
1321 mut_excl_map[i.first].end());
1322 mut_excl_map[j].erase(std::remove(mut_excl_map[j].begin(),
1323 mut_excl_map[j].end(), i.first),
1324 mut_excl_map[j].end());
1325 }
1326 }
1327 }
1328 return mut_excl_map;
1329}
1330
1332 /// @todo: put assertion_check_uniq_events into a separate file, e.g. tests.cpp
1333 // Assert that the every key has no value.
1334 auto checkEventResult = check_mutual_exclusivity(all_stock_events);
1335 for (const auto & [key, value] : checkEventResult) {
1336 // If the assertion is raised, print the checkEventResult and exit the
1337 // program.
1338 if (!value.empty()) {
1339 std::cout << "Error: detected mutual exclusivity violation! Details:"
1340 << std::endl;
1341 print_map(checkEventResult);
1342 return true;
1343 }
1344 }
1345 return false;
1346}
1347
1348std::vector<Stock_event> pick_events(
1349 const std::vector<Stock_event> & all_events, unsigned int num_events) {
1350 std::vector<Stock_event> picked_events;
1351 unsigned int total_permille = 0;
1352 /// @todo Optimize this loop so that we don't have to calculate the total_permille
1353 /// every time we pick an event.
1354 for (const Stock_event & event : all_events) {
1355 total_permille += event.probability_permille;
1356 }
1357 // Pick num_events random events
1358 for (unsigned int i = 0; i < num_events; i++) {
1359 unsigned int _total_permille = total_permille;
1360 /** When picking the event, consider event.probability_permille.
1361 * E.g. if there are 3 events with probability_permille 10, 20, 30.
1362 * total_permille = 60;
1363 * random_permille = 0 to 59;
1364 * If random_permille is 0 to 9, pick the first event;
1365 * If random_permille is 10 to 29, pick the second event;
1366 * If random_permille is 30 to 59, pick the third event.
1367 */
1368 unsigned int random_permille = random_integer(_total_permille);
1369 for (const Stock_event & event : all_events) {
1370 _total_permille -= event.probability_permille;
1371 if (_total_permille <= random_permille) {
1372 picked_events.emplace_back(event);
1373 break;
1374 }
1375 }
1376 }
1377 return uniq_events(picked_events, all_stock_events);
1378}
1379
1380std::vector<Stock_event> uniq_events(std::vector<Stock_event> picked_events,
1381 const std::vector<Stock_event> & all_events) {
1382 mutuallyExclusiveMap mut_excl_map = build_mutual_exclusivity_map(all_events);
1383
1384 unsigned int first = 0;
1385 while (first < picked_events.size()) {
1386 unsigned int second = first + 1;
1387 while (second < picked_events.size()) {
1388 const bool isRandomStockEvents =
1389 picked_events[first].type_of_event == pick_random_stock;
1390 const bool isIdenticalEvents =
1391 picked_events[first] == picked_events[second];
1392
1393 if (!isRandomStockEvents && isIdenticalEvents) {
1394 picked_events.erase(picked_events.begin() + second);
1395 continue;
1396 }
1397
1398 const bool areMutuallyExclusiveEvents =
1399 std::find(mut_excl_map[picked_events[first].event_id].begin(),
1400 mut_excl_map[picked_events[first].event_id].end(),
1401 picked_events[second].event_id) !=
1402 mut_excl_map[picked_events[first].event_id].end();
1403
1404 if (areMutuallyExclusiveEvents) {
1405 picked_events.erase(picked_events.begin() + second);
1406 continue;
1407 }
1408
1409 second++;
1410 }
1411 first++;
1412 }
1413 return picked_events;
1414}
1415
1417 /// @todo: put assertion_check_uniq_events into a separate file, e.g. tests.cpp
1418 Stock_event craftedEvent = Stock_event{
1419 /* event_id */ 0,
1420 /* mutually_exclusive_events */ {1},
1421 /* text */ "Crafted Event",
1422 /* duration */ 1,
1423 /* percentage_permille */ 0,
1424 /* type_of_event */ pick_random_stock,
1425 /* category. Assign this to zero first. */ 0,
1426 /* modifiers */
1427 {{standard_deviation, 0}, {mean, 0}, {lower_limit, 0}, {upper_limit, 0}},
1428 };
1429 Stock_event craftedEvent_2 = craftedEvent;
1430 Stock_event craftedEvent_3 = Stock_event{
1431 /* event_id */ 1,
1432 /* mutually_exclusive_events */ {0},
1433 /* text */ "Crafted Event",
1434 /* duration */ 1,
1435 /* percentage_permille */ 0,
1436 /* type_of_event */ all_stocks,
1437 /* category. Assign this to zero first. */ 0,
1438 /* modifiers */
1439 {{standard_deviation, 0}, {mean, 0}, {lower_limit, 0}, {upper_limit, 0}},
1440 };
1441 std::vector<Stock_event> picked_events = {
1442 craftedEvent, craftedEvent_2, craftedEvent_3};
1443 std::vector<Stock_event> uniqEvents = uniq_events(picked_events, picked_events);
1444
1445 std::cout << uniqEvents.size() << std::endl;
1446 if (!(uniqEvents.size() == 2)) {
1447 std::cout << uniqEvents.size() << std::endl;
1448 assert(false &&
1449 "Detected duplicate/mutually-exclusive events after uniq_events()");
1450 }
1451}
1452
1454 return Stock_event{
1455 /* event_id */ 65535,
1456 /* mutually_exclusive_events */ {},
1457 /* text */
1458 " has rised too high and the company has decide a stock split on it.",
1459 /* duration */ 1,
1460 /* percentage_permille */ 0,
1461 /* type_of_event */ pick_random_stock,
1462 /* category. Assign this to zero first. */ 0,
1463 /* modifiers*/
1464 {{standard_deviation, 0}, {mean, 0}, {lower_limit, 0}, {upper_limit, 0}},
1465 };
1466}
mutuallyExclusiveMap build_mutual_exclusivity_map(const std::vector< Stock_event > &all_events)
Definition events.cpp:1293
void print_map(const std::map< unsigned int, std::vector< unsigned int > > &map)
Print a map to std::cout.
Definition events.cpp:1269
std::vector< Stock_event > uniq_events(std::vector< Stock_event > picked_events, const std::vector< Stock_event > &all_events)
Filter out the events that are mutually exclusive with each other, or events that are identical (exce...
Definition events.cpp:1380
Stock_event getStockSplitEvent(void)
Definition events.cpp:1453
const std::vector< Stock_event > all_stock_events
The list of all events that can be applied to the stocks.
Definition events.cpp:49
bool assertion_check_mutual_exclusivity(void)
Check if there are mutual exclusivity violations in all_stock_events.
Definition events.cpp:1331
mutuallyExclusiveMap check_mutual_exclusivity(const std::vector< Stock_event > &all_events)
If A is mutually exclusive with B, then B is mutually exclusive with A.
Definition events.cpp:1307
std::vector< Stock_event > pick_events(const std::vector< Stock_event > &all_events, unsigned int num_events)
Pick a random event from the list of events.
Definition events.cpp:1348
void assertion_check_uniq_events(void)
Definition events.cpp:1416
Implements event-related data structures and (declarations of) such functions.
std::map< decltype(Stock_event::event_id), std::vector< decltype(Stock_event::event_id)> > mutuallyExclusiveMap
Definition events.h:204
@ upper_limit
The upper limit of the stock price percentage change.
Definition events.h:48
@ standard_deviation
Amount of variation of the stock price percentage change.
Definition events.h:32
@ mean
The expectation of the stock price percentage change.
Definition events.h:36
@ lower_limit
The lower limit of the stock price percentage change.
Definition events.h:42
@ pick_random_stock
This event will apply to a randomly selected stock from all of the stocks available currently.
Definition events.h:95
@ category
This event will apply to stocks within the specified category.
Definition events.h:92
@ all_stocks
This event will apply to all stocks.
Definition events.h:90
unsigned int random_integer(unsigned int max_integer)
python randint like function
Header file for random related functions.
The data structure of an event that will be applied to the stocks.
Definition events.h:104