Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import datetime, os
- import pylab as pl
- #Обозначил границы, которые может принимать элементы аргумента
- step01 = 0.1
- startMin = 0.1
- startMax = 5
- normMin = 0.1
- normMax = 5
- critMin = 0.1
- critMax = 5
- # ListX и ListY это текствоые файлы, в которых куча float разделенных через , Пример: 0.33509000,0.33509000,0.33514000,0.33590000....
- listAFile = open('ListX.py', 'r')
- lines = listAFile.read().split(',')
- listAFile.close()
- ListA = lines
- print('ListA Loaded')
- listBFile = open('ListY.py', 'r')
- lines = listBFile.read().split(',')
- listBFile.close()
- ListB = lines
- print('ListB Loaded')
- #Сама функция. Сильно урезана, мб даже работает неправильно и по факту полностью бесполезна, но операции +- делает такие же, что и оригинальная
- def test(argum):
- try:
- start = argum[0]
- norm = argum[1]
- crit = argum[2]
- Status = 0
- timeCounter = 0
- result = 0
- def StartFunc (atr):
- startEdge = ((start + 100) / 100) * atr
- return startEdge
- def NormFunc(atr):
- normEdge = ((100 - norm) / 100) * atr
- return normEdge
- def CritFunc(atr):
- critEdge = ((100 - crit) / 100) * atr
- return critEdge
- while True:
- if (Status == 0):
- timeCounter += 1
- y = float(ListB[timeCounter])
- startEdge = StartFunc(y)
- critEdge = CritFunc(y)
- while (Status == 0):
- timeCounter += 1
- y = float(ListB[timeCounter])
- if (y >= startEdge):
- startEdge = y
- normEdge = NormFunc(startEdge)
- while True:
- timeCounter += 1
- y = float(ListB[timeCounter])
- if (y > startEdge):
- startEdge = y
- normEdge = NormFunc(startEdge)
- if (y <= normEdge):
- result += 1
- Status = 1
- break
- if (y <= critEdge):
- result -= 1
- Status = 1
- if (Status == 1):
- timeCounter += 1
- x = float(ListA[timeCounter])
- startEdge = StartFunc(x)
- critEdge = CritFunc(x)
- while (Status == 1):
- timeCounter += 1
- x = float(ListA[timeCounter])
- if (x <= startEdge):
- startEdge = x
- normEdge = NormFunc(startEdge)
- while True:
- timeCounter += 1
- x = float(ListA[timeCounter])
- if (x < startEdge):
- startEdge = x
- normEdge = NormFunc(startEdge)
- if (x >= normEdge):
- Status = 0
- result += 1
- break
- if (x >= critEdge):
- Status = 0
- result -= 1
- except Exception:
- return result
- #Для проверки времени, которое занимает скрипт
- benchOver = 10
- BenchCounterMax = 100
- timeStart = datetime.datetime.now()
- print('Start')
- BestResult = 0
- Counter = 0
- #Таким образом я перебираю аргументы для функции
- for ar1 in pl.frange(startMin, startMax, step01):
- for ar2 in pl.frange(normMin, normMax, step01):
- for ar3 in pl.frange(critMin, critMax, step01):
- Counter += 1
- argum = ar1, ar2, ar3
- Result = test(argum)
- if (Result > BestResult):
- print('Found new BestResult')
- print(Result)
- BestResult = Result
- BestArgum = argum
- #Каждых 100 выполнений функции, показывает сколько времени заняло эти последние 100 функций
- if ((Counter == BenchCounterMax) and (benchOver > 0)):
- BenchCounterMax += 100
- speed = datetime.datetime.now() - timeStart
- timeStart = datetime.datetime.now()
- benchOver -= 1
- print(speed, Counter)
- print('End')
- print(BestResult)
- print(BestArgum)
Advertisement
Add Comment
Please, Sign In to add comment