コード例 #1
0
ファイル: macd.py プロジェクト: suyiqinqin/pyQuant
def MACD(code, day1, day2, day3):
    DIF = EMA(code, day1) - EMA(code, day2)
    DEM = EMA(code, day3)
    for i in range(1, len(DIF)):
        DEM.iloc[i] = DIF.iloc[i] * 2 / (day3+1) + DEM.iloc[i-1] * (day3-1) / (day3+1)
    OSC = (DIF - DEM) * 2
    
    plt.bar(list(OSC.index), list(OSC['close']))
    
    return OSC
コード例 #2
0
def minToMaxIteration(minVM, maxVM, currentVM, machine_unit_power,machine_unit_price, predicted_arr, time_gap ):
    yvalueset = []
    predicted_arr_temp = predicted_arr[np.logical_not(np.isnan(predicted_arr))]
    line2d= Line2D(np.arange(1,len(predicted_arr_temp),1), EMA.ema(predicted_arr_temp ,3))
    #print("Max : %s" %max(line2d.get_xdata()))
    sampling_distance = 0.2
    for i in drange(min(line2d.get_xdata()), max(line2d.get_xdata()), sampling_distance):
        #print(i-uptime)
        z = getValue(line2d, i)
        yvalueset.append(z[0])

    predicted_arr2 = np.array(yvalueset)
    #print("yvaluse : %s" %yvalueset)
    tot_cost = 999999
    #print(predicted_arr2)
    time = sampling_distance * len(predicted_arr2)/60.0

    # print(time)
    index =   minVM
    violation_selected = 0
    for i in range(minVM, maxVM+1):

        precentage = violation_precentage(i,machine_unit_power,predicted_arr2)
        cost =  i*machine_unit_price*time + i*machine_unit_price*time*SLA_func(precentage)
        print("VM: %d  Cost: %d, Violation : %d"  %(i, cost, precentage))
        if i == minVM and precentage > 30:
            i = currentVM
        if cost < tot_cost :
            tot_cost = cost
            index = i
            violation_selected = precentage

        if precentage == 0:
            break
    return index, violation_selected
コード例 #3
0
def MACD(hist_data, period):
    count = hist_data['Open'].count()
    data = pandas.DataFrame(
        numpy.zeros(count * 6).reshape(count, 6),
        index=hist_data.index,
        columns=['EMA1', 'EMA2', 'DIF', 'DEA', 'MACD', 'MACD_s'])

    data['EMA1'] = EMA.EMA(hist_data, EMA1_fast)['EMA']
    data['EMA2'] = EMA.EMA(hist_data, EMA2_slow)['EMA']

    data['DIF'] = data['EMA1'] - data['EMA2']

    #replace 'Adj Close' with 'DIF' to reuse EMA function
    hist_data['Adj Close'] = data['DIF']
    data['DEA'] = EMA.EMA(hist_data, DEA_period)['EMA']

    data['MACD'] = 2 * (data['DIF'] - data['DEA'])

    for i in range(count):
        data['MACD_s'][i] = 1 if data['DIF'][i] > data['DIF'][i - 1] else 0

    return data
コード例 #4
0
def minToMaxIteration(minVM, maxVM, currentVM, machine_unit_power,
                      machine_unit_price, predicted_arr, time_gap):
    yvalueset = []
    predicted_arr_temp = predicted_arr[np.logical_not(np.isnan(predicted_arr))]
    line2d = Line2D(np.arange(1, len(predicted_arr_temp), 1),
                    EMA.ema(predicted_arr_temp, 3))
    #print("Max : %s" %max(line2d.get_xdata()))
    sampling_distance = 0.2
    for i in drange(min(line2d.get_xdata()), max(line2d.get_xdata()),
                    sampling_distance):
        #print(i-uptime)
        z = getValue(line2d, i)
        yvalueset.append(z[0])

    predicted_arr2 = np.array(yvalueset)
    #print("yvaluse : %s" %yvalueset)
    tot_cost = 999999
    #print(predicted_arr2)
    time = sampling_distance * len(predicted_arr2) / 60.0

    # print(time)
    index = minVM
    violation_selected = 0
    for i in range(minVM, maxVM + 1):

        precentage = violation_precentage(i, machine_unit_power,
                                          predicted_arr2)
        cost = i * machine_unit_price * time + i * machine_unit_price * time * SLA_func(
            precentage)
        print("VM: %d  Cost: %d, Violation : %d" % (i, cost, precentage))
        if i == minVM and precentage > 30:
            i = currentVM
        if cost < tot_cost:
            tot_cost = cost
            index = i
            violation_selected = precentage

        if precentage == 0:
            break
    return index, violation_selected
コード例 #5
0
ファイル: StockSignal.py プロジェクト: tobby2002/stock-v1
def calculate_stock_signal_new(hist_data):
    count = hist_data['Open'].count()

    all_data = hist_data.join(KDJ2.KDJ(hist_data, period)).join(
        RSI2.RSI(hist_data,
                 period)).join(ForceIndex2.FI(hist_data, period)).join(
                     EMA.EMA(hist_data, period))
    all_data = all_data.join(adj_close_signal_new(hist_data))

    data = pandas.DataFrame(
        numpy.zeros(hist_data['Open'].count() * 5).reshape(count, 5),
        index=hist_data.index,
        columns=['signal', 'price', 'buy', 'sell', 'profit'])

    for i in range(count):
        data['price'][i] = all_data['Adj Close'][i]

        sum = all_data['KDJ_s'][i] + all_data['RSI_s'][i] + all_data['FI_s'][i]
        if sum > 2:
            if data['signal'].sum() > 0:
                continue

            data['signal'][i] = 1
            data['buy'][i] = all_data['Adj Close'][i]
        elif data['signal'].sum() > 0:
            if all_data['FI_s'][i] > 0:
                continue
            elif (all_data['EMA_s'][i] + all_data['close_s'][i]) > 0:
                continue
            else:
                data['sell'][i] = all_data['Adj Close'][i]
                j = i - 1
                while data['signal'][j] < 0.1:
                    j = j - 1
                data['profit'][i] = (data['sell'][i] -
                                     data['buy'][j]) / data['buy'][j]
                data['signal'][i] = -1

    return all_data.join(data)
コード例 #6
0
def run(VM_parameter_unit, threshold_percentage, uptime, min_VM, shift, provider, prediction_type,
	vm_price_per_hour, vm_init_data, actualFileName, scaleFileName, costFileName):
    listVM = list()

    open(scaleFileName, 'w').close()
    open(costFileName, 'w').close()
    scaleCSV = open(scaleFileName,"rw+")
    costCSV = open(costFileName,"rw+")

    scaleCSV.write("Time,VM Count\n" )
    costCSV.write( "Time,Total Cost\n" )

    #print(provider)

    digix_cordinates = array.array('d')
    digiy_cordinates = array.array('d')
    x_coordinates = array.array('d')
    y_coordinates = array.array('d')
    digiy_coord_actual = array.array('d')
    modely_coord_actual = array.array('d')

    #Read vlaues while converting to VM_UNITS
    ifile = open(actualFileName, "rb")
    reader = csv.reader(ifile)
    rownum = 0
    for row in reader:
      x_coordinates.append(float(row[0]))
      y_coordinates.append(float(row[1])/(VM_parameter_unit))
      rownum += 1
    ifile.close()
    ##print(x_coordinates)
    ##print(y_coordinates)

    # Regression
    xdata = np.array(x_coordinates)
    ydata = np.array(y_coordinates)

    #Plot row data
    rowdata = Line2D(xdata, ydata)

    #plot regression line of data
    #plt1.plot(xdata, quad(xdata,popt[0],popt[1],popt[2], popt[3]), '-')
    #plot EMA
    line2d = Line2D(xdata, EMA.ema(ydata ,3))

    #plot stratos
    line2d_stratos = Line2D(xdata[2:len(xdata)]+1,Stratos.Stratos(ydata))

    #Initialize min_VMs
    #VM = [23,42] #Todo fill with randoms

    for j in range(0, min_VM):
        # id = randint(1,999)
        t = vm_init_data[j]#take this as arg?
        vm = VM(initTime=-t, endTime=-1)
        listVM.append(vm)

    #Plot number of VMs required
    vm_count = min_VM
    yvalueset = []
    if(provider == "default" and prediction_type == "reactive"):
        for i in drange(uptime, max(xdata) - shift + uptime- 1, 0.1):
            #print(i-uptime)
            z = getValue(line2d, i - uptime)
            yvalueset.append(z)
            ##print(z)
            new_vm_count = math.ceil(z/threshold_percentage)
            if new_vm_count < min_VM:
                new_vm_count = min_VM

            vm_change = int(math.ceil(new_vm_count - vm_count))
            if vm_change > 0:
                vm_count += startVMs(listVM, vm_change, i)
            elif vm_change < 0:
                vm_count -= removeVMs(listVM, -vm_change, provider, i)

            digix_cordinates.append(i)
            digiy_cordinates.append(new_vm_count)
            digiy_coord_actual.append(vm_count)
            scaleCSV.seek(0, 2)
            scaleCSV.write("%.3f,%.3f\n" %(i, vm_count*VM_parameter_unit))
        digixdata = np.array(digix_cordinates)
        digiydata = np.array(digiy_cordinates)
        actualydata = np.array(digiy_coord_actual)
        lineAllocate = Line2D(digixdata, digiydata) #requirement
        digi_line  = Line2D(digixdata, actualydata) #actual

    elif(provider == "default" and prediction_type == "stratos"):
        request_count = 0
        sampling_distance = 0.1
        for i in drange(uptime, max(xdata) - shift + uptime -4, sampling_distance):
            print(i)
            line2d = line2d_stratos
            z = getValue(line2d_stratos, i - uptime)
            yvalueset.append(z)
            ##print(z)
            new_vm_count = math.ceil(z/threshold_percentage)
            if new_vm_count < min_VM:
                new_vm_count = min_VM

            vm_change = int(math.ceil(new_vm_count - vm_count))
            if vm_change > 0:
                vm_count += startVMs(listVM, vm_change, i)
                request_count = 0
            elif vm_change < 0:
                request_count += 1
                if request_count > 2.0/sampling_distance :
                    vm_count -= removeVMs(listVM, -vm_change, provider, i)
                    request_count = 0

            digix_cordinates.append(i)
            digiy_cordinates.append(new_vm_count)
            digiy_coord_actual.append(vm_count)
            scaleCSV.seek(0, 2)
            scaleCSV.write("%.3f,%.3f\n" %(i, vm_count*VM_parameter_unit))
        digixdata = np.array(digix_cordinates)
        digiydata = np.array(digiy_cordinates)
        actualydata = np.array(digiy_coord_actual)
        lineAllocate = Line2D(digixdata, digiydata) #requirement
        digi_line  = Line2D(digixdata+4, actualydata) #actual

    elif(provider == "aws" and prediction_type == "stratos"):
        request_count = 0
        sampling_distance = 0.1
        for i in drange(uptime, max(xdata) - shift + uptime -4, 0.1):
            print(i)
            line2d = line2d_stratos
            z = getValue(line2d, i - uptime)
            yvalueset.append(z)
            ##print(z)
            new_vm_count = math.ceil(z/threshold_percentage)
            if new_vm_count < min_VM:
                new_vm_count = min_VM

            vm_change = int(math.ceil(new_vm_count - vm_count))
            if vm_change > 0:
                vm_count += startVMs(listVM, vm_change, i)
                request_count = 0
            elif vm_change < 0:
                request_count += 1
                if request_count > 2.0/sampling_distance:
                    vm_count -= removeVMs(listVM, -vm_change, provider, i)

            digix_cordinates.append(i)
            digiy_cordinates.append(new_vm_count)
            digiy_coord_actual.append(vm_count)
            scaleCSV.seek(0, 2)
            scaleCSV.write("%.3f,%.3f\n" %(i, vm_count*VM_parameter_unit))
        digixdata = np.array(digix_cordinates)
        digiydata = np.array(digiy_cordinates)
        actualydata = np.array(digiy_coord_actual)
        lineAllocate = Line2D(digixdata, digiydata) #requirement
        digi_line  = Line2D(digixdata+4, actualydata) #actual

    elif(provider == "aws" and prediction_type == "reactive"):
            for i in drange(uptime, max(xdata) - shift + uptime- 1, 0.1):
                #print(i-uptime)
                z = getValue(line2d, i - uptime)
                yvalueset.append(z)
                ##print(z)
                new_vm_count = math.ceil(z/threshold_percentage)
                if new_vm_count < min_VM:
                    new_vm_count = min_VM

                vm_change = int(math.ceil(new_vm_count - vm_count))
                if vm_change > 0:
                    vm_count += startVMs(listVM, vm_change, i)
                elif vm_change < 0:
                    vm_count -= removeVMs(listVM, -vm_change, provider, i)

                digix_cordinates.append(i)
                digiy_cordinates.append(new_vm_count)
                digiy_coord_actual.append(vm_count)
                scaleCSV.seek(0, 2)
                scaleCSV.write("%.3f,%.3f\n" %(i, vm_count*VM_parameter_unit))
            digixdata = np.array(digix_cordinates)
            digiydata = np.array(digiy_cordinates)
            actualydata = np.array(digiy_coord_actual)
            lineAllocate = Line2D(digixdata, digiydata) #requirement
            digi_line  = Line2D(digixdata, actualydata) #actual

    elif(provider == "default" and prediction_type == "proactive"):
        digix, digiy = CostModel.run(actualFileName)
        for i in range(0, len(digix)):
            new_vm_count = digiy[i]
            if i != 0:
                vm_change = int(math.ceil(digiy[i] - len([i for x in listVM if x.endTime == -1])))
            else :
                vm_change = int(math.ceil(digiy[0] - len([i for x in listVM if x.endTime == -1])))

            if vm_change > 0:
                vm_count += startVMs(listVM, vm_change, digix[i])
            elif vm_change < 0:
                vm_count -= removeVMs(listVM, -vm_change, provider, digix[i])
            modely_coord_actual.append(vm_count)
            scaleCSV.seek(0, 2)
            scaleCSV.write("%.3f,%.3f\n" %(i, vm_count*VM_parameter_unit))

        digixdata = np.array(digix)
        digiydata = np.array(digiy)
        lineAllocate = Line2D(digixdata, digiydata) #requirement
        digi_line  = Line2D(digixdata, modely_coord_actual) #actual

    elif(provider == "aws" and prediction_type == "proactive"):
        digix, digiy = CostModel.run(actualFileName)
        #print(digix)
        #print(digiy)
        for i in range(0, len(digix)):
            new_vm_count = digiy[i]
            if i != 0:
                vm_change = int(math.ceil(digiy[i] - len([i for x in listVM if x.endTime == -1])))
            else :
                vm_change = int(math.ceil(digiy[0] - len([i for x in listVM if x.endTime == -1])))

            if vm_change > 0:
                vm_count += startVMs(listVM, vm_change, digix[i])
            elif vm_change < 0:
                vm_count -= removeVMs(listVM, -vm_change, provider, digix[i])
            modely_coord_actual.append(vm_count)
            scaleCSV.seek(0, 2)
            scaleCSV.write("%.3f,%.3f\n" %(i, vm_count*VM_parameter_unit))

        digixdata = np.array(digix)
        digiydata = np.array(digiy)
        lineAllocate = Line2D(digixdata, digiydata) #requirement
        digi_line  = Line2D(digixdata, modely_coord_actual) #actual

    #for vm in listVM:
        #print("VM_id %3s: %5.1f - %5.1f = %5.1f%s" % (vm.id, vm.initTime, vm.endTime,(vm.endTime if vm.endTime > 0 else i) - vm.initTime, ("" if vm.endTime > 0 else " up")))

    costValues = array.array('d')
    for k in drange(0, max(xdata), 1):
        cost = calculateAWSCost(listVM, k, vm_price_per_hour)
        costValues.append(cost)
        costCSV.seek(0, 2)
        costCSV.write("%.3f,%.3f\n" %(k,cost))

    costydata = np.array(costValues)
    costxdata = np.arange(0, max(xdata), 1)

    cost_line = Line2D(costxdata,costydata)

    yvalues = np.array(yvalueset)
    #e = mse(digiydata, yvalues)

    start = max(min(line2d.get_xdata()), min(lineAllocate.get_xdata()))
    end   = min(max(line2d.get_xdata()), max(lineAllocate.get_xdata()));
    #calculateViolation(predictLine=line2d, allocateline=lineAllocate, startTime= start , endTime= end)
    return rowdata, line2d, digi_line,cost_line
コード例 #7
0
ファイル: StockSignal.py プロジェクト: tobby2002/stock-v1
def EMA_signal(hist_data):
    data = EMA.EMA(hist_data, 13)
    return 1 if data['EMA'][count - 1] > data['EMA'][count - 2] else 0
コード例 #8
0
def run(VM_parameter_unit, threshold_percentage, uptime, min_VM, shift,
        provider, prediction_type, vm_price_per_hour, vm_init_data,
        actualFileName, scaleFileName, costFileName):
    listVM = list()

    open(scaleFileName, 'w').close()
    open(costFileName, 'w').close()
    scaleCSV = open(scaleFileName, "rw+")
    costCSV = open(costFileName, "rw+")

    scaleCSV.write("Time,VM Count\n")
    costCSV.write("Time,Total Cost\n")

    #print(provider)

    digix_cordinates = array.array('d')
    digiy_cordinates = array.array('d')
    x_coordinates = array.array('d')
    y_coordinates = array.array('d')
    digiy_coord_actual = array.array('d')
    modely_coord_actual = array.array('d')

    #Read vlaues while converting to VM_UNITS
    ifile = open(actualFileName, "rb")
    reader = csv.reader(ifile)
    rownum = 0
    for row in reader:
        x_coordinates.append(float(row[0]))
        y_coordinates.append(float(row[1]) / (VM_parameter_unit))
        rownum += 1
    ifile.close()
    ##print(x_coordinates)
    ##print(y_coordinates)

    # Regression
    xdata = np.array(x_coordinates)
    ydata = np.array(y_coordinates)

    #Plot row data
    rowdata = Line2D(xdata, ydata)

    #plot regression line of data
    #plt1.plot(xdata, quad(xdata,popt[0],popt[1],popt[2], popt[3]), '-')
    #plot EMA
    line2d = Line2D(xdata, EMA.ema(ydata, 3))

    #plot stratos
    line2d_stratos = Line2D(xdata[2:len(xdata)] + 1, Stratos.Stratos(ydata))

    #Initialize min_VMs
    #VM = [23,42] #Todo fill with randoms

    for j in range(0, min_VM):
        # id = randint(1,999)
        t = vm_init_data[j]  #take this as arg?
        vm = VM(initTime=-t, endTime=-1)
        listVM.append(vm)

    #Plot number of VMs required
    vm_count = min_VM
    yvalueset = []
    if (provider == "default" and prediction_type == "reactive"):
        for i in drange(uptime, max(xdata) - shift + uptime - 1, 0.1):
            #print(i-uptime)
            z = getValue(line2d, i - uptime)
            yvalueset.append(z)
            ##print(z)
            new_vm_count = math.ceil(z / threshold_percentage)
            if new_vm_count < min_VM:
                new_vm_count = min_VM

            vm_change = int(math.ceil(new_vm_count - vm_count))
            if vm_change > 0:
                vm_count += startVMs(listVM, vm_change, i)
            elif vm_change < 0:
                vm_count -= removeVMs(listVM, -vm_change, provider, i)

            digix_cordinates.append(i)
            digiy_cordinates.append(new_vm_count)
            digiy_coord_actual.append(vm_count)
            scaleCSV.seek(0, 2)
            scaleCSV.write("%.3f,%.3f\n" % (i, vm_count * VM_parameter_unit))
        digixdata = np.array(digix_cordinates)
        digiydata = np.array(digiy_cordinates)
        actualydata = np.array(digiy_coord_actual)
        lineAllocate = Line2D(digixdata, digiydata)  #requirement
        digi_line = Line2D(digixdata, actualydata)  #actual

    elif (provider == "default" and prediction_type == "stratos"):
        request_count = 0
        sampling_distance = 0.1
        for i in drange(uptime,
                        max(xdata) - shift + uptime - 4, sampling_distance):
            print(i)
            line2d = line2d_stratos
            z = getValue(line2d_stratos, i - uptime)
            yvalueset.append(z)
            ##print(z)
            new_vm_count = math.ceil(z / threshold_percentage)
            if new_vm_count < min_VM:
                new_vm_count = min_VM

            vm_change = int(math.ceil(new_vm_count - vm_count))
            if vm_change > 0:
                vm_count += startVMs(listVM, vm_change, i)
                request_count = 0
            elif vm_change < 0:
                request_count += 1
                if request_count > 2.0 / sampling_distance:
                    vm_count -= removeVMs(listVM, -vm_change, provider, i)
                    request_count = 0

            digix_cordinates.append(i)
            digiy_cordinates.append(new_vm_count)
            digiy_coord_actual.append(vm_count)
            scaleCSV.seek(0, 2)
            scaleCSV.write("%.3f,%.3f\n" % (i, vm_count * VM_parameter_unit))
        digixdata = np.array(digix_cordinates)
        digiydata = np.array(digiy_cordinates)
        actualydata = np.array(digiy_coord_actual)
        lineAllocate = Line2D(digixdata, digiydata)  #requirement
        digi_line = Line2D(digixdata + 4, actualydata)  #actual

    elif (provider == "aws" and prediction_type == "stratos"):
        request_count = 0
        sampling_distance = 0.1
        for i in drange(uptime, max(xdata) - shift + uptime - 4, 0.1):
            print(i)
            line2d = line2d_stratos
            z = getValue(line2d, i - uptime)
            yvalueset.append(z)
            ##print(z)
            new_vm_count = math.ceil(z / threshold_percentage)
            if new_vm_count < min_VM:
                new_vm_count = min_VM

            vm_change = int(math.ceil(new_vm_count - vm_count))
            if vm_change > 0:
                vm_count += startVMs(listVM, vm_change, i)
                request_count = 0
            elif vm_change < 0:
                request_count += 1
                if request_count > 2.0 / sampling_distance:
                    vm_count -= removeVMs(listVM, -vm_change, provider, i)

            digix_cordinates.append(i)
            digiy_cordinates.append(new_vm_count)
            digiy_coord_actual.append(vm_count)
            scaleCSV.seek(0, 2)
            scaleCSV.write("%.3f,%.3f\n" % (i, vm_count * VM_parameter_unit))
        digixdata = np.array(digix_cordinates)
        digiydata = np.array(digiy_cordinates)
        actualydata = np.array(digiy_coord_actual)
        lineAllocate = Line2D(digixdata, digiydata)  #requirement
        digi_line = Line2D(digixdata + 4, actualydata)  #actual

    elif (provider == "aws" and prediction_type == "reactive"):
        for i in drange(uptime, max(xdata) - shift + uptime - 1, 0.1):
            #print(i-uptime)
            z = getValue(line2d, i - uptime)
            yvalueset.append(z)
            ##print(z)
            new_vm_count = math.ceil(z / threshold_percentage)
            if new_vm_count < min_VM:
                new_vm_count = min_VM

            vm_change = int(math.ceil(new_vm_count - vm_count))
            if vm_change > 0:
                vm_count += startVMs(listVM, vm_change, i)
            elif vm_change < 0:
                vm_count -= removeVMs(listVM, -vm_change, provider, i)

            digix_cordinates.append(i)
            digiy_cordinates.append(new_vm_count)
            digiy_coord_actual.append(vm_count)
            scaleCSV.seek(0, 2)
            scaleCSV.write("%.3f,%.3f\n" % (i, vm_count * VM_parameter_unit))
        digixdata = np.array(digix_cordinates)
        digiydata = np.array(digiy_cordinates)
        actualydata = np.array(digiy_coord_actual)
        lineAllocate = Line2D(digixdata, digiydata)  #requirement
        digi_line = Line2D(digixdata, actualydata)  #actual

    elif (provider == "default" and prediction_type == "proactive"):
        digix, digiy = CostModel.run(actualFileName)
        for i in range(0, len(digix)):
            new_vm_count = digiy[i]
            if i != 0:
                vm_change = int(
                    math.ceil(digiy[i] -
                              len([i for x in listVM if x.endTime == -1])))
            else:
                vm_change = int(
                    math.ceil(digiy[0] -
                              len([i for x in listVM if x.endTime == -1])))

            if vm_change > 0:
                vm_count += startVMs(listVM, vm_change, digix[i])
            elif vm_change < 0:
                vm_count -= removeVMs(listVM, -vm_change, provider, digix[i])
            modely_coord_actual.append(vm_count)
            scaleCSV.seek(0, 2)
            scaleCSV.write("%.3f,%.3f\n" % (i, vm_count * VM_parameter_unit))

        digixdata = np.array(digix)
        digiydata = np.array(digiy)
        lineAllocate = Line2D(digixdata, digiydata)  #requirement
        digi_line = Line2D(digixdata, modely_coord_actual)  #actual

    elif (provider == "aws" and prediction_type == "proactive"):
        digix, digiy = CostModel.run(actualFileName)
        #print(digix)
        #print(digiy)
        for i in range(0, len(digix)):
            new_vm_count = digiy[i]
            if i != 0:
                vm_change = int(
                    math.ceil(digiy[i] -
                              len([i for x in listVM if x.endTime == -1])))
            else:
                vm_change = int(
                    math.ceil(digiy[0] -
                              len([i for x in listVM if x.endTime == -1])))

            if vm_change > 0:
                vm_count += startVMs(listVM, vm_change, digix[i])
            elif vm_change < 0:
                vm_count -= removeVMs(listVM, -vm_change, provider, digix[i])
            modely_coord_actual.append(vm_count)
            scaleCSV.seek(0, 2)
            scaleCSV.write("%.3f,%.3f\n" % (i, vm_count * VM_parameter_unit))

        digixdata = np.array(digix)
        digiydata = np.array(digiy)
        lineAllocate = Line2D(digixdata, digiydata)  #requirement
        digi_line = Line2D(digixdata, modely_coord_actual)  #actual

    #for vm in listVM:
    #print("VM_id %3s: %5.1f - %5.1f = %5.1f%s" % (vm.id, vm.initTime, vm.endTime,(vm.endTime if vm.endTime > 0 else i) - vm.initTime, ("" if vm.endTime > 0 else " up")))

    costValues = array.array('d')
    for k in drange(0, max(xdata), 1):
        cost = calculateAWSCost(listVM, k, vm_price_per_hour)
        costValues.append(cost)
        costCSV.seek(0, 2)
        costCSV.write("%.3f,%.3f\n" % (k, cost))

    costydata = np.array(costValues)
    costxdata = np.arange(0, max(xdata), 1)

    cost_line = Line2D(costxdata, costydata)

    yvalues = np.array(yvalueset)
    #e = mse(digiydata, yvalues)

    start = max(min(line2d.get_xdata()), min(lineAllocate.get_xdata()))
    end = min(max(line2d.get_xdata()), max(lineAllocate.get_xdata()))
    #calculateViolation(predictLine=line2d, allocateline=lineAllocate, startTime= start , endTime= end)
    return rowdata, line2d, digi_line, cost_line