def main(solver=config.user_config.solver): logging.basicConfig(level=logging.CRITICAL, format='%(levelname)s: %(message)s') from minpower import solve dirNm=splitFilename(__file__)[0] if dirNm=='': dirNm='.' excludeL=[] for fileNm in os.listdir(dirNm): if fileNm in excludeL: continue testDir = joindir(dirNm, fileNm) if not os.path.isdir(testDir): continue print 'testing: ',fileNm wipeTestSlate(testDir) fResults=open(joindir(testDir,'results.txt'),'w+') fError=open(joindir(testDir,'error.txt'),'w+') sys.stdout=fResults #switch output to results file if hasPyscript(testDir): sys.stdout = sys.__stdout__ #switch back to standard outputting os.system('python {s}'.format(s=hasPyscript(testDir)[0])) else: try: user_config.scenarios = 2 solve.solve_problem(testDir) sys.stdout = sys.__stdout__ #switch back to standard outputting fError.close() os.remove(joindir(testDir,'error.txt')) except: #write the error to file exc_type, exc_value, exc_traceback = sys.exc_info() traceback.print_tb(exc_traceback, file=fError ) traceback.print_exception(exc_type, exc_value, exc_traceback, file=fError) sys.stdout = sys.__stdout__ #switch back to standard outputting print '\t had error' #note that this dir produced error else: sys.stdout = sys.__stdout__ #switch back to standard outputting
def main(args): generators, loads, _, times, _, data = parsedir() generators = [gen for gen in generators if gen.is_controllable] gen_data = data["generators"] if args["min"] == 0: args["min"] = 1.1 * gen_data.pmin.sum() if args["max"] == 0: args["max"] = 0.99 * gen_data.pmax.sum() load_values = np.arange(args["min"], args["max"], args["interval"]) results = DataFrame(columns=["prices", "committed", "last_committed"], index=load_values) committed_gen_names = Index([]) for load_val in load_values: print(load_val) loads_times = make_loads_times(Pd=load_val) power_system, times = solve_problem(generators, do_reset_config=False, **loads_times) t = times[0] results.loc[load_val, "prices"] = power_system.buses[0].price(t) statuses = Series( dict([(gen.name, gen.status(t).value) for gen in power_system.generators()])) results.loc[load_val, "committed"] = statuses.sum() results.loc[load_val, "last_committed"] = statuses[ statuses == 1].index.difference(committed_gen_names) committed_gen_names = statuses[statuses == 1].index if (load_values[-1] == 0.99 * gen_data.pmax.sum()) and (statuses.sum() != len(generators)): print("warning: uncommitted generation:") print((gen_data.set_index("name").loc[statuses[statuses == 0].index])) results.to_csv(joindir(user_config.directory, "ed_sweep.csv")) if args["hide_units_committed"]: ax = results.prices.plot(drawstyle="steps") else: ax = results[["prices", "committed"]].plot(drawstyle="steps", secondary_y=["committed"]) ax.right_ax.set_ylabel("Units committed") ax.set_xlabel("System Load (MW)") ax.set_ylabel("Estimated System Price ($/MWh)") plt.savefig(joindir(user_config.directory, "ed_sweep.png"))
def main(args): generators, loads, _, times, _, data = parsedir() generators = filter(lambda gen: gen.is_controllable, generators) gen_data = data['generators'] if args['min'] == 0: args['min'] = 1.1 * gen_data.pmin.sum() if args['max'] == 0: args['max'] = 0.99 * gen_data.pmax.sum() load_values = np.arange(args['min'], args['max'], args['interval']) results = DataFrame(columns=['prices', 'committed', 'last_committed'], index=load_values) committed_gen_names = Index([]) for load_val in load_values: print load_val loads_times = make_loads_times(Pd=load_val) power_system, times = solve_problem(generators, do_reset_config=False, **loads_times) t = times[0] results.ix[load_val, 'prices'] = power_system.buses[0].price(t) statuses = Series( dict([(gen.name, gen.status(t).value) for gen in power_system.generators()])) results.ix[load_val, 'committed'] = statuses.sum() results.ix[load_val, 'last_committed'] = \ statuses[statuses == 1].index.diff(committed_gen_names) committed_gen_names = statuses[statuses == 1].index if (load_values[-1] == 0.99 * gen_data.pmax.sum()) and \ (statuses.sum() != len(generators)): print('warning: uncommitted generation:') print(gen_data.set_index('name').ix[statuses[statuses == 0].index]) results.to_csv(joindir(user_config.directory, 'ed_sweep.csv')) if args['hide_units_committed']: ax = results.prices.plot(drawstyle='steps') else: ax = results[['prices', 'committed']].plot(drawstyle='steps', secondary_y=['committed']) ax.right_ax.set_ylabel('Units committed') ax.set_xlabel('System Load (MW)') ax.set_ylabel('Estimated System Price ($/MWh)') plt.savefig(joindir(user_config.directory, 'ed_sweep.png'))
def main(args): generators, loads, _, times, _, data = parsedir() generators = filter(lambda gen: gen.is_controllable, generators) gen_data = data['generators'] if args['min'] == 0: args['min'] = 1.1 * gen_data.pmin.sum() if args['max'] == 0: args['max'] = 0.99 * gen_data.pmax.sum() load_values = np.arange(args['min'], args['max'], args['interval']) results = DataFrame(columns=['prices', 'committed', 'last_committed'], index=load_values) committed_gen_names = Index([]) for load_val in load_values: print load_val loads_times = make_loads_times(Pd=load_val) power_system, times = solve_problem(generators, do_reset_config=False, **loads_times) t = times[0] results.ix[load_val, 'prices'] = power_system.buses[0].price(t) statuses = Series(dict([(gen.name, gen.status(t).value) for gen in power_system.generators()])) results.ix[load_val, 'committed'] = statuses.sum() results.ix[load_val, 'last_committed'] = \ statuses[statuses == 1].index.difference(committed_gen_names) committed_gen_names = statuses[statuses == 1].index if (load_values[-1] == 0.99 * gen_data.pmax.sum()) and \ (statuses.sum() != len(generators)): print('warning: uncommitted generation:') print(gen_data.set_index('name').ix[statuses[statuses == 0].index]) results.to_csv(joindir(user_config.directory, 'ed_sweep.csv')) if args['hide_units_committed']: ax = results.prices.plot(drawstyle='steps') else: ax = results[['prices', 'committed']].plot(drawstyle='steps', secondary_y=['committed']) ax.right_ax.set_ylabel('Units committed') ax.set_xlabel('System Load (MW)') ax.set_ylabel('Estimated System Price ($/MWh)') plt.savefig(joindir(user_config.directory, 'ed_sweep.png'))
def initial_dispatch(directory=".", output_filename="initial.csv"): user_config.directory = directory user_config.dispatch_decommit_allowed = True generators_data, loads_data, lines_data, init_data = _load_raw_data() init_data = pd.DataFrame() timeseries, times, generators_data, loads_data = setup_times( generators_data, loads_data) # get rid of a bunch of stuff to make this an ED problem generators_data["power"] = None loads_data["power"] = None for i, snm in generators_data.pop("schedulename").dropna().iterkv(): generators_data.loc[i, "power"] = timeseries[snm].values[0] for i, snm in loads_data.pop("schedulename").dropna().iterkv(): loads_data.loc[i, "power"] = timeseries[snm].values[0] for i, snm in generators_data.pop("observedname").dropna().iterkv(): generators_data.loc[i, "power"] = timeseries[snm].values[0] valid_columns = pd.Index([ "name", "pmin", "pmax", "fuelcost", "heatrateequation", "costcurveequation", "sheddingallowed", "power", ]) generators_data = generators_data[generators_data.columns & valid_columns] generators, loads, lines, times, scenario_values, data = _parse_raw_data( generators_data, loads_data, lines_data, init_data) power_system = PowerSystem(generators, loads, lines) sln = create_solve_problem(power_system, times) # save a csv of the dispatch dispatch = pd.DataFrame( { "power": sln.generators_power.loc[0].values, "status": sln.generators_status.loc[0].values, }, index=[gen.name for gen in sln.generators], ) dispatch.loc[dispatch.status == 0, "power"] = 0 dispatch.index.name = "name" dispatch.to_csv(joindir(user_config.directory, output_filename)) print(dispatch)
def initial_dispatch(directory='.', output_filename='initial.csv'): user_config.directory = directory user_config.dispatch_decommit_allowed = True generators_data, loads_data, lines_data, init_data = _load_raw_data() init_data = pd.DataFrame() timeseries, times, generators_data, loads_data = \ setup_times(generators_data, loads_data) # get rid of a bunch of stuff to make this an ED problem generators_data['power'] = None loads_data['power'] = None for i, snm in generators_data.pop('schedulename').dropna().iterkv(): generators_data.ix[i, 'power'] = timeseries[snm].values[0] for i, snm in loads_data.pop('schedulename').dropna().iterkv(): loads_data.ix[i, 'power'] = timeseries[snm].values[0] for i, snm in generators_data.pop('observedname').dropna().iterkv(): generators_data.ix[i, 'power'] = timeseries[snm].values[0] valid_columns = pd.Index([ 'name', 'pmin', 'pmax', 'fuelcost', 'heatrateequation', 'costcurveequation', 'sheddingallowed', 'power' ]) generators_data = generators_data[generators_data.columns & valid_columns] generators, loads, lines, times, scenario_values, data = \ _parse_raw_data(generators_data, loads_data, lines_data, init_data) power_system = PowerSystem(generators, loads, lines) sln = create_solve_problem(power_system, times) # save a csv of the dispatch dispatch = pd.DataFrame( { 'power': sln.generators_power.ix[0].values, 'status': sln.generators_status.ix[0].values }, index=[gen.name for gen in sln.generators]) dispatch.ix[dispatch.status == 0, 'power'] = 0 dispatch.index.name = 'name' dispatch.to_csv(joindir(user_config.directory, output_filename)) print(dispatch)
def initial_dispatch(directory='.', output_filename='initial.csv'): user_config.directory = directory user_config.dispatch_decommit_allowed = True generators_data, loads_data, lines_data, init_data = _load_raw_data() init_data = pd.DataFrame() timeseries, times, generators_data, loads_data = \ setup_times(generators_data, loads_data) # get rid of a bunch of stuff to make this an ED problem generators_data['power'] = None loads_data['power'] = None for i, snm in generators_data.pop('schedulename').dropna().iterkv(): generators_data.ix[i, 'power'] = timeseries[snm].values[0] for i, snm in loads_data.pop('schedulename').dropna().iterkv(): loads_data.ix[i, 'power'] = timeseries[snm].values[0] for i, snm in generators_data.pop('observedname').dropna().iterkv(): generators_data.ix[i, 'power'] = timeseries[snm].values[0] valid_columns = pd.Index([ 'name', 'pmin', 'pmax', 'fuelcost', 'heatrateequation', 'costcurveequation', 'sheddingallowed', 'power']) generators_data = generators_data[generators_data.columns & valid_columns] generators, loads, lines, times, scenario_values, data = \ _parse_raw_data(generators_data, loads_data, lines_data, init_data) power_system = PowerSystem(generators, loads, lines) sln = create_solve_problem(power_system, times) # save a csv of the dispatch dispatch = pd.DataFrame({ 'power': sln.generators_power.ix[0].values, 'status': sln.generators_status.ix[0].values}, index=[gen.name for gen in sln.generators]) dispatch.ix[dispatch.status==0, 'power'] = 0 dispatch.index.name = 'name' dispatch.to_csv(joindir(user_config.directory, output_filename)) print(dispatch)
def hasPyscript(dir): return glob.glob(joindir(dir,'*.py')) def main(solver=config.user_config.solver):
def wipeTestSlate(dir): patterns=['*.png','*.lp','commitment.csv','dispatch.csv','error.txt'] for pat in patterns: for f in glob.glob(joindir(dir,pat)): os.remove(f)
def hasPyscript(dir): return glob.glob(joindir(dir, "*.py"))
def wipeTestSlate(dir): patterns = ["*.png", "*.lp", "commitment.csv", "dispatch.csv", "error.txt"] for pat in patterns: for f in glob.glob(joindir(dir, pat)): os.remove(f)
def hasPyscript(dir): return glob.glob(joindir(dir, '*.py'))