楼主: nandehutu2022
1377 47

[量化金融] 基于Agent的计算经济市场模型模拟器SABCEMM [推广有奖]

21
nandehutu2022 在职认证  发表于 2022-6-2 20:55:46
其界面包括以下成员变量和方法:o成员变量代理表示包含在证券交易所交易的所有代理的列表。o方法preStep()在执行步骤之前被调用。它允许执行保管任务,例如在执行时间步之前收集用于跟踪的数据方法postStep()在执行时间步后调用。它允许执行内务管理任务,例如在执行时间步后收集数据进行跟踪在方法步骤()中,调用价格计算器来确定新的价格。这将首先调用超额需求计算器来确定超额需求。然后使用新价格更新所有代理。图3显示了不同类如何协同工作的流程图。到目前为止,所有研究的模型都可以重写为依赖于单个证券交易所类别,然后与图3中的流量一致。图3:数字核心流程图。3.2构建新模型SABCEM模拟器的目标是允许简单实现不同的TABCEM模型,同时允许使用更多代理进行快速仿真,并提供对仿真结果的轻松访问,以评估已实现的模型。构建块抽象类PriceCalculator、AgentandExcessDemandCalculator的所有实现都是(新)模型的构建块。到目前为止,我们为Harras【49】、LLS【69、70】和Cross【31】模型实施了所有必要的模块,其行为见附录A.1。原则上,可以根据用户的意愿重新组合所有块。这是由于面向对象的体系结构和SABCEMMS软件的主要优势。块之间的相互作用由抽象接口定义。如果一个模型可以按照第2节的定义重新表述为抽象的ABCEM模型,那么它可以用现有的或新的构建块来实现。

22
可人4 在职认证  发表于 2022-6-2 20:55:49
通常,一个块需要一组输入文件中提供的参数。虽然构建块提供了极大的灵活性,但用户的任务是确定所选块和参数组合是否形成有效的ABCEM模型并产生科学相关的结果。有关所有可用构建块的信息可以在SABCEMM文档中找到。通过输入文件进行配置为了评估不同块的组合或检查不同的参数设置,需要进行大量模拟。此外,单个模拟必须重复多次,以分析随机性对模拟结果的影响。XML格式的输入文件中规定了定义模拟模型的构建块及其各自参数的组合。这些配置文件结构良好,可人工编辑,非常适合版本控制系统,允许再现工作流程。通过使用脚本语言组装所需的输入文件,可以轻松地进行参数研究。示例6。为了用理性市场取代交叉模型的价格机制(cmp定义4),我们将XML输入文件中的priceCalculatorSettings部分从<pric eCalc ulato rSe tt ing s><priceCalculatorClass>P r ic e C a l C u l a t o r C r o s</priceCalculatorClass><theta>2</theta><marketDepth>0.2</marketDepth><P r ic C u lat o rSe t tin s。收件人:<pric eCalc ulato rSe tting s><priceCalculatorClass>P r i c e c a l c u l a t o r B i s e c t onhttps://github.com/SABCEMM/SABCEMM/wiki/Create-an-Input-File价格计算器类(priceCalculatorClass)<epsilon>0.1</epsilon><maxIterations>10000</maxIterations><lowerBound>0.01</lowerBound><upperBound>200</upperBound><theta>2</theta><marketDepth>0.2</marketDepth>。

23
kedemingshi 在职认证  发表于 2022-6-2 20:55:52
.在这里,我们配置了一种二等分方法来近似下一时间步的价格。完整的输入文件可以在Github上找到,有关构建块的文档中解释了参数。输出要评估可能的数千个模拟,重要的是要编写输出,以便以后可以很好地进行分析。SABCEMM为输出文件提供了两种格式。在基本版本中,所有内容都存储在专用文件夹中的csv文件中。此方法不依赖于第三方软件,可在所有计算机上使用。更复杂的可能性是将整个模拟结果存储到HDF5文件中。HDF5文件提供类似于文件系统的内部数据结构,是一种自我描述的格式。这使得HDF5文件中存储的结果具有适当的可读性。此外,HDF5格式还允许在HDF5输出文件中存储用于模拟的输入XML。因此,输出包含分析ABCEM模型所需的所有信息,这有助于确保正确记录仿真结果。HDF5文件格式可以使用HDF5库和实用程序、Python通过h5py、MATLAB和Excel通过PyHexad中的ADD读取。我们不提供任何可视化或模拟结果分析的常规程序,因为模拟数据的适当后处理是针对所进行的研究而进行的。摘要图4说明了SABCEMM模拟器的使用。SABCEMM由用C++实现的构建块组成,例如不同的清除机制或不同的代理类型。在图4中,不同类型的构建块采用颜色编码。为了从这些构建块构建ABCEM模型进行模拟,可以使用XML输入文件将各个构建块组合起来,类似于拼图的各个部分。

24
何人来此 在职认证  发表于 2022-6-2 20:55:55
XML输入文件中还定义了其他模拟参数,如时间步数和模拟运行数,例如统计数据。请注意,我们的模拟器需要选择单一市场机制、聚合需求、数据编写器和随机数字生成器,但允许选择多种代理类型。通过向SABCEMM模拟器提供输入文件进行模拟。输出可以csvor HDF5文件格式存储。在多次运行的情况下,例如在不同参数或相同设置的情况下,模拟输出存储在单独的文件中。https://github.com/SABCEMM/SABCEMM/blob/master/input/examples/Cross.xmlhttps://support.hdfgroup.org/products/hdf5_tools/index.htmlhttps://www.h5py.orghttps://github.com/HDFGroup/PyHexadClearance机制I清除机制II聚合需求I聚合需求II代理类型I代理类型II代理类型IIIRNG I RNG II RNG IIIWriter I Writer II Writer IIIRun SABCEMSimulationsXML输入文件ABCEMM(C++)选择HDF5中的BuildingBlocksoutput或csvSimulation I Simulation II Simulation IIIFigure 4:SABCEMM模拟器结构示意图摘要。3.3测试随着软件系统复杂性的不断增加,软件测试的重要性变得越来越明显。这导致了测试理论的巨大进步[82]。一般来说,在大规模和复杂的问题中,bug可能会被误认为是模拟的特征,反之亦然。因此,仿真结果的可靠性取决于用于获得结果的软件的可靠性。这种可靠性不能完全通过长期测试来实现,但接近于高度。在SABCEMM中,测试是使用GoogleTest库实现的[1]。通常,数值模拟是根据各自的解析解进行测试的。

25
nandehutu2022 在职认证  发表于 2022-6-2 20:55:58
然而,只有在极其简单的环境下,才能找到ABCEM模型的分析解决方案。请注意,简化设置的正确性并不保证一般情况下的正确性。此外,我们主要考虑的模型是伪随机数。因此,我们使用不同的方法进行测试单元测试执行单个函数的代码。对于这些测试,将初始化所有变量,并将函数的最终结果与预期结果进行比较集成和验收测试涵盖多个功能。因此,它们对于在我们的模拟器中测试全时步长特别有用。对于每个模型,我们手动计算一个时间步长。这只在测试开发期间执行一次。之后,将自动将模型输出与这些值进行比较。每当模型绘制伪随机数时,我们通常为每个代理使用相同的常数,或者使用确定性数字生成器(我们可以从一个范围或类似范围内线性绘制数字)。我们使用最少数量的代理来保持时间和效率较低。o与早期研究论文的定性比较。作为一个较弱的标准,我们还将我们的结果和相应模型的论文中给出的图进行比较。由于典型模型严重依赖于随机数,文献中的结果永远无法准确再现。这就是为什么只有定性比较才可行。虽然测试不能证明在实现中没有错误,但所有三种测试方法的结合已经产生了值得信赖的结果。因此,我们相信测试在任何软件项目中都是非常重要的。3.4计算方面我们现在分析模拟的运行时间如何随代理数量和时间步数的变化而变化。从图5和图6中,我们发现交叉模型与时间步数和模拟中使用的代理数呈线性比例关系。

26
能者818 在职认证  发表于 2022-6-2 20:56:02
这是一个预期结果,似乎是我们工具的普遍观察结果。尽管图5中的示例与交叉模型一致,但我们也观察到Harras和LLS模型相对于时间步长的线性缩放。图7显示了LLS模型相对于代理数量的线性缩放。对于每个数据点,我们平均运行100次模拟。我们使用了最基本的设置,依赖于标准的C++伪随机数生成器并使用。csv文件作为输出。关于运行时,人们可能会认为这种选择是最坏的情况。使用Intel MKL的伪随机生成器和DF5文件的输出,我们可以实现更快的运行时。表3给出了一个示例。最后,第2节中介绍的元模型的通用性是以防止利用BCEM模型固有的并行性和向量化适用性为代价的,对于这些模型,所有代理的决策过程都可以同时计算。由于只有非常简单的ABCEM模型才表现出这种固有的并行性,所以这种缺点很容易被易于实现和重组的ABCEM模型以及这些模型的模拟性能所抵消。3.5伪随机数如前所述,许多ABCEM模型大量使用伪随机数。因此,伪随机数生成器的质量和效率直接影响模拟结果的质量。我们从一个计算示例开始,以量化每个模拟的102103104105106时间步数10-1100101102103秒。图5:交叉模型相对于时间步数的缩放。参数如表4所示。时间步长根据图的不同而不同。102103104105106#代理100101102103104SecondStime per Simulation图6:交叉模型相对于代理数量的缩放。

27
mingdashike22 在职认证  发表于 2022-6-2 20:56:06
参数如表4所示。参数N根据曲线图而变化。我们的模拟器可能需要伪随机数。然后,我们讨论了SABCEMM中实现的伪随机数生成器。最后,我们研究了与伪随机数生成相关的两个方面:大量伪随机数的有效生成和不同伪随机数生成器对模拟结果的影响。为了强调高效生成大量伪随机数的重要性,我们假设一个有10000个时间步的模拟。这为适当的统计分析提供了足够大的样本量。此外,我们假设市场机制要求每个时间步有一个伪随机数。表1显示了不同数量的代理所需的伪随机数,以及每个代理每个时间步所需的不同数量的伪随机数。从表1中,我们可以看到,即使对于较小的数字102103104,每个模拟的代理数为100101secondstime图7:LLS模型相对于代理数的缩放。参数如表5所示,σγ=0.2。参数N根据曲线图而变化。代理数每个代理的随机数数和时间步长1 2 3100 1010000 2010000 3010001000 10010000 20010000 3001000010000 100010000 200010000 3000010000表1:所需随机数的计算示例。在100个代理中,我们已经需要100万个伪随机数。SABCEM中的伪随机数生成器正如前面的计算所示,ABCEM模型可能需要大量的伪随机数。SABCEMM模拟器支持多个伪随机数生成器,即NAGlibrary(83)、“英特尔数学内核库”(MKL)(28)和C++库的伪随机数生成器。

28
大多数88 在职认证  发表于 2022-6-2 20:56:09
每个库中所选的伪随机数生成器都是Mersenne Twister伪随机数生成器的变量【80】。更准确地说,在C++库中,我们选择了mt19937 64、英特尔数学内核库VSL BRNG MT2203和NAG库g05dyc、g05dac、g05ddc。伪随机数生成器的测试是一个严重的问题,Knuth首先提出了这一点[63]。最近引入的测试库TestU01【67】展示了Mersenne Twister在大规模应用中的优势。虽然C++库提供的伪随机生成器具有每个C++编译器都附带的优点,但我们强烈建议不要使用任何早于C++11的标准。旧标准生成的伪随机数的质量不符合我们的要求。“英特尔MKL库”和“NAG库”必须由用户在编译时提供。版本取决于系统上安装的软件。我们依赖IntelcLinux数学内核库11.3.3提供我们的伪随机数,除非另有说明。如后续段落所示,使用batchmode时速度非常快。SABCEMM模拟器允许用户选择最适合其需要的库。有效生成伪随机数为了避免在每次仿真过程中需要伪随机数时调用伪随机数生成器而导致的过度使用,我们引入了在SABCEMM仿真软件中生成伪随机数池的可能性。

29
何人来此 在职认证  发表于 2022-6-2 20:56:12
图8显示了每个生成器创建不同池大小的速度。随机数的数量107010203040Second生成随机数的时间C++sequentialMKL sequentialMKL批次图8:生成各种伪随机数所需的时间。然后,可以从该池中提取伪随机数,而不是在fly上计算。此外,还可以在需要时计算伪随机数。表2总结了Harras模型相对于C++sequential和MKL batch伪随机数生成器的运行时变化。模拟生成随机数的运行时间代理随机数C++顺序MKL批次C++顺序MKL批次2500 25040002 8.65秒5.61秒4.46秒0.346秒5041 50480494 18.39秒13.25秒8.99秒0.697秒7569 75790830 28.46秒20.34秒13.50秒1.047秒10000 100130002 39.52秒30.63秒17.84秒1.383表2:Harras模型的运行时间关于不同数量的代理和不同的伪随机数生成器。其他参数设置为表7中的值。由此,我们可以很容易地看到,伪随机数池非常适合减少使用SABCEMM仿真软件执行的仿真的总体运行时间。最后,表3显示了使用MKL批处理伪随机数生成器可以显著提高速度。

30
kedemingshi 在职认证  发表于 2022-6-2 20:56:15
我们获得了总仿真时间35%的最大速度提升。Speed upAgents生成随机数的模拟随机数数量2500 25040002 35%92%5041 50480494 29%92%7569 75790830 28%92%10000 100130002 22%92%表3:MKL batch伪随机数生成器对Harras模型的加速。除了有效生成伪随机数外,生成的伪随机数本身的质量也至关重要。已经证明,线性连续伪随机数生成器(如随机数生成器)在大规模应用中的性能较差【52,63】。不幸的是,RANDU发电机在20世纪70年代被广泛使用,可能一直使用到今天。因此,SABCEMDM不支持RANDU生成器。4结论我们介绍了大型开源模拟器SABCEM,特别是针对异构多agent ABCEM模型设计的。尽管有大量基于agent的通用模型的模拟器[2、7、85、101],但缺少专门用于ABCEM模型的模拟器。尽管如此,我们还是要提到小型JAMEL和中型Ejasa模拟器[2]。前者用于研究宏观经济模型,后者考虑一般的双重拍卖市场。与前面的示例相比,SABCEM模拟器是为第2节中介绍的非常通用的ABCEM模型构建的。在第2节中,我们介绍了抽象的ABCEM模型和环境的新概念。此外,我们从经济学的角度对模型进行了激励,并展示了模型的巨大适应性。在第3节中,我们介绍了软件体系结构。特别是,我们介绍了面向对象以及此功能如何使用户能够构建新的ABCEM模型。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
jg-xs1
拉您进交流群
GMT+8, 2026-1-10 21:28