#!/usr/bin/env python3 from keras.models import Sequential from keras.layers import Dense import numpy import numpy.random as rand #from matplotlib import pyplot from keras.models import model_from_json import math import sys #python3.6 -m pip install keras #python3.6 -m pip install theano data_set = None # estes vetores terao seus valores definidos a partir do treinamento do modelo. INV1 = [1, 2] INV2 = [0, 2] INV3 = [0, 1] MAXS = [4000, 4000, 4000] MINS = [0, 0, 0] alpha = 2.5 betha = 1.5 #MAES = [0.0040331535722, 0.00447660606592, 0.00339290297573] MAES = [0.00912140117378,0.0104236871072,0.00361583732514] def load_normalize(csvName, separator): ds = numpy.loadtxt(csvName, delimiter=separator) for i in range(0, len(ds)) : lin = ds[i,:] for j in range(0, len(lin)): ds[i,j] = (ds[i,j] - MINS[j])/(MAXS[j]-MINS[j]) return numpy.array(ds) def make_data(data, cols, res) : X = numpy.array(data[:, cols]) Y = numpy.array(data[:, res]) return X, Y def make_data_set(data, dtype): if (dtype == 'inv1'): return make_data(data, INV1, 0) if (dtype == 'inv2') : return make_data(data, INV2, 1) if (dtype == 'inv3') : return make_data(data, INV3, 2) def load_model(model_file, weights_file): jf = open(model_file, "r") desc = jf.read() model = model_from_json(desc) model.load_weights(weights_file) model.compile(loss='mean_absolute_error', optimizer='adam', metrics=['accuracy']) return model def rescale(data, index): resp = numpy.zeros(len(data)) for i in range(0, len(data)) : resp[i] = (data[i] * (MAXS[index]-MINS[index])) + MINS[index] return resp def predict(model, inputs, expected_value, MAE): aux = model.predict( inputs ) pv = aux[0,0] delta = math.fabs(expected_value - pv) if delta <= (betha * MAE): c = 1 else : c = 1 - (( math.fabs(delta - (betha * MAE)) ) / ( alpha * MAE )) if c < 0: c = 0 return pv, c def simulate_all( arquivo, saida ): ds = load_normalize( arquivo, "," ) model_inv1 = load_model('inv1.json', 'inv1.h5') model_inv2 = load_model('inv2.json', 'inv2.h5') model_inv3 = load_model('inv3.json', 'inv3.h5') lin = numpy.array(ds[0]); vs1 = [] vs2 = [] vs3 = [] ps1 = [] ps2 = [] ps3 = [] c1 = [] c2 = [] c3 = [] cta = 1 for i in range(len(ds)): y1 = ds[i, 0] y2 = ds[i, 1] y3 = ds[i, 2] lin_inv1 = numpy.array(lin[INV1]) lin_inv1 = numpy.reshape(lin_inv1, (1, len(lin_inv1))) vi1, cv1 = predict( model_inv1, lin_inv1, y1, MAES[0] ) lin_inv2 = numpy.array(lin[INV2]) lin_inv2 = numpy.reshape(lin_inv2, (1, len(lin_inv2))) vi2, cv2 = predict( model_inv2, lin_inv2, y2, MAES[1] ) lin_inv3 = numpy.array(lin[INV3]) lin_inv3 = numpy.reshape(lin_inv3, (1, len(lin_inv3))) vi3, cv3 = predict( model_inv3, lin_inv3, y3, MAES[2] ) vs1.append(y1) ps1.append(vi1) vs2.append(y2) ps2.append(vi2) vs3.append(y3) ps3.append(vi3) c1.append(cv1 * 100) c2.append(cv2 * 100) c3.append(cv3 * 100) lin = numpy.array(ds[i]) if (cv1 <= 0.5): lin[0] = vi1 # ds[i-1, 10] if (cv2 <= 0.5): lin[1] = vi2 # ds[i-1, 5] if (cv3 <= 0.5): lin[2] = vi3 # ds[i-1, 7] ps1 = rescale(ps1,0) vs1 = rescale(vs1,0); ps2 = rescale(ps2,1) vs2 = rescale(vs2,1); ps3 = rescale(ps3,2) vs3 = rescale(vs3,2); fout = open(saida,"w") for i in range(len(c1)): fout.write(str(int(c1[i]))+","+str(int(c2[i]))+","+str(int(c3[i]))+"\n") fout.close() if __name__ == '__main__': numpy.random.seed( 147) infile = sys.argv[1] outfile = sys.argv[2] if (len(sys.argv) >= 4): alpha = float(sys.argv[3]) if (len(sys.argv) >= 5): betha = float(sys.argv[4]) data_set = load_normalize(infile, ",") simulate_all( infile, outfile )