In [3]:
from __future__ import division

from pulp import *
import os
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import matplotlib.mlab as mlab
import pandas as pd
import csv
import datetime
import sqlite3
import math
import glob

import seaborn as sns
%matplotlib inline

from pandas import *
from scipy import optimize
from scipy import stats
from datetime import date, timedelta, datetime
import timeit
from collections import OrderedDict

from IPython.display import clear_output
from IPython.display import HTML
from matplotlib.ticker import MultipleLocator

from shutil import copyfile

Step 1: Get distinct user_ids and event_ids of all Electric Vehicles Except Fleet Vehicles at the ALCOPARK.


In [13]:
# df_header = pd.read_csv('results/FlexDrivers/NewEVStatus/2015-07-01.csv')

filenames = glob.glob('results/FlexDrivers/NewEVStatus/alcopark/EventSessions/'+'*.csv')
dfs = pd.DataFrame()

for filename in filenames:
    df = pd.read_csv(filename)
    df.index = df[df.columns[0]]
    dfs = pd.concat([dfs,df])
dfs.drop(dfs.columns[[0]], axis=1, inplace=True)
#dfs.to_csv('results/FlexDrivers/NewEVStatus/alcopark/' + '2015-EV-Sessions.csv')

In [14]:
station_sessions = []
station_sessions = dfs.copy()

Read all drivers' Session data to DataFrame


In [15]:
def query_EVSE_eventids(startdate, enddate):
    # Query each event, for each event run the optimization based on corresponding energy cost to minimize 
    # the sum of energy cost every 15 minutes.
    print('Start to query EV power at "Alcopark"')

    # Get distinct event_ids for 
    conn = sqlite3.connect("sessionData.db")
    cursor = conn.cursor()
    query=("SELECT DISTINCT(EVENT_ID) FROM sessiondata")
    query_cond1=("where ENERGY>0 and ENERGY!='' AND")
    query_cond2=("STATION LIKE '%ALCO%' AND") # ALCOPARK

    # PARKING AT NIGHT, FLEET VEHICLES
#     query_cond3=("(((CAST(strftime('%j',SESSION_END_TIME) as INT) - CAST(strftime('%j',SESSION_START_TIME) as INT)) > 0) AND")
    query_cond4=("(strftime('%Y-%m-%d',SESSION_START_TIME) between ") # MONTH IN JAN
    cur = cursor.execute(query+" "+query_cond1+" "+query_cond2+" "+query_cond4+"'"+startdate+"'"+' AND '+"'"+enddate+"'"+')')
    rows = cur.fetchall()
    event_ids=[]
    for row in rows: event_ids.append(row[0])
    event_ids=np.array(event_ids)
    conn.close()
    
    # query EVSE data from SQL
    EVSE_Power = pd.DataFrame()
    index = pd.date_range(startdate, enddate, freq='15min')

    EVSE_Power = pd.DataFrame(index=index)

    tcts=len(event_ids)
    for event_id in event_ids:
#         print('This is the current EVENT_ID {}'.format(event_id))
#         if tcts % 30 ==0: clear_output()
#         start = timeit.default_timer()   
        conn = sqlite3.connect("minData.db")
        cursor = conn.cursor()
        # FORM A QUERY TO GET RELEVANT DATA, MAKE SURE TO FLOOR THE STARTING OR ENDING POINT
        # THIS WUERY WILL RETURN INTERVAL_ENERGY IN KWH, THIS REALLY IS WHAT WE ARE INTERESTED IN FOR OPTIMIZATION 
        # WE WILL NEED THE TIME FIELD TO GET THE CORRESPONDING VALUES OF ENERGY COST
        # THE REST WILL BE USED WHEN POPULATING THE MINDATA DATABASE
        query=("SELECT INTERVAL_START_DATE AS START,INTERVAL_END_DATE AS END,AVERAGE_POWER,ENERGY FROM minData WHERE ENERGY!='' AND EVENT_ID=")
        query_cond=str(event_id)
        cur = cursor.execute(query+query_cond)
        df = pd.DataFrame(cur.fetchall())
        df.columns=['start','end','power','cumulative_energy']
        df['StartDate'] = df['start'].apply(lambda x: datetime.strptime(x,'%Y-%m-%d %H:%M:%S'))
        df.index = df['StartDate']
        try:
            df = df.resample('15min').bfill()
            df = df.rename(columns = {'power':event_id})
            EVSE_Power = pd.concat([EVSE_Power,pd.DataFrame(df[event_id])], axis = 1)
        except ValueError:
            print('Oops! That was no valid Event ID: ' + str(event_id))
        except KeyError:
            print ('Void Dict no valid Event ID: ' + str(event_id))

    return EVSE_Power

In [16]:
# consider the holidays
holidays = pd.read_csv('holiday.csv', usecols=[0])
holidays['date'] = pd.to_datetime(pd.Series(holidays['date']), format='%m/%d/%y')
holidays['day'] = holidays.date.apply(lambda x: x.strftime('%Y-%m-%d'))

# utility tariff, E19-TOU
utility = []
utility = pd.read_csv('PGE_E19.csv', usecols=[1])

# meter charge
meter_charge = float("{0:.2f}".format(utility['Secondary'][0]))
# demand charge
summer_onpeak_demand = float("{0:.5f}".format(utility['Secondary'][1]))
summer_midpeak_demand = float("{0:.5f}".format(utility['Secondary'][2]))
summer_monthly_demand = float("{0:.5f}".format(utility['Secondary'][3]))
winter_midpeak_demand = float("{0:.5f}".format(utility['Secondary'][4]))
winter_monthly_demand = float("{0:.5f}".format(utility['Secondary'][5]))

# energy charge
summer_onpeak_energy = float("{0:.5f}".format(utility['Secondary'][6]))
summer_midpeak_energy = float("{0:.5f}".format(utility['Secondary'][7]))
summer_offpeak_energy = float("{0:.5f}".format(utility['Secondary'][8]))
winter_midpeak_energy = float("{0:.5f}".format(utility['Secondary'][9]))
winter_offpeak_energy = float("{0:.5f}".format(utility['Secondary'][10]))

# PDP charge and credits
cpp_charge = utility['Secondary'][11]
credits_onpeak_demand = utility['Secondary'][12]
credits_midpeak_demand = utility['Secondary'][13]
# credits_onpeak_energy = utility['Secondary'][14]
# credits_midpeak_energy = utility['Secondary'][15]

# Get cost value of energy charges for time
def getCostValueForTime(month,time,weekday):
    if (month in [1,2,3,4,11,12]) & (weekday > 0) & (weekday < 6):
        if (time >= '08:30') & (time < '21:30'):
            return winter_midpeak_energy
        elif (time >= '00:00') & (time < '08:30'):
            return winter_offpeak_energy
        elif time >= '21:30':
            return 0
    elif (month in [1,2,3,4,11,12]) & (weekday in [6,7]):
        return winter_offpeak_energy
    elif (month in [5,6,7,8,9,10]) & (weekday > 0) & (weekday < 6):
        if (time >= '00:00') & (time < '08:30'):
            return summer_offpeak_energy
        elif (time >= '08:30') & (time < '12:00'):
            return summer_midpeak_energy
        elif (time >= '12:00') & (time < '18:00'):
            return summer_onpeak_energy
        elif (time >= '18:00') & (time < '21:30'):
            return summer_midpeak_energy
        elif (time >= '21:30') & (time <= '23:45'):
            return summer_offpeak_energy
    elif (month in [5,6,7,8,9,10]) & (weekday in [6,7]):
        return summer_offpeak_energy
    else: 
        print "Error in month, time and weekday"

In [17]:
ts2015 = pd.read_csv('results/FlexDrivers/NewEVStatus/2015TimeStamp.csv')
ts2015.index = ts2015.ix[:,0].apply(lambda x: datetime.strptime(x,'%m/%d/%y %H:%M'))
ts2015.drop(ts2015.columns[[0]], axis=1, inplace=True)

ts2015['day'] = map(lambda x: x.strftime('%Y-%m-%d'),ts2015.index)
ts2015['month'] = map(lambda x: x.strftime('%m'),ts2015.index)
ts2015['hour'] = map(lambda x: x.strftime('%H'),ts2015.index)
ts2015['hour'] = ts2015.hour.astype(int)
ts2015['month'] = ts2015.month.astype(int)

In [18]:
import random

def RandomEVOpt(station_sessions, driver_pct, event_pct):
    
    NonFleetEV_Sessions = station_sessions.loc[station_sessions.driver_id.apply(lambda x: (x not in [146547,294291])),:]
    grp_df2 = pd.DataFrame(NonFleetEV_Sessions.groupby(['driver_id'])['event_id'].size())
    grp_df2.columns = ['session_num']

    FleetEV_ID = list(station_sessions.loc[station_sessions.driver_id.apply(lambda x: (x in [146547,294291])),'event_id'].values)
    NonFleetEV_ID = list(station_sessions.loc[station_sessions.driver_id.apply(lambda x: (x not in [146547,294291])),'event_id'].values)
    NonFleetEV_50 = list(grp_df2.sort_values(['session_num'],ascending=False).head(n=int(len(grp_df2)*driver_pct)).index)
    NonFleetEV_ID_50 = list(station_sessions.loc[station_sessions.driver_id.apply(lambda x: (x in NonFleetEV_50)),'event_id'].values)
    NonFleetEV_ID_50_Random = random.sample(NonFleetEV_ID_50,int(len(NonFleetEV_ID_50)*event_pct))

    EV_ID_Random = FleetEV_ID + NonFleetEV_ID_50_Random
    
    return EV_ID_Random

EV_ID_Random = RandomEVOpt(station_sessions,1.0,1.0)

In [19]:
len(EV_ID_Random)


Out[19]:
4264

In [20]:
def hasSlack(eventid,DailyPower):
    DayPower = DailyPower.fillna(0)
    
    oldpower = DailyPower.loc[DailyPower[eventid] >= 0,[eventid,'ts']]
    newpower = DayPower.loc[DayPower[eventid] >= 0,[eventid]]
    power2 = newpower[eventid].tolist()

    positive_power = [p for p in power2 if p>0]
    M=len(positive_power)

    # Left and Right slots
    LS_ref = oldpower['ts'][0]
    RS_ref = oldpower['ts'][-1]
    
    if M == 0:
        return False
    elif M >= (RS_ref - LS_ref + 1):
        return False
    else:
        return True

def flexEvent(eventid, DailyPower, past_event):
    flex_event = []
    DayPower = DailyPower.fillna(0)
    
    oldpower = DailyPower.loc[DailyPower[eventid] >= 0,[eventid,'ts']]
    newpower = DayPower.loc[DayPower[eventid] >= 0,[eventid]]
    power2 = newpower[eventid].tolist()

    positive_power = [p for p in power2 if p>0]
    M=len(positive_power)

    # Left and Right slots
    LS_ref = oldpower['ts'][0]
    RS_ref = oldpower['ts'][-1]
    
    past_event.append(eventid)
    
    for event in past_event:
        oldpower = DailyPower.loc[(DailyPower['ts'] >= LS_ref) & (DailyPower[event] >= 0),[event,'ts']]
        newpower = DayPower.loc[(DailyPower['ts'] >= LS_ref) & (DailyPower[event] >= 0),[event]]
        power2 = newpower[event].tolist()

        positive_power = [p for p in power2 if p>0]
        M=len(positive_power)
        
        if len(oldpower) > 0:
            # Left and Right slots
            LS = oldpower['ts'][0]
            RS = oldpower['ts'][-1]

            if M == 0:
                pass
            elif M >= (RS - LS + 1):
                pass
            else:
                flex_event.append(event)
        else:
            pass
    return flex_event, LS_ref, RS_ref

Case 5: Assume the coming EV's Start, End and Charging Power. Optimized with discrete charging power (15-min block)


In [10]:
def OptimizeCostV5(DailyPower, LS_ref, eventid, past_event, opt_event, onpeak, midpeak, peak):
    
    DailyPower2 = DailyPower.copy()
    DailyPower2.loc[DailyPower2.index[0:LS_ref],opt_event] = np.nan
    
    DayPower = DailyPower2.fillna(0)
#     opt_event.append('power')
    
    # Create matrix of slots
    X = LpVariable.dicts("ChargingStatus", [(k, i, j) for k in range(len(opt_event)) for i in range(96) for j in range(96)], 0, 1, LpBinary)

    costs=[]
    
    
    for tim in DayPower.index:
        costs.append(getCostValueForTime(tim.month,tim.strftime('%H:%M'),tim.isoweekday()))
    cost={}
    for k in xrange(len(opt_event)):
        for i in xrange(96):
            for j in xrange(96):
                cost[k,i,j]=costs[j]
   
    # Create model objective
    model = pulp.LpProblem("SmartCharging",pulp.LpMinimize)
    # Create model variables
    min_curMidPeak = LpVariable("Min MidPeak",0)
    min_curOnPeak = LpVariable("Min OnPeak",0)
    min_curPeak = LpVariable("Min Peak",0)
        
    tim = DayPower.index[0]
    
    # Create model constrains
    for k in xrange(len(opt_event)):
        oldpower = DailyPower2.loc[DailyPower2[opt_event[k]] >= 0,[opt_event[k],'ts']]
        newpower = DayPower.loc[DayPower[opt_event[k]] >= 0,[opt_event[k]]]
        power2 = newpower[opt_event[k]].tolist()

        positive_power = [p for p in power2 if p>0]
        M=len(positive_power)

        # Left and Right slots
        LS = oldpower['ts'][0]
        RS = oldpower['ts'][-1]

        # Set the precedence and the session duration constraints
        for i in xrange(LS):
            model += (lpSum(X[k,i,j] for j in range(96)) == 0)   
        # Down zeros
        for i in xrange(LS+M,96):
            model += (lpSum(X[k,i,j] for j in range(96)) == 0)    
        # Left zeros
        for i in xrange(LS,LS+M):
            model += (lpSum(X[k,i,j] for j in range(LS)) == 0)
        # Right zeros
        for i in xrange(LS,LS+M):
            model += (lpSum(X[k,i,j] for j in range(RS+1,96)) == 0)

        # Add the constraints
        for i in xrange(LS,LS+M):
            model += (lpSum(X[k,i,j] for j in range(LS,RS+1)) == 1)

        for i in xrange(LS,LS+M-1):
    #         model += (lpSum(X[i,j]*(j+1) for j in range(LS,RS+1)) == lpSum(X[i+1,j]*(j+1) for j in range(LS,RS+1))-1)
            model += (lpSum(X[k,i,j]*(j+1) for j in range(LS,RS+1)) <= lpSum(X[k,i+1,j]*(j+1) for j in range(LS,RS+1))-1) # discrete 15-min charging load blocks
        
        # Re-ordering charging slot for next round optimization
        DayPower.loc[DayPower.index[0:96],opt_event[k]] = [0] * LS + positive_power + [0] * (96-LS-M)
    
    # Create model objective
    if (tim.month in [1,2,3,4,11,12]) & (tim.isoweekday() in [1,2,3,4,5]):
        model += lpSum((DayPower[opt_event[k]][i])*X[k,i,j]*cost[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96) for j in xrange(96)) + \
                    min_curPeak * 17.33 + min_curMidPeak*0.13
        
        for j in xrange(34,86):
            model += lpSum(DayPower[opt_event[k]][i]*X[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96)) + DayPower['power'][j] <= min_curMidPeak
            
        for j in xrange(96):
            model += lpSum(DayPower[opt_event[k]][i]*X[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96)) + DayPower['power'][j] <= min_curPeak
        
    elif (tim.month in [1,2,3,4,11,12]) & (tim.isoweekday() in [6,7]):
        model += lpSum((DayPower[opt_event[k]][i])*X[k,i,j]*cost[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96) for j in xrange(96)) + \
                    min_curPeak * 17.33
            
        for j in xrange(96):
            model += lpSum(DayPower[opt_event[k]][i]*X[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96)) + DayPower['power'][j] <= min_curPeak
        
    elif (tim.month in [5,6,7,8,9,10]) & (tim.isoweekday() in [1,2,3,4,5]):
        model += lpSum((DayPower[opt_event[k]][i])*X[k,i,j]*cost[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96) for j in xrange(96)) + \
                    min_curOnPeak * 18.74 + min_curPeak * 17.33 + min_curMidPeak * 5.23
    
        for j in (range(34,48)+range(72,86)):
            model += lpSum(DayPower[opt_event[k]][i]*X[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96)) + DayPower['power'][j] <= min_curMidPeak
        for j in xrange(96):
            model += lpSum(DayPower[opt_event[k]][i]*X[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96)) + DayPower['power'][j] <= min_curPeak
        for j in xrange(48,72):
            model += lpSum(DayPower[opt_event[k]][i]*X[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96)) + DayPower['power'][j] <= min_curOnPeak

    elif (tim.month in [5,6,7,8,9,10]) & (tim.isoweekday() in [6,7]):
        model += lpSum((DayPower[opt_event[k]].tolist()[i])*X[k,i,j]*cost[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96) for j in xrange(96)) + \
                    min_curPeak*17.33
            
        for j in xrange(96):
            model += lpSum(DayPower[opt_event[k]][i]*X[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96)) + DayPower['power'][j] <= min_curPeak
        
    else:
        print "Error in month, day and time"
    
#     model.solve()
    model.solve(PULP_CBC_CMD(fracGap = 0.05, maxSeconds = 300, threads = None))
    
    if model.status == 1:
        
        for k in xrange(len(opt_event)):
            
            oldpower = DailyPower2.loc[DailyPower2[opt_event[k]] >= 0,[opt_event[k],'ts']]
            newpower = DayPower.loc[DayPower[opt_event[k]] >= 0,[opt_event[k]]]
            power2 = newpower[opt_event[k]].tolist()

            positive_power = [p for p in power2 if p>0]
            M=len(positive_power)

            # Left and Right slots
            LS = oldpower['ts'][0]
            RS = oldpower['ts'][-1]

            slots = xrange(1,len(power2)+1)

            sol=[]
            for j in xrange(96):
                sol.append(sum(X[k,i,j].varValue*(j) for i in xrange(LS,LS+M)))
#             corSlots=[slots[int(s)] for s in sol]
            ct=0
            power=[p*0 for p in power2]
            for s in sol:
                if s>0:
                    power[int(s)]=positive_power[ct]
                    ct=ct+1
                else:
                    continue
            DailyPower.loc[DailyPower.index[LS:RS+1],opt_event[k]] = power[LS:RS+1]

    else:
        print('The solution is suboptimal')
    return DailyPower

In [11]:
# run the optimization for each month's EV charging sessions

for month in range(7,8):
    # monthly date range
    StartDate = ts2015[ts2015['month'] == month].day[0]
    EndDate = ts2015[ts2015['month'] == month].day[-1]
    rng = map(lambda x: x.strftime('%Y-%m-%d'),pd.date_range(StartDate, EndDate, freq='D'))
    
    EndDate2 = (datetime.strptime(EndDate,'%Y-%m-%d')+timedelta(days=1)).strftime('%Y-%m-%d')
#     EVSE_Power = query_EVSE_eventids(StartDate,EndDate2)
#     EVSE_Power = EVSE_Power[StartDate:EndDate]
    EVSE_Power = pd.read_csv('results/FlexDrivers/NewEVStatus/2015EV/'+'2015-'+str(month)+'Original.csv')
    EVSE_Power.index = EVSE_Power.ix[:,0].apply(lambda x: datetime.strptime(x,'%Y-%m-%d %H:%M:%S'))
    EVSE_Power.drop(EVSE_Power.columns[[0]], axis=1, inplace=True)
    
    # initialize the past peak demand values 
    DailyPower = []
    peak=0
    onpeak=0
    midpeak=0

    monthpeak = []
    monthonpeak = []
    monthmidpeak = []
    
    directory = 'results/FlexDrivers/NewEVStatus/OptV5/' + str(month)
    if not os.path.exists(directory):
        os.makedirs(directory)
    # run the daily optimization
    for day in rng[25:26]:
        DailyPower = EVSE_Power[day]
        DailyPower = DailyPower.replace('',np.nan)
        DailyPower = DailyPower.dropna(axis=1,how='all')
        
        DriverOnList = DailyPower.columns
        N = len(DriverOnList)
        
        opt_event = []
        past_event = []
        NonSlack_event = []
        
        DailyPower['power'] = 0
        DailyPower['NonControlledPower'] = DailyPower.fillna(0).sum(axis=1)
        DailyPower['ts'] = range(96) # Add the tag of time step for each event id
        
        if DailyPower.empty:
            print 'EV Data on ' + day + ' is empty!'
            DailyPower.to_csv(directory + '/' + day +'.csv')
        else:
            for eventid in DriverOnList[::-1]:
                if (int(eventid) in EV_ID_Random) & (hasSlack(eventid,DailyPower)):
                    opt_event, LS_ref, RS_ref = flexEvent(eventid, DailyPower, past_event)
                    df2 = DailyPower[opt_event].fillna(0).sum(axis=1)
                    df2[LS_ref:96] = 0
                    DailyPower['power'] = 0
                    DailyPower['power'] = DailyPower[NonSlack_event].fillna(0).sum(axis=1) + \
                                          DailyPower[[x for x in past_event if x not in opt_event]].fillna(0).sum(axis=1) + df2

                    DailyPower = OptimizeCostV5(DailyPower, LS_ref, eventid, past_event, opt_event, onpeak, midpeak, peak)
                    
                    print 'Optimization in ' + str(eventid)

                else:
                    NonSlack_event.append(eventid)
                    print str(eventid) + ' has no slack for charging load move!'
            DailyPower['power'] = 0
            DailyPower['power'] = DailyPower[NonSlack_event].fillna(0).sum(axis=1) + DailyPower[past_event].fillna(0).sum(axis=1)

            print 'Optimization on ' + day + ' is done successfully'
            
            DailyPower.to_csv(directory +'/'+ day +'-V5.csv')
#     EVSE_Power[StartDate:EndDate].to_csv('results/FlexDrivers/NewEVStatus/OptV5/'+'2015-'+str(month)+'Original.csv')


29147515 has no slack for charging load move!
Optimization in 29155183
29156567 has no slack for charging load move!
The solution is suboptimal
Optimization in 29158169
29162535 has no slack for charging load move!
29163423 has no slack for charging load move!
29202825 has no slack for charging load move!
Optimization on 2015-07-26 is done successfully

In [21]:
def OptimizeCostV6(DailyPower, LS_ref, eventid, past_event, opt_event, onpeak, midpeak, peak):
    
    DailyPower2 = DailyPower.copy()
    DailyPower2.loc[DailyPower2.index[0:LS_ref],opt_event] = np.nan
    
    DayPower = DailyPower2.fillna(0)
#     opt_event.append('power')
    
    # Create matrix of slots
    X = LpVariable.dicts("ChargingStatus", [(k, i, j) for k in range(len(opt_event)) for i in range(96) for j in range(96)], 0, 1, LpBinary)

    costs=[]
    
    
    for tim in DayPower.index:
        costs.append(getCostValueForTime(tim.month,tim.strftime('%H:%M'),tim.isoweekday()))
    cost={}
    for k in xrange(len(opt_event)):
        for i in xrange(96):
            for j in xrange(96):
                cost[k,i,j]=costs[j]
   
    # Create model objective
    model = pulp.LpProblem("SmartCharging",pulp.LpMinimize)
    # Create model variables
    min_curMidPeak = LpVariable("Min MidPeak",0)
    min_curOnPeak = LpVariable("Min OnPeak",0)
    min_curPeak = LpVariable("Min Peak",0)
        
    tim = DayPower.index[0]
    
    # Create model constrains
    for k in xrange(len(opt_event)):
        oldpower = DailyPower2.loc[DailyPower2[opt_event[k]] >= 0,[opt_event[k],'ts']]
        newpower = DayPower.loc[DayPower[opt_event[k]] >= 0,[opt_event[k]]]
        power2 = newpower[opt_event[k]].tolist()

        positive_power = [p for p in power2 if p>0]
        M=len(positive_power)

        # Left and Right slots
        LS = oldpower['ts'][0]
        RS = oldpower['ts'][-1]

        # Set the precedence and the session duration constraints
        for i in xrange(LS):
            model += (lpSum(X[k,i,j] for j in range(96)) == 0)   
        # Down zeros
        for i in xrange(LS+M,96):
            model += (lpSum(X[k,i,j] for j in range(96)) == 0)    
        # Left zeros
        for i in xrange(LS,LS+M):
            model += (lpSum(X[k,i,j] for j in range(LS)) == 0)
        # Right zeros
        for i in xrange(LS,LS+M):
            model += (lpSum(X[k,i,j] for j in range(RS+1,96)) == 0)

        # Add the constraints
        for i in xrange(LS,LS+M):
            model += (lpSum(X[k,i,j] for j in range(LS,RS+1)) == 1)

        for i in xrange(LS,LS+M-1):
    #         model += (lpSum(X[i,j]*(j+1) for j in range(LS,RS+1)) == lpSum(X[i+1,j]*(j+1) for j in range(LS,RS+1))-1)
            model += (lpSum(X[k,i,j]*(j+1) for j in range(LS,RS+1)) <= lpSum(X[k,i+1,j]*(j+1) for j in range(LS,RS+1))-1) # discrete 15-min charging load blocks
        
        # Re-ordering charging slot for next round optimization
        DayPower.loc[DayPower.index[0:96],opt_event[k]] = [0] * LS + positive_power + [0] * (96-LS-M)
    
    # Create model objective
    if (tim.month in [1,2,3,4,11,12]) & (tim.isoweekday() in [1,2,3,4,5]):
        model += lpSum((DayPower[opt_event[k]][i])*X[k,i,j]*cost[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96) for j in xrange(96)) + \
                    min_curPeak * 17.33
        
        for j in xrange(34,86):
            model += lpSum(DayPower[opt_event[k]][i]*X[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96)) + DayPower['power'][j] <= min_curMidPeak
            
        for j in xrange(96):
            model += lpSum(DayPower[opt_event[k]][i]*X[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96)) + DayPower['power'][j] <= min_curPeak
        
    elif (tim.month in [1,2,3,4,11,12]) & (tim.isoweekday() in [6,7]):
        model += lpSum((DayPower[opt_event[k]][i])*X[k,i,j]*cost[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96) for j in xrange(96)) + \
                    min_curPeak * 17.33
            
        for j in xrange(96):
            model += lpSum(DayPower[opt_event[k]][i]*X[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96)) + DayPower['power'][j] <= min_curPeak
        
    elif (tim.month in [5,6,7,8,9,10]) & (tim.isoweekday() in [1,2,3,4,5]):
        model += lpSum((DayPower[opt_event[k]][i])*X[k,i,j]*cost[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96) for j in xrange(96)) + \
                    min_curOnPeak * 18.74 + min_curPeak * 17.33 + min_curMidPeak * 5.23
    
        for j in (range(34,48)+range(72,86)):
            model += lpSum(DayPower[opt_event[k]][i]*X[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96)) + DayPower['power'][j] <= min_curMidPeak
        for j in xrange(96):
            model += lpSum(DayPower[opt_event[k]][i]*X[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96)) + DayPower['power'][j] <= min_curPeak
        for j in xrange(48,72):
            model += lpSum(DayPower[opt_event[k]][i]*X[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96)) + DayPower['power'][j] <= min_curOnPeak

    elif (tim.month in [5,6,7,8,9,10]) & (tim.isoweekday() in [6,7]):
        model += lpSum((DayPower[opt_event[k]].tolist()[i])*X[k,i,j]*cost[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96) for j in xrange(96)) + \
                    min_curPeak*17.33
            
        for j in xrange(96):
            model += lpSum(DayPower[opt_event[k]][i]*X[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96)) + DayPower['power'][j] <= min_curPeak
        
    else:
        print "Error in month, day and time"
    
#     model.solve()
    model.solve(PULP_CBC_CMD(fracGap = 0.05, maxSeconds = 300, threads = None))
    
    if model.status == 1:
        
        for k in xrange(len(opt_event)):
            
            oldpower = DailyPower2.loc[DailyPower2[opt_event[k]] >= 0,[opt_event[k],'ts']]
            newpower = DayPower.loc[DayPower[opt_event[k]] >= 0,[opt_event[k]]]
            power2 = newpower[opt_event[k]].tolist()

            positive_power = [p for p in power2 if p>0]
            M=len(positive_power)

            # Left and Right slots
            LS = oldpower['ts'][0]
            RS = oldpower['ts'][-1]

            slots = xrange(1,len(power2)+1)

            sol=[]
            for j in xrange(96):
                sol.append(sum(X[k,i,j].varValue*(j) for i in xrange(LS,LS+M)))
#             corSlots=[slots[int(s)] for s in sol]
            ct=0
            power=[p*0 for p in power2]
            for s in sol:
                if s>0:
                    power[int(s)]=positive_power[ct]
                    ct=ct+1
                else:
                    continue
            DailyPower.loc[DailyPower.index[LS:RS+1],opt_event[k]] = power[LS:RS+1]

    else:
        print('The solution is suboptimal')
    return DailyPower

In [ ]:
# run the optimization for each month's EV charging sessions

for month in range(5,11):
    # monthly date range
    StartDate = ts2015[ts2015['month'] == month].day[0]
    EndDate = ts2015[ts2015['month'] == month].day[-1]
    rng = map(lambda x: x.strftime('%Y-%m-%d'),pd.date_range(StartDate, EndDate, freq='D'))
    
    EndDate2 = (datetime.strptime(EndDate,'%Y-%m-%d')+timedelta(days=1)).strftime('%Y-%m-%d')
#     EVSE_Power = query_EVSE_eventids(StartDate,EndDate2)
#     EVSE_Power = EVSE_Power[StartDate:EndDate]
    EVSE_Power = pd.read_csv('results/FlexDrivers/NewEVStatus/2015EV/'+'2015-'+str(month)+'Original.csv')
    EVSE_Power.index = EVSE_Power.ix[:,0].apply(lambda x: datetime.strptime(x,'%Y-%m-%d %H:%M:%S'))
    EVSE_Power.drop(EVSE_Power.columns[[0]], axis=1, inplace=True)
    
    # initialize the past peak demand values 
    DailyPower = []
    peak=0
    onpeak=0
    midpeak=0

    monthpeak = []
    monthonpeak = []
    monthmidpeak = []
    
    directory = 'results/FlexDrivers/NewEVStatus/OptV6/' + str(month)
    if not os.path.exists(directory):
        os.makedirs(directory)
    # run the daily optimization
    for day in rng:
        DailyPower = EVSE_Power[day]
        DailyPower = DailyPower.replace('',np.nan)
        DailyPower = DailyPower.dropna(axis=1,how='all')
        
        DriverOnList = DailyPower.columns
        N = len(DriverOnList)
        
        opt_event = []
        past_event = []
        NonSlack_event = []
        
        DailyPower['power'] = 0
        DailyPower['NonControlledPower'] = DailyPower.fillna(0).sum(axis=1)
        DailyPower['ts'] = range(96) # Add the tag of time step for each event id
        
        if DailyPower.empty:
            print 'EV Data on ' + day + ' is empty!'
            DailyPower.to_csv(directory + '/' + day +'.csv')
        else:
            for eventid in DriverOnList[::-1]:
                if (int(eventid) in EV_ID_Random) & (hasSlack(eventid,DailyPower)):
                    opt_event, LS_ref, RS_ref = flexEvent(eventid, DailyPower, past_event)
                    df2 = DailyPower[opt_event].fillna(0).sum(axis=1)
                    df2[LS_ref:96] = 0
                    DailyPower['power'] = 0
                    DailyPower['power'] = DailyPower[[x for x in past_event if x not in opt_event]].fillna(0).sum(axis=1) + df2

                    DailyPower = OptimizeCostV6(DailyPower, LS_ref, eventid, past_event, opt_event, onpeak, midpeak, peak)
                    
                    print 'Optimization in ' + str(eventid)

                else:
                    NonSlack_event.append(eventid)
                    opt_event, LS_ref, RS_ref = flexEvent(eventid, DailyPower, past_event)
                    df2 = DailyPower[opt_event].fillna(0).sum(axis=1)
                    df2[LS_ref:96] = 0
                    DailyPower['power'] = 0
                    DailyPower['power'] = DailyPower[[x for x in past_event if x not in opt_event]].fillna(0).sum(axis=1) + df2

                    DailyPower = OptimizeCostV6(DailyPower, LS_ref, eventid, past_event, opt_event, onpeak, midpeak, peak)
                    
                    print str(eventid) + ' has no slack for charging load move!'
                    print 'Optimization in ' + str(eventid)
            DailyPower['power'] = 0
            DailyPower['power'] = DailyPower[past_event].fillna(0).sum(axis=1)

            print 'Optimization on ' + day + ' is done successfully'
            
            DailyPower.to_csv(directory +'/'+ day +'-V6.csv')
#     EVSE_Power[StartDate:EndDate].to_csv('results/FlexDrivers/NewEVStatus/OptV5/'+'2015-'+str(month)+'Original.csv')


Optimization in 26081269
Optimization in 26083881
Optimization in 26084233
Optimization in 26092097
26096629 has no slack for charging load move!
Optimization in 26096629
Optimization in 26098903
Optimization in 26099539
Optimization in 26101603
Optimization in 26102209
26102311 has no slack for charging load move!
Optimization in 26102311
Optimization in 26102669
Optimization in 26103549
The solution is suboptimal
Optimization in 26103937
Optimization in 26104877
Optimization in 26105745
Optimization in 26108551
Optimization in 26108575
Optimization on 2015-05-01 is done successfully
Optimization in 26102209
26102669 has no slack for charging load move!
Optimization in 26102669
26103549 has no slack for charging load move!
Optimization in 26103549
26103937 has no slack for charging load move!
Optimization in 26103937
26104877 has no slack for charging load move!
Optimization in 26104877
Optimization in 26105745
Optimization in 26108551
Optimization on 2015-05-02 is done successfully
Optimization in 26102209
26102669 has no slack for charging load move!
Optimization in 26102669
26103549 has no slack for charging load move!
Optimization in 26103549
26103937 has no slack for charging load move!
Optimization in 26103937
26104877 has no slack for charging load move!
Optimization in 26104877
26105745 has no slack for charging load move!
Optimization in 26105745
Optimization in 26108551
26143049 has no slack for charging load move!
Optimization in 26143049
Optimization on 2015-05-03 is done successfully
Optimization in 26102209
26102669 has no slack for charging load move!
Optimization in 26102669
26103549 has no slack for charging load move!
Optimization in 26103549
26103937 has no slack for charging load move!
Optimization in 26103937
26104877 has no slack for charging load move!
Optimization in 26104877
26105745 has no slack for charging load move!
Optimization in 26105745
Optimization in 26108551
26170843 has no slack for charging load move!
Optimization in 26170843
Optimization in 26170847
Optimization in 26159563
Optimization in 26163867
26163881 has no slack for charging load move!
Optimization in 26163881
Optimization in 26166855
26170471 has no slack for charging load move!
Optimization in 26170471
Optimization in 26173581
26174345 has no slack for charging load move!
Optimization in 26174345
Optimization in 26178855
Optimization in 26181681
Optimization in 26181697
26181735 has no slack for charging load move!
Optimization in 26181735
26182707 has no slack for charging load move!
Optimization in 26182707
Optimization in 26185823
Optimization in 26187513
Optimization in 26187645
Optimization in 26187727
Optimization on 2015-05-04 is done successfully
26185823 has no slack for charging load move!
Optimization in 26185823
26187513 has no slack for charging load move!
Optimization in 26187513
26187645 has no slack for charging load move!
Optimization in 26187645
26187727 has no slack for charging load move!
Optimization in 26187727
Optimization in 26203055
Optimization in 26203183
26207141 has no slack for charging load move!
Optimization in 26207141
Optimization in 26207675
The solution is suboptimal
Optimization in 26208839
Optimization in 26216883
26216963 has no slack for charging load move!
Optimization in 26216963
Optimization in 26217017
Optimization in 26217081
Optimization in 26219193
Optimization in 26222255
Optimization in 26222359
Optimization in 26228203
Optimization in 26228577
Optimization in 26229911
Optimization in 26230437
Optimization on 2015-05-05 is done successfully
Optimization in 26216883
26217017 has no slack for charging load move!
Optimization in 26217017
26222359 has no slack for charging load move!
Optimization in 26222359
26228203 has no slack for charging load move!
Optimization in 26228203
26228577 has no slack for charging load move!
Optimization in 26228577
26229911 has no slack for charging load move!
Optimization in 26229911
26230437 has no slack for charging load move!
Optimization in 26230437
Optimization in 26248785
26249551 has no slack for charging load move!
Optimization in 26249551
Optimization in 26250375
Optimization in 26251893
26253015 has no slack for charging load move!
Optimization in 26253015
26253667 has no slack for charging load move!
Optimization in 26253667
The solution is suboptimal
Optimization in 26256587
26257491 has no slack for charging load move!
Optimization in 26257491
26258481 has no slack for charging load move!
Optimization in 26258481
Optimization in 26259093
Optimization in 26260103
26265125 has no slack for charging load move!
Optimization in 26265125
Optimization in 26268993
Optimization in 26269815
Optimization in 26270193
26270321 has no slack for charging load move!
Optimization in 26270321
Optimization in 26271109
Optimization in 26272385
Optimization in 26273179
Optimization in 26274573
Optimization in 26274593
Optimization on 2015-05-06 is done successfully
26269815 has no slack for charging load move!
Optimization in 26269815
26270193 has no slack for charging load move!
Optimization in 26270193
26271109 has no slack for charging load move!
Optimization in 26271109
26272385 has no slack for charging load move!
Optimization in 26272385
26273179 has no slack for charging load move!
Optimization in 26273179
26274573 has no slack for charging load move!
Optimization in 26274573
26274593 has no slack for charging load move!
Optimization in 26274593
Optimization in 26291267
Optimization in 26294665
26294873 has no slack for charging load move!
Optimization in 26294873
The solution is suboptimal
Optimization in 26295561
Optimization in 26296989
Optimization in 26297629
26304565 has no slack for charging load move!
Optimization in 26304565
Optimization in 26306673
Optimization in 26306995
26308785 has no slack for charging load move!
Optimization in 26308785
Optimization in 26310321
Optimization in 26313533
Optimization in 26313861
Optimization in 26314165
26314453 has no slack for charging load move!
Optimization in 26314453
Optimization in 26315897
26316519 has no slack for charging load move!
Optimization in 26316519
Optimization in 26317719
Optimization in 26318483
Optimization on 2015-05-07 is done successfully
26313533 has no slack for charging load move!
Optimization in 26313533
26313861 has no slack for charging load move!
Optimization in 26313861
26314165 has no slack for charging load move!
Optimization in 26314165
26314453 has no slack for charging load move!
Optimization in 26314453
26315897 has no slack for charging load move!
Optimization in 26315897
26317719 has no slack for charging load move!
Optimization in 26317719
26318483 has no slack for charging load move!
Optimization in 26318483
Optimization in 26332309
Optimization in 26338893
Optimization in 26344151
26348121 has no slack for charging load move!
Optimization in 26348121
Optimization in 26349709
Optimization in 26350697
Optimization in 26355517
Optimization in 26355597
Optimization in 26355653
26355711 has no slack for charging load move!
Optimization in 26355711
Optimization in 26356463
Optimization in 26357583
Optimization in 26358003
Optimization in 26359327
Optimization in 26360899
Optimization on 2015-05-08 is done successfully
26355517 has no slack for charging load move!
Optimization in 26355517
Optimization in 26355597
26357583 has no slack for charging load move!
Optimization in 26357583
Optimization in 26358003
26359327 has no slack for charging load move!
Optimization in 26359327
26360899 has no slack for charging load move!
Optimization in 26360899
Optimization on 2015-05-09 is done successfully
26355517 has no slack for charging load move!
Optimization in 26355517
Optimization in 26355597
26357583 has no slack for charging load move!
Optimization in 26357583
Optimization in 26358003
26359327 has no slack for charging load move!
Optimization in 26359327
26360899 has no slack for charging load move!
Optimization in 26360899
Optimization on 2015-05-10 is done successfully
26355517 has no slack for charging load move!
Optimization in 26355517
Optimization in 26355597
26357583 has no slack for charging load move!
Optimization in 26357583
Optimization in 26358003
26359327 has no slack for charging load move!
Optimization in 26359327
Optimization in 26360899
Optimization in 26409079
Optimization in 26415001
Optimization in 26417257
26421509 has no slack for charging load move!
Optimization in 26421509
Optimization in 26426461
Optimization in 26426757
26428289 has no slack for charging load move!
Optimization in 26428289
Optimization in 26432815
Optimization in 26436505
Optimization in 26439831
Optimization in 26439963
The solution is suboptimal
Optimization in 26440315
Optimization on 2015-05-11 is done successfully
26357583 has no slack for charging load move!
Optimization in 26357583
Optimization in 26436505
26439963 has no slack for charging load move!
Optimization in 26439963
26440315 has no slack for charging load move!
Optimization in 26440315
Optimization in 26453501
The solution is suboptimal
Optimization in 26454483
The solution is suboptimal
Optimization in 26457189
The solution is suboptimal
26459099 has no slack for charging load move!
Optimization in 26459099
The solution is suboptimal
Optimization in 26459707
Optimization in 26460401
The solution is suboptimal
26461251 has no slack for charging load move!
Optimization in 26461251
The solution is suboptimal
Optimization in 26463579
26469191 has no slack for charging load move!
Optimization in 26469191
26469239 has no slack for charging load move!
Optimization in 26469239
26471297 has no slack for charging load move!
Optimization in 26471297
26471321 has no slack for charging load move!
Optimization in 26471321
26472481 has no slack for charging load move!
Optimization in 26472481
Optimization in 26474553
Optimization in 26477127
Optimization in 26477419
Optimization in 26480341
Optimization in 26480383
Optimization in 26480445
Optimization in 26480757
Optimization in 26483583
Optimization on 2015-05-12 is done successfully
26480341 has no slack for charging load move!
Optimization in 26480341
26480383 has no slack for charging load move!
Optimization in 26480383
26480445 has no slack for charging load move!
Optimization in 26480445
26480757 has no slack for charging load move!
Optimization in 26480757
26483583 has no slack for charging load move!
Optimization in 26483583
Optimization in 26496705
Optimization in 26504887
Optimization in 26505655
The solution is suboptimal
Optimization in 26505679
26509639 has no slack for charging load move!
Optimization in 26509639
Optimization in 26511871
26512341 has no slack for charging load move!
Optimization in 26512341
Optimization in 26532113
26521951 has no slack for charging load move!
Optimization in 26521951
Optimization in 26522207
Optimization in 26522951
Optimization in 26524479
Optimization in 26532163
Optimization in 26532109
Optimization in 26532129
Optimization in 26532227
Optimization in 26532123
Optimization on 2015-05-13 is done successfully
Optimization in 26522207
26522951 has no slack for charging load move!
Optimization in 26522951
26524479 has no slack for charging load move!
Optimization in 26524479
26532109 has no slack for charging load move!
Optimization in 26532109
26532129 has no slack for charging load move!
Optimization in 26532129
26532123 has no slack for charging load move!
Optimization in 26532123
Optimization in 26539751
Optimization in 26545557
Optimization in 26548201
Optimization in 26548465
26559161 has no slack for charging load move!
Optimization in 26559161
Optimization in 26562397
Optimization in 26563847
26566803 has no slack for charging load move!
Optimization in 26566803
Optimization in 26567997
Optimization in 26570661
Optimization on 2015-05-14 is done successfully
Optimization in 26563847
26567997 has no slack for charging load move!
Optimization in 26567997
26570661 has no slack for charging load move!
Optimization in 26570661
26584995 has no slack for charging load move!
Optimization in 26584995
Optimization in 26586871
Optimization in 26588291
26589749 has no slack for charging load move!
Optimization in 26589749
Optimization in 26595279
26598737 has no slack for charging load move!
Optimization in 26598737
26602547 has no slack for charging load move!
Optimization in 26602547
Optimization in 26602629
26605767 has no slack for charging load move!
Optimization in 26605767
Optimization in 26769235
Optimization in 26769581
Optimization on 2015-05-15 is done successfully
26769235 has no slack for charging load move!
Optimization in 26769235
Optimization in 26769445
Optimization in 26769581
Optimization on 2015-05-16 is done successfully
26769235 has no slack for charging load move!
Optimization in 26769235
Optimization in 26769445
Optimization in 26769581
26645883 has no slack for charging load move!
Optimization in 26645883
Optimization on 2015-05-17 is done successfully
26769235 has no slack for charging load move!
Optimization in 26769235
26769445 has no slack for charging load move!
Optimization in 26769445
26769581 has no slack for charging load move!
Optimization in 26769581
Optimization in 26662125
26769797 has no slack for charging load move!
Optimization in 26769797
Optimization in 26666793
Optimization in 26667619
The solution is suboptimal
Optimization in 26668107
26769791 has no slack for charging load move!
Optimization in 26769791
Optimization in 26770117
26770115 has no slack for charging load move!
Optimization in 26770115
Optimization in 26680669
Optimization in 26769621
Optimization in 26685625
26687049 has no slack for charging load move!
Optimization in 26687049
26687095 has no slack for charging load move!
Optimization in 26687095
Optimization in 26770447
Optimization on 2015-05-18 is done successfully
Optimization in 26680669
26685625 has no slack for charging load move!
Optimization in 26685625
26770447 has no slack for charging load move!
Optimization in 26770447
Optimization in 26703701
Optimization in 26706895
The solution is suboptimal
Optimization in 26769971
The solution is suboptimal
Optimization in 26709393
26770769 has no slack for charging load move!
Optimization in 26770769
26770445 has no slack for charging load move!
Optimization in 26770445
26711009 has no slack for charging load move!
Optimization in 26711009
Optimization in 26769929
Optimization in 26771105
Optimization in 26770767
Optimization in 26770297
Optimization in 26771101
Optimization in 26771365
Optimization in 26770271
26771913 has no slack for charging load move!
Optimization in 26771913
Optimization in 26729035
Optimization in 26729871
Optimization in 26770569
Optimization in 26731133
Optimization in 26770617
Optimization in 26772265
Optimization on 2015-05-19 is done successfully
Optimization in 26729035
26729871 has no slack for charging load move!
Optimization in 26729871
26731133 has no slack for charging load move!
Optimization in 26731133
26770617 has no slack for charging load move!
Optimization in 26770617
26772265 has no slack for charging load move!
Optimization in 26772265
Optimization in 26745421
26747641 has no slack for charging load move!
Optimization in 26747641
The solution is suboptimal
Optimization in 26749689
26749881 has no slack for charging load move!
Optimization in 26749881
26751479 has no slack for charging load move!
Optimization in 26751479
Optimization in 26770951
26771369 has no slack for charging load move!
Optimization in 26771369
26772559 has no slack for charging load move!
Optimization in 26772559
Optimization in 26772827
26770925 has no slack for charging load move!
Optimization in 26770925
Optimization in 26769227
Optimization in 26769199
Optimization in 26769245
26771581 has no slack for charging load move!
Optimization in 26771581
Optimization in 26771615
Optimization in 26769439
Optimization in 26772089
Optimization in 26772143
26773719 has no slack for charging load move!
Optimization in 26773719
Optimization in 26773845
Optimization on 2015-05-20 is done successfully
Optimization in 26769199
26771615 has no slack for charging load move!
Optimization in 26771615
Optimization in 26772089
26772143 has no slack for charging load move!
Optimization in 26772143
26773845 has no slack for charging load move!
Optimization in 26773845
26790439 has no slack for charging load move!
Optimization in 26790439
Optimization in 26792751
26795611 has no slack for charging load move!
Optimization in 26795611
26797009 has no slack for charging load move!
Optimization in 26797009
Optimization in 26797047
Optimization in 26799167
Optimization in 26801459
Optimization in 26802319
Optimization in 26805725
26807737 has no slack for charging load move!
Optimization in 26807737
Optimization in 26808171
26810451 has no slack for charging load move!
Optimization in 26810451
Optimization in 26811993
Optimization in 26813081
Optimization in 26813519
Optimization in 26813533
Optimization in 26814549
Optimization in 26814703
Optimization in 26816733
Optimization in 26816773
Optimization on 2015-05-21 is done successfully
26813081 has no slack for charging load move!
Optimization in 26813081
26813519 has no slack for charging load move!
Optimization in 26813519
Optimization in 26814549
26816733 has no slack for charging load move!
Optimization in 26816733
26816773 has no slack for charging load move!
Optimization in 26816773
26826443 has no slack for charging load move!
Optimization in 26826443
Optimization in 26826473
Optimization in 26829435
Optimization in 26832811
The solution is suboptimal
Optimization in 26835487
26835835 has no slack for charging load move!
Optimization in 26835835
Optimization in 26840975
Optimization in 26843341
Optimization in 26846089
26848155 has no slack for charging load move!
Optimization in 26848155
Optimization in 26853583
Optimization in 26853987
Optimization on 2015-05-22 is done successfully
Optimization in 26843341
26846089 has no slack for charging load move!
Optimization in 26846089
Optimization in 26853583
26853987 has no slack for charging load move!
Optimization in 26853987
Optimization on 2015-05-23 is done successfully
Optimization in 26843341
26846089 has no slack for charging load move!
Optimization in 26846089
Optimization in 26853583
26853987 has no slack for charging load move!
Optimization in 26853987
26888561 has no slack for charging load move!
Optimization in 26888561
Optimization on 2015-05-24 is done successfully
Optimization in 26843341
26846089 has no slack for charging load move!
Optimization in 26846089
Optimization in 26853583
26853987 has no slack for charging load move!
Optimization in 26853987
Optimization on 2015-05-25 is done successfully
Optimization in 26843341
Optimization in 26846089
Optimization in 26853583
26853987 has no slack for charging load move!
Optimization in 26853987
26947879 has no slack for charging load move!
Optimization in 26947879
Optimization in 26926119
Optimization in 26930267
26947663 has no slack for charging load move!
Optimization in 26947663
Optimization in 26947733
Optimization in 26931995
Optimization in 26932723
The solution is suboptimal
Optimization in 26933067
The solution is suboptimal
Optimization in 26948115
26948433 has no slack for charging load move!
Optimization in 26948433
Optimization in 26949219
Optimization on 2015-05-26 is done successfully
Optimization in 26843341
26853583 has no slack for charging load move!
Optimization in 26853583
26949219 has no slack for charging load move!
Optimization in 26949219
Optimization in 26967255
27007203 has no slack for charging load move!
Optimization in 27007203
Optimization in 26971523
Optimization in 26972305
27007219 has no slack for charging load move!
Optimization in 27007219
27007359 has no slack for charging load move!
Optimization in 27007359
27007707 has no slack for charging load move!
Optimization in 27007707
Optimization in 27007889
Optimization in 27008203
Optimization in 27008721
Optimization in 27008349
26988641 has no slack for charging load move!
Optimization in 26988641
Optimization in 26991523
Optimization in 27007221
Optimization in 27007123
Optimization in 27007205
Optimization in 27007593
Optimization on 2015-05-27 is done successfully
Optimization in 26843341
26991523 has no slack for charging load move!
Optimization in 26991523
27007221 has no slack for charging load move!
Optimization in 27007221
27007123 has no slack for charging load move!
Optimization in 27007123
27007205 has no slack for charging load move!
Optimization in 27007205
Optimization in 27009309
27014173 has no slack for charging load move!
Optimization in 27014173
27014685 has no slack for charging load move!
Optimization in 27014685
Optimization in 27015967
Optimization in 27016989
Optimization in 27017897
Optimization in 27020865
Optimization in 27021999
Optimization in 27023473
27026841 has no slack for charging load move!
Optimization in 27026841
Optimization in 27030721
Optimization in 27031633
Optimization in 27032959
Optimization in 27036425
27036509 has no slack for charging load move!
Optimization in 27036509
Optimization in 27037019
Optimization in 27038395
Optimization in 27039235
27039641 has no slack for charging load move!
Optimization in 27039641
Optimization in 27040749
Optimization in 27040779
Optimization on 2015-05-28 is done successfully
Optimization in 26843341
27037019 has no slack for charging load move!
Optimization in 27037019
27038395 has no slack for charging load move!
Optimization in 27038395
27039235 has no slack for charging load move!
Optimization in 27039235
27040749 has no slack for charging load move!
Optimization in 27040749
27040779 has no slack for charging load move!
Optimization in 27040779
Optimization in 27059827
Optimization in 27060445
Optimization in 27061299
Optimization on 2015-05-29 is done successfully
Optimization in 26843341
27039235 has no slack for charging load move!
Optimization in 27039235
Optimization on 2015-05-30 is done successfully
Optimization in 26843341
27039235 has no slack for charging load move!
Optimization in 27039235
27119753 has no slack for charging load move!
Optimization in 27119753
Optimization on 2015-05-31 is done successfully
Optimization in 27138499
Optimization in 27140225
Optimization in 27140869
The solution is suboptimal
Optimization in 27143403
The solution is suboptimal
Optimization in 27143599
27161771 has no slack for charging load move!
Optimization in 27161771
27162013 has no slack for charging load move!
Optimization in 27162013
Optimization in 27161561
27161829 has no slack for charging load move!
Optimization in 27161829
Optimization in 27162533
Optimization in 27162991
27164163 has no slack for charging load move!
Optimization in 27164163
Optimization in 27164641
Optimization in 27164949
Optimization in 27165595
Optimization in 27167099
Optimization on 2015-06-01 is done successfully
27162991 has no slack for charging load move!
Optimization in 27162991
27164641 has no slack for charging load move!
Optimization in 27164641
27164949 has no slack for charging load move!
Optimization in 27164949
27165595 has no slack for charging load move!
Optimization in 27165595
27167099 has no slack for charging load move!
Optimization in 27167099
Optimization in 27182583
Optimization in 27186589
Optimization in 27187661
The solution is suboptimal
27198103 has no slack for charging load move!
Optimization in 27198103
Optimization in 27188763
Optimization in 27194877
Optimization in 27198945
Optimization in 27199755
Optimization in 27199785
27203797 has no slack for charging load move!
Optimization in 27203797
Optimization in 27204821
Optimization in 27204839
Optimization in 27207449
Optimization in 27207555
Optimization in 27213133
Optimization in 27211179
Optimization on 2015-06-02 is done successfully
27204821 has no slack for charging load move!
Optimization in 27204821
27207449 has no slack for charging load move!
Optimization in 27207449
27213133 has no slack for charging load move!
Optimization in 27213133
27211179 has no slack for charging load move!
Optimization in 27211179
Optimization in 27228233
The solution is suboptimal
Optimization in 27233551
The solution is suboptimal
Optimization in 27234383
27234589 has no slack for charging load move!
Optimization in 27234589
27234805 has no slack for charging load move!
Optimization in 27234805
27238237 has no slack for charging load move!
Optimization in 27238237
Optimization in 27239917
27240959 has no slack for charging load move!
Optimization in 27240959
27244713 has no slack for charging load move!
Optimization in 27244713
Optimization in 27246281
Optimization in 27246317
27249775 has no slack for charging load move!
Optimization in 27249775
Optimization in 27251829
Optimization in 27252137
Optimization in 27254039
Optimization in 27254429
Optimization in 27254625
Optimization in 27256237
Optimization in 27257267
27259119 has no slack for charging load move!
Optimization in 27259119
Optimization in 27259131
Optimization on 2015-06-03 is done successfully
27251829 has no slack for charging load move!
Optimization in 27251829
27254429 has no slack for charging load move!
Optimization in 27254429
Optimization in 27254625
27256237 has no slack for charging load move!
Optimization in 27256237
27257267 has no slack for charging load move!
Optimization in 27257267
27259131 has no slack for charging load move!
Optimization in 27259131
Optimization in 27273193
Optimization in 27280797
Optimization in 27281539
Optimization in 27281789
27286239 has no slack for charging load move!
Optimization in 27286239
27288065 has no slack for charging load move!
Optimization in 27288065
27289575 has no slack for charging load move!
Optimization in 27289575
Optimization in 27290551
27290683 has no slack for charging load move!
Optimization in 27290683
Optimization in 27291221
Optimization in 27293457
Optimization in 27294673
Optimization in 27295041
Optimization in 27296299
Optimization in 27297717
Optimization in 27299963
Optimization in 27300103
Optimization in 27300703
Optimization in 27302063
Optimization in 27304405
Optimization in 27305387
Optimization on 2015-06-04 is done successfully
27297717 has no slack for charging load move!
Optimization in 27297717
27299963 has no slack for charging load move!
Optimization in 27299963
Optimization in 27302063
27304405 has no slack for charging load move!
Optimization in 27304405
27305387 has no slack for charging load move!
Optimization in 27305387
Optimization in 27316987
27318475 has no slack for charging load move!
Optimization in 27318475
27331607 has no slack for charging load move!
Optimization in 27331607
27331919 has no slack for charging load move!
Optimization in 27331919
27332931 has no slack for charging load move!
Optimization in 27332931
27333075 has no slack for charging load move!
Optimization in 27333075
27334123 has no slack for charging load move!
Optimization in 27334123
Optimization in 27343843
27345861 has no slack for charging load move!
Optimization in 27345861
27346889 has no slack for charging load move!
Optimization in 27346889
Optimization in 27347289
Optimization in 27347321
Optimization in 27347345
Optimization in 27347367
Optimization in 27347385
Optimization in 27348979
Optimization in 27350295
Optimization on 2015-06-05 is done successfully
27347289 has no slack for charging load move!
Optimization in 27347289
Optimization in 27347345
Optimization in 27347367
Optimization in 27347385
27348979 has no slack for charging load move!
Optimization in 27348979
Optimization in 27350295
Optimization on 2015-06-06 is done successfully
27347289 has no slack for charging load move!
Optimization in 27347289
Optimization in 27347345
Optimization in 27347367
Optimization in 27347385
27348979 has no slack for charging load move!
Optimization in 27348979
Optimization in 27350295
Optimization on 2015-06-07 is done successfully
27347289 has no slack for charging load move!
Optimization in 27347289
27347345 has no slack for charging load move!
Optimization in 27347345
27347367 has no slack for charging load move!
Optimization in 27347367
Optimization in 27347385
27348979 has no slack for charging load move!
Optimization in 27348979
27350295 has no slack for charging load move!
Optimization in 27350295
Optimization in 27402799
Optimization in 27409727
Optimization in 27410941
Optimization in 27411495
27412093 has no slack for charging load move!
Optimization in 27412093
Optimization in 27417353
Optimization in 27420079
Optimization in 27431797
Optimization in 27431939
Optimization in 27432021
Optimization in 27432499
Optimization in 27436005
Optimization on 2015-06-08 is done successfully
27417353 has no slack for charging load move!
Optimization in 27417353
27431939 has no slack for charging load move!
Optimization in 27431939
27432499 has no slack for charging load move!
Optimization in 27432499
27436005 has no slack for charging load move!
Optimization in 27436005
27450443 has no slack for charging load move!
Optimization in 27450443
Optimization in 27450503
Optimization in 27456321
Optimization in 27456693
Optimization in 27458359
27465985 has no slack for charging load move!
Optimization in 27465985
27467219 has no slack for charging load move!
Optimization in 27467219
27469237 has no slack for charging load move!
Optimization in 27469237
27474187 has no slack for charging load move!
Optimization in 27474187
27474881 has no slack for charging load move!
Optimization in 27474881
Optimization in 27475845
Optimization in 27476413
Optimization in 27477541
Optimization in 27477647
Optimization in 27477889
Optimization in 27478727
Optimization in 27480739
Optimization in 27480751
Optimization on 2015-06-09 is done successfully
27475845 has no slack for charging load move!
Optimization in 27475845
27476413 has no slack for charging load move!
Optimization in 27476413
27477541 has no slack for charging load move!
Optimization in 27477541
27477647 has no slack for charging load move!
Optimization in 27477647
27477889 has no slack for charging load move!
Optimization in 27477889
27480739 has no slack for charging load move!
Optimization in 27480739
27480751 has no slack for charging load move!
Optimization in 27480751
Optimization in 27490963
Optimization in 27501473
Optimization in 27508453
Optimization in 27511569
27514721 has no slack for charging load move!
Optimization in 27514721
27514847 has no slack for charging load move!
Optimization in 27514847
Optimization in 27517905
Optimization in 27518309
Optimization in 27518355
Optimization in 27521551
Optimization in 27522193
Optimization in 27522387
Optimization in 27522945
The solution is suboptimal
Optimization in 27524629
Optimization on 2015-06-10 is done successfully
27477541 has no slack for charging load move!
Optimization in 27477541
27521551 has no slack for charging load move!
Optimization in 27521551
27522193 has no slack for charging load move!
Optimization in 27522193
27522945 has no slack for charging load move!
Optimization in 27522945
27524629 has no slack for charging load move!
Optimization in 27524629
27538929 has no slack for charging load move!
Optimization in 27538929
Optimization in 27545459
Optimization in 27545697
Optimization in 27547015
Optimization in 27547711
Optimization in 27550119
Optimization in 27551543
Optimization in 27554807
27559021 has no slack for charging load move!
Optimization in 27559021
27562161 has no slack for charging load move!
Optimization in 27562161
Optimization in 27562411
Optimization in 27563509
Optimization in 27564577
Optimization in 27564629
Optimization in 27566135
Optimization in 27568517
Optimization on 2015-06-11 is done successfully
27522945 has no slack for charging load move!
Optimization in 27522945
27564577 has no slack for charging load move!
Optimization in 27564577
Optimization in 27566135
27568517 has no slack for charging load move!
Optimization in 27568517
27587167 has no slack for charging load move!
Optimization in 27587167
Optimization in 27588995
27595053 has no slack for charging load move!
Optimization in 27595053
Optimization in 27596727
27597555 has no slack for charging load move!
Optimization in 27597555
Optimization in 27597725
27602969 has no slack for charging load move!
Optimization in 27602969
27604833 has no slack for charging load move!
Optimization in 27604833
Optimization in 27605123
Optimization in 27607579
Optimization in 27608161
Optimization in 27609723
Optimization in 27609831
Optimization in 27610703
Optimization on 2015-06-12 is done successfully
Optimization in 27609723
27609831 has no slack for charging load move!
Optimization in 27609831
27610703 has no slack for charging load move!
Optimization in 27610703
Optimization on 2015-06-13 is done successfully
Optimization in 27609723
27609831 has no slack for charging load move!
Optimization in 27609831
27610703 has no slack for charging load move!
Optimization in 27610703
27649841 has no slack for charging load move!
Optimization in 27649841
Optimization on 2015-06-14 is done successfully
27609723 has no slack for charging load move!
Optimization in 27609723
27609831 has no slack for charging load move!
Optimization in 27609831
27610703 has no slack for charging load move!
Optimization in 27610703
Optimization in 27664427
27671143 has no slack for charging load move!
Optimization in 27671143
Optimization in 27672241
Optimization in 27672637
Optimization in 27679895
27680785 has no slack for charging load move!
Optimization in 27680785
Optimization in 27689477
27690985 has no slack for charging load move!
Optimization in 27690985
Optimization in 27693263
Optimization in 27694779
Optimization in 27697235
Optimization on 2015-06-15 is done successfully
27679895 has no slack for charging load move!
Optimization in 27679895
27689477 has no slack for charging load move!
Optimization in 27689477
27693263 has no slack for charging load move!
Optimization in 27693263
27694779 has no slack for charging load move!
Optimization in 27694779
27697235 has no slack for charging load move!
Optimization in 27697235
Optimization in 27713785
27715427 has no slack for charging load move!
Optimization in 27715427
Optimization in 27717993
Optimization in 27718839
The solution is suboptimal
Optimization in 27719953
27724331 has no slack for charging load move!
Optimization in 27724331
27725983 has no slack for charging load move!
Optimization in 27725983
Optimization in 27725809
Optimization in 27727075
Optimization in 27733411
Optimization in 27735885
27736985 has no slack for charging load move!
Optimization in 27736985
Optimization in 27737277
Optimization in 27737799
Optimization in 27738203
Optimization in 27738653
Optimization in 27739633
Optimization in 27739753
Optimization in 27740259
Optimization in 27740371
Optimization on 2015-06-16 is done successfully
27737799 has no slack for charging load move!
Optimization in 27737799
27738203 has no slack for charging load move!
Optimization in 27738203
27738653 has no slack for charging load move!
Optimization in 27738653
27739633 has no slack for charging load move!
Optimization in 27739633
27739753 has no slack for charging load move!
Optimization in 27739753
27740259 has no slack for charging load move!
Optimization in 27740259
27740371 has no slack for charging load move!
Optimization in 27740371
Optimization in 27755285
Optimization in 27763053
The solution is suboptimal
Optimization in 27764713
27767725 has no slack for charging load move!
Optimization in 27767725
27768505 has no slack for charging load move!
Optimization in 27768505
27769469 has no slack for charging load move!
Optimization in 27769469
27769835 has no slack for charging load move!
Optimization in 27769835
Optimization in 27770295
Optimization in 27773715
27773865 has no slack for charging load move!
Optimization in 27773865
Optimization in 27775279
Optimization in 27780079
Optimization in 27780349
27780489 has no slack for charging load move!
Optimization in 27780489
Optimization in 27782381
Optimization in 27785803
Optimization on 2015-06-17 is done successfully
27780079 has no slack for charging load move!
Optimization in 27780079
27782381 has no slack for charging load move!
Optimization in 27782381
27785803 has no slack for charging load move!
Optimization in 27785803
27801035 has no slack for charging load move!
Optimization in 27801035
Optimization in 27806377
Optimization in 27807523
Optimization in 27808665
Optimization in 27809059
Optimization in 27814827
27814825 has no slack for charging load move!
Optimization in 27814825
Optimization in 27818125
Optimization in 27823611
27823649 has no slack for charging load move!
Optimization in 27823649
Optimization in 27824799
Optimization in 27826801
Optimization in 27827575
Optimization in 27827793
Optimization in 27828325
Optimization in 27830637
Optimization in 27830989
Optimization on 2015-06-18 is done successfully
Optimization in 27827575
27827793 has no slack for charging load move!
Optimization in 27827793
27828325 has no slack for charging load move!
Optimization in 27828325
27830637 has no slack for charging load move!
Optimization in 27830637
Optimization in 27830989
Optimization in 27842295
Optimization in 27844957
Optimization in 27870771
27872529 has no slack for charging load move!
Optimization in 27872529
27873917 has no slack for charging load move!
Optimization in 27873917
Optimization on 2015-06-19 is done successfully
27830637 has no slack for charging load move!
Optimization in 27830637
Optimization in 27830989
27870771 has no slack for charging load move!
Optimization in 27870771
Optimization on 2015-06-20 is done successfully
27830637 has no slack for charging load move!
Optimization in 27830637
Optimization in 27830989
27870771 has no slack for charging load move!
Optimization in 27870771
Optimization in 27906851
27913301 has no slack for charging load move!
Optimization in 27913301
Optimization on 2015-06-21 is done successfully
27830637 has no slack for charging load move!
Optimization in 27830637
27830989 has no slack for charging load move!
Optimization in 27830989
27870771 has no slack for charging load move!
Optimization in 27870771
Optimization in 27929763
Optimization in 27936107
Optimization in 27936689
Optimization in 27942959
Optimization in 27943045
Optimization in 27944231
Optimization in 27958907
Optimization in 27958933
Optimization in 27959123
Optimization in 27959813
Optimization in 27959935
Optimization in 27962167
Optimization on 2015-06-22 is done successfully
27958907 has no slack for charging load move!
Optimization in 27958907
27958933 has no slack for charging load move!
Optimization in 27958933
Optimization in 27959123
Optimization in 27962167
Optimization in 27976065
Optimization in 27976979
Optimization in 27982263
The solution is suboptimal
Optimization in 27982375
27984025 has no slack for charging load move!
Optimization in 27984025
27992237 has no slack for charging load move!
Optimization in 27992237
27995217 has no slack for charging load move!
Optimization in 27995217
27996415 has no slack for charging load move!
Optimization in 27996415
Optimization in 27998381
Optimization in 27999443
27999675 has no slack for charging load move!
Optimization in 27999675
28000409 has no slack for charging load move!
Optimization in 28000409
28001267 has no slack for charging load move!
Optimization in 28001267
Optimization in 28001661
Optimization in 28002169
28002373 has no slack for charging load move!
Optimization in 28002373
Optimization in 28005383
Optimization in 28006205
Optimization on 2015-06-23 is done successfully
28001661 has no slack for charging load move!
Optimization in 28001661
28002169 has no slack for charging load move!
Optimization in 28002169
28005383 has no slack for charging load move!
Optimization in 28005383
28006205 has no slack for charging load move!
Optimization in 28006205
Optimization in 28021775
Optimization in 28029283
Optimization in 28029369
Optimization in 28032645
Optimization in 28035747
28037993 has no slack for charging load move!
Optimization in 28037993
28042175 has no slack for charging load move!
Optimization in 28042175
28042773 has no slack for charging load move!
Optimization in 28042773
Optimization in 28043065
28046381 has no slack for charging load move!
Optimization in 28046381
28047843 has no slack for charging load move!
Optimization in 28047843
Optimization in 28049749
Optimization in 28049903
Optimization in 28051013
Optimization in 28053057
Optimization on 2015-06-24 is done successfully
28049749 has no slack for charging load move!
Optimization in 28049749
28049903 has no slack for charging load move!
Optimization in 28049903
28051013 has no slack for charging load move!
Optimization in 28051013
28053057 has no slack for charging load move!
Optimization in 28053057
Optimization in 28074263
The solution is suboptimal
Optimization in 28074635
The solution is suboptimal
Optimization in 28074849
The solution is suboptimal
Optimization in 28075373
28079599 has no slack for charging load move!
Optimization in 28079599
28083841 has no slack for charging load move!
Optimization in 28083841
Optimization in 28084055
Optimization in 28084241
Optimization in 28084553
Optimization in 28087955
Optimization in 28089051
Optimization in 28091885
28092001 has no slack for charging load move!
Optimization in 28092001
Optimization in 28094741
Optimization in 28095025
Optimization in 28095407
Optimization in 28095415
Optimization in 28095619
Optimization in 28095999
Optimization in 28097785
Optimization on 2015-06-25 is done successfully
Optimization in 28094741
28095025 has no slack for charging load move!
Optimization in 28095025
28095407 has no slack for charging load move!
Optimization in 28095407
28095415 has no slack for charging load move!
Optimization in 28095415
28095619 has no slack for charging load move!
Optimization in 28095619
28097785 has no slack for charging load move!
Optimization in 28097785
Optimization in 28111677
28117093 has no slack for charging load move!
Optimization in 28117093
Optimization in 28117353
Optimization in 28118001
Optimization in 28130977
28131755 has no slack for charging load move!
Optimization in 28131755
28132469 has no slack for charging load move!
Optimization in 28132469
Optimization in 28135641
Optimization in 28137863
Optimization in 28139479
Optimization in 28139733
Optimization in 28141157
Optimization in 28141537
Optimization in 28142827
Optimization on 2015-06-26 is done successfully
Optimization in 28094741
28135641 has no slack for charging load move!
Optimization in 28135641
28139479 has no slack for charging load move!
Optimization in 28139479
Optimization in 28141157
Optimization in 28141537
28142827 has no slack for charging load move!
Optimization in 28142827
Optimization on 2015-06-27 is done successfully
Optimization in 28094741
28135641 has no slack for charging load move!
Optimization in 28135641
28139479 has no slack for charging load move!
Optimization in 28139479
Optimization in 28141157
Optimization in 28141537
28142827 has no slack for charging load move!
Optimization in 28142827
Optimization in 28172823
Optimization on 2015-06-28 is done successfully
Optimization in 28094741
28135641 has no slack for charging load move!
Optimization in 28135641
Optimization in 28139479
28141157 has no slack for charging load move!
Optimization in 28141157
28141537 has no slack for charging load move!
Optimization in 28141537
28142827 has no slack for charging load move!
Optimization in 28142827
28206079 has no slack for charging load move!
Optimization in 28206079
28206185 has no slack for charging load move!
Optimization in 28206185
28206613 has no slack for charging load move!
Optimization in 28206613
Optimization in 28208155
Optimization in 28209243
Optimization in 28210135
Optimization in 28216165
Optimization in 28217995
Optimization in 28220757
Optimization in 28221145
28221935 has no slack for charging load move!
Optimization in 28221935
Optimization in 28223543
Optimization in 28223577
Optimization in 28223779
Optimization in 28224989
Optimization on 2015-06-29 is done successfully
28217995 has no slack for charging load move!
Optimization in 28217995
28221145 has no slack for charging load move!
Optimization in 28221145
28223577 has no slack for charging load move!
Optimization in 28223577
Optimization in 28223779
28224989 has no slack for charging load move!
Optimization in 28224989
Optimization in 28239981
28245139 has no slack for charging load move!
Optimization in 28245139
Optimization in 28247285
Optimization in 28248149
28252091 has no slack for charging load move!
Optimization in 28252091
Optimization in 28254419
Optimization in 28261891
28262007 has no slack for charging load move!
Optimization in 28262007
28265733 has no slack for charging load move!
Optimization in 28265733
Optimization in 28266145
Optimization in 28266363
Optimization in 28268613
Optimization in 28268811
Optimization in 28269317
Optimization in 28269479
Optimization on 2015-06-30 is done successfully
28286217 has no slack for charging load move!
Optimization in 28286217
Optimization in 28290433
Optimization in 28291631
28292231 has no slack for charging load move!
Optimization in 28292231
28300243 has no slack for charging load move!
Optimization in 28300243
Optimization in 28303101
Optimization in 28305097
28305377 has no slack for charging load move!
Optimization in 28305377
Optimization in 28305691
Optimization in 28307763
Optimization in 28310781
Optimization in 28312453
Optimization on 2015-07-01 is done successfully
28303101 has no slack for charging load move!
Optimization in 28303101
28307763 has no slack for charging load move!
Optimization in 28307763
Optimization in 28312453
28332795 has no slack for charging load move!
Optimization in 28332795
Optimization in 28334691
Optimization in 28342411
Optimization in 28346023
Optimization in 28349337
Optimization in 28349533
Optimization in 28349669
Optimization in 28349691
28349725 has no slack for charging load move!
Optimization in 28349725
28349769 has no slack for charging load move!
Optimization in 28349769
Optimization in 28350651
Optimization in 28350721
Optimization in 28352181
Optimization in 28354485
Optimization on 2015-07-02 is done successfully
28349533 has no slack for charging load move!
Optimization in 28349533
Optimization in 28350651
28350721 has no slack for charging load move!
Optimization in 28350721
Optimization in 28352181
Optimization on 2015-07-03 is done successfully
28349533 has no slack for charging load move!
Optimization in 28349533
Optimization in 28350651
28350721 has no slack for charging load move!
Optimization in 28350721
Optimization in 28352181
Optimization on 2015-07-04 is done successfully
28349533 has no slack for charging load move!
Optimization in 28349533
Optimization in 28350651
28350721 has no slack for charging load move!
Optimization in 28350721
28352181 has no slack for charging load move!
Optimization in 28352181
Optimization on 2015-07-05 is done successfully
28349533 has no slack for charging load move!
Optimization in 28349533
28350651 has no slack for charging load move!
Optimization in 28350651
28350721 has no slack for charging load move!
Optimization in 28350721
28352181 has no slack for charging load move!
Optimization in 28352181
Optimization in 28422625
28424839 has no slack for charging load move!
Optimization in 28424839
Optimization in 28426617
The solution is suboptimal
Optimization in 28429011
Optimization in 28448159
Optimization in 28448629
Optimization in 28448965
Optimization in 28449743
Optimization on 2015-07-06 is done successfully
28350721 has no slack for charging load move!
Optimization in 28350721
28448629 has no slack for charging load move!
Optimization in 28448629
28448965 has no slack for charging load move!
Optimization in 28448965
28449743 has no slack for charging load move!
Optimization in 28449743
Optimization in 28466691
Optimization in 28469671
Optimization in 28486589
Optimization in 28487411
28492239 has no slack for charging load move!
Optimization in 28492239
Optimization in 28493263
Optimization in 28495025
Optimization on 2015-07-07 is done successfully
Optimization in 28448965
Optimization in 28486589
28493263 has no slack for charging load move!
Optimization in 28493263
28495025 has no slack for charging load move!
Optimization in 28495025
Optimization in 28508083
28510715 has no slack for charging load move!
Optimization in 28510715
Optimization in 28511907
Optimization in 28513923
28514471 has no slack for charging load move!
Optimization in 28514471
Optimization in 28516177
28522885 has no slack for charging load move!
Optimization in 28522885
28524447 has no slack for charging load move!
Optimization in 28524447
28526307 has no slack for charging load move!
Optimization in 28526307
28527055 has no slack for charging load move!
Optimization in 28527055
Optimization in 28532363
Optimization in 28532383
Optimization in 28532403
Optimization in 28535097
Optimization in 28535773
Optimization in 28537255
28537755 has no slack for charging load move!
Optimization in 28537755
28538147 has no slack for charging load move!
Optimization in 28538147
Optimization in 28540159
Optimization in 28540185
Optimization in 28540229
Optimization on 2015-07-08 is done successfully
28535773 has no slack for charging load move!
Optimization in 28535773
28537255 has no slack for charging load move!
Optimization in 28537255
28540159 has no slack for charging load move!
Optimization in 28540159
28540185 has no slack for charging load move!
Optimization in 28540185
28540229 has no slack for charging load move!
Optimization in 28540229
Optimization in 28554557
Optimization in 28560343
28562887 has no slack for charging load move!
Optimization in 28562887
Optimization in 28564541
28564735 has no slack for charging load move!
Optimization in 28564735
Optimization in 28567577
Optimization in 28569701
Optimization in 28571675
Optimization in 28577393
Optimization in 28579777
Optimization in 28580029
Optimization in 28582163
Optimization in 28582583
Optimization in 28583363
Optimization in 28583627
Optimization on 2015-07-09 is done successfully
28577393 has no slack for charging load move!
Optimization in 28577393
28579777 has no slack for charging load move!
Optimization in 28579777
28580029 has no slack for charging load move!
Optimization in 28580029
28582163 has no slack for charging load move!
Optimization in 28582163
Optimization in 28582583
Optimization in 28583363
28583627 has no slack for charging load move!
Optimization in 28583627
Optimization in 28598319
Optimization in 28603397
Optimization in 28607417
28617531 has no slack for charging load move!
Optimization in 28617531
Optimization in 28618111
Optimization in 28619799
Optimization in 28622275
Optimization in 28623675
Optimization in 28626715
Optimization in 28628761
Optimization in 28628803
Optimization on 2015-07-10 is done successfully
Optimization in 28618111
Optimization in 28619799
28623675 has no slack for charging load move!
Optimization in 28623675
28626715 has no slack for charging load move!
Optimization in 28626715
28628761 has no slack for charging load move!
Optimization in 28628761
Optimization in 28628803
Optimization on 2015-07-11 is done successfully
Optimization in 28618111
Optimization in 28619799
28623675 has no slack for charging load move!
Optimization in 28623675
28626715 has no slack for charging load move!
Optimization in 28626715
28628761 has no slack for charging load move!
Optimization in 28628761
Optimization in 28628803
Optimization on 2015-07-12 is done successfully
Optimization in 28618111
28619799 has no slack for charging load move!
Optimization in 28619799
28623675 has no slack for charging load move!
Optimization in 28623675
Optimization in 28626715
28628761 has no slack for charging load move!
Optimization in 28628761
28628803 has no slack for charging load move!
Optimization in 28628803
Optimization in 28686069
28690315 has no slack for charging load move!
Optimization in 28690315
Optimization in 28691759
28693555 has no slack for charging load move!
Optimization in 28693555
28696683 has no slack for charging load move!
Optimization in 28696683
28699579 has no slack for charging load move!
Optimization in 28699579
Optimization in 28699621
Optimization in 28699867
28701329 has no slack for charging load move!
Optimization in 28701329
28701987 has no slack for charging load move!
Optimization in 28701987
Optimization in 28704939
Optimization in 28705215
Optimization in 28713075
Optimization in 28713451
Optimization in 28714199
Optimization in 28717207
Optimization on 2015-07-13 is done successfully
28713075 has no slack for charging load move!
Optimization in 28713075
28713451 has no slack for charging load move!
Optimization in 28713451
28714199 has no slack for charging load move!
Optimization in 28714199
Optimization in 28734119
28735987 has no slack for charging load move!
Optimization in 28735987
Optimization in 28737767
Optimization in 28737977
28739979 has no slack for charging load move!
Optimization in 28739979
Optimization in 28745243
Optimization in 28747865
28748247 has no slack for charging load move!
Optimization in 28748247
Optimization in 28748583
28751401 has no slack for charging load move!
Optimization in 28751401
28757389 has no slack for charging load move!
Optimization in 28757389
Optimization in 28758945
Optimization in 28760033
Optimization in 28761365
Optimization in 28762233
Optimization on 2015-07-14 is done successfully
Optimization in 28745243
28748583 has no slack for charging load move!
Optimization in 28748583
28760033 has no slack for charging load move!
Optimization in 28760033
28761365 has no slack for charging load move!
Optimization in 28761365
28762233 has no slack for charging load move!
Optimization in 28762233
28777705 has no slack for charging load move!
Optimization in 28777705
Optimization in 28781969
Optimization in 28783507
28788015 has no slack for charging load move!
Optimization in 28788015
28796025 has no slack for charging load move!
Optimization in 28796025
Optimization in 28796201
Optimization in 28799189
Optimization in 28799209
Optimization in 28802555
28805043 has no slack for charging load move!
Optimization in 28805043
Optimization in 28805131
Optimization in 28806071
Optimization on 2015-07-15 is done successfully
28799189 has no slack for charging load move!
Optimization in 28799189
28799209 has no slack for charging load move!
Optimization in 28799209
28802555 has no slack for charging load move!
Optimization in 28802555
28805131 has no slack for charging load move!
Optimization in 28805131
28806071 has no slack for charging load move!
Optimization in 28806071
28821519 has no slack for charging load move!
Optimization in 28821519
Optimization in 28823973
Optimization in 28824341
Optimization in 28828947
Optimization in 28829815
Optimization in 28832003
28832657 has no slack for charging load move!
Optimization in 28832657
Optimization in 28833225
Optimization in 28833905
Optimization in 28837619
Optimization in 28837703
28844281 has no slack for charging load move!
Optimization in 28844281
Optimization in 28844575
28844961 has no slack for charging load move!
Optimization in 28844961
Optimization in 28845675
Optimization in 28849961
Optimization in 28850385
Optimization in 28854237
Optimization in 28855111
Optimization on 2015-07-16 is done successfully
28837703 has no slack for charging load move!
Optimization in 28837703
Optimization in 28845675
28849961 has no slack for charging load move!
Optimization in 28849961
28850385 has no slack for charging load move!
Optimization in 28850385
28854237 has no slack for charging load move!
Optimization in 28854237
28855111 has no slack for charging load move!
Optimization in 28855111
Optimization in 28867163
Optimization in 28867215
Optimization in 28867333
Optimization in 28873583
The solution is suboptimal
Optimization in 28874899
The solution is suboptimal
Optimization in 28874927
28880823 has no slack for charging load move!
Optimization in 28880823
Optimization in 28893019
Optimization in 28893573
Optimization in 28893831
Optimization in 28894271
Optimization in 28894603
28895311 has no slack for charging load move!
Optimization in 28895311
Optimization in 28896215
Optimization in 28898713
Optimization in 28899075
Optimization on 2015-07-17 is done successfully
28893831 has no slack for charging load move!
Optimization in 28893831
28894271 has no slack for charging load move!
Optimization in 28894271
Optimization in 28894603
28896215 has no slack for charging load move!
Optimization in 28896215
28898713 has no slack for charging load move!
Optimization in 28898713
Optimization in 28899075
Optimization on 2015-07-18 is done successfully
28893831 has no slack for charging load move!
Optimization in 28893831
28894271 has no slack for charging load move!
Optimization in 28894271
Optimization in 28894603
28896215 has no slack for charging load move!
Optimization in 28896215
28898713 has no slack for charging load move!
Optimization in 28898713
Optimization in 28899075
Optimization on 2015-07-19 is done successfully
28893831 has no slack for charging load move!
Optimization in 28893831
Optimization in 28894271
Optimization in 28894603
28896215 has no slack for charging load move!
Optimization in 28896215
28898713 has no slack for charging load move!
Optimization in 28898713
28899075 has no slack for charging load move!
Optimization in 28899075
28952355 has no slack for charging load move!
Optimization in 28952355
Optimization in 28953713
28955947 has no slack for charging load move!
Optimization in 28955947
Optimization in 28960665
Optimization in 28960697
Optimization in 28961279
Optimization in 28970199
Optimization in 28976919
Optimization in 28979553
28979685 has no slack for charging load move!
Optimization in 28979685
Optimization in 28981975
Optimization in 28982243
Optimization in 28982463
Optimization in 28982561
Optimization in 28984395
Optimization on 2015-07-20 is done successfully
28970199 has no slack for charging load move!
Optimization in 28970199
28979553 has no slack for charging load move!
Optimization in 28979553
28981975 has no slack for charging load move!
Optimization in 28981975
28982243 has no slack for charging load move!
Optimization in 28982243
28982463 has no slack for charging load move!
Optimization in 28982463
28984395 has no slack for charging load move!
Optimization in 28984395
Optimization in 29001373
Optimization in 29002083
Optimization in 29006811
Optimization in 29006833
Optimization in 29011417
29013527 has no slack for charging load move!
Optimization in 29013527
29016309 has no slack for charging load move!
Optimization in 29016309
29016399 has no slack for charging load move!
Optimization in 29016399
Optimization in 29021045
Optimization in 29021233
Optimization in 29022497
Optimization in 29023903
Optimization in 29025511
Optimization in 29026099
Optimization in 29027575
Optimization in 29028189
Optimization in 29028319
Optimization in 29029439
Optimization in 29029633
Optimization on 2015-07-21 is done successfully
29021045 has no slack for charging load move!
Optimization in 29021045
29021233 has no slack for charging load move!
Optimization in 29021233
29025511 has no slack for charging load move!
Optimization in 29025511
29026099 has no slack for charging load move!
Optimization in 29026099
29027575 has no slack for charging load move!
Optimization in 29027575
29028189 has no slack for charging load move!
Optimization in 29028189
29028319 has no slack for charging load move!
Optimization in 29028319
29029633 has no slack for charging load move!
Optimization in 29029633
29047089 has no slack for charging load move!
Optimization in 29047089
Optimization in 29049315
29049429 has no slack for charging load move!
Optimization in 29049429
Optimization in 29057869
29061929 has no slack for charging load move!
Optimization in 29061929
29063283 has no slack for charging load move!
Optimization in 29063283
Optimization in 29063751
Optimization in 29067105
Optimization in 29067245
29068837 has no slack for charging load move!
Optimization in 29068837
Optimization in 29070885
Optimization in 29073093
Optimization in 29074277
Optimization in 29074555
Optimization in 29074869
Optimization in 29075707
Optimization in 29075811
Optimization in 29076733
Optimization on 2015-07-22 is done successfully
29028319 has no slack for charging load move!
Optimization in 29028319
29070885 has no slack for charging load move!
Optimization in 29070885
29073093 has no slack for charging load move!
Optimization in 29073093
29074277 has no slack for charging load move!
Optimization in 29074277
29074555 has no slack for charging load move!
Optimization in 29074555
29074869 has no slack for charging load move!
Optimization in 29074869
29075707 has no slack for charging load move!
Optimization in 29075707
29075811 has no slack for charging load move!
Optimization in 29075811
Optimization in 29076733
Optimization in 29092417
Optimization in 29095581
29096525 has no slack for charging load move!
Optimization in 29096525
Optimization in 29096895
Optimization in 29097427
Optimization in 29097575
Optimization in 29099341
29099943 has no slack for charging load move!
Optimization in 29099943
Optimization in 29100555
29104991 has no slack for charging load move!
Optimization in 29104991
Optimization in 29107901
29111189 has no slack for charging load move!
Optimization in 29111189
Optimization in 29111847
29119457 has no slack for charging load move!
Optimization in 29119457
Optimization in 29120667
29120807 has no slack for charging load move!
Optimization in 29120807
Optimization on 2015-07-23 is done successfully
29120667 has no slack for charging load move!
Optimization in 29120667
29134191 has no slack for charging load move!
Optimization in 29134191
29138915 has no slack for charging load move!
Optimization in 29138915
Optimization in 29140035
Optimization in 29141633
Optimization in 29142211
29142525 has no slack for charging load move!
Optimization in 29142525
The solution is suboptimal
Optimization in 29144287
The solution is suboptimal
Optimization in 29144435
Optimization in 29147515
29149291 has no slack for charging load move!
Optimization in 29149291
Optimization in 29155183
Optimization in 29156567
Optimization in 29158169
Optimization in 29162535
Optimization in 29163197
Optimization in 29163423
29165403 has no slack for charging load move!
Optimization in 29165403
Optimization on 2015-07-24 is done successfully
29147515 has no slack for charging load move!
Optimization in 29147515
Optimization in 29155183
29156567 has no slack for charging load move!
Optimization in 29156567
Optimization in 29158169
29162535 has no slack for charging load move!
Optimization in 29162535
29163423 has no slack for charging load move!
Optimization in 29163423
Optimization on 2015-07-25 is done successfully
29147515 has no slack for charging load move!
Optimization in 29147515
Optimization in 29155183
29156567 has no slack for charging load move!
Optimization in 29156567
The solution is suboptimal
Optimization in 29158169
The solution is suboptimal
29162535 has no slack for charging load move!
Optimization in 29162535
The solution is suboptimal
29163423 has no slack for charging load move!
Optimization in 29163423
29202825 has no slack for charging load move!
Optimization in 29202825
Optimization on 2015-07-26 is done successfully
29147515 has no slack for charging load move!
Optimization in 29147515
29155183 has no slack for charging load move!
Optimization in 29155183
29156567 has no slack for charging load move!
Optimization in 29156567
29158169 has no slack for charging load move!
Optimization in 29158169
29162535 has no slack for charging load move!
Optimization in 29162535
29163423 has no slack for charging load move!
Optimization in 29163423
29231941 has no slack for charging load move!
Optimization in 29231941
29232147 has no slack for charging load move!
Optimization in 29232147
Optimization in 29218647
Optimization in 29218897
Optimization in 29222055
Optimization in 29231515
Optimization in 29228123
Optimization in 29231381
29241235 has no slack for charging load move!
Optimization in 29241235
29241501 has no slack for charging load move!
Optimization in 29241501
29241857 has no slack for charging load move!
Optimization in 29241857
29243891 has no slack for charging load move!
Optimization in 29243891
Optimization in 29244167
29245511 has no slack for charging load move!
Optimization in 29245511
29245687 has no slack for charging load move!
Optimization in 29245687
Optimization in 29245783
Optimization in 29247579
Optimization in 29247905
Optimization in 29248505
Optimization in 29248605
Optimization in 29249655
Optimization on 2015-07-27 is done successfully
29244167 has no slack for charging load move!
Optimization in 29244167
29245783 has no slack for charging load move!
Optimization in 29245783
29247579 has no slack for charging load move!
Optimization in 29247579
29247905 has no slack for charging load move!
Optimization in 29247905
29248505 has no slack for charging load move!
Optimization in 29248505
29248605 has no slack for charging load move!
Optimization in 29248605
29249655 has no slack for charging load move!
Optimization in 29249655
29266131 has no slack for charging load move!
Optimization in 29266131
29267847 has no slack for charging load move!
Optimization in 29267847
Optimization in 29270725
Optimization in 29271083
Optimization in 29271643
Optimization in 29273623
Optimization in 29279291
29282211 has no slack for charging load move!
Optimization in 29282211
29283005 has no slack for charging load move!
Optimization in 29283005
29283169 has no slack for charging load move!
Optimization in 29283169
Optimization in 29287227
29287257 has no slack for charging load move!
Optimization in 29287257
29289197 has no slack for charging load move!
Optimization in 29289197
Optimization in 29289653
Optimization in 29290981
Optimization in 29291005
29293029 has no slack for charging load move!
Optimization in 29293029
Optimization in 29294379
Optimization in 29295119
Optimization in 29296383
Optimization in 29297757
Optimization on 2015-07-28 is done successfully
29247905 has no slack for charging load move!
Optimization in 29247905
29291005 has no slack for charging load move!
Optimization in 29291005
Optimization in 29294379
29295119 has no slack for charging load move!
Optimization in 29295119
29297757 has no slack for charging load move!
Optimization in 29297757
Optimization in 29311775
29312911 has no slack for charging load move!
Optimization in 29312911
Optimization in 29317909
Optimization in 29318081
29320235 has no slack for charging load move!
Optimization in 29320235
Optimization in 29320273
Optimization in 29321369
Optimization in 29325977
29326325 has no slack for charging load move!
Optimization in 29326325
Optimization in 29327317
29327423 has no slack for charging load move!
Optimization in 29327423
Optimization in 29330091
29330487 has no slack for charging load move!
Optimization in 29330487
Optimization in 29335157
29335185 has no slack for charging load move!
Optimization in 29335185
29336053 has no slack for charging load move!
Optimization in 29336053
29336565 has no slack for charging load move!
Optimization in 29336565
Optimization in 29337117
Optimization in 29337923
29339273 has no slack for charging load move!
Optimization in 29339273
Optimization in 29339333
Optimization in 29342557
Optimization in 29343257
Optimization in 29343787
Optimization in 29343819
Optimization in 29344691
Optimization in 29345053
Optimization on 2015-07-29 is done successfully
29337117 has no slack for charging load move!
Optimization in 29337117
29339333 has no slack for charging load move!
Optimization in 29339333
29342557 has no slack for charging load move!
Optimization in 29342557
29343787 has no slack for charging load move!
Optimization in 29343787
29343819 has no slack for charging load move!
Optimization in 29343819
29344691 has no slack for charging load move!
Optimization in 29344691
29345053 has no slack for charging load move!
Optimization in 29345053
Optimization in 29360375
Optimization in 29361161
29364881 has no slack for charging load move!
Optimization in 29364881
29368179 has no slack for charging load move!
Optimization in 29368179
Optimization in 29369299
Optimization in 29370747
Optimization in 29370991
Optimization in 29371123
Optimization in 29372051
Optimization in 29376451
29379669 has no slack for charging load move!
Optimization in 29379669
29381465 has no slack for charging load move!
Optimization in 29381465
Optimization in 29383165
Optimization in 29383819
Optimization in 29387095
Optimization in 29389153
Optimization in 29389159
Optimization in 29389435
Optimization in 29389683
Optimization in 29389899
Optimization in 29390307
Optimization in 29392499
Optimization on 2015-07-30 is done successfully
29383819 has no slack for charging load move!
Optimization in 29383819
29387095 has no slack for charging load move!
Optimization in 29387095
29389153 has no slack for charging load move!
Optimization in 29389153
29389159 has no slack for charging load move!
Optimization in 29389159
29389435 has no slack for charging load move!
Optimization in 29389435
29389899 has no slack for charging load move!
Optimization in 29389899
Optimization in 29410393
Optimization in 29411725
Optimization in 29412617
Optimization in 29413101
Optimization in 29423619
Optimization in 29423939
29427547 has no slack for charging load move!
Optimization in 29427547
29429865 has no slack for charging load move!
Optimization in 29429865
Optimization in 29432051
Optimization in 29432301
29434429 has no slack for charging load move!
Optimization in 29434429
Optimization on 2015-07-31 is done successfully
Optimization on 2015-08-01 is done successfully
29477365 has no slack for charging load move!
Optimization in 29477365
Optimization on 2015-08-02 is done successfully
Optimization in 29494753
Optimization in 29500711
Optimization in 29501449
Optimization in 29504087
Optimization in 29570539
29515639 has no slack for charging load move!
Optimization in 29515639
Optimization in 29570843
Optimization on 2015-08-03 is done successfully
29570539 has no slack for charging load move!
Optimization in 29570539
Optimization in 29540921
29543963 has no slack for charging load move!
Optimization in 29543963
Optimization in 29544177
Optimization in 29549181
29550827 has no slack for charging load move!
Optimization in 29550827
Optimization in 29571189
Optimization in 29570343
Optimization in 29570491
29567165 has no slack for charging load move!
Optimization in 29567165
Optimization in 29567989
Optimization in 29568853
Optimization in 29569167
Optimization in 29569555
Optimization in 29570467
Optimization in 29570349
Optimization in 29571089
Optimization on 2015-08-04 is done successfully
Optimization in 29570491
29567989 has no slack for charging load move!
Optimization in 29567989
29568853 has no slack for charging load move!
Optimization in 29568853
29569167 has no slack for charging load move!
Optimization in 29569167
29569555 has no slack for charging load move!
Optimization in 29569555
29570467 has no slack for charging load move!
Optimization in 29570467
29571089 has no slack for charging load move!
Optimization in 29571089
Optimization in 29593227
Optimization in 29596351
29603351 has no slack for charging load move!
Optimization in 29603351
29607157 has no slack for charging load move!
Optimization in 29607157
29609589 has no slack for charging load move!
Optimization in 29609589
Optimization in 29613059
Optimization in 29613913
Optimization in 29613925
Optimization in 29616077
Optimization in 29616725
Optimization in 29616747
Optimization in 29617585
Optimization in 29618173
Optimization in 29619347
29619395 has no slack for charging load move!
Optimization in 29619395
Optimization in 29619633
Optimization in 29619817
The solution is suboptimal
Optimization in 29620855
Optimization on 2015-08-05 is done successfully
29613925 has no slack for charging load move!
Optimization in 29613925
29616077 has no slack for charging load move!
Optimization in 29616077
29617585 has no slack for charging load move!
Optimization in 29617585
29618173 has no slack for charging load move!
Optimization in 29618173
29619347 has no slack for charging load move!
Optimization in 29619347
29619633 has no slack for charging load move!
Optimization in 29619633
29619817 has no slack for charging load move!
Optimization in 29619817
Optimization in 29636163
Optimization in 29636945
Optimization in 29642575
Optimization in 29643685
Optimization in 29643857
29644395 has no slack for charging load move!
Optimization in 29644395
29646353 has no slack for charging load move!
Optimization in 29646353
29646751 has no slack for charging load move!
Optimization in 29646751
29648763 has no slack for charging load move!
Optimization in 29648763
Optimization in 29652309
29654057 has no slack for charging load move!
Optimization in 29654057
Optimization in 29654237
Optimization in 29654823
Optimization in 29658029
Optimization in 29662067
Optimization in 29661863
Optimization in 29665383
Optimization in 29666477
29666737 has no slack for charging load move!
Optimization in 29666737
Optimization in 29666995
Optimization in 29668119
Optimization in 29668145
Optimization in 29668673
Optimization in 29668869
Optimization on 2015-08-06 is done successfully
29617585 has no slack for charging load move!
Optimization in 29617585
29661863 has no slack for charging load move!
Optimization in 29661863
29666477 has no slack for charging load move!
Optimization in 29666477
29666995 has no slack for charging load move!
Optimization in 29666995
29668119 has no slack for charging load move!
Optimization in 29668119
29668145 has no slack for charging load move!
Optimization in 29668145
29668673 has no slack for charging load move!
Optimization in 29668673
29668869 has no slack for charging load move!
Optimization in 29668869
Optimization in 29682373
Optimization in 29688833
The solution is suboptimal
Optimization in 29690855
Optimization in 29707379
Optimization in 29705915
Optimization in 29711177
Optimization in 29711189
29713197 has no slack for charging load move!
Optimization in 29713197
Optimization in 29714265
Optimization in 29714317
Optimization in 29715059
Optimization on 2015-08-07 is done successfully
Optimization in 29711177
29711189 has no slack for charging load move!
Optimization in 29711189
Optimization in 29714317
29715059 has no slack for charging load move!
Optimization in 29715059
Optimization on 2015-08-08 is done successfully
Optimization in 29711177
29711189 has no slack for charging load move!
Optimization in 29711189
Optimization in 29714317
29715059 has no slack for charging load move!
Optimization in 29715059
Optimization on 2015-08-09 is done successfully
29711189 has no slack for charging load move!
Optimization in 29711189
29714317 has no slack for charging load move!
Optimization in 29714317
29715059 has no slack for charging load move!
Optimization in 29715059
29778711 has no slack for charging load move!
Optimization in 29778711
Optimization in 29781959
Optimization in 29787419
Optimization in 29789243
Optimization in 29789881
Optimization in 29804711
Optimization in 29807485
Optimization in 29810401
Optimization in 29811645
Optimization in 29813245
Optimization on 2015-08-10 is done successfully
29807485 has no slack for charging load move!
Optimization in 29807485
29810401 has no slack for charging load move!
Optimization in 29810401
29813245 has no slack for charging load move!
Optimization in 29813245
29813519 has no slack for charging load move!
Optimization in 29813519
29832535 has no slack for charging load move!
Optimization in 29832535
Optimization in 29835177
Optimization in 29837137
Optimization in 29837659
The solution is suboptimal
Optimization in 29841769
29844445 has no slack for charging load move!
Optimization in 29844445
Optimization in 29844571
29849239 has no slack for charging load move!
Optimization in 29849239
Optimization in 29853511
Optimization in 29857027
Optimization in 29857283
Optimization in 29857771
Optimization in 29859085
Optimization in 29860039
Optimization in 29860487
29861759 has no slack for charging load move!
Optimization in 29861759
Optimization in 29863975
Optimization in 29866617
29866631 has no slack for charging load move!
Optimization in 29866631
Optimization on 2015-08-11 is done successfully
29857283 has no slack for charging load move!
Optimization in 29857283
29857771 has no slack for charging load move!
Optimization in 29857771
29860039 has no slack for charging load move!
Optimization in 29860039
29860487 has no slack for charging load move!
Optimization in 29860487
Optimization in 29863975
29866617 has no slack for charging load move!
Optimization in 29866617
Optimization in 29885349
Optimization in 29890609
The solution is suboptimal
Optimization in 29890651
The solution is suboptimal
Optimization in 29891135
Optimization in 29898445
Optimization in 29898681
29900439 has no slack for charging load move!
Optimization in 29900439
29906481 has no slack for charging load move!
Optimization in 29906481
Optimization in 29908315
Optimization in 29909463
Optimization in 29913523
Optimization in 29913535
Optimization in 29917829
Optimization in 29917851
Optimization in 29914145
Optimization in 29917809
29917833 has no slack for charging load move!
Optimization in 29917833
Optimization on 2015-08-12 is done successfully
29913535 has no slack for charging load move!
Optimization in 29913535
29917829 has no slack for charging load move!
Optimization in 29917829
29917851 has no slack for charging load move!
Optimization in 29917851
29914145 has no slack for charging load move!
Optimization in 29914145
29917809 has no slack for charging load move!
Optimization in 29917809
Optimization in 29935357
Optimization in 29939499
Optimization in 29940831
29948147 has no slack for charging load move!
Optimization in 29948147
29953977 has no slack for charging load move!
Optimization in 29953977
Optimization in 29956029
Optimization in 29958815
Optimization in 29963447
Optimization in 29963933
Optimization in 29964337
Optimization in 29966297
Optimization in 29967319
Optimization in 29967655
Optimization in 29968899
Optimization in 29969061
Optimization in 29970171
Optimization on 2015-08-13 is done successfully
29914145 has no slack for charging load move!
Optimization in 29914145
29963933 has no slack for charging load move!
Optimization in 29963933
29964337 has no slack for charging load move!
Optimization in 29964337
Optimization in 29966297
29967655 has no slack for charging load move!
Optimization in 29967655
29968899 has no slack for charging load move!
Optimization in 29968899
29969061 has no slack for charging load move!
Optimization in 29969061
29970171 has no slack for charging load move!
Optimization in 29970171
Optimization in 29990393
Optimization in 29990877
Optimization in 29991655
Optimization in 29997713
29999271 has no slack for charging load move!
Optimization in 29999271
30001817 has no slack for charging load move!
Optimization in 30001817
Optimization in 30004259
Optimization in 30006835
30013789 has no slack for charging load move!
Optimization in 30013789
Optimization in 30014529
Optimization in 30015691
Optimization in 30015711
Optimization in 30015739
Optimization in 30017475
Optimization on 2015-08-14 is done successfully
30014529 has no slack for charging load move!
Optimization in 30014529
30015691 has no slack for charging load move!
Optimization in 30015691
30015711 has no slack for charging load move!
Optimization in 30015711
30015739 has no slack for charging load move!
Optimization in 30015739
Optimization in 30017475
Optimization on 2015-08-15 is done successfully
30014529 has no slack for charging load move!
Optimization in 30014529
30015691 has no slack for charging load move!
Optimization in 30015691
30015711 has no slack for charging load move!
Optimization in 30015711
30015739 has no slack for charging load move!
Optimization in 30015739
Optimization in 30017475
30062927 has no slack for charging load move!
Optimization in 30062927
Optimization on 2015-08-16 is done successfully
30014529 has no slack for charging load move!
Optimization in 30014529
30015691 has no slack for charging load move!
Optimization in 30015691
30015711 has no slack for charging load move!
Optimization in 30015711
30015739 has no slack for charging load move!
Optimization in 30015739
30017475 has no slack for charging load move!
Optimization in 30017475
30084227 has no slack for charging load move!
Optimization in 30084227
Optimization in 30086517
Optimization in 30086549
Optimization in 30087945
Optimization in 30090501
Optimization in 30093411
Optimization in 30098639
30106213 has no slack for charging load move!
Optimization in 30106213
30107409 has no slack for charging load move!
Optimization in 30107409
Optimization in 30108569
Optimization in 30113357
Optimization in 30114313
Optimization in 30114317
Optimization in 30114771
Optimization in 30115715
Optimization in 30115797
Optimization on 2015-08-17 is done successfully
30108569 has no slack for charging load move!
Optimization in 30108569
30113357 has no slack for charging load move!
Optimization in 30113357
30114313 has no slack for charging load move!
Optimization in 30114313
30114317 has no slack for charging load move!
Optimization in 30114317
30114771 has no slack for charging load move!
Optimization in 30114771
30115715 has no slack for charging load move!
Optimization in 30115715
Optimization in 30135041
Optimization in 30140327
Optimization in 30140541
Optimization in 30141923
Optimization in 30142707
Optimization in 30148961
30149799 has no slack for charging load move!
Optimization in 30149799
30149681 has no slack for charging load move!
Optimization in 30149681
Optimization in 30154685
Optimization in 30154943
Optimization in 30159195
Optimization in 30159467
30159917 has no slack for charging load move!
Optimization in 30159917
Optimization in 30164189
Optimization in 30164483
Optimization in 30165267
Optimization in 30165329
Optimization in 30165491
Optimization in 30165559
Optimization on 2015-08-18 is done successfully
30159195 has no slack for charging load move!
Optimization in 30159195
30164189 has no slack for charging load move!
Optimization in 30164189
30165329 has no slack for charging load move!
Optimization in 30165329
30165491 has no slack for charging load move!
Optimization in 30165491
30165559 has no slack for charging load move!
Optimization in 30165559
Optimization in 30189887
30237083 has no slack for charging load move!
Optimization in 30237083
Optimization in 30237021
30201159 has no slack for charging load move!
Optimization in 30201159
30236381 has no slack for charging load move!
Optimization in 30236381
30238035 has no slack for charging load move!
Optimization in 30238035
Optimization in 30237331
Optimization in 30239059
30237941 has no slack for charging load move!
Optimization in 30237941
Optimization in 30211937
Optimization in 30235709
Optimization in 30235543
Optimization in 30215799
Optimization in 30217265
Optimization in 30235699
Optimization in 30235763
Optimization on 2015-08-19 is done successfully
30159195 has no slack for charging load move!
Optimization in 30159195
30211937 has no slack for charging load move!
Optimization in 30211937
Optimization in 30235709
30235543 has no slack for charging load move!
Optimization in 30235543
30215799 has no slack for charging load move!
Optimization in 30215799
30217265 has no slack for charging load move!
Optimization in 30217265
Optimization in 30235699
30235763 has no slack for charging load move!
Optimization in 30235763
Optimization in 30239229
Optimization in 30240775
Optimization in 30243881
30247923 has no slack for charging load move!
Optimization in 30247923
30253219 has no slack for charging load move!
Optimization in 30253219
30253785 has no slack for charging load move!
Optimization in 30253785
Optimization in 30254961
30256745 has no slack for charging load move!
Optimization in 30256745
Optimization in 30257655
30260455 has no slack for charging load move!
Optimization in 30260455
Optimization in 30260473
Optimization in 30260685
Optimization in 30261073
30263359 has no slack for charging load move!
Optimization in 30263359
Optimization in 30265311
30268993 has no slack for charging load move!
Optimization in 30268993
Optimization in 30269161
Optimization on 2015-08-20 is done successfully
30159195 has no slack for charging load move!
Optimization in 30159195
30260473 has no slack for charging load move!
Optimization in 30260473
30260685 has no slack for charging load move!
Optimization in 30260685
30265311 has no slack for charging load move!
Optimization in 30265311
Optimization in 30286199
Optimization in 30289155
Optimization in 30291293
Optimization in 30300493
Optimization in 30312949
Optimization in 30313901
Optimization in 30315385
Optimization in 30315805
Optimization in 30315919
Optimization on 2015-08-21 is done successfully
30312949 has no slack for charging load move!
Optimization in 30312949
Optimization in 30313901
30315805 has no slack for charging load move!
Optimization in 30315805
Optimization in 30315919
Optimization on 2015-08-22 is done successfully
30312949 has no slack for charging load move!
Optimization in 30312949
Optimization in 30313901
30315805 has no slack for charging load move!
Optimization in 30315805
Optimization in 30315919
Optimization on 2015-08-23 is done successfully
30312949 has no slack for charging load move!
Optimization in 30312949
Optimization in 30313901
Optimization in 30315805
30315919 has no slack for charging load move!
Optimization in 30315919
Optimization in 31047985
31049031 has no slack for charging load move!
Optimization in 31049031
31049667 has no slack for charging load move!
Optimization in 31049667
Optimization in 30415365
Optimization in 30416487
Optimization in 30416635
Optimization on 2015-08-24 is done successfully
30313901 has no slack for charging load move!
Optimization in 30313901
31047985 has no slack for charging load move!
Optimization in 31047985
30415365 has no slack for charging load move!
Optimization in 30415365
Optimization in 30416487
30416635 has no slack for charging load move!
Optimization in 30416635
Optimization in 30440317
30441327 has no slack for charging load move!
Optimization in 30441327
Optimization in 30441337
30444293 has no slack for charging load move!
Optimization in 30444293
31048573 has no slack for charging load move!
Optimization in 31048573
Optimization in 31050717
Optimization in 31049121
30460093 has no slack for charging load move!
Optimization in 30460093
Optimization in 30461621
Optimization in 31048615
Optimization in 31051363
Optimization in 30466661
Optimization in 30467987
30471989 has no slack for charging load move!
Optimization in 30471989
Optimization on 2015-08-25 is done successfully
31051363 has no slack for charging load move!
Optimization in 31051363
31051925 has no slack for charging load move!
Optimization in 31051925
30466661 has no slack for charging load move!
Optimization in 30466661
30467987 has no slack for charging load move!
Optimization in 30467987
30486087 has no slack for charging load move!
Optimization in 30486087
Optimization in 31049145
Optimization in 30492381
30499875 has no slack for charging load move!
Optimization in 30499875
Optimization in 30500173
31052469 has no slack for charging load move!
Optimization in 31052469
31051945 has no slack for charging load move!
Optimization in 31051945
31049729 has no slack for charging load move!
Optimization in 31049729
30507797 has no slack for charging load move!
Optimization in 30507797
31052969 has no slack for charging load move!
Optimization in 31052969
30511285 has no slack for charging load move!
Optimization in 30511285
31053089 has no slack for charging load move!
Optimization in 31053089
Optimization in 31053525
30515333 has no slack for charging load move!
Optimization in 30515333
Optimization in 31050343
Optimization in 30517165
31049763 has no slack for charging load move!
Optimization in 31049763
Optimization in 30519611
Optimization in 31053617
Optimization on 2015-08-26 is done successfully
31053525 has no slack for charging load move!
Optimization in 31053525
31050343 has no slack for charging load move!
Optimization in 31050343
30517165 has no slack for charging load move!
Optimization in 30517165
Optimization in 30519611
Optimization in 31053617
Optimization in 30545923
Optimization in 30547735
Optimization in 30548853
31054137 has no slack for charging load move!
Optimization in 31054137
Optimization in 30554487
31050933 has no slack for charging load move!
Optimization in 31050933
31054021 has no slack for charging load move!
Optimization in 31054021
Optimization in 31054605
Optimization in 30563123
31051585 has no slack for charging load move!
Optimization in 31051585
Optimization in 31050957
Optimization in 31054507
Optimization in 31052167
Optimization in 30571579
Optimization in 31055079
31055039 has no slack for charging load move!
Optimization in 31055039
Optimization in 30573749
Optimization in 30573975
Optimization on 2015-08-27 is done successfully
31052167 has no slack for charging load move!
Optimization in 31052167
30571579 has no slack for charging load move!
Optimization in 30571579
31055079 has no slack for charging load move!
Optimization in 31055079
30573749 has no slack for charging load move!
Optimization in 30573749
30573975 has no slack for charging load move!
Optimization in 30573975
Optimization in 30598587
31055583 has no slack for charging load move!
Optimization in 31055583
Optimization in 31056077
30618469 has no slack for charging load move!
Optimization in 30618469
Optimization in 31055551
Optimization in 31056525
Optimization in 31051611
31052681 has no slack for charging load move!
Optimization in 31052681
Optimization in 30623349
Optimization in 31056037
Optimization on 2015-08-28 is done successfully
31056525 has no slack for charging load move!
Optimization in 31056525
31051611 has no slack for charging load move!
Optimization in 31051611
30623349 has no slack for charging load move!
Optimization in 30623349
Optimization on 2015-08-29 is done successfully
31056525 has no slack for charging load move!
Optimization in 31056525
31051611 has no slack for charging load move!
Optimization in 31051611
30623349 has no slack for charging load move!
Optimization in 30623349
Optimization on 2015-08-30 is done successfully
31056525 has no slack for charging load move!
Optimization in 31056525
31051611 has no slack for charging load move!
Optimization in 31051611
Optimization in 30623349
Optimization in 30698307
Optimization in 30700191
30700463 has no slack for charging load move!
Optimization in 30700463
Optimization in 31056983
Optimization in 31056483
Optimization in 31053211
30718193 has no slack for charging load move!
Optimization in 30718193
Optimization in 30726179
Optimization in 30726177
Optimization in 31053707
Optimization in 31057473
Optimization in 30726191
31058017 has no slack for charging load move!
Optimization in 31058017
Optimization on 2015-08-31 is done successfully
Optimization in 31057963
Optimization in 30749485
31058477 has no slack for charging load move!
Optimization in 31058477
Optimization in 30751805
The solution is suboptimal
Optimization in 30753259
30753789 has no slack for charging load move!
Optimization in 30753789
Optimization in 30754741
Optimization in 31054237
31058919 has no slack for charging load move!
Optimization in 31058919
30769773 has no slack for charging load move!
Optimization in 30769773
Optimization in 31052701
Optimization in 31059391
Optimization in 30775173
Optimization in 30775861
Optimization in 31054707
Optimization in 31058419
30781443 has no slack for charging load move!
Optimization in 30781443
Optimization on 2015-09-01 is done successfully
31052701 has no slack for charging load move!
Optimization in 31052701
31059391 has no slack for charging load move!
Optimization in 31059391
30775173 has no slack for charging load move!
Optimization in 30775173
30775861 has no slack for charging load move!
Optimization in 30775861
31054707 has no slack for charging load move!
Optimization in 31054707
31058419 has no slack for charging load move!
Optimization in 31058419
Optimization in 30806609
Optimization in 30808631
Optimization in 30809257
Optimization in 30813169
Optimization in 31055215
Optimization in 31058895
31059359 has no slack for charging load move!
Optimization in 31059359
Optimization in 31060289
31053497 has no slack for charging load move!
Optimization in 31053497
Optimization in 30831303
30831721 has no slack for charging load move!
Optimization in 30831721
Optimization in 31059821
Optimization in 30833879
Optimization in 30835153
31055657 has no slack for charging load move!
Optimization in 31055657
Optimization in 31053989
Optimization in 31060267
Optimization on 2015-09-02 is done successfully
31060289 has no slack for charging load move!
Optimization in 31060289
30831303 has no slack for charging load move!
Optimization in 30831303
30833879 has no slack for charging load move!
Optimization in 30833879
30835153 has no slack for charging load move!
Optimization in 30835153
31053989 has no slack for charging load move!
Optimization in 31053989
31060267 has no slack for charging load move!
Optimization in 31060267
Optimization in 30862823
31060679 has no slack for charging load move!
Optimization in 31060679
31060719 has no slack for charging load move!
Optimization in 31060719
Optimization in 31061115
31054479 has no slack for charging load move!
Optimization in 31054479
31054951 has no slack for charging load move!
Optimization in 31054951
31061499 has no slack for charging load move!
Optimization in 31061499
Optimization in 31061833
31055457 has no slack for charging load move!
Optimization in 31055457
Optimization in 31056173
Optimization in 31061081
31062255 has no slack for charging load move!
Optimization in 31062255
30883929 has no slack for charging load move!
Optimization in 30883929
Optimization in 31055915
Optimization in 30887479
Optimization in 31062585
Optimization in 31061465
Optimization in 30889131
Optimization in 30889331
Optimization on 2015-09-03 is done successfully
30835153 has no slack for charging load move!
Optimization in 30835153
Optimization in 31056173
31055915 has no slack for charging load move!
Optimization in 31055915
31061465 has no slack for charging load move!
Optimization in 31061465
30889131 has no slack for charging load move!
Optimization in 30889131
30889331 has no slack for charging load move!
Optimization in 30889331
Optimization in 30912265
Optimization in 30912501
Optimization in 31056799
31062971 has no slack for charging load move!
Optimization in 31062971
Optimization in 30922285
31056401 has no slack for charging load move!
Optimization in 31056401
Optimization in 31061793
Optimization in 31063319
Optimization in 31056851
Optimization in 31047949
Optimization in 30939657
31057343 has no slack for charging load move!
Optimization in 31057343
Optimization on 2015-09-04 is done successfully
31047949 has no slack for charging load move!
Optimization in 31047949
Optimization in 30939657
Optimization on 2015-09-05 is done successfully
31047949 has no slack for charging load move!
Optimization in 31047949
Optimization in 30939657
Optimization on 2015-09-06 is done successfully
31047949 has no slack for charging load move!
Optimization in 31047949
Optimization in 30939657
31008563 has no slack for charging load move!
Optimization in 31008563
Optimization on 2015-09-07 is done successfully
31047949 has no slack for charging load move!
Optimization in 31047949
30939657 has no slack for charging load move!
Optimization in 30939657
Optimization in 31028399
Optimization in 31034819
Optimization in 31035683
Optimization in 31036399
The solution is suboptimal
Optimization in 31037377
The solution is suboptimal
Optimization in 31038033
Optimization in 31048025
Optimization in 31047987
Optimization in 31048981
31050075 has no slack for charging load move!
Optimization in 31050075
31050335 has no slack for charging load move!
Optimization in 31050335
Optimization in 31052571
Optimization in 31052945
31054569 has no slack for charging load move!
Optimization in 31054569
Optimization in 31056359
Optimization in 31058987
Optimization in 31061461
31061507 has no slack for charging load move!
Optimization in 31061507
Optimization in 31063023
Optimization in 31064489
31064507 has no slack for charging load move!
Optimization in 31064507
Optimization in 31065971
Optimization on 2015-09-08 is done successfully
31056359 has no slack for charging load move!
Optimization in 31056359
31058987 has no slack for charging load move!
Optimization in 31058987
31061461 has no slack for charging load move!
Optimization in 31061461
31064489 has no slack for charging load move!
Optimization in 31064489
31065971 has no slack for charging load move!
Optimization in 31065971
31085899 has no slack for charging load move!
Optimization in 31085899
Optimization in 31087929
Optimization in 31088813
Optimization in 31089703
The solution is suboptimal
Optimization in 31091325
31095867 has no slack for charging load move!
Optimization in 31095867
Optimization in 31099999
Optimization in 31100663
Optimization in 31108737
31109711 has no slack for charging load move!
Optimization in 31109711
Optimization in 31112569
Optimization in 31113659
Optimization in 31115187
31115425 has no slack for charging load move!
Optimization in 31115425
Optimization in 31115979
Optimization in 31116221
Optimization in 31117803
31118231 has no slack for charging load move!
Optimization in 31118231
Optimization in 31118253
The solution is suboptimal
31118419 has no slack for charging load move!
Optimization in 31118419
Optimization on 2015-09-09 is done successfully
Optimization in 31113659
31115187 has no slack for charging load move!
Optimization in 31115187
Optimization in 31115979
31116221 has no slack for charging load move!
Optimization in 31116221
31117803 has no slack for charging load move!
Optimization in 31117803
31118253 has no slack for charging load move!
Optimization in 31118253
31141591 has no slack for charging load move!
Optimization in 31141591
Optimization in 31144435
Optimization in 31144877
31222229 has no slack for charging load move!
Optimization in 31222229
Optimization in 31222153
31158477 has no slack for charging load move!
Optimization in 31158477
Optimization in 31222653
Optimization in 31222131
Optimization in 31222573
Optimization in 31222031
Optimization in 31172979
Optimization in 31222967
Optimization on 2015-09-10 is done successfully
31115979 has no slack for charging load move!
Optimization in 31115979
31222031 has no slack for charging load move!
Optimization in 31222031
31172979 has no slack for charging load move!
Optimization in 31172979
Optimization in 31199035
Optimization in 31200205
Optimization in 31200855
31223327 has no slack for charging load move!
Optimization in 31223327
Optimization in 31222457
Optimization in 31221749
Optimization in 31221649
31223725 has no slack for charging load move!
Optimization in 31223725
Optimization in 31215183
Optimization in 31221863
Optimization in 31225737
Optimization in 31225865
31226811 has no slack for charging load move!
Optimization in 31226811
Optimization on 2015-09-11 is done successfully
31221749 has no slack for charging load move!
Optimization in 31221749
31221649 has no slack for charging load move!
Optimization in 31221649
Optimization in 31221863
Optimization in 31225737
Optimization in 31225865
Optimization on 2015-09-12 is done successfully
31221749 has no slack for charging load move!
Optimization in 31221749
31221649 has no slack for charging load move!
Optimization in 31221649
31221863 has no slack for charging load move!
Optimization in 31221863
Optimization in 31225737
Optimization in 31225865
Optimization in 31266745
Optimization in 31268709
Optimization in 31272793
31277257 has no slack for charging load move!
Optimization in 31277257
Optimization on 2015-09-13 is done successfully
31221749 has no slack for charging load move!
Optimization in 31221749
31221863 has no slack for charging load move!
Optimization in 31221863
31225737 has no slack for charging load move!
Optimization in 31225737
31225865 has no slack for charging load move!
Optimization in 31225865
31272793 has no slack for charging load move!
Optimization in 31272793
Optimization in 31299863
31303191 has no slack for charging load move!
Optimization in 31303191
Optimization in 31303585
Optimization in 31303831
31306391 has no slack for charging load move!
Optimization in 31306391
Optimization in 31306687
31314853 has no slack for charging load move!
Optimization in 31314853
Optimization in 31315195
31316015 has no slack for charging load move!
Optimization in 31316015
Optimization in 31323359
31328861 has no slack for charging load move!
Optimization in 31328861
31329007 has no slack for charging load move!
Optimization in 31329007
Optimization in 31330625
Optimization in 31330719
Optimization in 31332149
Optimization on 2015-09-14 is done successfully
31315195 has no slack for charging load move!
Optimization in 31315195
31330625 has no slack for charging load move!
Optimization in 31330625
31330719 has no slack for charging load move!
Optimization in 31330719
31332149 has no slack for charging load move!
Optimization in 31332149
Optimization in 31353421
31354235 has no slack for charging load move!
Optimization in 31354235
Optimization in 31358593
Optimization in 31360601
31366099 has no slack for charging load move!
Optimization in 31366099
31366997 has no slack for charging load move!
Optimization in 31366997
31373677 has no slack for charging load move!
Optimization in 31373677
Optimization in 31378005
Optimization in 31378037
31379297 has no slack for charging load move!
Optimization in 31379297
Optimization in 31380089
Optimization in 31380787
31380957 has no slack for charging load move!
Optimization in 31380957
31382861 has no slack for charging load move!
Optimization in 31382861
Optimization in 31383519
31383691 has no slack for charging load move!
Optimization in 31383691
Optimization in 31384567
Optimization in 31387559
Optimization on 2015-09-15 is done successfully
31378005 has no slack for charging load move!
Optimization in 31378005
31380787 has no slack for charging load move!
Optimization in 31380787
31382861 has no slack for charging load move!
Optimization in 31382861
31383519 has no slack for charging load move!
Optimization in 31383519
31384567 has no slack for charging load move!
Optimization in 31384567
31387559 has no slack for charging load move!
Optimization in 31387559
31403303 has no slack for charging load move!
Optimization in 31403303
Optimization in 31406339
Optimization in 31407181
Optimization in 31409591
Optimization in 31411563
Optimization in 31412467
31419201 has no slack for charging load move!
Optimization in 31419201
Optimization in 31423879
Optimization in 31423907
Optimization in 31424081
31426269 has no slack for charging load move!
Optimization in 31426269
31431531 has no slack for charging load move!
Optimization in 31431531
Optimization in 31431917
31435995 has no slack for charging load move!
Optimization in 31435995
Optimization in 31436483
Optimization in 31437479
Optimization in 31438685
31439489 has no slack for charging load move!
Optimization in 31439489
31439535 has no slack for charging load move!
Optimization in 31439535
Optimization in 31441143
The solution is suboptimal
Optimization in 31441185
Optimization on 2015-09-16 is done successfully
31424081 has no slack for charging load move!
Optimization in 31424081
31436483 has no slack for charging load move!
Optimization in 31436483
31437479 has no slack for charging load move!
Optimization in 31437479
31438685 has no slack for charging load move!
Optimization in 31438685
Optimization in 31441143
31441185 has no slack for charging load move!
Optimization in 31441185
Optimization in 31465965
Optimization in 31468347
Optimization in 31473161
31474835 has no slack for charging load move!
Optimization in 31474835
Optimization in 31477257
Optimization in 31477311
Optimization in 31478673
Optimization in 31485259
Optimization in 31485395
31487121 has no slack for charging load move!
Optimization in 31487121
Optimization in 31491927
Optimization in 31493555
Optimization in 31494923
Optimization in 31495163
The solution is suboptimal
Optimization in 31497371
The solution is suboptimal
Optimization in 31497775
31525171 has no slack for charging load move!
Optimization in 31525171
Optimization on 2015-09-17 is done successfully
31477257 has no slack for charging load move!
Optimization in 31477257
31485395 has no slack for charging load move!
Optimization in 31485395
31493555 has no slack for charging load move!
Optimization in 31493555
31494923 has no slack for charging load move!
Optimization in 31494923
31525887 has no slack for charging load move!
Optimization in 31525887
31495163 has no slack for charging load move!
Optimization in 31495163
31497371 has no slack for charging load move!
Optimization in 31497371
31497775 has no slack for charging load move!
Optimization in 31497775
Optimization in 31524217
Optimization in 31523943
Optimization in 31526517
Optimization in 31526703
Optimization in 31527907
31533435 has no slack for charging load move!
Optimization in 31533435
Optimization in 31533561
31535013 has no slack for charging load move!
Optimization in 31535013
31537799 has no slack for charging load move!
Optimization in 31537799
Optimization in 31539163
31541113 has no slack for charging load move!
Optimization in 31541113
Optimization in 31541963
Optimization in 31542409
31544517 has no slack for charging load move!
Optimization in 31544517
Optimization in 31545299
Optimization in 31547833
Optimization in 31548667
31551433 has no slack for charging load move!
Optimization in 31551433
Optimization in 31552007
Optimization in 31552513
Optimization in 31552533
31552587 has no slack for charging load move!
Optimization in 31552587
Optimization on 2015-09-18 is done successfully
31545299 has no slack for charging load move!
Optimization in 31545299
31547833 has no slack for charging load move!
Optimization in 31547833
31548667 has no slack for charging load move!
Optimization in 31548667
31552007 has no slack for charging load move!
Optimization in 31552007
Optimization in 31552513
Optimization in 31552533
Optimization on 2015-09-19 is done successfully
31545299 has no slack for charging load move!
Optimization in 31545299
31547833 has no slack for charging load move!
Optimization in 31547833
31548667 has no slack for charging load move!
Optimization in 31548667
31552007 has no slack for charging load move!
Optimization in 31552007
Optimization in 31552513
Optimization in 31552533
31607463 has no slack for charging load move!
Optimization in 31607463
Optimization on 2015-09-20 is done successfully
31545299 has no slack for charging load move!
Optimization in 31545299
31547833 has no slack for charging load move!
Optimization in 31547833
31548667 has no slack for charging load move!
Optimization in 31548667
31552007 has no slack for charging load move!
Optimization in 31552007
31552513 has no slack for charging load move!
Optimization in 31552513
31552533 has no slack for charging load move!
Optimization in 31552533
31634405 has no slack for charging load move!
Optimization in 31634405
Optimization in 31641967
Optimization in 31645899
31649203 has no slack for charging load move!
Optimization in 31649203
Optimization in 31654631
31662145 has no slack for charging load move!
Optimization in 31662145
31663379 has no slack for charging load move!
Optimization in 31663379
31667715 has no slack for charging load move!
Optimization in 31667715
31669873 has no slack for charging load move!
Optimization in 31669873
Optimization in 31671945
Optimization in 31673657
Optimization in 31675069
Optimization in 31676207
31678313 has no slack for charging load move!
Optimization in 31678313
Optimization in 31678967
Optimization in 31679227
Optimization in 31680297
Optimization in 31680969
Optimization in 31681367
Optimization on 2015-09-21 is done successfully
31675069 has no slack for charging load move!
Optimization in 31675069
31676207 has no slack for charging load move!
Optimization in 31676207
31678967 has no slack for charging load move!
Optimization in 31678967
31679227 has no slack for charging load move!
Optimization in 31679227
31680297 has no slack for charging load move!
Optimization in 31680297
Optimization in 31680969
31681367 has no slack for charging load move!
Optimization in 31681367
Optimization in 31702607
Optimization in 31708975
Optimization in 31710751
Optimization in 31715425
Optimization in 31717013
31727925 has no slack for charging load move!
Optimization in 31727925
31725089 has no slack for charging load move!
Optimization in 31725089
31725037 has no slack for charging load move!
Optimization in 31725037
31726107 has no slack for charging load move!
Optimization in 31726107
31727515 has no slack for charging load move!
Optimization in 31727515
31728053 has no slack for charging load move!
Optimization in 31728053
31729413 has no slack for charging load move!
Optimization in 31729413
31729691 has no slack for charging load move!
Optimization in 31729691
31729917 has no slack for charging load move!
Optimization in 31729917
31734607 has no slack for charging load move!
Optimization in 31734607
Optimization in 31735961
Optimization in 31737789
31738121 has no slack for charging load move!
Optimization in 31738121
Optimization in 31741389
31742703 has no slack for charging load move!
Optimization in 31742703
31743927 has no slack for charging load move!
Optimization in 31743927
Optimization in 31743981
Optimization in 31744355
Optimization in 31745571
Optimization in 31746081
Optimization in 31749261
Optimization in 31751575
Optimization on 2015-09-22 is done successfully
31741389 has no slack for charging load move!
Optimization in 31741389
31743981 has no slack for charging load move!
Optimization in 31743981
31744355 has no slack for charging load move!
Optimization in 31744355
31745571 has no slack for charging load move!
Optimization in 31745571
31746081 has no slack for charging load move!
Optimization in 31746081
Optimization in 31749261
31751575 has no slack for charging load move!
Optimization in 31751575
Optimization in 31779561
31783967 has no slack for charging load move!
Optimization in 31783967
Optimization in 31783987
Optimization in 31785017
Optimization in 31785709
The solution is suboptimal
Optimization in 31787583
31791871 has no slack for charging load move!
Optimization in 31791871
31794139 has no slack for charging load move!
Optimization in 31794139
31794929 has no slack for charging load move!
Optimization in 31794929
31800025 has no slack for charging load move!
Optimization in 31800025
31800217 has no slack for charging load move!
Optimization in 31800217
Optimization in 31800905
31803521 has no slack for charging load move!
Optimization in 31803521
31805593 has no slack for charging load move!
Optimization in 31805593
31808515 has no slack for charging load move!
Optimization in 31808515
Optimization in 31813065
31813189 has no slack for charging load move!
Optimization in 31813189
Optimization in 31813395
Optimization in 31813577
Optimization in 31814683
Optimization in 31817101
Optimization in 31818463
The solution is suboptimal
31818629 has no slack for charging load move!
Optimization in 31818629
The solution is suboptimal
Optimization in 31818799
The solution is suboptimal
Optimization in 31818951
Optimization on 2015-09-23 is done successfully
31813065 has no slack for charging load move!
Optimization in 31813065
31813395 has no slack for charging load move!
Optimization in 31813395
31814683 has no slack for charging load move!
Optimization in 31814683
31817101 has no slack for charging load move!
Optimization in 31817101
Optimization in 31818799
31818951 has no slack for charging load move!
Optimization in 31818951
31846135 has no slack for charging load move!
Optimization in 31846135
Optimization in 31851269
Optimization in 31854927
Optimization in 31855009
31857293 has no slack for charging load move!
Optimization in 31857293
31863825 has no slack for charging load move!
Optimization in 31863825
31866401 has no slack for charging load move!
Optimization in 31866401
31870269 has no slack for charging load move!
Optimization in 31870269
31871131 has no slack for charging load move!
Optimization in 31871131
Optimization in 31875033
31875415 has no slack for charging load move!
Optimization in 31875415
Optimization in 31875727
Optimization in 31885237
Optimization in 31885257
Optimization in 31887339
Optimization in 31933687
Optimization in 31888639
Optimization on 2015-09-24 is done successfully
31933439 has no slack for charging load move!
Optimization in 31933439
31935245 has no slack for charging load move!
Optimization in 31935245
31885237 has no slack for charging load move!
Optimization in 31885237
31885257 has no slack for charging load move!
Optimization in 31885257
31934325 has no slack for charging load move!
Optimization in 31934325
31887339 has no slack for charging load move!
Optimization in 31887339
31933687 has no slack for charging load move!
Optimization in 31933687
Optimization in 31917995
Optimization in 31918229
Optimization in 31918979
31933515 has no slack for charging load move!
Optimization in 31933515
Optimization in 31923305
31935139 has no slack for charging load move!
Optimization in 31935139
Optimization in 31933409
31940705 has no slack for charging load move!
Optimization in 31940705
31943089 has no slack for charging load move!
Optimization in 31943089
31945299 has no slack for charging load move!
Optimization in 31945299
Optimization in 31947299
Optimization in 31949705
Optimization in 31951145
Optimization in 31951859
Optimization in 31955053
Optimization in 31956617
Optimization in 31956949
Optimization in 31957121
Optimization on 2015-09-25 is done successfully
Optimization in 31949705
31951145 has no slack for charging load move!
Optimization in 31951145
Optimization in 31955053
31956617 has no slack for charging load move!
Optimization in 31956617
31956949 has no slack for charging load move!
Optimization in 31956949
Optimization in 31957121
Optimization on 2015-09-26 is done successfully
Optimization in 31949705
31951145 has no slack for charging load move!
Optimization in 31951145
Optimization in 31955053
31956617 has no slack for charging load move!
Optimization in 31956617
31956949 has no slack for charging load move!
Optimization in 31956949
Optimization in 31957121
32020287 has no slack for charging load move!
Optimization in 32020287
Optimization on 2015-09-27 is done successfully
31949705 has no slack for charging load move!
Optimization in 31949705
31951145 has no slack for charging load move!
Optimization in 31951145
31955053 has no slack for charging load move!
Optimization in 31955053
31956617 has no slack for charging load move!
Optimization in 31956617
31956949 has no slack for charging load move!
Optimization in 31956949
Optimization in 31957121
Optimization in 32052543
Optimization in 32052619
Optimization in 32055837
32060677 has no slack for charging load move!
Optimization in 32060677
Optimization in 32066853
Optimization in 32066953
32072841 has no slack for charging load move!
Optimization in 32072841
32075305 has no slack for charging load move!
Optimization in 32075305
Optimization in 32132573
Optimization in 32081487
Optimization in 32089251
32090391 has no slack for charging load move!
Optimization in 32090391
Optimization in 32133715
32134897 has no slack for charging load move!
Optimization in 32134897
Optimization in 32131645
Optimization in 32098493
Optimization in 32136003
Optimization on 2015-09-28 is done successfully
32081487 has no slack for charging load move!
Optimization in 32081487
32089251 has no slack for charging load move!
Optimization in 32089251
32131645 has no slack for charging load move!
Optimization in 32131645
Optimization in 32098493
32134407 has no slack for charging load move!
Optimization in 32134407
Optimization in 32120575
32130785 has no slack for charging load move!
Optimization in 32130785
Optimization in 32128499
Optimization in 32133373
32135135 has no slack for charging load move!
Optimization in 32135135
32138075 has no slack for charging load move!
Optimization in 32138075
32140079 has no slack for charging load move!
Optimization in 32140079
32140105 has no slack for charging load move!
Optimization in 32140105
32148039 has no slack for charging load move!
Optimization in 32148039
32149213 has no slack for charging load move!
Optimization in 32149213
32149267 has no slack for charging load move!
Optimization in 32149267
32150827 has no slack for charging load move!
Optimization in 32150827
32151335 has no slack for charging load move!
Optimization in 32151335
32154925 has no slack for charging load move!
Optimization in 32154925
Optimization in 32155165
Optimization in 32157111
Optimization in 32158381
Optimization in 32159471
Optimization in 32164523
Optimization in 32169527
32173875 has no slack for charging load move!
Optimization in 32173875
Optimization in 32177599
Optimization in 32177799
Optimization in 32177853
Optimization in 32178245
Optimization in 32181615
Optimization in 32181781
Optimization on 2015-09-29 is done successfully
32158381 has no slack for charging load move!
Optimization in 32158381
32159471 has no slack for charging load move!
Optimization in 32159471
32169527 has no slack for charging load move!
Optimization in 32169527
32177599 has no slack for charging load move!
Optimization in 32177599
32177799 has no slack for charging load move!
Optimization in 32177799
32177853 has no slack for charging load move!
Optimization in 32177853
32178245 has no slack for charging load move!
Optimization in 32178245
32181615 has no slack for charging load move!
Optimization in 32181615
32181781 has no slack for charging load move!
Optimization in 32181781
32203191 has no slack for charging load move!
Optimization in 32203191
Optimization in 32208021
Optimization in 32210419
Optimization in 32211913
Optimization in 32213407
Optimization in 32225057
Optimization in 32226553
Optimization in 32230161
32230285 has no slack for charging load move!
Optimization in 32230285
Optimization in 32231273
32232419 has no slack for charging load move!
Optimization in 32232419
32235387 has no slack for charging load move!
Optimization in 32235387
32236183 has no slack for charging load move!
Optimization in 32236183
32241999 has no slack for charging load move!
Optimization in 32241999
Optimization in 32246721
Optimization in 32249325
32249905 has no slack for charging load move!
Optimization in 32249905
Optimization in 32250453
Optimization on 2015-09-30 is done successfully
32271719 has no slack for charging load move!
Optimization in 32271719
Optimization in 32275113
32277071 has no slack for charging load move!
Optimization in 32277071
Optimization in 32277643
32277611 has no slack for charging load move!
Optimization in 32277611
32277691 has no slack for charging load move!
Optimization in 32277691
32279337 has no slack for charging load move!
Optimization in 32279337
32283745 has no slack for charging load move!
Optimization in 32283745
Optimization in 32286001
32289229 has no slack for charging load move!
Optimization in 32289229
Optimization in 32300585
Optimization in 32301357
Optimization in 32303415
Optimization in 32305065
Optimization on 2015-10-01 is done successfully
32300585 has no slack for charging load move!
Optimization in 32300585
32301357 has no slack for charging load move!
Optimization in 32301357
32303415 has no slack for charging load move!
Optimization in 32303415
Optimization in 32305065
Optimization in 32333831
Optimization in 32335905
32336119 has no slack for charging load move!
Optimization in 32336119
Optimization in 32336847
Optimization in 32338285
Optimization in 32360925
32362583 has no slack for charging load move!
Optimization in 32362583
Optimization on 2015-10-02 is done successfully
Optimization on 2015-10-03 is done successfully
Optimization on 2015-10-04 is done successfully
Optimization in 32450337
Optimization in 32455529
Optimization in 32456729
32470123 has no slack for charging load move!
Optimization in 32470123
Optimization in 32527249
32477099 has no slack for charging load move!
Optimization in 32477099
32478527 has no slack for charging load move!
Optimization in 32478527
The solution is suboptimal
Optimization in 32527417
The solution is suboptimal
32487801 has no slack for charging load move!
Optimization in 32487801
Optimization on 2015-10-05 is done successfully
32527249 has no slack for charging load move!
Optimization in 32527249
32527417 has no slack for charging load move!
Optimization in 32527417
32487801 has no slack for charging load move!
Optimization in 32487801
Optimization in 32527627
Optimization in 32527407
Optimization in 32514861
32527345 has no slack for charging load move!
Optimization in 32527345
32527251 has no slack for charging load move!
Optimization in 32527251
32527409 has no slack for charging load move!
Optimization in 32527409
32528569 has no slack for charging load move!
Optimization in 32528569
Optimization in 32529957
Optimization in 32530101
Optimization in 32530413
Optimization in 32536353
32537993 has no slack for charging load move!
Optimization in 32537993
Optimization in 32539141
Optimization in 32539427
Optimization in 32539469
Optimization in 32539521
Optimization in 32541357
Optimization in 32543685
Optimization on 2015-10-06 is done successfully
32536353 has no slack for charging load move!
Optimization in 32536353
32539141 has no slack for charging load move!
Optimization in 32539141
32539427 has no slack for charging load move!
Optimization in 32539427
32539469 has no slack for charging load move!
Optimization in 32539469
32541357 has no slack for charging load move!
Optimization in 32541357
Optimization in 32543685
32545809 has no slack for charging load move!
Optimization in 32545809
Optimization in 32565939
32566331 has no slack for charging load move!
Optimization in 32566331
Optimization in 32574185
32575339 has no slack for charging load move!
Optimization in 32575339
Optimization in 32575655
32577505 has no slack for charging load move!
Optimization in 32577505
32579493 has no slack for charging load move!
Optimization in 32579493
32584695 has no slack for charging load move!
Optimization in 32584695
Optimization in 32584735
32585023 has no slack for charging load move!
Optimization in 32585023
Optimization in 32588687
Optimization in 32589231
32590227 has no slack for charging load move!
Optimization in 32590227
Optimization in 32594691
Optimization in 32596697
32597019 has no slack for charging load move!
Optimization in 32597019
Optimization in 32597283
Optimization in 32603291
Optimization in 32603919
Optimization in 32604453
Optimization in 32604573
Optimization on 2015-10-07 is done successfully
32594691 has no slack for charging load move!
Optimization in 32594691
32597283 has no slack for charging load move!
Optimization in 32597283
Optimization in 32603291
32603919 has no slack for charging load move!
Optimization in 32603919
32604453 has no slack for charging load move!
Optimization in 32604453
32604573 has no slack for charging load move!
Optimization in 32604573
Optimization in 32626041
Optimization in 32629393
Optimization in 32631939
32633033 has no slack for charging load move!
Optimization in 32633033
Optimization in 32634451
32638401 has no slack for charging load move!
Optimization in 32638401
Optimization in 32638425
Optimization in 32644333
32644591 has no slack for charging load move!
Optimization in 32644591
32645359 has no slack for charging load move!
Optimization in 32645359
Optimization in 32649439
Optimization in 32651133
Optimization in 32655821
32656197 has no slack for charging load move!
Optimization in 32656197
Optimization in 32658841
Optimization in 32660547
Optimization in 32660975
Optimization in 32661481
Optimization in 32661965
Optimization in 32662937
Optimization on 2015-10-08 is done successfully
32649439 has no slack for charging load move!
Optimization in 32649439
32655821 has no slack for charging load move!
Optimization in 32655821
32658841 has no slack for charging load move!
Optimization in 32658841
Optimization in 32660547
32660975 has no slack for charging load move!
Optimization in 32660975
Optimization in 32661481
32661965 has no slack for charging load move!
Optimization in 32661965
32662937 has no slack for charging load move!
Optimization in 32662937
32701893 has no slack for charging load move!
Optimization in 32701893
Optimization in 32706491
Optimization in 32707883
The solution is suboptimal
Optimization in 32708343
32711669 has no slack for charging load move!
Optimization in 32711669
32712557 has no slack for charging load move!
Optimization in 32712557
Optimization in 32718213
Optimization in 32718501
Optimization in 32721049
Optimization in 32722707
32727295 has no slack for charging load move!
Optimization in 32727295
32727987 has no slack for charging load move!
Optimization in 32727987
Optimization in 32728767
Optimization in 32731189
Optimization in 32732831
Optimization in 32732857
Optimization in 32733775
Optimization in 32734367
Optimization in 32736211
Optimization in 32738379
Optimization on 2015-10-09 is done successfully
32718501 has no slack for charging load move!
Optimization in 32718501
32731189 has no slack for charging load move!
Optimization in 32731189
Optimization in 32732831
Optimization in 32732857
32733775 has no slack for charging load move!
Optimization in 32733775
32734367 has no slack for charging load move!
Optimization in 32734367
32736211 has no slack for charging load move!
Optimization in 32736211
32738379 has no slack for charging load move!
Optimization in 32738379
Optimization on 2015-10-10 is done successfully
32718501 has no slack for charging load move!
Optimization in 32718501
32731189 has no slack for charging load move!
Optimization in 32731189
Optimization in 32732831
Optimization in 32732857
32733775 has no slack for charging load move!
Optimization in 32733775
32734367 has no slack for charging load move!
Optimization in 32734367
32736211 has no slack for charging load move!
Optimization in 32736211
32738379 has no slack for charging load move!
Optimization in 32738379
32797373 has no slack for charging load move!
Optimization in 32797373
Optimization on 2015-10-11 is done successfully
32718501 has no slack for charging load move!
Optimization in 32718501
32731189 has no slack for charging load move!
Optimization in 32731189
Optimization in 32732831
32732857 has no slack for charging load move!
Optimization in 32732857
32733775 has no slack for charging load move!
Optimization in 32733775
32734367 has no slack for charging load move!
Optimization in 32734367
32736211 has no slack for charging load move!
Optimization in 32736211
32738379 has no slack for charging load move!
Optimization in 32738379
32838585 has no slack for charging load move!
Optimization in 32838585
Optimization in 32838587
Optimization in 32829075
Optimization in 32830877
Optimization in 32846937
32848609 has no slack for charging load move!
Optimization in 32848609
Optimization in 32849165
Optimization in 32849867
Optimization in 32850317
Optimization in 32852303
Optimization in 32856209
Optimization in 32857065
Optimization on 2015-10-12 is done successfully
32849165 has no slack for charging load move!
Optimization in 32849165
32849867 has no slack for charging load move!
Optimization in 32849867
32850317 has no slack for charging load move!
Optimization in 32850317
32852303 has no slack for charging load move!
Optimization in 32852303
32856209 has no slack for charging load move!
Optimization in 32856209
32857065 has no slack for charging load move!
Optimization in 32857065
Optimization in 32883219
Optimization in 32886969
Optimization in 32888109
Optimization in 32889435
32889889 has no slack for charging load move!
Optimization in 32889889
Optimization in 32893055
Optimization in 32897931
Optimization in 32901459
Optimization in 32901753
32901773 has no slack for charging load move!
Optimization in 32901773
Optimization in 32902793
32903641 has no slack for charging load move!
Optimization in 32903641
Optimization in 32903953
32911953 has no slack for charging load move!
Optimization in 32911953
Optimization in 32911947
32916809 has no slack for charging load move!
Optimization in 32916809
Optimization in 32917385
Optimization in 32917533
Optimization in 32919071
Optimization in 32922231
Optimization in 32922267
Optimization on 2015-10-13 is done successfully
32903953 has no slack for charging load move!
Optimization in 32903953
32917385 has no slack for charging load move!
Optimization in 32917385
Optimization in 32917533
32919071 has no slack for charging load move!
Optimization in 32919071
32922231 has no slack for charging load move!
Optimization in 32922231
32922267 has no slack for charging load move!
Optimization in 32922267
32947085 has no slack for charging load move!
Optimization in 32947085
Optimization in 32949235
Optimization in 32949503
Optimization in 32951687
Optimization in 32955031
32956547 has no slack for charging load move!
Optimization in 32956547
Optimization in 32961257
32963797 has no slack for charging load move!
Optimization in 32963797
32970387 has no slack for charging load move!
Optimization in 32970387
32974311 has no slack for charging load move!
Optimization in 32974311
32976179 has no slack for charging load move!
Optimization in 32976179
Optimization in 32976943
Optimization in 32977929
Optimization in 32979579
Optimization in 32980697
Optimization in 32981087
Optimization on 2015-10-14 is done successfully
32976943 has no slack for charging load move!
Optimization in 32976943
32977929 has no slack for charging load move!
Optimization in 32977929
32979579 has no slack for charging load move!
Optimization in 32979579
32980697 has no slack for charging load move!
Optimization in 32980697
32981087 has no slack for charging load move!
Optimization in 32981087
Optimization in 33003625
33008879 has no slack for charging load move!
Optimization in 33008879
Optimization in 33011513
Optimization in 33012231
Optimization in 33013625
33016325 has no slack for charging load move!
Optimization in 33016325
33019807 has no slack for charging load move!
Optimization in 33019807
Optimization in 33019837
Optimization in 33020103
33023273 has no slack for charging load move!
Optimization in 33023273
Optimization in 33023429
33024827 has no slack for charging load move!
Optimization in 33024827
33026047 has no slack for charging load move!
Optimization in 33026047
Optimization in 33031801
Optimization in 33031831
Optimization in 33038601
Optimization in 33038671
Optimization in 33040795
Optimization in 33041539
Optimization on 2015-10-15 is done successfully
33020103 has no slack for charging load move!
Optimization in 33020103
Optimization in 33031831
33038601 has no slack for charging load move!
Optimization in 33038601
33038671 has no slack for charging load move!
Optimization in 33038671
33040795 has no slack for charging load move!
Optimization in 33040795
33041539 has no slack for charging load move!
Optimization in 33041539
Optimization in 33069675
33069931 has no slack for charging load move!
Optimization in 33069931
33072519 has no slack for charging load move!
Optimization in 33072519
33072793 has no slack for charging load move!
Optimization in 33072793
Optimization in 33081943
Optimization in 33081987
33081925 has no slack for charging load move!
Optimization in 33081925
Optimization in 33085793
Optimization in 33090125
Optimization in 33096521
Optimization in 33096551
Optimization in 33098899
Optimization in 33099071
Optimization on 2015-10-16 is done successfully
Optimization in 33085793
Optimization in 33090125
33096521 has no slack for charging load move!
Optimization in 33096521
Optimization in 33096551
Optimization in 33098899
33099071 has no slack for charging load move!
Optimization in 33099071
Optimization on 2015-10-17 is done successfully
Optimization in 33085793
Optimization in 33090125
33096521 has no slack for charging load move!
Optimization in 33096521
Optimization in 33096551
Optimization in 33098899
33099071 has no slack for charging load move!
Optimization in 33099071
33149851 has no slack for charging load move!
Optimization in 33149851
Optimization on 2015-10-18 is done successfully
Optimization in 33085793
33090125 has no slack for charging load move!
Optimization in 33090125
Optimization in 33096521
33096551 has no slack for charging load move!
Optimization in 33096551
33098899 has no slack for charging load move!
Optimization in 33098899
Optimization in 33099071
33172905 has no slack for charging load move!
Optimization in 33172905
Optimization in 33176127
Optimization in 33179115

In [23]:
# run the optimization for each month's EV charging sessions

for month in (range(4,5)+range(11,13)):
    # monthly date range
    StartDate = ts2015[ts2015['month'] == month].day[0]
    EndDate = ts2015[ts2015['month'] == month].day[-1]
    rng = map(lambda x: x.strftime('%Y-%m-%d'),pd.date_range(StartDate, EndDate, freq='D'))
    
    EndDate2 = (datetime.strptime(EndDate,'%Y-%m-%d')+timedelta(days=1)).strftime('%Y-%m-%d')
#     EVSE_Power = query_EVSE_eventids(StartDate,EndDate2)
#     EVSE_Power = EVSE_Power[StartDate:EndDate]
    EVSE_Power = pd.read_csv('results/FlexDrivers/NewEVStatus/2015EV/'+'2015-'+str(month)+'Original.csv')
    EVSE_Power.index = EVSE_Power.ix[:,0].apply(lambda x: datetime.strptime(x,'%Y-%m-%d %H:%M:%S'))
    EVSE_Power.drop(EVSE_Power.columns[[0]], axis=1, inplace=True)
    
    # initialize the past peak demand values 
    DailyPower = []
    peak=0
    onpeak=0
    midpeak=0

    monthpeak = []
    monthonpeak = []
    monthmidpeak = []
    
    directory = 'results/FlexDrivers/NewEVStatus/OptV6/' + str(month)
    if not os.path.exists(directory):
        os.makedirs(directory)
    # run the daily optimization
    for day in rng:
        DailyPower = EVSE_Power[day]
        DailyPower = DailyPower.replace('',np.nan)
        DailyPower = DailyPower.dropna(axis=1,how='all')
        
        DriverOnList = DailyPower.columns
        N = len(DriverOnList)
        
        opt_event = []
        past_event = []
        NonSlack_event = []
        
        DailyPower['power'] = 0
        DailyPower['NonControlledPower'] = DailyPower.fillna(0).sum(axis=1)
        DailyPower['ts'] = range(96) # Add the tag of time step for each event id
        
        if DailyPower.empty:
            print 'EV Data on ' + day + ' is empty!'
            DailyPower.to_csv(directory + '/' + day +'.csv')
        else:
            for eventid in DriverOnList[::-1]:
                if (int(eventid) in EV_ID_Random) & (hasSlack(eventid,DailyPower)):
                    opt_event, LS_ref, RS_ref = flexEvent(eventid, DailyPower, past_event)
                    df2 = DailyPower[opt_event].fillna(0).sum(axis=1)
                    df2[LS_ref:96] = 0
                    DailyPower['power'] = 0
                    DailyPower['power'] = DailyPower[[x for x in past_event if x not in opt_event]].fillna(0).sum(axis=1) + df2

                    DailyPower = OptimizeCostV6(DailyPower, LS_ref, eventid, past_event, opt_event, onpeak, midpeak, peak)
                    
                    print 'Optimization in ' + str(eventid)

                else:
                    NonSlack_event.append(eventid)
                    opt_event, LS_ref, RS_ref = flexEvent(eventid, DailyPower, past_event)
                    df2 = DailyPower[opt_event].fillna(0).sum(axis=1)
                    df2[LS_ref:96] = 0
                    DailyPower['power'] = 0
                    DailyPower['power'] = DailyPower[[x for x in past_event if x not in opt_event]].fillna(0).sum(axis=1) + df2

                    DailyPower = OptimizeCostV6(DailyPower, LS_ref, eventid, past_event, opt_event, onpeak, midpeak, peak)
                    
                    print str(eventid) + ' has no slack for charging load move!'
                    print 'Optimization in ' + str(eventid)
            DailyPower['power'] = 0
            DailyPower['power'] = DailyPower[past_event].fillna(0).sum(axis=1)

            print 'Optimization on ' + day + ' is done successfully'
            
            DailyPower.to_csv(directory +'/'+ day +'-V6.csv')
#     EVSE_Power[StartDate:EndDate].to_csv('results/FlexDrivers/NewEVStatus/OptV5/'+'2015-'+str(month)+'Original.csv')


Optimization in 25061203
25055531 has no slack for charging load move!
Optimization in 25055531
Optimization in 25061029
Optimization in 25061177
25058091 has no slack for charging load move!
Optimization in 25058091
25059001 has no slack for charging load move!
Optimization in 25059001
Optimization in 25061279
Optimization in 25060327
Optimization in 25065231
Optimization in 25079843
Optimization in 25093421
Optimization on 2015-04-01 is done successfully
Optimization in 25079843
25093421 has no slack for charging load move!
Optimization in 25093421
Optimization in 25094525
25095181 has no slack for charging load move!
Optimization in 25095181
Optimization in 25096169
Optimization in 25097295
Optimization in 25099543
Optimization in 25100539
Optimization in 25105809
Optimization in 25108993
25111713 has no slack for charging load move!
Optimization in 25111713
Optimization in 25114571
Optimization in 25114635
Optimization in 25116419
Optimization in 25116545
25116827 has no slack for charging load move!
Optimization in 25116827
Optimization in 25117627
Optimization in 25118559
25119765 has no slack for charging load move!
Optimization in 25119765
Optimization in 25119799
Optimization in 25119873
Optimization in 25125523
Optimization on 2015-04-02 is done successfully
25116419 has no slack for charging load move!
Optimization in 25116419
Optimization in 25117627
25119799 has no slack for charging load move!
Optimization in 25119799
Optimization in 25119873
25125523 has no slack for charging load move!
Optimization in 25125523
Optimization in 25132793
The solution is suboptimal
Optimization in 25133309
Optimization in 25136865
Optimization in 25143129
Optimization in 25144113
Optimization in 25149063
Optimization in 25149093
Optimization in 25150433
Optimization in 25150739
Optimization in 25209815
Optimization on 2015-04-03 is done successfully
25209815 has no slack for charging load move!
Optimization in 25209815
Optimization on 2015-04-04 is done successfully
25209815 has no slack for charging load move!
Optimization in 25209815
25185835 has no slack for charging load move!
Optimization in 25185835
Optimization on 2015-04-05 is done successfully
25209815 has no slack for charging load move!
Optimization in 25209815
25209649 has no slack for charging load move!
Optimization in 25209649
Optimization in 25199301
Optimization in 25201035
Optimization in 25202225
Optimization in 25203119
Optimization in 25209311
Optimization in 25204803
The solution is suboptimal
Optimization in 25205161
Optimization in 25209449
25209337 has no slack for charging load move!
Optimization in 25209337
Optimization in 25214603
25219381 has no slack for charging load move!
Optimization in 25219381
25220119 has no slack for charging load move!
Optimization in 25220119
25220593 has no slack for charging load move!
Optimization in 25220593
25220971 has no slack for charging load move!
Optimization in 25220971
Optimization in 25221967
Optimization in 25222693
Optimization in 25222719
Optimization in 25223003
Optimization in 25223595
Optimization on 2015-04-06 is done successfully
25221967 has no slack for charging load move!
Optimization in 25221967
25222693 has no slack for charging load move!
Optimization in 25222693
25222719 has no slack for charging load move!
Optimization in 25222719
25223003 has no slack for charging load move!
Optimization in 25223003
25223595 has no slack for charging load move!
Optimization in 25223595
Optimization in 25234891
Optimization in 25238945
25242347 has no slack for charging load move!
Optimization in 25242347
Optimization in 25240501
The solution is suboptimal
Optimization in 25241149
25242227 has no slack for charging load move!
Optimization in 25242227
25243867 has no slack for charging load move!
Optimization in 25243867
Optimization in 25244673
25244691 has no slack for charging load move!
Optimization in 25244691
Optimization in 25249963
Optimization in 25249997
25251357 has no slack for charging load move!
Optimization in 25251357
Optimization in 25258467
Optimization in 25258497
25260615 has no slack for charging load move!
Optimization in 25260615
Optimization in 25260701
Optimization in 25260985
Optimization in 25261283
Optimization in 25262195
Optimization in 25262767
Optimization in 25263145
Optimization in 25263443
The solution is suboptimal
Optimization in 25263543
Optimization on 2015-04-07 is done successfully
25258497 has no slack for charging load move!
Optimization in 25258497
25260701 has no slack for charging load move!
Optimization in 25260701
25260985 has no slack for charging load move!
Optimization in 25260985
Optimization in 25261283
---------------------------------------------------------------------------
IOError                                   Traceback (most recent call last)
<ipython-input-23-106f9e8991b9> in <module>()
     68                     DailyPower['power'] = DailyPower[[x for x in past_event if x not in opt_event]].fillna(0).sum(axis=1) + df2
     69 
---> 70                     DailyPower = OptimizeCostV6(DailyPower, LS_ref, eventid, past_event, opt_event, onpeak, midpeak, peak)
     71 
     72                     print str(eventid) + ' has no slack for charging load move!'

<ipython-input-21-61d2add90b6f> in OptimizeCostV6(DailyPower, LS_ref, eventid, past_event, opt_event, onpeak, midpeak, peak)
    103 
    104 #     model.solve()
--> 105     model.solve(PULP_CBC_CMD(fracGap = 0.05, maxSeconds = 300, threads = None))
    106 
    107     if model.status == 1:

C:\Users\Rongxin\AppData\Local\Enthought\Canopy\User\lib\site-packages\pulp\pulp.pyc in solve(self, solver, **kwargs)
   1641         #time it
   1642         self.solutionTime = -clock()
-> 1643         status = solver.actualSolve(self, **kwargs)
   1644         self.solutionTime += clock()
   1645         self.restoreObjective(wasNone, dummyVar)

C:\Users\Rongxin\AppData\Local\Enthought\Canopy\User\lib\site-packages\pulp\solvers.pyc in actualSolve(self, lp, **kwargs)
   1301     def actualSolve(self, lp, **kwargs):
   1302         """Solve a well formulated lp problem"""
-> 1303         return self.solve_CBC(lp, **kwargs)
   1304 
   1305     def available(self):

C:\Users\Rongxin\AppData\Local\Enthought\Canopy\User\lib\site-packages\pulp\solvers.pyc in solve_CBC(self, lp, use_mps)
   1323         if use_mps:
   1324             vs, variablesNames, constraintsNames, objectiveName = lp.writeMPS(
-> 1325                         tmpMps, rename = 1)
   1326             cmds = ' '+tmpMps+" "
   1327             if lp.sense == LpMaximize:

C:\Users\Rongxin\AppData\Local\Enthought\Canopy\User\lib\site-packages\pulp\pulp.pyc in writeMPS(self, filename, mpsSense, rename, mip)
   1390     def writeMPS(self, filename, mpsSense = 0, rename = 0, mip = 1):
   1391         wasNone, dummyVar = self.fixObjective()
-> 1392         f = open(filename, "w")
   1393         if mpsSense == 0: mpsSense = self.sense
   1394         cobj = self.objective

IOError: [Errno 13] Permission denied: '8392-pulp.mps'

Case 1: Assume all the known EV's Start, End, and Charging Power. Optimized with discrete charging power (15-min block)


In [37]:
def OptimizeCostV1(DailyPower, opt_event, onpeak, midpeak, peak):
    
    DayPower = DailyPower.fillna(0)
    
    # Create matrix of slots
    X = LpVariable.dicts("ChargingStatus", [(k, i, j) for k in range(len(opt_event)) for i in range(96) for j in range(96)], 0, 1, LpBinary)

    costs=[]
    
    
    for tim in DayPower.index:
        costs.append(getCostValueForTime(tim.month,tim.strftime('%H:%M'),tim.isoweekday()))
    cost={}
    for k in xrange(len(opt_event)):
        for i in xrange(96):
            for j in xrange(96):
                cost[k,i,j]=costs[j]
   
    # Create model objective
    model = pulp.LpProblem("SmartCharging",pulp.LpMinimize)
    # Create model variables
    min_curMidPeak = LpVariable("Min MidPeak",0)
    min_curOnPeak = LpVariable("Min OnPeak",0)
    min_curPeak = LpVariable("Min Peak",0)
        
    tim = DayPower.index[0]
    if (tim.month in [1,2,3,4,11,12]) & (tim.isoweekday() in [1,2,3,4,5]):
        
        curMidPeak = [lpSum(lpSum(DayPower[opt_event[k]].tolist()[i]*X[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96)) + DayPower['power'].tolist()[j]) for j in xrange(34,86)]
        curPeak = [lpSum(lpSum(DayPower[opt_event[k]].tolist()[i]*X[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96)) + DayPower['power'].tolist()[j]) for j in xrange(96)]
        
        model += lpSum((DayPower[opt_event[k]].tolist()[i])*X[k,i,j]*cost[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96) for j in xrange(96)) + \
                    min_curPeak*17.33 + min_curMidPeak*0.13
        
        for item in curPeak:
            model += min_curPeak >= item
        model += min_curPeak >= peak
        for item in curMidPeak:
            model += min_curMidPeak >= item
        model += min_curMidPeak >= midpeak
        
    elif (tim.month in [1,2,3,4,11,12]) & (tim.isoweekday() in [6,7]):
        
        curPeak = [lpSum(lpSum(DayPower[opt_event[k]].tolist()[i]*X[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96)) + DayPower['power'].tolist()[j]) for j in xrange(96)]
        
        model += lpSum((DayPower[opt_event[k]].tolist()[i])*X[k,i,j]*cost[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96) for j in xrange(96)) + \
                    min_curPeak*17.33
            
        for item in curPeak:
            model += min_curPeak >= item
        model += min_curPeak >= peak
        
    elif (tim.month in [5,6,7,8,9,10]) & (tim.isoweekday() in [1,2,3,4,5]):
                
        curMidPeak = [lpSum(lpSum(DayPower[opt_event[k]].tolist()[i]*X[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96)) + DayPower['power'].tolist()[j]) for j in (range(34,48)+range(72,86))]
        curPeak = [lpSum(lpSum(DayPower[opt_event[k]].tolist()[i]*X[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96)) + DayPower['power'].tolist()[j]) for j in xrange(96)]
        curOnPeak = [lpSum(lpSum(DayPower[opt_event[k]].tolist()[i]*X[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96)) + DayPower['power'].tolist()[j]) for j in xrange(48,72)]
        
        model += lpSum((DayPower[opt_event[k]].tolist()[i])*X[k,i,j]*cost[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96) for j in xrange(96)) + \
                    min_curOnPeak*18.74 + min_curPeak*17.33 + min_curMidPeak*5.23
        
        for item in curPeak:
            model += min_curPeak >= item
        model += min_curPeak >= peak
        for item in curOnPeak:
            model += min_curOnPeak >= item
        model += min_curOnPeak >= onpeak
        for item in curMidPeak:
            model += min_curMidPeak >= item
        model += min_curMidPeak >= midpeak

    elif (tim.month in [5,6,7,8,9,10]) & (tim.isoweekday() in [6,7]):
        
        curPeak = [lpSum(lpSum(DayPower[opt_event[k]].tolist()[i]*X[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96)) + DayPower['power'].tolist()[j]) for j in xrange(96)]
        
        model += lpSum((DayPower[opt_event[k]].tolist()[i])*X[k,i,j]*cost[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96) for j in xrange(96)) + \
                    min_curPeak*17.33
        
        for item in curPeak:
            model += min_curPeak >= item
        model += min_curPeak >= peak
        
    else:
        print "Error in month, day and time"
    
    # Create model constrains
    for k in xrange(len(opt_event)):
        oldpower = DailyPower.loc[DailyPower[opt_event[k]] >= 0,[opt_event[k],'ts']]
        newpower = DayPower.loc[DayPower[opt_event[k]] >= 0,[opt_event[k]]]
        power2 = newpower[opt_event[k]].tolist()

        positive_power = [p for p in power2 if p>0]
        M=len(positive_power)

        # Left and Right slots
        LS = oldpower['ts'][0]
        RS = oldpower['ts'][-1]

        # Set the precedence and the session duration constraints
        for i in xrange(LS):
            model += (lpSum(X[k,i,j] for j in range(96)) == 0)   
        # Down zeros
        for i in xrange(LS+M,96):
            model += (lpSum(X[k,i,j] for j in range(96)) == 0)    
        # Left zeros
        for i in xrange(LS,LS+M):
            model += (lpSum(X[k,i,j] for j in range(LS)) == 0)
        # Right zeros
        for i in xrange(LS,LS+M):
            model += (lpSum(X[k,i,j] for j in range(RS+1,96)) == 0)

        # Add the constraints
        for i in xrange(LS,LS+M):
            model += (lpSum(X[k,i,j] for j in range(LS,RS+1)) == 1)

        for i in xrange(LS,LS+M-1):
    #         model += (lpSum(X[i,j]*(j+1) for j in range(LS,RS+1)) == lpSum(X[i+1,j]*(j+1) for j in range(LS,RS+1))-1)
            model += (lpSum(X[k,i,j]*(j+1) for j in range(LS,RS+1)) <= lpSum(X[k,i+1,j]*(j+1) for j in range(LS,RS+1))-1) # discrete 15-min charging load blocks

    model.solve(PULP_CBC_CMD(fracGap = 0.05, maxSeconds = 600, threads = None))
#     model.solve(GLPK_CMD(options=['--mipgap','0.05']))
    
    if model.status == 1:
        
        for k in xrange(len(opt_event)):
            
            oldpower = DailyPower.loc[DailyPower[opt_event[k]] >= 0,[opt_event[k],'ts']]
            newpower = DayPower.loc[DayPower[opt_event[k]] >= 0,[opt_event[k]]]
            power2 = newpower[opt_event[k]].tolist()

            positive_power = [p for p in power2 if p>0]
            M=len(positive_power)

            # Left and Right slots
            LS = oldpower['ts'][0]
            RS = oldpower['ts'][-1]

            slots = xrange(1,len(power2)+1)

            sol=[]
            for j in xrange(96):
                sol.append(sum(X[k,i,j].varValue*(j) for i in xrange(LS,LS+M)))
            corSlots=[slots[int(s)] for s in sol]
            ct=0
            power=[p*0 for p in power2]
            for s in sol:
                if s>0:
                    power[int(s)]=positive_power[ct]
                    ct=ct+1
                else:
                    continue
            DailyPower.loc[DailyPower.index[LS:RS+1],opt_event[k]] = power[LS:RS+1]
    else:
        print('The solution is suboptimal')
    return DailyPower, model.status

In [39]:
# run the optimization for each month's EV charging sessions
noFeasibleDays = []
for month in range(7,8):
    # monthly date range
    StartDate = ts2015[ts2015['month'] == month].day[0]
    EndDate = ts2015[ts2015['month'] == month].day[-1]
    rng = map(lambda x: x.strftime('%Y-%m-%d'),pd.date_range(StartDate, EndDate, freq='D'))
    
    EndDate2 = (datetime.strptime(EndDate,'%Y-%m-%d')+timedelta(days=1)).strftime('%Y-%m-%d')
#     EVSE_Power = query_EVSE_eventids(StartDate,EndDate2)
#     EVSE_Power = EVSE_Power[StartDate:EndDate]
    EVSE_Power = pd.read_csv('results/FlexDrivers/NewEVStatus/2015EV/'+'2015-'+str(month)+'Original.csv')
    EVSE_Power.index = EVSE_Power.ix[:,0].apply(lambda x: datetime.strptime(x,'%Y-%m-%d %H:%M:%S'))
    EVSE_Power.drop(EVSE_Power.columns[[0]], axis=1, inplace=True)
    
    # initialize the past peak demand values 
    DailyPower = []
    peak=0
    onpeak=0
    midpeak=0

    monthpeak = []
    monthonpeak = []
    monthmidpeak = []
    
    directory = 'results/FlexDrivers/NewEVStatus/OptV1/' + str(month)
    if not os.path.exists(directory):
        os.makedirs(directory)
    # run the daily optimization
    for day in rng[0:1]:
        DailyPower = EVSE_Power[day]
        DailyPower = DailyPower.replace('',np.nan)
        DailyPower = DailyPower.dropna(axis=1,how='all')
        
        DriverOnList = DailyPower.columns
        N = len(DriverOnList)
        
        opt_event = []
        
        DailyPower['power'] = 0
        DailyPower['NonControlledPower'] = DailyPower.fillna(0).sum(axis=1)
        DailyPower['ts'] = range(96) # Add the tag of time step for each event id
        
        if DailyPower.empty:
            print 'EV Data on ' + day + ' is empty!'
            DailyPower.to_csv(directory + '/' + day +'.csv')
        else:
            for eventid in DriverOnList[::-1]:
#                 if (int(eventid) in EV_ID_Random) & (hasSlack(eventid,DailyPower)):
                if (int(eventid) in EV_ID_Random):
                    opt_event.append(eventid)
            DailyPower['power'] = DailyPower[[x for x in DriverOnList[::-1] if x not in opt_event]].fillna(0).sum(axis=1)
            DailyPower,status = OptimizeCostV1(DailyPower, opt_event, onpeak, midpeak, peak)
            
            if status == 1:
                DailyPower['power'] = DailyPower['power'] + DailyPower[opt_event].fillna(0).sum(axis=1)
                print 'Optimization on ' + day + ' is done successfully'
                DailyPower.to_csv(directory +'/'+ day +'-V1.csv')
            else:
                copyfile('results/FlexDrivers/NewEVStatus/OptV3/' + str(month)+'/'+ day +'-V3.csv',directory +'/'+ day +'-V1.csv')
                noFeasibleDays.append(day)
#             DailyPower.to_csv(directory +'/'+ day +'-V1.csv')
#     EVSE_Power[StartDate:EndDate].to_csv('results/FlexDrivers/NewEVStatus/OptV2/'+'2015-'+str(month)+'Original.csv')


Optimization on 2015-07-01 is done successfully

In [17]:
with open(directory +'/'+'noFeasibleDays-V1.csv', 'wb') as f:
    writer = csv.writer(f)
    for val in noFeasibleDays:
        writer.writerow([val])

Case 2: Assume all the known EV's Start, End, and Charging Power. Optimized with continues charging power (15-min block)


In [18]:
def OptimizeCostV2(DailyPower, opt_event, onpeak, midpeak, peak):
    
    DayPower = DailyPower.fillna(0)
    
    # Create matrix of slots
    X = LpVariable.dicts("ChargingStatus", [(k, i, j) for k in range(len(opt_event)) for i in range(96) for j in range(96)], 0, 1, LpBinary)

    costs=[]
    
    
    for tim in DayPower.index:
        costs.append(getCostValueForTime(tim.month,tim.strftime('%H:%M'),tim.isoweekday()))
    cost={}
    for k in xrange(len(opt_event)):
        for i in xrange(96):
            for j in xrange(96):
                cost[k,i,j]=costs[j]
   
    # Create model objective
    model = pulp.LpProblem("SmartCharging",pulp.LpMinimize)
    # Create model variables
    min_curMidPeak = LpVariable("Min MidPeak",0)
    min_curOnPeak = LpVariable("Min OnPeak",0)
    min_curPeak = LpVariable("Min Peak",0)
        
    tim = DayPower.index[0]
    if (tim.month in [1,2,3,4,11,12]) & (tim.isoweekday() in [1,2,3,4,5]):
        
        curMidPeak = [lpSum(lpSum(DayPower[opt_event[k]].tolist()[i]*X[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96)) + DayPower['power'].tolist()[j]) for j in xrange(34,86)]
        curPeak = [lpSum(lpSum(DayPower[opt_event[k]].tolist()[i]*X[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96)) + DayPower['power'].tolist()[j]) for j in xrange(96)]
        
        model += lpSum((DayPower[opt_event[k]].tolist()[i])*X[k,i,j]*cost[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96) for j in xrange(96)) + \
                    min_curPeak*17.33 + min_curMidPeak*0.13
        
        for item in curPeak:
            model += min_curPeak >= item
        model += min_curPeak >= peak
        for item in curMidPeak:
            model += min_curMidPeak >= item
        model += min_curMidPeak >= midpeak
        
    elif (tim.month in [1,2,3,4,11,12]) & (tim.isoweekday() in [6,7]):
        
        curPeak = [lpSum(lpSum(DayPower[opt_event[k]].tolist()[i]*X[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96)) + DayPower['power'].tolist()[j]) for j in xrange(96)]
        
        model += lpSum((DayPower[opt_event[k]].tolist()[i])*X[k,i,j]*cost[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96) for j in xrange(96)) + \
                    min_curPeak*17.33
            
        for item in curPeak:
            model += min_curPeak >= item
        model += min_curPeak >= peak
        
    elif (tim.month in [5,6,7,8,9,10]) & (tim.isoweekday() in [1,2,3,4,5]):
                
        curMidPeak = [lpSum(lpSum(DayPower[opt_event[k]].tolist()[i]*X[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96)) + DayPower['power'].tolist()[j]) for j in (range(34,48)+range(72,86))]
        curPeak = [lpSum(lpSum(DayPower[opt_event[k]].tolist()[i]*X[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96)) + DayPower['power'].tolist()[j]) for j in xrange(96)]
        curOnPeak = [lpSum(lpSum(DayPower[opt_event[k]].tolist()[i]*X[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96)) + DayPower['power'].tolist()[j]) for j in xrange(48,72)]
        
        model += lpSum((DayPower[opt_event[k]].tolist()[i])*X[k,i,j]*cost[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96) for j in xrange(96)) + \
                    min_curOnPeak*18.74 + min_curPeak*17.33 + min_curMidPeak*5.23
        
        for item in curPeak:
            model += min_curPeak >= item
        model += min_curPeak >= peak
        for item in curOnPeak:
            model += min_curOnPeak >= item
        model += min_curOnPeak >= onpeak
        for item in curMidPeak:
            model += min_curMidPeak >= item
        model += min_curMidPeak >= midpeak

    elif (tim.month in [5,6,7,8,9,10]) & (tim.isoweekday() in [6,7]):
        
        curPeak = [lpSum(lpSum(DayPower[opt_event[k]].tolist()[i]*X[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96)) + DayPower['power'].tolist()[j]) for j in xrange(96)]
        
        model += lpSum((DayPower[opt_event[k]].tolist()[i])*X[k,i,j]*cost[k,i,j] for k in xrange(len(opt_event)) for i in xrange(96) for j in xrange(96)) + \
                    min_curPeak*17.33
        
        for item in curPeak:
            model += min_curPeak >= item
        model += min_curPeak >= peak
        
    else:
        print "Error in month, day and time"
    
    # Create model constrains
    for k in xrange(len(opt_event)):
        oldpower = DailyPower.loc[DailyPower[opt_event[k]] >= 0,[opt_event[k],'ts']]
        newpower = DayPower.loc[DayPower[opt_event[k]] >= 0,[opt_event[k]]]
        power2 = newpower[opt_event[k]].tolist()

        positive_power = [p for p in power2 if p>0]
        M=len(positive_power)

        # Left and Right slots
        LS = oldpower['ts'][0]
        RS = oldpower['ts'][-1]

        # Set the precedence and the session duration constraints
        for i in xrange(LS):
            model += (lpSum(X[k,i,j] for j in range(96)) == 0)   
        # Down zeros
        for i in xrange(LS+M,96):
            model += (lpSum(X[k,i,j] for j in range(96)) == 0)    
        # Left zeros
        for i in xrange(LS,LS+M):
            model += (lpSum(X[k,i,j] for j in range(LS)) == 0)
        # Right zeros
        for i in xrange(LS,LS+M):
            model += (lpSum(X[k,i,j] for j in range(RS+1,96)) == 0)

        # Add the constraints
        for i in xrange(LS,LS+M):
            model += (lpSum(X[k,i,j] for j in range(LS,RS+1)) == 1)

        for i in xrange(LS,LS+M-1):
            model += (lpSum(X[i,j]*(j+1) for j in range(LS,RS+1)) == lpSum(X[i+1,j]*(j+1) for j in range(LS,RS+1))-1)
#             model += (lpSum(X[k,i,j]*(j+1) for j in range(LS,RS+1)) <= lpSum(X[k,i+1,j]*(j+1) for j in range(LS,RS+1))-1) # discrete 15-min charging load blocks

    model.solve(PULP_CBC_CMD(fracGap = 0.05, maxSeconds = 100, threads = None))
#     model.solve(GLPK_CMD(options=['--mipgap','0.05']))
    
    if model.status == 1:
        
        for k in xrange(len(opt_event)):
            
            oldpower = DailyPower.loc[DailyPower[opt_event[k]] >= 0,[opt_event[k],'ts']]
            newpower = DayPower.loc[DayPower[opt_event[k]] >= 0,[opt_event[k]]]
            power2 = newpower[opt_event[k]].tolist()

            positive_power = [p for p in power2 if p>0]
            M=len(positive_power)

            # Left and Right slots
            LS = oldpower['ts'][0]
            RS = oldpower['ts'][-1]

            slots = xrange(1,len(power2)+1)

            sol=[]
            for j in xrange(96):
                sol.append(sum(X[k,i,j].varValue*(j) for i in xrange(LS,LS+M)))
            corSlots=[slots[int(s)] for s in sol]
            ct=0
            power=[p*0 for p in power2]
            for s in sol:
                if s>0:
                    power[int(s)]=positive_power[ct]
                    ct=ct+1
                else:
                    continue
            DailyPower.loc[DailyPower.index[LS:RS+1],opt_event[k]] = power[LS:RS+1]
    else:
        print('The solution is suboptimal')
    return DailyPower, model.status

In [19]:
# run the optimization for each month's EV charging sessions
noFeasibleDays = []
for month in range(1,13):
    # monthly date range
    StartDate = ts2015[ts2015['month'] == month].day[0]
    EndDate = ts2015[ts2015['month'] == month].day[-1]
    rng = map(lambda x: x.strftime('%Y-%m-%d'),pd.date_range(StartDate, EndDate, freq='D'))
    
    EndDate2 = (datetime.strptime(EndDate,'%Y-%m-%d')+timedelta(days=1)).strftime('%Y-%m-%d')
#     EVSE_Power = query_EVSE_eventids(StartDate,EndDate2)
#     EVSE_Power = EVSE_Power[StartDate:EndDate]
    EVSE_Power = pd.read_csv('results/FlexDrivers/NewEVStatus/2015EV/'+'2015-'+str(month)+'Original.csv')
    EVSE_Power.index = EVSE_Power.ix[:,0].apply(lambda x: datetime.strptime(x,'%Y-%m-%d %H:%M:%S'))
    EVSE_Power.drop(EVSE_Power.columns[[0]], axis=1, inplace=True)
    
    # initialize the past peak demand values 
    DailyPower = []
    peak=0
    onpeak=0
    midpeak=0

    monthpeak = []
    monthonpeak = []
    monthmidpeak = []
    
    directory = 'results/FlexDrivers/NewEVStatus/OptV2/' + str(month)
    if not os.path.exists(directory):
        os.makedirs(directory)
    # run the daily optimization
    for day in rng:
        DailyPower = EVSE_Power[day]
        DailyPower = DailyPower.replace('',np.nan)
        DailyPower = DailyPower.dropna(axis=1,how='all')
        
        DriverOnList = DailyPower.columns
        N = len(DriverOnList)
        
        opt_event = []
        
        DailyPower['power'] = 0
        DailyPower['NonControlledPower'] = DailyPower.fillna(0).sum(axis=1)
        DailyPower['ts'] = range(96) # Add the tag of time step for each event id
        
        if DailyPower.empty:
            print 'EV Data on ' + day + ' is empty!'
            DailyPower.to_csv(directory + '/' + day +'.csv')
        else:
            for eventid in DriverOnList[::-1]:
                if (int(eventid) in EV_ID_Random) & (hasSlack(eventid,DailyPower)):
                    opt_event.append(eventid)
            DailyPower['power'] = DailyPower[[x for x in DriverOnList[::-1] if x not in opt_event]].fillna(0).sum(axis=1)
            DailyPower,status = OptimizeCostV2(DailyPower, opt_event, onpeak, midpeak, peak)
            
            if status == 1:
                DailyPower['power'] = DailyPower['power'] + DailyPower[opt_event].fillna(0).sum(axis=1)
                print 'Optimization on ' + day + ' is done successfully'
                DailyPower.to_csv(directory +'/'+ day +'-V2.csv')
            else:
                copyfile('results/FlexDrivers/NewEVStatus/OptV3/' + str(month)+'/'+ day +'-V3.csv',directory +'/'+ day +'-V2.csv')
                noFeasibleDays.append(day)
#             DailyPower.to_csv(directory +'/'+ day +'-V1.csv')
#     EVSE_Power[StartDate:EndDate].to_csv('results/FlexDrivers/NewEVStatus/OptV2/'+'2015-'+str(month)+'Original.csv')

with open(directory +'/'+'noFeasibleDays-V2.csv', 'wb') as f:
    writer = csv.writer(f)
    for val in noFeasibleDays:
        writer.writerow([val])


Optimization on 2015-01-01 is done successfully
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-19-75511591a185> in <module>()
     50                     opt_event.append(eventid)
     51             DailyPower['power'] = DailyPower[[x for x in DriverOnList[::-1] if x not in opt_event]].fillna(0).sum(axis=1)
---> 52             DailyPower,status = OptimizeCostV2(DailyPower, opt_event, onpeak, midpeak, peak)
     53 
     54             if status == 1:

<ipython-input-18-3727bde009e0> in OptimizeCostV2(DailyPower, opt_event, onpeak, midpeak, peak)
    111 
    112         for i in xrange(LS,LS+M-1):
--> 113             model += (lpSum(X[i,j]*(j+1) for j in range(LS,RS+1)) == lpSum(X[i+1,j]*(j+1) for j in range(LS,RS+1))-1)
    114 #             model += (lpSum(X[k,i,j]*(j+1) for j in range(LS,RS+1)) <= lpSum(X[k,i+1,j]*(j+1) for j in range(LS,RS+1))-1) # discrete 15-min charging load blocks
    115 

C:\Users\Rongxin\AppData\Local\Enthought\Canopy\User\lib\site-packages\pulp\pulp.pyc in lpSum(vector)
   1968     :param vector: A list of linear expressions
   1969     """
-> 1970     return LpAffineExpression().addInPlace(vector)
   1971 
   1972 def lpDot(v1, v2):

C:\Users\Rongxin\AppData\Local\Enthought\Canopy\User\lib\site-packages\pulp\pulp.pyc in addInPlace(self, other)
    711         elif (isinstance(other,list)
    712               or isinstance(other, Iterable)):
--> 713            for e in other:
    714                 self.addInPlace(e)
    715         else:

<ipython-input-18-3727bde009e0> in <genexpr>((j,))
    111 
    112         for i in xrange(LS,LS+M-1):
--> 113             model += (lpSum(X[i,j]*(j+1) for j in range(LS,RS+1)) == lpSum(X[i+1,j]*(j+1) for j in range(LS,RS+1))-1)
    114 #             model += (lpSum(X[k,i,j]*(j+1) for j in range(LS,RS+1)) <= lpSum(X[k,i+1,j]*(j+1) for j in range(LS,RS+1))-1) # discrete 15-min charging load blocks
    115 

KeyError: (27, 27)

Case 3: optimize the EV charging power base on the previous predefined charging schedule (discrete charging power)


In [10]:
def OptimizeCostV3(DailyPower, eventid, onpeak, midpeak, peak):
    
#     DailyPower2 = DailyPower.copy()
#     DailyPower2.loc[DailyPower2.index[0:LS_ref],opt_event] = np.nan
    
    DayPower = DailyPower.fillna(0)
    
    # Create matrix of slots
    X = LpVariable.dicts("ChargingStatus", [(i, j) for i in range(96) for j in range(96)], 0, 1, LpBinary)

    costs=[]
    
    for tim in DayPower.index:
        costs.append(getCostValueForTime(tim.month,tim.strftime('%H:%M'),tim.isoweekday()))
    cost={}
    for i in xrange(96):
        for j in xrange(96):
            cost[i,j]=costs[j]
   
    # Create model objective
    model = pulp.LpProblem("SmartCharging",pulp.LpMinimize)
    # Create model variables
    min_curMidPeak = LpVariable("Min MidPeak",0)
    min_curOnPeak = LpVariable("Min OnPeak",0)
    min_curPeak = LpVariable("Min Peak",0)
        
    tim = DayPower.index[0]
    if (tim.month in [1,2,3,4,11,12]) & (tim.isoweekday() in [1,2,3,4,5]):
        
        curMidPeak = [lpSum(lpSum(DayPower[eventid].tolist()[i]*X[i,j] for i in xrange(96)) + DayPower['power'].tolist()[j]) for j in xrange(34,86)]
        curPeak = [lpSum(lpSum(DayPower[eventid].tolist()[i]*X[i,j] for i in xrange(96)) + DayPower['power'].tolist()[j]) for j in xrange(96)]
        
        model += lpSum((DayPower[eventid].tolist()[i])*X[i,j]*cost[i,j] for i in xrange(96) for j in xrange(96)) + min_curPeak*17.33 + min_curMidPeak*0.13

        for item in curPeak:
            model += min_curPeak >= item
        model += min_curPeak >= peak
        for item in curMidPeak:
            model += min_curMidPeak >= item
        model += min_curMidPeak >= midpeak
        
    elif (tim.month in [1,2,3,4,11,12]) & (tim.isoweekday() in [6,7]):
        curPeak = [lpSum(lpSum(DayPower[eventid].tolist()[i]*X[i,j] for i in xrange(96)) + DayPower['power'].tolist()[j]) for j in xrange(96)]
        
        model += lpSum((DayPower[eventid].tolist()[i])*X[i,j]*cost[i,j] for i in xrange(96) for j in xrange(96)) + min_curPeak*17.33
        
        for item in curPeak:
            model += min_curPeak >= item
        model += min_curPeak >= peak
        
    elif (tim.month in [5,6,7,8,9,10]) & (tim.isoweekday() in [1,2,3,4,5]):
        curMidPeak = [lpSum(lpSum(DayPower[eventid].tolist()[i]*X[i,j] for i in xrange(96)) + DayPower['power'].tolist()[j]) for j in (range(34,48)+range(72,86))]
        curPeak = [lpSum(lpSum(DayPower[eventid].tolist()[i]*X[i,j] for i in xrange(96)) + DayPower['power'].tolist()[j]) for j in xrange(96)]
        curOnPeak = [lpSum(lpSum(DayPower[eventid].tolist()[i]*X[i,j] for i in xrange(96)) + DayPower['power'].tolist()[j]) for j in xrange(48,72)]
               
        model += lpSum((DayPower[eventid].tolist()[i])*X[i,j]*cost[i,j] for i in xrange(96) for j in xrange(96)) + \
                    min_curOnPeak*18.74 + min_curPeak*17.33 + min_curMidPeak*5.23
        
        for item in curPeak:
            model += min_curPeak >= item
        model += min_curPeak >= peak
        for item in curOnPeak:
            model += min_curOnPeak >= item
        model += min_curOnPeak >= onpeak
        for item in curMidPeak:
            model += min_curMidPeak >= item
        model += min_curMidPeak >= midpeak

    elif (tim.month in [5,6,7,8,9,10]) & (tim.isoweekday() in [6,7]):
        curPeak = [lpSum(lpSum(DayPower[eventid].tolist()[i]*X[i,j] for i in xrange(96)) + DayPower['power'].tolist()[j]) for j in xrange(96)]
        
        model += lpSum((DayPower[eventid].tolist()[i])*X[i,j]*cost[i,j] for i in xrange(96) for j in xrange(96)) + min_curPeak*17.33
        
        for item in curPeak:
            model += min_curPeak >= item
        model += min_curPeak >= peak
        
    else:
        print "Error in month, day and time"
    
    # Create model constrains
    oldpower = DailyPower.loc[DailyPower[eventid] >= 0,[eventid,'ts']]
    newpower = DayPower.loc[DayPower[eventid] >= 0,[eventid]]
    power2 = newpower[eventid].tolist()

    positive_power = [p for p in power2 if p>0]
    M=len(positive_power)

    # Left and Right slots
    LS = oldpower['ts'][0]
    RS = oldpower['ts'][-1]

    # Set the precedence and the session duration constraints
    for i in xrange(LS):
        model += (lpSum(X[i,j] for j in range(96)) == 0)   
    # Down zeros
    for i in xrange(LS+M,96):
        model += (lpSum(X[i,j] for j in range(96)) == 0)    
    # Left zeros
    for i in xrange(LS,LS+M):
        model += (lpSum(X[i,j] for j in range(LS)) == 0)
    # Right zeros
    for i in xrange(LS,LS+M):
        model += (lpSum(X[i,j] for j in range(RS+1,96)) == 0)

    # Add the constraints
    for i in xrange(LS,LS+M):
        model += (lpSum(X[i,j] for j in range(LS,RS+1)) == 1)

    for i in xrange(LS,LS+M-1):
#         model += (lpSum(X[i,j]*(j+1) for j in range(LS,RS+1)) == lpSum(X[i+1,j]*(j+1) for j in range(LS,RS+1))-1)
        model += (lpSum(X[i,j]*(j+1) for j in range(LS,RS+1)) <= lpSum(X[i+1,j]*(j+1) for j in range(LS,RS+1))-1) # discrete 15-min charging load blocks

    model.solve()
    
    if model.status == 1:
        oldpower = DailyPower.loc[DailyPower[eventid] >= 0,[eventid,'ts']]
        newpower = DayPower.loc[DayPower[eventid] >= 0,[eventid]]
        power2 = newpower[eventid].tolist()

        positive_power = [p for p in power2 if p>0]
        M=len(positive_power)

        # Left and Right slots
        LS = oldpower['ts'][0]
        RS = oldpower['ts'][-1]

        slots = xrange(1,len(power2)+1)

        sol=[]
        for j in xrange(96):
            sol.append(sum(X[i,j].varValue*(j) for i in xrange(LS,LS+M)))
        corSlots=[slots[int(s)] for s in sol]
        ct=0
        power=[p*0 for p in power2]
        for s in sol:
            if s>0:
                power[int(s)]=positive_power[ct]
                ct=ct+1
            else:
                continue
        DailyPower.loc[DailyPower.index[LS:RS+1],eventid] = power[LS:RS+1]
    else:
        print('The solution is suboptimal')
    return DailyPower

In [11]:
# run the optimization for each month's EV charging sessions

for month in range(3,13):
    # monthly date range
    StartDate = ts2015[ts2015['month'] == month].day[0]
    EndDate = ts2015[ts2015['month'] == month].day[-1]
    rng = map(lambda x: x.strftime('%Y-%m-%d'),pd.date_range(StartDate, EndDate, freq='D'))
    
    EndDate2 = (datetime.strptime(EndDate,'%Y-%m-%d')+timedelta(days=1)).strftime('%Y-%m-%d')
#     EVSE_Power = query_EVSE_eventids(StartDate,EndDate2)
#     EVSE_Power = EVSE_Power[StartDate:EndDate]
    EVSE_Power = pd.read_csv('results/FlexDrivers/NewEVStatus/2015EV/'+'2015-'+str(month)+'Original.csv')
    EVSE_Power.index = EVSE_Power.ix[:,0].apply(lambda x: datetime.strptime(x,'%Y-%m-%d %H:%M:%S'))
    EVSE_Power.drop(EVSE_Power.columns[[0]], axis=1, inplace=True)
    
    # initialize the past peak demand values 
    DailyPower = []
    peak=0
    onpeak=0
    midpeak=0

    monthpeak = []
    monthonpeak = []
    monthmidpeak = []
    
    directory = 'results/FlexDrivers/NewEVStatus/OptV3/' + str(month)
    if not os.path.exists(directory):
        os.makedirs(directory)
    # run the daily optimization
    for day in rng:
        DailyPower = EVSE_Power[day]
        DailyPower = DailyPower.replace('',np.nan)
        DailyPower = DailyPower.dropna(axis=1,how='all')
        
        DriverOnList = DailyPower.columns
        N = len(DriverOnList)
        
        opt_event = []
        past_event = []
        
        DailyPower['power'] = 0
        DailyPower['NonControlledPower'] = DailyPower[DriverOnList].fillna(0).sum(axis=1)
        DailyPower['ts'] = range(96) # Add the tag of time step for each event id
        
        if DailyPower.empty:
            print 'EV Data on ' + day + ' is empty!'
            DailyPower.to_csv(directory + '/' + day +'.csv')
        else:
            for eventid in DriverOnList[::-1]:
                if (int(eventid) in EV_ID_Random) & (hasSlack(eventid,DailyPower)):
                    # Run the optimization for the current EV
                    DailyPower = OptimizeCostV3(DailyPower, eventid, onpeak, midpeak, peak)
                else:
                    print 'No slack in '+str(eventid)
                
                DailyPower['power'] = DailyPower['power'] + DailyPower[eventid].fillna(0)

            print 'Optimization on ' + day + ' is done successfully'
            
            DailyPower.to_csv(directory +'/'+ day +'-V3.csv')
#     EVSE_Power[StartDate:EndDate].to_csv('results/FlexDrivers/NewEVStatus/OptV4/'+'2015-'+str(month)+'Original.csv')


No slack in 24070693
Optimization on 2015-03-01 is done successfully
No slack in 24096173
No slack in 24101133
No slack in 24109197
Optimization on 2015-03-02 is done successfully
No slack in 24106995
No slack in 24107513
No slack in 24108827
No slack in 24125981
No slack in 24132729
No slack in 24134801
No slack in 24139633
No slack in 24148061
No slack in 24148691
Optimization on 2015-03-03 is done successfully
No slack in 24142621
No slack in 24143175
No slack in 24145287
No slack in 24145915
No slack in 24147605
No slack in 24160389
No slack in 24164371
No slack in 24172543
No slack in 24172879
No slack in 24184325
No slack in 24186919
Optimization on 2015-03-04 is done successfully
No slack in 24180159
No slack in 24181511
No slack in 24185899
No slack in 24203285
No slack in 24210037
No slack in 24222353
Optimization on 2015-03-05 is done successfully
No slack in 24235925
No slack in 24235899
No slack in 24235977
No slack in 24244193
No slack in 24246113
No slack in 24253617
No slack in 24257267
Optimization on 2015-03-06 is done successfully
No slack in 24259165
No slack in 24259865
Optimization on 2015-03-07 is done successfully
No slack in 24259165
Optimization on 2015-03-08 is done successfully
No slack in 24258405
No slack in 24259049
No slack in 24259165
No slack in 24306283
No slack in 24327071
No slack in 24327129
Optimization on 2015-03-09 is done successfully
No slack in 24319837
No slack in 24327073
No slack in 24329145
No slack in 24341891
Optimization on 2015-03-10 is done successfully
No slack in 24366357
No slack in 24366429
No slack in 24366443
No slack in 24366455
No slack in 24366601
No slack in 24387059
No slack in 24388527
No slack in 24390193
No slack in 24392853
No slack in 24397171
No slack in 24398605
No slack in 24400471
No slack in 24403385
Optimization on 2015-03-11 is done successfully
No slack in 24403727
No slack in 24404595
No slack in 24404961
No slack in 24414493
No slack in 24417461
No slack in 24439867
No slack in 24442995
Optimization on 2015-03-12 is done successfully
No slack in 24437695
No slack in 24439299
No slack in 24439913
No slack in 24440961
No slack in 24441505
No slack in 24443031
No slack in 24443575
No slack in 24455297
No slack in 24457501
No slack in 24464707
No slack in 24464869
No slack in 24468689
No slack in 24468809
No slack in 24474451
No slack in 24474431
No slack in 24474609
No slack in 24474619
No slack in 24475087
No slack in 24476419
No slack in 24477439
Optimization on 2015-03-13 is done successfully
No slack in 24479745
Optimization on 2015-03-14 is done successfully
No slack in 24479745
Optimization on 2015-03-15 is done successfully
No slack in 24479725
No slack in 24479745
No slack in 24480429
No slack in 24480947
No slack in 24552333
Optimization on 2015-03-16 is done successfully
No slack in 24552331
No slack in 24552335
No slack in 24548483
No slack in 24560157
No slack in 24573663
No slack in 24581317
No slack in 24584135
Optimization on 2015-03-17 is done successfully
No slack in 24581231
No slack in 24581253
No slack in 24581271
No slack in 24587461
No slack in 24611229
No slack in 24612687
No slack in 24616367
No slack in 24624675
Optimization on 2015-03-18 is done successfully
No slack in 24619557
No slack in 24626183
No slack in 24626207
No slack in 24651205
Optimization on 2015-03-19 is done successfully
No slack in 24659301
No slack in 24661075
No slack in 24662917
No slack in 24663271
No slack in 24663405
No slack in 24697279
Optimization on 2015-03-20 is done successfully
Optimization on 2015-03-21 is done successfully
No slack in 24730823
Optimization on 2015-03-22 is done successfully
No slack in 24697237
No slack in 24755441
No slack in 24756605
No slack in 24758249
Optimization on 2015-03-23 is done successfully
No slack in 24769983
No slack in 24770753
No slack in 24771225
No slack in 24772247
No slack in 24787247
No slack in 24788091
No slack in 24788737
No slack in 24808463
Optimization on 2015-03-24 is done successfully
No slack in 24807353
No slack in 24808627
No slack in 24810941
No slack in 24811275
No slack in 24811535
No slack in 24824819
No slack in 24836361
Optimization on 2015-03-25 is done successfully
No slack in 24847349
No slack in 24847875
No slack in 24850827
No slack in 24851325
No slack in 24852809
No slack in 24852901
No slack in 24864119
No slack in 24870323
No slack in 24877557
No slack in 24880919
No slack in 24890529
Optimization on 2015-03-26 is done successfully
---------------------------------------------------------------------------
PulpSolverError                           Traceback (most recent call last)
<ipython-input-11-72240a2ea3da> in <module>()
     50                 if (int(eventid) in EV_ID_Random) & (hasSlack(eventid,DailyPower)):
     51                     # Run the optimization for the current EV
---> 52                     DailyPower = OptimizeCostV3(DailyPower, eventid, onpeak, midpeak, peak)
     53                 else:
     54                     print 'No slack in '+str(eventid)

<ipython-input-10-7ed8d8b728c0> in OptimizeCostV3(DailyPower, eventid, onpeak, midpeak, peak)
    111         model += (lpSum(X[i,j]*(j+1) for j in range(LS,RS+1)) <= lpSum(X[i+1,j]*(j+1) for j in range(LS,RS+1))-1) # discrete 15-min charging load blocks
    112 
--> 113     model.solve()
    114 
    115     if model.status == 1:

C:\Users\Rongxin\AppData\Local\Enthought\Canopy\User\lib\site-packages\pulp\pulp.pyc in solve(self, solver, **kwargs)
   1641         #time it
   1642         self.solutionTime = -clock()
-> 1643         status = solver.actualSolve(self, **kwargs)
   1644         self.solutionTime += clock()
   1645         self.restoreObjective(wasNone, dummyVar)

C:\Users\Rongxin\AppData\Local\Enthought\Canopy\User\lib\site-packages\pulp\solvers.pyc in actualSolve(self, lp, **kwargs)
   1301     def actualSolve(self, lp, **kwargs):
   1302         """Solve a well formulated lp problem"""
-> 1303         return self.solve_CBC(lp, **kwargs)
   1304 
   1305     def available(self):

C:\Users\Rongxin\AppData\Local\Enthought\Canopy\User\lib\site-packages\pulp\solvers.pyc in solve_CBC(self, lp, use_mps)
   1362         if cbc.wait() != 0:
   1363             raise PulpSolverError("Pulp: Error while trying to execute " +  \
-> 1364                                     self.path)
   1365         if not os.path.exists(tmpSol):
   1366             raise PulpSolverError("Pulp: Error while executing "+self.path)

PulpSolverError: Pulp: Error while trying to execute C:\Users\Rongxin\AppData\Local\Enthought\Canopy\User\lib\site-packages\pulp\solverdir\cbc\win\64\cbc.exe

Case 4: optimize the EV charging power base on the previous predefined charging schedule (continues charging power)


In [ ]:
def OptimizeCostV4(DailyPower, eventid, onpeak, midpeak, peak):
    
#     DailyPower2 = DailyPower.copy()
#     DailyPower2.loc[DailyPower2.index[0:LS_ref],opt_event] = np.nan
    
    DayPower = DailyPower.fillna(0)
    
    # Create matrix of slots
    X = LpVariable.dicts("ChargingStatus", [(i, j) for i in range(96) for j in range(96)], 0, 1, LpBinary)

    costs=[]
    
    for tim in DayPower.index:
        costs.append(getCostValueForTime(tim.month,tim.strftime('%H:%M'),tim.isoweekday()))
    cost={}
    for i in xrange(96):
        for j in xrange(96):
            cost[i,j]=costs[j]
   
    # Create model objective
    model = pulp.LpProblem("SmartCharging",pulp.LpMinimize)
    # Create model variables
    min_curMidPeak = LpVariable("Min MidPeak",0)
    min_curOnPeak = LpVariable("Min OnPeak",0)
    min_curPeak = LpVariable("Min Peak",0)
        
    tim = DayPower.index[0]
    if (tim.month in [1,2,3,4,11,12]) & (tim.isoweekday() in [1,2,3,4,5]):
        
        curMidPeak = [lpSum(lpSum(DayPower[eventid].tolist()[i]*X[i,j] for i in xrange(96)) + DayPower['power'].tolist()[j]) for j in xrange(34,86)]
        curPeak = [lpSum(lpSum(DayPower[eventid].tolist()[i]*X[i,j] for i in xrange(96)) + DayPower['power'].tolist()[j]) for j in xrange(96)]
        
        model += lpSum((DayPower[eventid].tolist()[i])*X[i,j]*cost[i,j] for i in xrange(96) for j in xrange(96)) + \
                    min_curPeak*17.33 + min_curMidPeak*0.13

        for item in curPeak:
            model += min_curPeak >= item
        model += min_curPeak >= peak
        for item in curMidPeak:
            model += min_curMidPeak >= item
        model += min_curMidPeak >= midpeak
        
    elif (tim.month in [1,2,3,4,11,12]) & (tim.isoweekday() in [6,7]):
        curPeak = [lpSum(lpSum(DayPower[eventid].tolist()[i]*X[i,j] for i in xrange(96)) + DayPower['power'].tolist()[j]) for j in xrange(96)]
        
        model += lpSum((DayPower[eventid].tolist()[i])*X[i,j]*cost[i,j] for i in xrange(96) for j in xrange(96)) + \
                    min_curPeak*17.33
        
        for item in curPeak:
            model += min_curPeak >= item
        model += min_curPeak >= peak
        
    elif (tim.month in [5,6,7,8,9,10]) & (tim.isoweekday() in [1,2,3,4,5]):
        curMidPeak = [lpSum(lpSum(DayPower[eventid].tolist()[i]*X[i,j] for i in xrange(96)) + DayPower['power'].tolist()[j]) for j in (range(34,48)+range(72,86))]
        curPeak = [lpSum(lpSum(DayPower[eventid].tolist()[i]*X[i,j] for i in xrange(96)) + DayPower['power'].tolist()[j]) for j in xrange(96)]
        curOnPeak = [lpSum(lpSum(DayPower[eventid].tolist()[i]*X[i,j] for i in xrange(96)) + DayPower['power'].tolist()[j]) for j in xrange(48,72)]
               
        model += lpSum((DayPower[eventid].tolist()[i])*X[i,j]*cost[i,j] for i in xrange(96) for j in xrange(96)) + \
                    min_curOnPeak*18.74 + min_curPeak*17.33 + min_curMidPeak*5.23
        
        for item in curPeak:
            model += min_curPeak >= item
        model += min_curPeak >= peak
        for item in curOnPeak:
            model += min_curOnPeak >= item
        model += min_curOnPeak >= onpeak
        for item in curMidPeak:
            model += min_curMidPeak >= item
        model += min_curMidPeak >= midpeak

    elif (tim.month in [5,6,7,8,9,10]) & (tim.isoweekday() in [6,7]):
        curPeak = [lpSum(lpSum(DayPower[eventid].tolist()[i]*X[i,j] for i in xrange(96)) + DayPower['power'].tolist()[j]) for j in xrange(96)]
         model += lpSum((DayPower[eventid].tolist()[i])*X[i,j]*cost[i,j] for i in xrange(96) for j in xrange(96)) + \
                    min_curPeak*17.33
        
        for item in curPeak:
            model += min_curPeak >= item
        model += min_curPeak >= peak
        
    else:
        print "Error in month, day and time"
    
    # Create model constrains
    oldpower = DailyPower.loc[DailyPower[eventid] >= 0,[eventid,'ts']]
    newpower = DayPower.loc[DayPower[eventid] >= 0,[eventid]]
    power2 = newpower[eventid].tolist()

    positive_power = [p for p in power2 if p>0]
    M=len(positive_power)

    # Left and Right slots
    LS = oldpower['ts'][0]
    RS = oldpower['ts'][-1]

    # Set the precedence and the session duration constraints
    for i in xrange(LS):
        model += (lpSum(X[i,j] for j in range(96)) == 0)   
    # Down zeros
    for i in xrange(LS+M,96):
        model += (lpSum(X[i,j] for j in range(96)) == 0)    
    # Left zeros
    for i in xrange(LS,LS+M):
        model += (lpSum(X[i,j] for j in range(LS)) == 0)
    # Right zeros
    for i in xrange(LS,LS+M):
        model += (lpSum(X[i,j] for j in range(RS+1,96)) == 0)

    # Add the constraints
    for i in xrange(LS,LS+M):
        model += (lpSum(X[i,j] for j in range(LS,RS+1)) == 1)

    for i in xrange(LS,LS+M-1):
        model += (lpSum(X[i,j]*(j+1) for j in range(LS,RS+1)) == lpSum(X[i+1,j]*(j+1) for j in range(LS,RS+1))-1)
#         model += (lpSum(X[k,i,j]*(j+1) for j in range(LS,RS+1)) <= lpSum(X[k,i+1,j]*(j+1) for j in range(LS,RS+1))-1) # discrete 15-min charging load blocks

    model.solve()
    
    if model.status == 1:
        oldpower = DailyPower.loc[DailyPower[eventid] >= 0,[eventid,'ts']]
        newpower = DayPower.loc[DayPower[eventid] >= 0,[eventid]]
        power2 = newpower[eventid].tolist()

        positive_power = [p for p in power2 if p>0]
        M=len(positive_power)

        # Left and Right slots
        LS = oldpower['ts'][0]
        RS = oldpower['ts'][-1]

        slots = xrange(1,len(power2)+1)

        sol=[]
        for j in xrange(96):
            sol.append(sum(X[i,j].varValue*(j) for i in xrange(LS,LS+M)))
        corSlots=[slots[int(s)] for s in sol]
        ct=0
        power=[p*0 for p in power2]
        for s in sol:
            if s>0:
                power[int(s)]=positive_power[ct]
                ct=ct+1
            else:
                continue
        DailyPower.loc[DailyPower.index[LS:RS+1],eventid] = power[LS:RS+1]
    else:
        print('The solution is suboptimal')
    return DailyPower

In [ ]:
# run the optimization for each month's EV charging sessions

for month in range(1,13):
    # monthly date range
    StartDate = ts2015[ts2015['month'] == month].day[0]
    EndDate = ts2015[ts2015['month'] == month].day[-1]
    rng = map(lambda x: x.strftime('%Y-%m-%d'),pd.date_range(StartDate, EndDate, freq='D'))
    
    EndDate2 = (datetime.strptime(EndDate,'%Y-%m-%d')+timedelta(days=1)).strftime('%Y-%m-%d')
#     EVSE_Power = query_EVSE_eventids(StartDate,EndDate2)
#     EVSE_Power = EVSE_Power[StartDate:EndDate]
    EVSE_Power = pd.read_csv('results/FlexDrivers/NewEVStatus/2015EV/'+'2015-'+str(month)+'Original.csv')
    EVSE_Power.index = EVSE_Power.ix[:,0].apply(lambda x: datetime.strptime(x,'%Y-%m-%d %H:%M:%S'))
    EVSE_Power.drop(EVSE_Power.columns[[0]], axis=1, inplace=True)
    
    # initialize the past peak demand values 
    DailyPower = []
    peak=0
    onpeak=0
    midpeak=0

    monthpeak = []
    monthonpeak = []
    monthmidpeak = []
    
    directory = 'results/FlexDrivers/NewEVStatus/OptV4/' + str(month)
    if not os.path.exists(directory):
        os.makedirs(directory)
    # run the daily optimization
    for day in rng:
        DailyPower = EVSE_Power[day]
        DailyPower = DailyPower.replace('',np.nan)
        DailyPower = DailyPower.dropna(axis=1,how='all')
        
        DriverOnList = DailyPower.columns
        N = len(DriverOnList)
        
        opt_event = []
        past_event = []
        
        DailyPower['power'] = 0
        DailyPower['NonControlledPower'] = DailyPower[DriverOnList].fillna(0).sum(axis=1)
        DailyPower['ts'] = range(96) # Add the tag of time step for each event id
        
        if DailyPower.empty:
            print 'EV Data on ' + day + ' is empty!'
            DailyPower.to_csv(directory + '/' + day +'.csv')
        else:
            for eventid in DriverOnList[::-1]:
                if (int(eventid) in EV_ID_Random) & (hasSlack(eventid,DailyPower)):
                    # Run the optimization for the current EV
                    DailyPower = OptimizeCostV4(DailyPower, eventid, onpeak, midpeak, peak)
                else:
                    print 'No slack in '+str(eventid)
                
                DailyPower['power'] = DailyPower['power'] + DailyPower[eventid].fillna(0)

            print 'Optimization on ' + day + ' is done successfully'
            
            DailyPower.to_csv(directory +'/'+ day +'-V4.csv')
#     EVSE_Power[StartDate:EndDate].to_csv('results/FlexDrivers/NewEVStatus/OptV4/'+'2015-'+str(month)+'Original.csv')

In [ ]: