У меня есть массив, представляющий обратную параболу, и я хочу найти максимум, который может быть где угодно в массиве. В моем приложении я не могу взять производную, и я должен пройти через массив.
Я реализовал это, перебирая массив, начиная слева и до тех пор, пока не получу значение ниже, чем на предыдущей итерации:
import numpy as np
def simulation(n):
# create inverse parabola
num = 21
parabola= np.linspace(-8, 12, num=num)
parabola= -np.abs(parabola) ** 2
return parabola[n]
previous_iteration = -1000 # some initialization
for n in range(num):
# Configure the entire system
# Run simulation
# simulation(n) - a function returning simulation result with configuration "n"
simulation_result = simulation(n)
if previous_iteration < simulation_result :
previous_iteration = simulation_result
else:
best_iteration = n-1
break
print(best_iteration)
print(previous_iteration)
Есть ли более быстрый способ сделать это?
Edit:
Фактическая реализация будет на FPGA, и для каждой итерации мне нужно настроить систему и запустить симуляцию, чтобы каждая итерация стоила много времени. Если я запустлю симуляцию со всеми возможными конфигурациями, я получу вектор параболы, но это займет много времени и будет очень неэффективным.
Я ищу способ найти максимальное значение, генерируя как можно меньше очков. К сожалению, цикл for должен остаться, потому что это представление о том, как работает система. Ключевым моментом здесь является изменение кода внутри цикла for.
Я отредактировал код, чтобы лучше объяснить, что я имею в виду.