Я программирую симуляцию энергетического рынка, где дома и внешние события влияют на то, как цена на энергию изменяется во времени (каждые х секунд в день и переменные меняются, изменяя цену). У меня есть заключительная часть, к которой мне нужно обратиться, чтобы выполнить мои проектные требования.
У меня есть то, что я называю рыночным процессом, в котором определяется цена энергии, и для определения цены внешние факторы будут влиять на указанную цену. Спецификации заключаются в том, что внешний процесс является дочерним по отношению к процессу рынка (т. Е. Создан в рамках рынка), и что внешний будет сигнализировать случайное событие, и в зависимости от полученного сигнала рынок будет применять различные коэффициенты к цене энергии. Тем не менее, у меня есть некоторые трудности с установлением внешнего взаимодействия с рынком через сигнал. Я сам работаю на Windows, но этот код должен работать и на Linux (в идеальном мире). В настоящее время я использую трубу, и хотя это проще, это не то, что я должен делать ...
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 случайным образом выбирает событие из списка, который я определяю лично. Я могу обойти последний, когда получу сигнал, но не знаю, как правильно отправить сигнал.