首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >自动模拟运行的方法

自动模拟运行的方法
EN

Stack Overflow用户
提问于 2016-01-11 12:43:19
回答 2查看 635关注 0票数 3

我在Python中创建了一个离散事件模拟,它接受了当前保存在数据库表中的一组输入,并生成输出,该输出也存储在数据库(SQLite)中。我已经实现了在给定的输入集中运行多个复制的能力(因为模拟中有一些随机性)。现在,我希望能够使用多组输入运行模拟,而不必在每次运行后手动更改输入。然而,我不知道实现这一目标的最佳途径。

我目前的想法是创建一个脚本,该脚本可以创建一个包含每次运行的输入的JSON文件。例如:

输入数据表(极为简化以供解释):

代码语言:javascript
运行
复制
id name     input 1 input 2
1  Entity 1   67      red
2  Entity 2   54      blue

JSON示例(再次简化为与上述输入匹配):

代码语言:javascript
运行
复制
{"simulation inputs":[      
    {"run 1":
        "replications": 100,
        "entity 1": "name of entity"
             {
              "input 1": 67,
              "input 2": "red"   
              }
        "entity 2": "a different entity of same class with different values"
             {
              "input 1": 54,
              "input 2": "blue"   
              }

    },
    {"run 2":
        "replications": 100,
        "entity 1": "name of entity"
             {
              "input 1": 69,
              "input 2": "red"   
              }
        "entity 2": "a different entity of same class with different values"
             {
              "input 1": 54,
              "input 2": "blue"   
              }
    },
    {"run 3":
        "replications": 100,
        "entity 1": "name of entity"
             {
              "input 1": 71,
              "input 2": "red"   
              }
        "entity 2": "a different entity of same class with different values"
             {
              "input 1": 54,
              "input 2": "blue"   
              }
    },
]}

根据上面的例子,其中包含了三次运行的信息,其中对实体1的每个运行输入1进行了调整,在实际情况下,输入中可能有大量的变化,其中每个配置文件中都有一个运行条目。Python程序将使用定义的值作为该特定运行的输入,在JSON文件中运行列表。存储在数据库中的输出。每个实体都是同一个类的实例,具有不同的输入值。

上述做法是否明智?如果没有,还会有什么其他方法呢?如果是的话,是否有这样的功能的实现,或者类似的,任何我已经可以作为起点的地方?

我已经有了一个很好的搜索,但由于我不熟悉配置文件的术语,没有能够找到一个合适的答案。

注意:编辑以更好地表示将要使用的输入数据的类型。

非常感谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-27 14:37:57

我实现了JSON文件技术,它运行得很好,所以我想我会分享答案。

创建了一个JSON文件。在可能的情况下,顶层是标识"run“的关键--本质上是输入的独特组合。该值是另一个字典,它包含用于设置模拟的所有值,例如复制的数量,因为DES需要多个reps。它只是使用Python中内置的JSON功能来加载。

代码语言:javascript
运行
复制
with open(file_name) as data_file:
input_data = json.load(data_file)  # dict of the whole file

因此,在这个阶段,我们有一个input_data,它只是整个文件的字典。通过提取顶级键并遍历每个键,您可以将每个运行输入依次传递到仿真中。对于每一次运行,您只传递需要传递的输入集,而不是整个字典。

代码语言:javascript
运行
复制
list_of_runs = sorted(list(input_data.keys()), key=int) 
for run in list_of_runs:

replications = input_data[run]['replications']

reps = 0

下一个循环运行仿真,每次使用相同的输入集来模拟所定义的次数。

代码语言:javascript
运行
复制
for reps in range(replications):

    current_run = initialize.Run(input_data[run])
    '''some other code here'''

    env.run(until=end)

    reps += 1

在我的实际代码中,"Run“是一个类,在该类中定义了其他类,每个类都被传递给它们所需的原始JSON文件的一部分。这意味着当一个类需要访问一个值时,如果只需要在已传递的字典中查找,并且所有这些字典都会在代码在每次运行过程中运行时自动更新。

票数 1
EN

Stack Overflow用户

发布于 2016-01-12 13:37:54

如果您有一个输入表,其中每行引用一次运行的一组输入,则可以执行如下操作。

代码语言:javascript
运行
复制
import sqlite3

db_path = "C:/.../mydatabase.db"
connection = sqlite3.connect(db_path)
cursor = connection.cursor()

#get parameters from table
for row in cursor.execute('SELECT * FROM input_table'):
    param1 = row[0]
    param2 = row[1]
    ...
    go_for_simulation(param1, param2,...)

循环中的每个row变量都是包含所有参数的元组。我希望这种方法能对你有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34721879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档