"""Многопараметрический прямой поиск с ограничениями.

Среда: встроенный Python FEMM 5.
Проверяется только авторский аналитический эталон, полевой решатель не вызывается.
Полученные числа не являются квитанцией расчёта электромагнита или машины.
"""

# Функция и координаты безразмерны; её точный минимум известен для проверки алгоритма.
# Все пробы строим от неизменного центра, соблюдаем границы и выбираем наименьший критерий.
def objective(point):
    x, y = point
    return (x - 0.3)**2 + 4 * (y - 0.6)**2

center, step = (0.5, 0.5), 0.1
directions = ((1, 0), (-1, 0), (0, 1), (0, -1), (1, 1), (1, -1), (-1, 1), (-1, -1))
best = center
for dx, dy in directions:
    candidate = (center[0] + step * dx, center[1] + step * dy)
    if 0 <= candidate[0] <= 1 and 0 <= candidate[1] <= 1:
        if objective(candidate) < objective(best):
            best = candidate
print("Лучшая первая проба:", best, "Критерий:", objective(best))
