pdppo / code /Lot-sizing /test_functions /tablePlotting.py
leokana's picture
first commit
a241478
import os
import numpy as np
import pandas as pd
def table_plotting(model_names = ['PPO'],experiment_names = [''], execution_type = '', PI_proportion = True):
if PI_proportion:
df = pd.DataFrame(columns = ['Experiment','Model','All Costs (PI%)','Holding Costs (PI%)','Lost Sales (PI%)','Setup Costs (PI%)'])
else:
df = pd.DataFrame(columns = ['Experiment','Model','All Costs','Holding Costs','Lost Sales','Setup Costs'])
path = os.path.dirname(os.path.abspath('__file__'))
for experiment in experiment_names:
for model in model_names:
holding_costs_path = os.path.join(path,'results',model+'_'+experiment+'_'+'holding_costs'+'_'+execution_type+'.npy')
lost_sales_path = os.path.join(path,'results',model+'_'+experiment+'_'+'lost_sales'+'_'+execution_type+'.npy')
setup_costs_path = os.path.join(path,'results',model+'_'+experiment+'_'+'setup_costs'+'_'+execution_type+'.npy')
all_holding_costs = np.load(holding_costs_path)
all_lost_sales= np.load(lost_sales_path)
all_setup_costs = np.load(setup_costs_path)
all_costs = all_holding_costs+all_lost_sales+all_setup_costs
if model == 'PI':
pi_all_holding_costs = all_holding_costs
pi_all_lost_sales_path = all_lost_sales
pi_all_setup_costs_path = all_setup_costs
pi_all_costs = all_costs
if PI_proportion:
try:
df_temp = pd.DataFrame(
{
'Experiment': experiment,
'Model':model,
'All Costs (PI%)': str(int(round(np.mean(all_costs - pi_all_costs)*100/np.mean(pi_all_costs),0)))+'$\pm$'+str(int(round(np.std((all_costs - pi_all_costs)*100/np.mean(pi_all_costs)),0))),
'Holding Costs (PI%)': str(int(round(np.mean(all_holding_costs - pi_all_holding_costs)*100/np.mean(pi_all_holding_costs),0)))+'$\pm$'+str(int(round(np.std((all_holding_costs - pi_all_holding_costs)*100/np.mean(pi_all_holding_costs)),0))),
'Lost Sales (PI%)': str(int(round(np.mean(all_lost_sales - pi_all_lost_sales_path)*100/np.mean(pi_all_lost_sales_path),0)))+'$\pm$'+str(int(round(np.std((all_lost_sales - pi_all_lost_sales_path)*100/np.mean(pi_all_lost_sales_path)),0))),
'Setup Costs (PI%)': str(int(round(np.mean(all_setup_costs - pi_all_setup_costs_path)*100/np.mean(pi_all_setup_costs_path),0)))+'$\pm$'+str(int(round(np.std((all_setup_costs - pi_all_setup_costs_path)*100/np.mean(pi_all_setup_costs_path)),0)))
},
index=[0]
)
except: print('error')
else:
df_temp = pd.DataFrame(
{
'Experiment': experiment,
'Model':model,
'All Costs': str(int(round(np.mean(np.sum(all_costs,0)),0)))+'$\pm$'+str(int(round(np.std(np.sum(all_costs,0)),0))),
'Holding Costs': str(int(round(np.mean(np.sum(all_holding_costs,0)),0)))+'$\pm$'+str(int(round(np.std(np.sum(all_holding_costs,0)),0))),
'Lost Sales': str(int(round(np.mean(np.sum(all_lost_sales,0)),0)))+'$\pm$'+str(int(round(np.std(np.sum(all_lost_sales,0)),0))),
'Setup Costs': str(int(round(np.mean(np.sum(all_setup_costs,0)),0)))+'$\pm$'+str(int(round(np.std(np.sum(all_setup_costs,0)),0)))
},
index=[0]
)
df = df.append(df_temp)
caption = 'Average cost and inventory level for each experimented model trained on 5 different seeds. One machine and two items scenario'
print(
df.to_latex(
index=False,
label='tab:coslidated_results',
caption=caption,escape = False
)
)