def evaluateModel(modelInputs, scenarioInputs, scenarioName, temoa_path, project_path, solver): # Unique filename model_filename = scenarioName # Build Model tt.build(modelInputs, scenarioInputs, scenarioName, model_filename, path=project_path) # Run Model tt.run(model_filename, saveEXCEL=False, temoa_path=temoa_path, debug=True, solver=solver)
def evaluateModel(modelInputs, scenarioInputs, scenarioName, paths): # Unique filename model_filename = scenarioName # Build Model tt.build(modelInputs, scenarioInputs, scenarioName, model_filename, path='data') # Run Model saveEXCEL=True tt.run(model_filename, paths, saveEXCEL=True, data_path='data', debug=False)
def evaluateMonteCarlo(modelInputs, scenarioXLSX, scenarioName, temoa_path, project_path, solver, cases, caseNum): # Unique filename model_filename = scenarioName + '_MC_' + str(caseNum) # Prepare monte carlo inputs cols = ['type', 'variable', 'tech', caseNum] MCinputs = cases.loc[:, cols] MCinputs = MCinputs.rename(columns={caseNum: 'value'}) # Build Model tt.build(modelInputs, scenarioXLSX, scenarioName, model_filename, MCinputs=MCinputs, path=project_path, mc_type='values') # Run Model error = tt.run(model_filename, saveEXCEL=False, temoa_path=temoa_path, debug=True, solver=solver) # Analyze Model (w/ default monte carlo analysis function) if not error: folder = os.path.join(project_path, 'databases') db = model_filename + '.sqlite' results = tt.analyze_db(folder, db, scenario=scenarioName, iteration=caseNum, switch='tech', tod_analysis=True, debug=False) else: results = pd.Dataframe() return results
def evaluateModelSensitivity(modelInputs, scenarioXLSX, scenarioName, temoa_paths, cases, caseNum): # Unique filename model_filename = scenarioName + '_Sens_' + str(caseNum) # Prepare sensitivity sensitivity = cases.loc[caseNum] # Build Model tt.build(modelInputs, scenarioXLSX, scenarioName, model_filename, sensitivity=sensitivity, path='data') # Run Model saveEXCEL = False tt.run(model_filename, temoa_paths, saveEXCEL=saveEXCEL) # Analyze Results folder = os.getcwd() + '\\databases' db = model_filename + '.sqlite' print("db: " + db) yearlyCosts, LCOE = tt.getCosts(folder, db) yearlyEmissions, avgEmissions = tt.getEmissions(folder, db) # Move results to series col = yearlyCosts.columns[0] yearlyCosts = yearlyCosts[col] LCOE = LCOE[col] col = yearlyEmissions.columns[0] yearlyEmissions = yearlyEmissions[col] avgEmissions = avgEmissions[col] # Package Outputs output = sensitivity.copy() # Inputs output['db'] = db output['caseNum'] = caseNum output['LCOE'] = LCOE output['avgEmissions'] = avgEmissions for ind in yearlyCosts.index: label = 'cost_' + str(ind) output[label] = yearlyCosts[ind] for ind in yearlyEmissions.index: label = 'emis_' + str(ind) output[label] = yearlyEmissions[ind] return output
def evaluateModelSensitivity(modelInputs, scenarioXLSX, scenarioName, temoa_path, project_path, solver, cases, caseNum): # Unique filename model_filename = scenarioName + '_Sens_' + str(caseNum) # Prepare sensitivity sensitivity = cases.loc[caseNum] # Build Model tt.build(modelInputs, scenarioXLSX, scenarioName, model_filename, sensitivity=sensitivity, path=project_path) # Run Model error = tt.run(model_filename, temoa_path=temoa_path, saveEXCEL=False, solver=solver) # Analyze Results folder = os.path.join(project_path, 'databases') db = model_filename + '.sqlite' if not error: yearlyCosts, LCOE = tt.getCosts(folder, db) yearlyEmissions, avgEmissions = tt.getEmissions(folder, db) # Package Outputs output = pd.Series() output['type'] = cases.loc[caseNum, 'type'] output['tech'] = cases.loc[caseNum, 'tech'] output['variable'] = cases.loc[caseNum, 'variable'] output['multiplier'] = cases.loc[caseNum, 'multiplier'] output['db'] = db output['caseNum'] = caseNum if not error: output['LCOE'] = LCOE.loc[0, 'LCOE'] output['avgEmissions'] = avgEmissions.loc[0, 'avgEmissions'] else: output['LCOE'] = np.nan output['avgEmissions'] = np.nan return output
def evaluateModel(modelInputs, scenarioInputs, scenarioName, combined_name, temoa_path, project_path, solver): # Unique filename model_filename = scenarioName + '_' + combined_name # Build Model tt.build(modelInputs, scenarioInputs, scenarioName, model_filename, path=project_path) # Run Model error = tt.run(model_filename, saveEXCEL=False, temoa_path=temoa_path, debug=True, solver=solver) # Analyze Model (w/ default monte carlo analysis function) if not error: folder = os.path.join(project_path, 'databases') db = model_filename + '.sqlite' results = tt.analyze_db(folder, db, scenario=scenarioName, iteration='baseline', switch='tech', tod_analysis=True, debug=False) # Save results to a csv os.chdir(os.path.join(project_path, 'results')) df = pd.DataFrame() df = df.append(results, ignore_index=True) df.to_csv('BaselineResults_' + model_filename + '.csv') os.chdir(project_path)
def evaluateMonteCarlo(modelInputs, scenarioXLSX, scenarioName, temoa_path, project_path, solver, cases, caseNum): # Unique filename model_filename = scenarioName + '_MC_' + str(caseNum) # Prepare monte carlo inputs cols = ['type', 'variable', 'tech', caseNum] MCinputs = cases.loc[:, cols] MCinputs = MCinputs.rename(columns={caseNum: 'value'}) # Build Model tt.build(modelInputs, scenarioXLSX, scenarioName, model_filename, MCinputs=MCinputs, path=project_path, mc_type='values') # Run Model error = tt.run(model_filename, saveEXCEL=False, temoa_path=temoa_path, debug=True, solver=solver) # series to store results folder = os.path.join(project_path, 'databases') db = model_filename + '.sqlite' output = pd.Series() output['db'] = db output['caseNum'] = caseNum # Analyze Results if not error: yearlyCosts, LCOE = tt.getCosts(folder, db) yearlyCosts = yearlyCosts.drop(columns=['database', 'scenario']) yearlyEmissions, avgEmissions = tt.getEmissions(folder, db) yearlyEmissions = yearlyEmissions.drop( columns=['database', 'scenario']) # Capacity and Activity by Fuel By Year switch = 'tech' capacityByFuel = tt.getCapacity(folder, db, switch=switch) capacityByFuel = capacityByFuel.drop(columns=['database', 'scenario']) capacityByFuel = capacityByFuel.set_index('fuelOrTech') ActivityByYearFuel = tt.getActivity(folder, db, switch=switch) ActivityByYearFuel = ActivityByYearFuel.drop( columns=['database', 'scenario']) ActivityByYearFuel = ActivityByYearFuel.set_index('fuelOrTech') # Package Outputs output['LCOE'] = LCOE.loc[0, 'LCOE'] output['avgEmissions'] = avgEmissions.loc[0, 'avgEmissions'] for col in yearlyCosts.columns: label = 'cost-' + str(col) output[label] = yearlyCosts.loc[0, col] for col in yearlyEmissions.columns: label = 'emis-' + str(col) output[label] = yearlyEmissions.loc[0, col] # CapacityByYearFuel for ind in capacityByFuel.index: for col in capacityByFuel.columns: label = 'cap_' + str(col) + '-' + str(ind) output[label] = capacityByFuel.loc[ind, col] # ActivityByYearFuel for ind in ActivityByYearFuel.index: for col in ActivityByYearFuel.columns: label = 'act_' + str(col) + '-' + str(ind) output[label] = ActivityByYearFuel.loc[ind, col] else: # if errors output['LCOE'] = np.nan output['avgEmissions'] = np.nan return output
import temoatools as tt model_filename = 'data_A.sqlite' # Expected to be in "\\databases" temoa_path = 'C:/temoa/temoa' # path to temoa directory that contains temoa_model/ tt.run(model_filename, temoa_path=temoa_path, saveEXCEL=False, debug=True, solver='cplex')
scenarioNames = ['BATT'] paths = 'paths.csv' temoa_path = os.path.normcase('C:\\Users\\benne\PycharmProjects\\temoatools\\temoa_stochastic') project_path = os.path.normcase('C:\Users\\benne\\PycharmProjects\\temoatools\\projects\uva'') #======================================================= # Move modelInputs_XLSX to database #======================================================= modelInputs = tt.move_data_to_db(modelInputs_XLSX, path=project_path) # Build Model tt.build(modelInputs, scenarioInputs, 'Batt', 'Batt', path=project_path) # Run Model tt.run('Batt', saveEXCEL=False, temoa_path=temoa_path, debug=True, solver=solver) #==================================== # Perform Simulations option = 2 # 1 - Run single, 2 - Run all #==================================== num_cores = multiprocessing.cpu_count() -1 # Save one core for other processes if option==1: # Perform single simulation evaluateModel(modelInputs, scenarioInputs, scenarioNames[0], paths) elif option == 2: # Perform simulations in parallel with parallel_backend('multiprocessing', n_jobs=num_cores): Parallel(n_jobs=num_cores,verbose=5)(delayed(evaluateModel)(modelInputs, scenarioInputs, scenarioName, paths) for scenarioName in scenarioNames)
def evaluateMonteCarlo(modelInputs, scenarioXLSX, scenarioName, temoa_path, cases, caseNum): # Unique filename model_filename = scenarioName + '_MC_' + str(caseNum) # Prepare monte carlo inputs cols = ['type', 'variable', 'tech', caseNum] MCinputs = cases.ix[:, cols] MCinputs = MCinputs.rename(columns={caseNum: 'multiplier'}) # Build Model tt.build(modelInputs, scenarioXLSX, scenarioName, model_filename, MCinputs=MCinputs, path='data') # Run Model tt.run(model_filename, temoa_path=temoa_path, saveEXCEL=False) # Analyze Results folder = os.getcwd() + '\\Databases' db = model_filename + '.sqlite' yearlyCosts, LCOE = tt.getCosts(folder, db) yearlyEmissions, avgEmissions = tt.getEmissions(folder, db) # Capacity and Activity by Fuel By Year createPlots = 'N' # Create default plots saveData = 'N' # Do not save data as a csv or xls sectorName = 'electric' # Name of sector to be analyzed switch = 'fuel' capacityByFuel = tt.getCapacity(folder, db, switch=switch) key = capacityByFuel.keys()[0] cap = capacityByFuel[key] ActivityByYearFuel = tt.getActivity(folder, db, switch=switch) key = ActivityByYearFuel.keys()[0] act = ActivityByYearFuel[key] # Move results to series col = yearlyCosts.columns[0] yearlyCosts = yearlyCosts[col] LCOE = LCOE[col] col = yearlyEmissions.columns[0] yearlyEmissions = yearlyEmissions[col] avgEmissions = avgEmissions[col] # Package Outputs output = pd.Series() output['db'] = db output['caseNum'] = caseNum output['LCOE'] = LCOE output['avgEmissions'] = avgEmissions for ind in yearlyCosts.index: label = 'cost-' + str(ind) output[label] = yearlyCosts.loc[ind] for ind in yearlyEmissions.index: label = 'emis-' + str(ind) output[label] = yearlyEmissions.loc[ind] # CapacityByYearFuel for ind in cap.index: for col in cap.columns: label = 'cap_' + str(col) + '-' + str(ind) output[label] = cap.loc[ind, col] # ActivityByYearFuel for ind in act.index: for col in act.columns: label = 'act_' + str(col) + '-' + str(ind) output[label] = act.loc[ind, col] return output