我想运行一个模拟,该模拟使用具有下限A,模式B和上限C的三角概率分布生成的值作为参数.如何在Python中生成此值?有没有像expovariate(lambda)(来自随机)这样简单的东西,或者我必须编写这个东西吗?
我有一个奇怪的问题,
我创建了以下代码来随机生成 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) 我已经安装了 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)
然后弹出错误。 …
我正在尝试将 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
我试图模拟我们有 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)
但这不起作用,我无法找出最好的方法来看待产生一个选择。
模拟这种情况的最佳方法是什么。为了完整起见,这是我要找的:
到目前为止,这是我尝试将每个模型建模为单独资源的最新版本
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) 我需要帮助在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(SimPy包,但它与我认为的问题无关),建模一些系统和运行模拟.为此,我需要生成跟随分布的随机数.到目前为止,通过导入随机(例如来自随机导入*)和使用expovariate或normalvariate方法,我已经完成了一些像指数和正常的分布.但是,我无法找到任何随机产生遵循Erlang分布的数字的方法.所以:
先感谢您!
我刚刚参加了一个程序,该程序使我开始研究新的网络协议,而我的第一个任务是学习离散事件仿真。
推荐了2本书:
仿真计算机系统:技术与工具的 迈伦H.麦克杜格尔
仿真模型设计和执行:保罗·菲什威克(Paul Fishwick)构建数字世界
这两本书都使用了我不会特别使用的工具,但是我被告知这是学习离散事件模拟基础的好书。
但是,碰巧,MacDougall的书除了amazon dot com以外,在其他任何商店中都没有,而且要花两个月的时间才能寄到我的地址。Fishwick的书将花掉我现在不愿意花的一笔钱。
现在,我来问一个问题:今天使用哪些书籍来学习与那些相似的离散事件模拟?
PS:我将使用基于Python的SimPy仿真工具。
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) 我正在尝试使用 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) 这是银行模拟,其考虑具有单个队列的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 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) simpy ×13
python ×12
simulation ×4
distribution ×2
anylogic ×1
grid ×1
importerror ×1
model ×1
probability ×1
python-2.7 ×1
python-3.x ×1
random ×1
recursion ×1