我正在编写一个能源市场模拟程序,其中房屋和外部事件会影响能源价格随时间变化的方式(每天x秒钟过去,变量会改变价格)。我要解决的最后一部分是满足我的设计规范。
我有一个所谓的“市场”过程,在该过程中,确定能源价格并确定价格,外部事件将对该价格产生影响。规范是外部过程是市场过程的子过程(即在市场内部创建),外部过程将发出随机事件信号,并且根据接收到的信号,市场会将不同的系数应用于能源价格。但是,在通过信号与外部与市场沟通方面,我遇到了一些困难。我自己在Windows上工作,但是此代码也应该在Linux上工作(理想情况下)。目前,我正在使用Pipe,尽管这比较简单,但这不是我必须要做的...
def market(number_of_days, number_of_homes, home_queue, home_counter, market_ready, clock_ready, temperature, season, market_connection):
current_price = starting_price
average_exchange = 0.0
exchange = 0.0
market_conn, external_conn = Pipe()
e = Process(target = external, args=(number_of_days, external_conn, clock_ready))
e.start()
while clock_ready.wait(3 * delay):
market_ready.value = False
event = market_conn.recv()
internal_effect = alpha_1 * (1/temperature[1]) + alpha_3 * average_exchange
external_effect = event[1] * event[2]
current_price = gamma * current_price + internal_effect + external_effect
e.join()
market_conn.close()
external_conn.close()
这是当前的外部代码。
def external(number_of_days, external_connection, clock_ready):
events = [["Nuclear fusion", 0.4, -0.3],
["Civil war", 0.5, 0.2],
["Reelection of Trump", 0.3, 0.3],
["Biofuel conversion for all vehicles", 0.3, -0.2],
["Climate change brings Ice Age", 0.35, 0.33]]
for i in range(number_of_days):
event = False
rand = random.random()
if rand >= 0.75:
event = True
if event:
external_connection.send(events[random.randint(0, len(events) - 1)])
else:
external_connection.send(["None", 0, 0])
我对使用信号的经验不是很丰富,所以我可以说的是,External会向Market发送两个信号之一,基于此,Market将从我个人定义的列表中随机选择一个事件。收到信号后,我可以绕过后者,但是我不知道如何正确发送接收信号。