if (not os.path.isfile(kitchOut2PickleFilename \
                       and kitchOut3PickleFilename \
                       and kitchOut4PickleFilename \
                       and microwavePickleFilename \
                       and oven01PickleFilename \
                       and oven02PickleFilename \
                       and refrigeratorPickleFilename \
                       and stovePickleFilename)):
    # Add observations to the appropriate tesla training objects
    for i in range(0, 10000):
        # Kitchen Outlets 2
        (timestamp, kitchOut2Entry) = kitchOut2Trace.readline().split();
        kitchOut2Entry = float(kitchOut2Entry);
        (timestamp, kitchOut2Output) = kitchOut2OutputTrace.readline().split();
        kitchOut2Output = int(kitchOut2Output);
        kitchOut2Trainer.addSingleObservation([kitchOut2Entry], kitchOut2Output);

        # Kitchen Outlets 3
        (timestamp, kitchOut3Entry) = kitchOut3Trace.readline().split();
        kitchOut3Entry = float(kitchOut3Entry);
        (timestamp, kitchOut3Output) = kitchOut3OutputTrace.readline().split();
        kitchOut3Output = int(kitchOut3Output);
        kitchOut3Trainer.addSingleObservation([kitchOut3Entry], kitchOut3Output);

        # Kitchen Outlets 4
        (timestamp, kitchOut4Entry) = kitchOut4Trace.readline().split();
        kitchOut4Entry = float(kitchOut4Entry);
        (timestamp, kitchOut4Output) = kitchOut4OutputTrace.readline().split();
        kitchOut4Output = int(kitchOut4Output);
        kitchOut4Trainer.addSingleObservation([kitchOut4Entry], kitchOut4Output);
## Change the name of the algorithm to test it out.
algorithmTest = Tesla(Complexity.firstOrder, 2, 0, [0, 0], {});
teslaTimestamps = {};
knnTimestamps = {};

for trainingSample in range(numTrainingSamples):
    inputRow = next(inputReader);
    outputRow = next(outputReader);
    if (len(inputRow) > 0):
        input1 = float(inputRow[0]);
        input2 = float(inputRow[1]);
        output = float(outputRow[0]);

        firstTS = time.time();
        algorithmTest.addSingleObservation([input1, input2], output);
        secondTS = time.time();
        teslaTimestamps["load" + str(trainingSample)] = secondTS - firstTS;

firstTS = time.time();
algorithmTest.train();
secondTS = time.time();
teslaTimestamps["train"] = secondTS - firstTS;

runningTotal = 0;
for executeSample in range(numExecuteSamples):
    inputRow = next(inputReader);
    outputRow = next(outputReader);
    if (len(inputRow) > 0):
        input1 = float(inputRow[0]);
        input2 = float(inputRow[1]);
Exemple #3
0
refrigeratorPickleFile2 = 'traces/refrigeratorTrained2.dat';
refrigeratorPickleFile3 = 'traces/refrigeratorTrained3.dat';
refrigeratorPickleFile4 = 'traces/refrigeratorTrained4.dat';

# Open the files needed: input trace and output observations
refrigeratorTrace = open('traces/refrigerator.dat', mode='r');
refrigeratorOutputTrace = open('traces/refrigerator_obs.dat', mode='r');

# First, parse the first 3 elements, needed as additional inputs
# Add observations to the appropriate tesla training objects# First observation
# First observation
(timestamp, refrigeratorEntry1) = refrigeratorTrace.readline().split();
refrigeratorEntry1 = float(refrigeratorEntry1);
(timestamp, refrigeratorOutput) = refrigeratorOutputTrace.readline().split();
refrigeratorOutput = int(refrigeratorOutput);
refrigeratorTrainer1.addSingleObservation([refrigeratorEntry1], refrigeratorOutput);
# Second observation
(timestamp, refrigeratorEntry2) = refrigeratorTrace.readline().split();
refrigeratorEntry2 = float(refrigeratorEntry2);
(timestamp, refrigeratorOutput) = refrigeratorOutputTrace.readline().split();
refrigeratorOutput = int(refrigeratorOutput);
refrigeratorTrainer1.addSingleObservation([refrigeratorEntry2],\
                                          refrigeratorOutput);
refrigeratorTrainer2.addSingleObservation([refrigeratorEntry1,\
                                           refrigeratorEntry2],\
                                          refrigeratorOutput);
# Third observation
(timestamp, refrigeratorEntry3) = refrigeratorTrace.readline().split();
refrigeratorEntry3 = float(refrigeratorEntry3);
(timestamp, refrigeratorOutput) = refrigeratorOutputTrace.readline().split();
refrigeratorOutput = int(refrigeratorOutput);
## Change the name of the algorithm to test it out.
algorithmTest = Tesla(Complexity.firstOrder, 1, 0, [0, 0], {});
teslaTimestamps = {};
knnTimestamps = {};

for trainingSample in range(numTrainingSamples):
    inputRow = next(inputReader);
    outputRow = next(outputReader);
    if (len(inputRow) > 0):
        input1 = float(inputRow[0]);
        input2 = float(inputRow[1]);
        output = float(outputRow[0]);

        firstTS = time.time();
        algorithmTest.addSingleObservation([input1, input2], output);
        secondTS = time.time();
        teslaTimestamps["load" + str(trainingSample)] = secondTS - firstTS;
print(str(trainingSample))
firstTS = time.time();
algorithmTest.train();
secondTS = time.time();
teslaTimestamps["train"] = secondTS - firstTS;

runningTotal = 0;
for executeSample in range(numExecuteSamples):
    inputRow = next(inputReader);
    outputRow = next(outputReader);
    if (len(inputRow) > 0):
        input1 = float(inputRow[0]);
        input2 = float(inputRow[1]);
Exemple #5
0
outputReader = csv.reader(outputFile)

## Change the name of the algorithm to test it out.
algorithmTest = Tesla(complexity, numInputs, 0, [0] * numInputs, {})
teslaTimestamps = {}
knnTimestamps = {}

for trainingSample in range(numTrainingSamples):
    inputRow = next(inputReader)
    outputRow = next(outputReader)
    if (len(inputRow) > 0):
        inputs = [float(x) for x in inputRow[0:numInputs]]
        output = float(outputRow[0])

        firstTS = time.time()
        algorithmTest.addSingleObservation(inputs, output)
        secondTS = time.time()
        teslaTimestamps["load" + str(trainingSample)] = secondTS - firstTS
print(str(trainingSample))
firstTS = time.time()
algorithmTest.train()
secondTS = time.time()
teslaTimestamps["train"] = secondTS - firstTS

runningTotal = 0
for executeSample in range(numExecuteSamples):
    inputRow = next(inputReader)
    outputRow = next(outputReader)
    if (len(inputRow) > 0):
        inputs = [float(x) for x in inputRow[0:numInputs]]
        output = float(outputRow[0])
			# Depending on which trial, offset the starting point for obtaining training samples
			try:
				inputRow = next(inputReader);
				outputRow = next(outputReader);
			except:
				inputFile.seek(0);
				outputFile.seek(0);
				inputRow = next(inputReader);
				outputRow = next(outputReader);
		
			if (len(inputRow) > 0):
				inputVec = [ float(x) for x in inputRow ]
				output = float(outputRow[0]);

				firstTS = time.time();
				algorithmTest.addSingleObservation(inputVec, output);
				secondTS = time.time();
				teslaTimestamps["load" + str(trainingSample)] = secondTS - firstTS;
			else:
				print("Error reading training samples");
				sys.exit();

		firstTS = time.time();
		algorithmTest.train();
		secondTS = time.time();
		teslaTimestamps["train"] = secondTS - firstTS;

		## Load samples and TEST
		runningTotal = 0;
		for executeSample in range(numExecuteSamples):
			try:
class PecanStreetCE():

    def __init__(self, funcOrder=3, numOfInputs=2, numHistoryStates=0):
        self.inputData = []
        self.outputData = []
        self.flexCE = Tesla(order=funcOrder, numInputs=(numOfInputs+numHistoryStates));
        self.aggregatedError = 0.0;
        self.aggregatedCount = 0;
        self.errorNumerator = 0.0;
        self.errorDenominator = 0;
        self.predictedList = [];
        self.actualList = [];
        self.testSetPredictedList = [];
        self.testSetActualList = [];
        self.numInputs = numOfInputs;
        self.numHistoryStates = numHistoryStates;

    def runTesla(self, csvFilepath):
        with open(csvFilepath) as csvFile:
            reader = csv.reader(csvFile);
            i = 0;
            for row in reader:
                inputList = [];
                historyList = [];
                outputValue = 0.0;

                if (i != 0 and i < self.numHistoryStates):
                    self.predictedList.append(0.0);
                    self.actualList.append(float(row[self.numInputs]));  
                elif (i != 0):
                    # Append the appropriate number of values from the CSV file to the input list.
                    for j in range(0,self.numInputs):
                        inputList.append(float(row[j]));

                    # Generate a list of history states to append to the inputs
                    for k in range(0, self.numHistoryStates):
                        historyList.append(-1-k);

                    # Append the history state as an additional inputs.
                    inputList += historyList;
                    outputValue = float(row[self.numInputs]);

                    self.inputData.append(inputList);
                    self.outputData.append(outputValue);

                if (i >= self.numHistoryStates and i <= 17500):
                    self.flexCE.addSingleObservation(inputList,
                                                     outputValue);
                    # Append garbage data to predicted, since this is training.
                    self.predictedList.append(0.0);
                    self.actualList.append(outputValue);

                elif (i > 17500 and i <= 35000):
                    predicted = self.flexCE.test(inputList);
                    if (predicted < 0):
                        predicted = 0.0;
                    actual = outputValue;

                    self.aggregatedError += pow(actual-predicted, 2);
                    self.aggregatedCount += 1;

#                    print(str(actual), "\t", str(predicted))
                    self.errorNumerator += abs((actual-predicted));
                    self.errorDenominator += 1;

                    self.predictedList.append(predicted);
                    self.actualList.append(actual);
                    self.testSetPredictedList.append(predicted);
                    self.testSetActualList.append(actual);

                elif (i > 35000):
                    print(str(time.clock()));
                    break;

                if (i == 17500):
                    print("Training data loaded");
                    startTime = time.clock()
                    self.flexCE.train();
                    elapsedTime = time.clock() - startTime;
                    print("CE trained, elapsed time:",
                          str(elapsedTime));
                    print(str(time.clock()));
                i+=1;
class CitisenseCE():

    def __init__(self):
        self.outData = []
        self.tuplesCovered = []
        self.aqiTrainingLUT = {}
        self.aqiTestLUT = {}
        self.dateTimeLUT = {}
        self.dateTimeCE = Tesla(order=2, numInputs=2);
        self.coarseLatCE = Tesla(order=3, numInputs=1);
        self.coarseLngCE = Tesla(order=3, numInputs=1);
        self.aqiCE = Tesla(order=3, numInputs=3);

    def enumerateAQI(self, rawValue):
        if (rawValue < 0.0):
            return -1;
        elif (rawValue <= 50.0):
            return 0;
        elif (rawValue <= 100.0):
            return 1;
        elif (rawValue <= 150.0):
            return 2;
        elif (rawValue <= 200.0):
            return 3;
        elif (rawValue <= 300.0):
            return 4;
        else:
            return 5;

    def truncate(self, f, n):
        '''Truncates/pads a float f to n decimal places without rounding'''
        s = '%.12f' % f
        i, p, d = s.partition('.')
        return '.'.join([i, (d+'0'*n)[:n]])

    def genLUTs(self):
        with open('../traces/aqiOnly.csv', 'r') as csvFile:
            reader = csv.reader(csvFile)
            index = 0
            for row in reader:
                if (not index == 0) and (len(row) > 0):
                    reading = float(row[6])
                    date = datetime.datetime.strptime(row[7]+"00", "%Y-%m-%d %H:%M:%S%z")
                    coarseLat = float(self.truncate(float(row[8]), 6))
                    coarseLng = float(self.truncate(float(row[9]), 6))
                    dateInt = date.hour*60+date.minute

                    if (index <= 1400):
                        self.coarseLatCE.addSingleObservation([float(row[8])], coarseLat);
                        self.coarseLngCE.addSingleObservation([float(row[9])], coarseLng);
                        if (date.hour, date.minute) not in self.dateTimeLUT:
                            self.dateTimeLUT[(date.hour, date.minute)] = dateInt
                            self.dateTimeCE.addSingleObservation([date.hour, date.minute], dateInt);
                        if (coarseLat, coarseLng, dateInt) in self.aqiTrainingLUT:
                            print("Duplicate found! "
                                  + str(reading)
                                  + " vs. "
                                  + str(self.aqiTrainingLUT[(coarseLat, coarseLng, dateInt)]));
                            continue;
                        else:
                            self.aqiTrainingLUT[(coarseLat, coarseLng, dateInt)] = reading;
                            self.aqiCE.addSingleObservation([coarseLat, coarseLng, dateInt], reading);

                    elif (index <= 2000):
                        self.aqiTestLUT[(coarseLat, coarseLng, dateInt)] = reading;

                    else:
                        break;

                index += 1;
Exemple #9
0
if (not os.path.isfile(kitchOut2PickleFilename \
                       and kitchOut3PickleFilename \
                       and kitchOut4PickleFilename \
                       and microwavePickleFilename \
                       and oven01PickleFilename \
                       and oven02PickleFilename \
                       and refrigeratorPickleFilename \
                       and stovePickleFilename)):
    # Add observations to the appropriate tesla training objects
    for i in range(0, 10000):
        # Kitchen Outlets 2
        (timestamp, kitchOut2Entry) = kitchOut2Trace.readline().split();
        kitchOut2Entry = float(kitchOut2Entry);
        (timestamp, kitchOut2Output) = kitchOut2OutputTrace.readline().split();
        kitchOut2Output = int(kitchOut2Output);
        kitchOut2Trainer.addSingleObservation([kitchOut2Entry], kitchOut2Output);

        # Kitchen Outlets 3
        (timestamp, kitchOut3Entry) = kitchOut3Trace.readline().split();
        kitchOut3Entry = float(kitchOut3Entry);
        (timestamp, kitchOut3Output) = kitchOut3OutputTrace.readline().split();
        kitchOut3Output = int(kitchOut3Output);
        kitchOut3Trainer.addSingleObservation([kitchOut3Entry], kitchOut3Output);

        # Kitchen Outlets 4
        (timestamp, kitchOut4Entry) = kitchOut4Trace.readline().split();
        kitchOut4Entry = float(kitchOut4Entry);
        (timestamp, kitchOut4Output) = kitchOut4OutputTrace.readline().split();
        kitchOut4Output = int(kitchOut4Output);
        kitchOut4Trainer.addSingleObservation([kitchOut4Entry], kitchOut4Output);
Exemple #10
0
outputReader = csv.reader(outputFile)

## Change the name of the algorithm to test it out.
algorithmTest = Tesla(Complexity.firstOrder, 1, 0, [0], {})
teslaTimestamps = {}
knnTimestamps = {}

for trainingSample in range(numTrainingSamples):
    inputRow = next(inputReader)
    outputRow = next(outputReader)
    if (len(inputRow) > 0):
        input1 = float(inputRow[0])
        output = float(outputRow[0])

        firstTS = time.time()
        algorithmTest.addSingleObservation([input1], output)
        secondTS = time.time()
        teslaTimestamps["load" + str(trainingSample)] = secondTS - firstTS
print(str(trainingSample))
firstTS = time.time()
algorithmTest.train()
secondTS = time.time()
teslaTimestamps["train"] = secondTS - firstTS

runningTotal = 0
for executeSample in range(numExecuteSamples):
    inputRow = next(inputReader)
    outputRow = next(outputReader)
    if (len(inputRow) > 0):
        input1 = float(inputRow[0])
        output = float(outputRow[0])