E_sold = Emax_seller # 맨 처음으로는 가지고 있는 모든 에너지를 판다. seller = Seller(a_seller, b_seller, E_sold, Emax_seller) # 시장거래를 위한 manager 생성 manager = Manager(E_sold, users) # 파는 E (E_sold)에 따른 유저별 w,E,utility를 임시 저장하기 위한 배열 생성 ws = [None] * num_users Es = [None] * num_users us = [None] * num_users final_E = E_sold # E_sold를 -1씩 감소시키면서 utility_seller를 관찰 while True: manager.initialize(E_sold) E = manager.KKT() unit_price = manager.unit_price nd_user = manager.users[num_users - 2] if E_sold <= 1 or nd_user.a * nd_user.b / ( 1 + nd_user.b * nd_user.Eo) < unit_price or unit_price > max_unit_price: # final_E = Emax_seller break if unit_price < min_unit_price: pass else: for i in range(num_users): ws[i] = manager.users[i].w Es[i] = manager.users[i].E us[i] = manager.users[i].set_utility(Es[i], ws[i])
Es = [None] * num_users us = [None] * num_users # 파는 E (E_sold)에 따른 seller의 utility를 저장할 배열 생성 (figure 0 마지막 그래프) utility_seller = [] utility_buyers = [] unit_prices = [] trading_user_count = [] xs = [] # initialize final_E. final_E는 seller의 utility가 최대가 되는 E_sold가 될 예정 final_E = E_sold # E_sold를 -1씩 감소시키면서 utility_seller를 관찰 while True: manager.initialize(E_sold) E = manager.KKT() unit_price = manager.unit_price nd_user = manager.users[num_users - 2] if E_sold <= 1 or nd_user.a * nd_user.b / ( 1 + nd_user.b * nd_user.Eo) < unit_price or unit_price > max_unit_price: # final_E = Emax_seller break if unit_price < min_unit_price: pass else: for i in range(num_users): ws[i] = manager.users[i].w Es[i] = manager.users[i].E us[i] = manager.users[i].set_utility(Es[i], ws[i])