标签: simpy

Python,SimPy:如何从三角概率分布中生成值?

我想运行一个模拟,该模拟使用具有下限A,模式B和上限C的三角概率分布生成的值作为参数.如何在Python中生成此值?有没有像expovariate(lambda)(来自随机)这样简单的东西,或者我必须编写这个东西吗?

python distribution probability simpy

7
推荐指数
2
解决办法
3816
查看次数

“builtin_function_or_method”对象没有属性“randrange”

我有一个奇怪的问题,

我创建了以下代码来随机生成 1 和 x 之间的数字(增量为 1)并存储它们

import random

bootstrap_node_list_recieved = [] #List of all nodes addresses recieved during the bootstrap peroid - Is a list so we can compare duplicatition probability etc
average_getAdrr_no_node_response = 100 #Number or nodes typically sent when a node requests a getAddr message
network_ip_node_size = 5000 # Number of IP addresses / nodes that have been seen on the network in the past 2 weeks


#Move into calculations.py when ready
#Number of nodes recieved (Bootstrap) …
Run Code Online (Sandbox Code Playgroud)

python simpy

7
推荐指数
1
解决办法
4万
查看次数

网格/仓库布局上离散事件模拟的可视化

我需要模拟一个仓库,其中有几辆自动驾驶车辆在给定的布局上移动,并具有简单的优先级规则。根据我的理解,这个问题可以通过离散事件模拟 (DES) 轻松解决,我会使用SimPy来解决这个问题。

我看到的问题是,我似乎很难想象这些车辆的实际轨迹和相互作用。当然,我可以记录所有时期内所有车辆的所有位置,但是如何继续创建可视化呢?

最愚蠢的方法是创建一百万张图片,但必须有更好的方法。是否有任何库或工具可以通过在背景之前移动符号来可视化网格上对象的移动?

另一种选择是使用基于代理的方法和AnyLogic这样的软件,但这对我来说似乎更复杂,我想应用 DES 方法,最好使用开源软件。

simulation grid visualization simpy anylogic

6
推荐指数
2
解决办法
6102
查看次数

简单的环境错误

我已经安装了 Simpy,并且使用 Python 3.5。我有同样的错误:

>>> env = simpy.Environment()
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    env = simpy.Environment()
AttributeError: module 'simpy' has no attribute 'Environment'
Run Code Online (Sandbox Code Playgroud)

它允许我导入 simpy,但是当我这样做时,env = simpy.Environment()它会打印此错误。

我尝试卸载它,重新安装,在终端中使用,在Python的IDLE中,在其他IDLE中使用......

整个代码是(来自教程):

>>> def car(env):
...     while True:
...         print('Start parking at %d' % env.now)
...         parking_duration = 5
...         yield env.timeout(parking_duration)
...
...         print('Start driving at %d' % env.now)
...         trip_duration = 2
...         yield env.timeout(trip_duration)

>>> import simpy
>>> env = simpy.Environment()
Run Code Online (Sandbox Code Playgroud)

然后弹出错误。 …

python simpy python-3.x

5
推荐指数
1
解决办法
2317
查看次数

Simpy 3:Resources.Resource.request()/.release() 不带“with...as:”

我正在尝试将 SimPy 模拟添加到我正在处理的项目中,但我对版本 3 的发布/请求有些困惑。

我能够使用“with”块毫无问题地实现资源,但在我的情况下,我想在不使用“with”块的情况下请求/释放资源。

但是,我找不到使用 SimPy 3 的示例。我阅读了有关资源的文档/来源,但仍然无法完全正确。有人可以解释如何正确:

...
Request a Resource with the method: 'request()'
...
Release that Resource with the method: 'release()'
...
Run Code Online (Sandbox Code Playgroud)

谢谢,抱歉打扰了。

PS:我打算使用Resources.resource

python simulation simpy

3
推荐指数
1
解决办法
2455
查看次数

3 个 SimPy 资源,每个资源都有不同的特征

我试图模拟我们有 5 台机器出现在 1 -> 3 -> 1 情况下的情况。即中间的3个并行操作以减少它们所花费的有效时间。

我可以通过创建一个值为 3 的 SimPy 资源来轻松模拟这一点,如下所示:

simpy.Resource(env, capacity=3)
Run Code Online (Sandbox Code Playgroud)

然而,在我的情况下,这三种资源中的每一种都略有不同,有时我希望能够使用其中的任何一种(当我操作时)或预订一个特定的(当我想清理时)。基本上这三台机器以不同的速度慢慢地变脏并且运行得更慢,我希望能够模拟这些,并且在一台机器太脏时也能进行清洁。

我尝试了几种模拟方法,但每次都遇到问题。

第一个是当它预订资源时,它也预订了 3 台机器(A、B、C)全局标志之一和一个标志本身来告诉它它正在使用哪台机器。这有效,但它并不干净,并且很难理解随处可见的巨大 if 语句发生了什么。

第二个是将其建模为三个独立的资源,然后尝试等待并使用以下内容请求 3 台机器中的一台:

reqA = A.res.request()
reqB = B.res.request()
reqC = C.res.request()

unitnumber = yield reqA | reqB | reqC
yield env.process(batch_op(env, name, machineA, machineB, machineC, unitnumber))
Run Code Online (Sandbox Code Playgroud)

但这不起作用,我无法找出最好的方法来看待产生一个选择。

模拟这种情况的最佳方法是什么。为了完整起见,这是我要找的:

  1. 请求 3 台机器中的任何一台
  2. 请求特定机器
  3. 让每台机器跟踪它的历史
  4. 有每台机器的特点是不同的。即在犯规时更快,但最初工作得更快
  5. 根据性能或指标检测和安排清洁

到目前为止,这是我尝试将每个模型建模为单独资源的最新版本

class Machine(object):

    def __init__(self, env, cycletime, cleantime, k1foul, k2foul):
        self.env = env
        self.res = simpy.Resource(env, 1)

        self.cycletime = cycletime
        self.cleantime …
Run Code Online (Sandbox Code Playgroud)

python simpy

3
推荐指数
1
解决办法
1447
查看次数

需要帮助使用SimPy建模火车系统

我需要帮助在SimPy中为火车系统(如地铁系统)建模,问题是我的"模拟"老师要我使用Python + SimPy并且我不知道如何使用它,经过一周的阅读后SimPy我设法理解银行的例子,这很容易,但现在我仍然不知道如何模拟老师给我的问题......

问题是大而广泛的,但我只需要一点帮助,而不是整个项目完成,所以,如果有人可以提供帮助,我将非常感激.

减少的问题将帮助我开始是这样的:

想象你有3个站点(A,B,C)相隔一段距离(比方说100米)我有2个列车,一个在A上,一个在C上(train1从A到C,tran2从C到A)每列火车都有最大速度(假设两者都是50米/秒)和加速度(比如5米/秒^ 5和-5米/秒^ 2),他们所要做的就是停在每个火车站上秒(比方说24秒)并继续到下一站,当他们到达终点时,他们等待并额外20秒(改变铁轨),然后重新开始.

车站有乘客限制(他们不需要模拟)唯一的事情是每个车站有随机数量的乘客,当火车到达时有些人起床而其他人下车...

所以,基本上我需要一个小型火车和这三个车站的车站...如果有人可以帮我请...

真正的问题有22个站点,2个额外的车站改变车道,随机时间等待,42个列车具有不同的最大速度和容量,不同的乘客数量取决于车站和时间等...所有这些东西我可以管理以后,但火车站系统的建模逻辑我似乎无法弄清楚...感谢您的帮助!

python simulation model traffic-simulation simpy

2
推荐指数
1
解决办法
3089
查看次数

python(SimPy)生成跟随erlang分布的随机数

我主要使用Python(SimPy包,但它与我认为的问题无关),建模一些系统和运行模拟.为此,我需要生成跟随分布的随机数.到目前为止,通过导入随机(例如来自随机导入*)和使用expovariate或normalvariate方法,我已经完成了一些像指数和正常的分布.但是,我无法找到任何随机产生遵循Erlang分布的数字的方法.所以:

  1. 有一些方法我忽略了吗?
  2. 我是否必须导入其他一些库?
  3. 我可以做一些解决方法吗?(我认为我可以使用Exponential发行版来生成随机的"Erlang"数字,但我不知道如何.一段代码可能对我有帮助.

先感谢您!

python random distribution simpy

2
推荐指数
1
解决办法
2456
查看次数

今天使用哪些书籍来学习离散事件模拟?

我刚刚参加了一个程序,该程序使我开始研究新的网络协议,而我的第一个任务是学习离散事件仿真

推荐了2本书:

仿真计算机系统:技术与工具迈伦H.麦克杜格尔

仿真模型设计和执行:保罗·菲什威克Paul Fishwick)构建数字世界

这两本书都使用了我不会特别使用的工具,但是我被告知这是学习离散事件模拟基础的好书。

但是,碰巧,MacDougall的书除了amazon dot com以外,在其他任何商店中都没有,而且要花两个月的时间才能寄到我的地址。Fishwick的书将花掉我现在不愿意花的一笔钱。

现在,我来问一个问题:今天使用哪些书籍来学习与那些相似的离散事件模拟?

PS:我将使用基于Python的SimPy仿真工具。

python simpy event-simulation

2
推荐指数
1
解决办法
1120
查看次数

Python,SimPy:在函数内部使用yield

Helo,我正在SimPy中构建一个相对复杂的离散事件仿真模型.

当我尝试将yield语句放在函数中时,我的程序似乎不起作用.下面显示了一个示例.

import SimPy.SimulationTrace as Sim
import random

## Model components ##
class Customer(Sim.Process):
    def visit(self):
        yield Sim.hold, self, 2.0
        if random.random()<0.5:
            self.holdLong()
        else:
            self.holdShort()

    def holdLong(self):
        yield Sim.hold, self, 1.0
        # more yeild statements to follow

    def holdShort(self):
        yield Sim.hold, self, 0.5
        # more yeild statements to follow

## Experiment data ##
maxTime = 10.0 #minutes

## Model/Experiment ##
#random.seed(12345)
Sim.initialize()
c = Customer(name = "Klaus") #customer object
Sim.activate(c, c.visit(), at = 1.0)
Sim.simulate(until=maxTime)
Run Code Online (Sandbox Code Playgroud)

我从运行中获得的输出是:

0 activate <Klaus > …
Run Code Online (Sandbox Code Playgroud)

python simulation simpy

1
推荐指数
1
解决办法
1469
查看次数

Simpy - 何时使用 yield 以及何时调用该函数

我正在尝试使用 Simpy 来模拟在城市网格中移动汽车的一些行为。但是,我在概念上围绕何时使用类似的东西时遇到了一些麻烦

yield self.env.timeout(delay) 或者yield env.process(self.someMethod()) 与只是调用方法self.someMethod()

在非常理论的层面上,我理解yield语句和生成器如何应用于可迭代对象,但不太确定它与Simpy.

Simpy教程还相当密集。

例如:

class Car(object):
    def __init__(self, env, somestuff):
        self.env = env
        self.somestuff = somestuff

        self.action = env.process(self.startEngine())  # why is this needed?  why not just call startEngine()?

    def startEngine(self):
        #start engine here
        yield self.env.timeout(5) # wait 5 seconds before starting engine
        # why is this needed?  Why not just use sleep? 



env = simpy.Environment()
somestuff = "blah"
car = Car(env, somestuff)
env.run()
Run Code Online (Sandbox Code Playgroud)

python simpy

1
推荐指数
1
解决办法
1861
查看次数

为什么这个递归语句错了?

这是银行模拟,其考虑具有单个队列的20个不同服务线,客户以指数速率到达并且在遵循具有平均值40和标准偏差20的正态概率分布的时间期间服务.

事情一直很好,直到我决定使用这种方法排除正态分布给出的负值:

def getNormal(self):

    normal = normalvariate(40,20)

    if (normal>=1):
        return normal
    else:
        getNormal(self)
Run Code Online (Sandbox Code Playgroud)

这导致程序偶尔给我这个屏幕: 屏幕

我搞砸了递归电话吗?我不明白为什么它不起作用.我已将getNormal()方法更改为:

def getNormal(self):

    normal = normalvariate(40,20)

    while (normal <=1):
        normal = normalvariate (40,20)

    return normal
Run Code Online (Sandbox Code Playgroud)

但我很好奇为什么先前的递归语句被破坏了.

如果您有兴趣,这是完整的源代码.

""" bank21: One counter with impatient customers """
from SimPy.SimulationTrace import *
from random import *

## Model components ------------------------



class Source(Process):
    """ Source generates customers randomly """

    def generate(self,number):       
        for i in range(number):

            c = Customer(name = "Customer%02d"%(i,))

            activate(c,c.visit(tiempoDeUso=15.0))


            validateTime=now()
            if validateTime<=600:
                interval = getLambda(self)
                t = …
Run Code Online (Sandbox Code Playgroud)

python recursion simpy

0
推荐指数
1
解决办法
718
查看次数

python 2.7 SimPy ImportError

我有一个使用python 2.7和pip 9.0.1的virtualenv我已经安装了使用pip install SimPy的SimPy

但是当我尝试导入导入SimPy时

>>> import SimPy
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named SimPy
Run Code Online (Sandbox Code Playgroud)

python simpy importerror python-2.7

-2
推荐指数
1
解决办法
329
查看次数