def run_simulation(run, value, value_DOW, value_month): ###parameters set_price = 71 gamma = 20 average_number_of_potential_customers = 100 min_budget = 30 capacity = 76 max_lead = 200 ###Weights month_prob = [0.75, 0.8, 0.95, 0.9, 1., 0.95, 0.95, 1., 1., 1., 1.1, 1.2] dow_prob = [1, 1, 1, 1, 1, 1, 0.7] gamma_weights = [ 1.1, 0.8, 1.2, 1.1, 0.6, 1.1, 1.2, 0.9, 0.7, 1.0, 0.9, 0.9 ] gamma_weights_dow = [1.05, 1.05, 1.05, 1.05, 0.9, 0.95, 0.8] ###Start/End date start_reserved_night_date = dt.datetime(2018, 1, 1) end_reserved_night_date = dt.datetime(2018, 12, 30) ###Define Hotel. (Doesn't do much now, but in future will have multiple merchants/room types) hotel = Hotel(merchant_id=1, capacities={10: capacity}, available_rooms=[10]) #Initial prices for each DOW prices = { 10: { 0: set_price, 1: set_price, 2: set_price, 3: set_price, 4: set_price, 5: set_price, 6: set_price }, } ###Open and write first line of output files """with open("transformed_data.csv", "w") as data: writer = csv.writer(data, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL) writer.writerow(['hotelroom_id','reserved_night_date','booking_datetime','type','price']) person_data=open("person_data.csv", "w") pers_writer = csv.writer(person_data, delimiter=',', quotechar='"',quoting=csv.QUOTE_MINIMAL) pers_writer.writerow(['booking_datetime','price'])""" ###Call revenue manager (currently very simple) lead_rm = RLRevenueManager( prices=prices, hotel=hotel, start_reserved_night_date=start_reserved_night_date, end_reserved_night_date=end_reserved_night_date) start_date = start_reserved_night_date end_date = end_reserved_night_date ### initialise number of customers, budget and interested date market = Market(start_reserved_night_date=start_reserved_night_date, end_reserved_night_date=end_reserved_night_date, average_number_of_potential_customers= average_number_of_potential_customers, min_budget=min_budget, gamma=gamma, gamma_weights_months=gamma_weights, gamma_weights_dow=gamma_weights_dow, month_prob=month_prob, dow_prob=dow_prob, capacity=capacity, state=value, value_DOW=value_DOW, value_month=value_month) #market.initialize_market() ### iterate over days maximum_wtps = {} for delta in range((end_date - start_date).days): reserved_night_date = start_date + dt.timedelta(days=delta) #print("Processing", reserved_night_date) person_np = market._create_persons(reserved_night_date) #,pers_writer) #person_np[:,6]==delta #print(person_np[:,6],delta) lead_rm = market.generate_bookings_for_reserved_night_date( reserved_night_date, lead_rm, person_np, run) print('Total Visits', np.sum(market.state[:, 1])) #More output writing """bookings= np.array([[0,dt.datetime(2018,1,1),0]]*len(lead_rm._current_bookings)) bookings[:,0] = lead_rm._current_bookings[:,2] bookings[:,1] = lead_rm._current_bookings[:,0] bookings[:,2] = lead_rm._current_bookings[:,1] df= pd.DataFrame(data=bookings) df.columns=['hotelroom_id','reserved_night_date','units'] df.to_csv('transformed_room_nights.csv',index=False) person_data.close()""" return lead_rm._revenue, market.state, market.value_DOW, market.value_month
def run_simulation(): ###parameters set_price=71 # sets average price shown by revenue manager gamma = 20 # sets width of booking time distribution average_number_of_potential_customers = 100 min_budget=30 capacity = 76 # No. of rooms in hotel ###Weights of price for month and day of week variation month_prob = [0.75,0.8,0.95,0.9,1.,0.95,0.95,1.,1.,1.,1.1,1.2] dow_prob = [1,1,1,1,1,1,0.7] gamma_weights = [1.1,0.8,1.2,1.1,0.6,1.1,1.2,0.9,0.7,1.0,0.9,0.9] gamma_weights_dow = [1.05,1.05,1.05,1.05,0.9,0.95,0.8] ###Start/End date start_reserved_night_date = dt.datetime(2018, 1, 1) end_reserved_night_date = dt.datetime(2018, 12, 30) ###Define Hotel. (Doesn't do much now, but in future will have multiple merchants/room types) hotel = Hotel(merchant_id=1, capacities={10: capacity}, available_rooms=[10]) #Initial prices for each DOW prices = { 10: {0: set_price, 1: set_price, 2: set_price, 3: set_price, 4: set_price, 5: set_price, 6: set_price}, } ###Open and write first line of output files with open("transformed_data.csv", "w") as data: writer = csv.writer(data, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL) writer.writerow(['hotelroom_id','reserved_night_date','booking_datetime','type','price']) person_data=open("person_data.csv", "w") pers_writer = csv.writer(person_data, delimiter=',', quotechar='"',quoting=csv.QUOTE_MINIMAL) pers_writer.writerow(['booking_datetime','price']) ###Call revenue manager (currently very simple human like) lead_rm = LeadRevenueManager(prices=prices, hotel=hotel, start_reserved_night_date=start_reserved_night_date, end_reserved_night_date=end_reserved_night_date) start_date = start_reserved_night_date - dt.timedelta(days=gamma * 10) end_date = end_reserved_night_date ### initialise number of customers, budget and interested date market = Market(start_date=start_date, start_reserved_night_date=start_reserved_night_date, end_reserved_night_date=end_reserved_night_date, average_number_of_potential_customers=average_number_of_potential_customers, minimum_budget_in_population=min_budget,gamma=gamma,gamma_weights_months=gamma_weights, gamma_weights_dow=gamma_weights_dow,month_prob=month_prob,dow_prob=dow_prob,capacity=capacity ) ### iterate over lead time for delta in range((end_date-start_date).days): time = start_date + dt.timedelta(days=delta) #print("Processing",time) RND = start_reserved_night_date + dt.timedelta(days=delta) if RND<end_date: person_np = market._create_persons(RND,pers_writer) if delta == 0: person = person_np else: person = np.vstack([person,person_np]) where = (person[:,6]==delta) lead_rm = market.generate_bookings_for_lead_time(lead_rm,person,time,where) inv_where=np.invert(where) person = person[inv_where] ###Output bookings= np.array([[0,dt.datetime(2018,1,1),0]]*len(lead_rm._current_bookings)) bookings[:,0] = lead_rm._current_bookings[:,2] bookings[:,1] = lead_rm._current_bookings[:,0] bookings[:,2] = lead_rm._current_bookings[:,1] df= pd.DataFrame(data=bookings) df.columns=['hotelroom_id','reserved_night_date','units'] df.to_csv('transformed_room_nights.csv',index=False) person_data.close() ### Return total revenue return lead_rm._revenue