Одномерная оптимизация метод золотого сечения python

scipy.optimize.golden#

Return the minimizer of a function of one variable using the golden section method.

Given a function of one variable and a possible bracketing interval, return a minimizer of the function isolated to a fractional precision of tol.

Parameters : func callable func(x,*args)

Objective function to minimize.

args tuple, optional

Additional arguments (if present), passed to func.

brack tuple, optional

tol float, optional

x tolerance stop criterion

full_output bool, optional

If True, return optional outputs.

maxiter int

Maximum number of iterations to perform.

Returns : xmin ndarray

fval float

(Optional output) Optimum function value.

funcalls int

(Optional output) Number of objective function evaluations made.

Interface to minimization algorithms for scalar univariate functions. See the ‘Golden’ method in particular.

Uses analog of bisection method to decrease the bracketed interval.

We illustrate the behaviour of the function when brack is of size 2 and 3, respectively. In the case where brack is of the form (xa,xb), we can see for the given values, the output need not necessarily lie in the range (xa, xb) .

>>> from scipy import optimize 
>>> minimizer = optimize.golden(f, brack=(1, 2)) >>> minimizer 1 >>> res = optimize.golden(f, brack=(-1, 0.5, 2), full_output=True) >>> xmin, fval, funcalls = res >>> f(xmin), fval (9.925165290385052e-18, 9.925165290385052e-18) 

Источник

Минимизация функции методом золотого сечения

Минимизация функции методом последовательного квадратичного программирования
В общем есть функция f от n переменных, которую нужно минимизировать: A = (aij)n*n) — матрица.

Метод наискорейшего спуска . Метод золотого сечения
Пытаюсь реализовать метод наискорейшего спуска. в качестве одномерной оптимизации использую метод.

Минимизация функции методом покоординатного спуска
Есть функция "Holt" от двух переменных "alpha" и "beta", которая выдаёт значение "mape". Нужно.

Функция: напечатать i-ое последовательное приближение золотого сечения
Вам необходимо написать функцию goldenRatio(i), которая получает число i как аргумент и печатает.

Читайте также:  Php получить ссылку редиректа

Одномерная минимизация функции методом золотого сечения,метода линейного программирования, градиентный спуск
Всем здравствуйте, уважаемые пользователи данного ресурса, нужно помочь с одномерной минимизацией.

Эксперт Python

Лучший ответ

Сообщение было отмечено Phil98 как решение

Решение

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
import math def f(x): #ввод значений a = float(input('Введите начало отрезка: ')) b = float(input('Введите конец отрезка: ')) eps = float(input('Введите точность: ')) y = a - b*pow(x, 2) x1 = a + 0.382 * (b - a) x2 = b - 0.382 * (b - a) y1 = f(x1) y2 = f(x2) while (True): if (f(x1)  f(x2)): b = x2 else: a = x1 if (math.abs(b - a)  eps) break return (a + b) / 2 print ()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
from math import pow, abs def f(x): x = (a + b) / 2 R = f(x) = pow(x, 2) + 2*x # ввод значений a = float(input('Введите начало отрезка: ')) b = float(input('Введите конец отрезка: ')) eps = float(input('Введите точность: ')) # Вычисляем значения функций f(x1), f(x2) x1 = a + 0.382 * (b - a) x2 = b - 0.382 * (b - a) f(x1) = pow(x1, 2) + 2*x1 f(x2) = pow(x2, 2) + 2*x2 while (True): if (f(x1)  f(x2)): b = x2 else: a = x1 if (math.abs(b - a)  eps): return x return R print (x, R) else: if b = x2: x2 = x1 f(x2) = f(x1) x1 = a + 0.382 * (b - a) f(x1) = pow(x1, 2) + 2*x1 if a = x1: x1 = x2 f(x1) = f(x2) x2 = b - 0.382 * (b - a) f(x2) = pow(x2, 2) + 2*x2

Источник

Русские Блоги

Здесь решается методом золотого сечения y = x 2 − 7 x + 10 y = x^2-7x+10 y = x 2 − 7 x + 1 0 Оптимальное решение, начальный интервал [ a , b ] = [ 2 , 8 ] [a,b]=[2,8] [ a , b ] = [ 2 , 8 ] , Точность сходимости 0,001.

k k k a a a x k 1 x_^ x k 1 ​ x k 2 x_^ x k 2 ​ b b b f ( x k 1 ) f(x_^) f ( x k 1 ​ ) f ( x k 2 ) f(x_^) f ( x k 2 ​ ) [ a , b ] [a,b] [ a , b ] b-a
1 2 8 [ 2 , 8 ] [2,8] [ 2 , 8 ] 6
2 2 2 2 2 2 4.292 4.292 4 . 2 9 2 5.708 5.708 5 . 7 0 8 8 8 8 − 1.6227359999999997 -1.6227359999999997 − 1 . 6 2 2 7 3 5 9 9 9 9 9 9 9 9 9 7 2.6252640000000014 2.6252640000000014 2 . 6 2 5 2 6 4 0 0 0 0 0 0 0 0 1 4 [ 2 , 5.708 ] [2, 5.708] [ 2 , 5 . 7 0 8 ] 3.708 3.708 3 . 7 0 8
3 3 3 2 2 2 3.416456 3.416456 3 . 4 1 6 4 5 6 4.291544 4.291544 4 . 2 9 1 5 4 4 5.708 5.708 5 . 7 0 8 − 2.2430204000639993 -2.2430204000639993 − 2 . 2 4 3 0 2 0 4 0 0 0 6 3 9 9 9 3 − 1.6234580960639988 -1.6234580960639988 − 1 . 6 2 3 4 5 8 0 9 6 0 6 3 9 9 8 8 [ 2 , 4.291544 ] [2, 4.291544 ] [ 2 , 4 . 2 9 1 5 4 4 ] 2.291544 2.291544 2 . 2 9 1 5 4 4
4 2.875369808 2.875369808 2 . 8 7 5 3 6 9 8 0 8 3.416348349344 3.416348349344 3 . 4 1 6 3 4 8 3 4 9 3 4 4 3.750565458656 3.750565458656 3 . 7 5 0 5 6 5 4 5 8 6 5 6 4.291544 4.291544 4 . 2 9 1 5 4 4 − 2.243002401342528 -2.243002401342528 − 2 . 2 4 3 0 0 2 4 0 1 3 4 2 5 2 8 − 2.2429843830315406 -2.2429843830315406 − 2 . 2 4 2 9 8 4 3 8 3 0 3 1 5 4 0 6 [ 2.875369808 , 3.750565458656 ] [ 2.875369808 , 3.750565458656] [ 2 . 8 7 5 3 6 9 8 0 8 , 3 . 7 5 0 5 6 5 4 5 8 6 5 6 ] 0.8751956506560004 0.8751956506560004 0 . 8 7 5 1 9 5 6 5 0 6 5 6 0 0 0 4
18 3.498963664784351 3.498963664784351 3 . 4 9 8 9 6 3 6 6 4 7 8 4 3 5 1 3.4996049019558986 3.4996049019558986 3 . 4 9 9 6 0 4 9 0 1 9 5 5 8 9 8 6 3.5000010589519333 3.5000010589519333 3 . 5 0 0 0 0 1 0 5 8 9 5 1 9 3 3 3 3.500642296123481 3.500642296123481 3 . 5 0 0 6 4 2 2 9 6 1 2 3 4 8 1 − 2.2499998438975357 -2.2499998438975357 − 2 . 2 4 9 9 9 9 8 4 3 8 9 7 5 3 5 7 − 2.2499999999988773 -2.2499999999988773 − 2 . 2 4 9 9 9 9 9 9 9 9 9 8 8 7 7 3 [ 3.4996049019558986 , 3.500642296123481 ] [ 3.4996049019558986 , 3.500642296123481 ] [ 3 . 4 9 9 6 0 4 9 0 1 9 5 5 8 9 8 6 , 3 . 5 0 0 6 4 2 2 9 6 1 2 3 4 8 1 ] 0.0010373941675823062 0.0010373941675823062 0 . 0 0 1 0 3 7 3 9 4 1 6 7 5 8 2 3 0 6 2
19 3.4996049019558986 3.4996049019558986 3 . 4 9 9 6 0 4 9 0 1 9 5 5 8 9 8 6 3.500001186527915 3.500001186527915 3 . 5 0 0 0 0 1 1 8 6 5 2 7 9 1 5 3.5002460115514644 3.5002460115514644 3 . 5 0 0 2 4 6 0 1 1 5 5 1 4 6 4 4 3.500642296123481 3.500642296123481 3 . 5 0 0 6 4 2 2 9 6 1 2 3 4 8 1 − 2.249999999998593 -2.249999999998593 − 2 . 2 4 9 9 9 9 9 9 9 9 9 8 5 9 3 − 2.2499999394783163 -2.2499999394783163 − 2 . 2 4 9 9 9 9 9 3 9 4 7 8 3 1 6 3 [ 3.4996049019558986 , 3.5002460115514644 ] [ 3.4996049019558986 , 3.5002460115514644 ] [ 3 . 4 9 9 6 0 4 9 0 1 9 5 5 8 9 8 6 , 3 . 5 0 0 2 4 6 0 1 1 5 5 1 4 6 4 4 ] 0.004395197314465804 0.004395197314465804 0 . 0 0 4 3 9 5 1 9 7 3 1 4 4 6 5 8 0 4

Код

import matplotlib.pyplot as plt import numpy as np from pylab import * #Objective function def function(x): y = x**2 - 7 * x + 10 return y # Золотое сечение def GoldenBorder(a, b, accuracy): x1 = a + 0.382*(b - a) x2 = a + 0.618*(b - a) fx1 = function(x1) fx2 = function(x2) print( "a=", a,"x1=", x1, "x2=", x2 , ",b=", b,",f(x1)=",fx1, ",f(x2)=", fx2, ) if fx1  fx2: a = a b = x2 else: a = x1 b = b accuracy = b - a print("NewRange[", a, ", ",b,"]","accuracy=", b-a) return a, b ,accuracy a = 2 b = 8 value = [] accuracy = b - a epoch = 0 accuracies = [] ys = [] epoches=[] xs = [] while accuracy > 0.001: epoch += 1 print("-"*100) print("Epoch:",epoch) a, b, accuracy = GoldenBorder(a, b, accuracy) accuracies.append(accuracy) ys.append(function( a + (b - a) / 2 )) epoches.append(epoch) xs.append(a + (b - a) / 2) x = a + (b - a) / 2 y = function(x) print("-"*100) print(«Лучшее преимущество: x * =», x,",f(x*)=", y) 
plt.title(' Golden Section Search ') plt.subplot(2,1,1) plt.plot(epoches,accuracies, ":o", label = 'accuracy', color="blue") xticks(np.linspace(0,19,20,endpoint=True)) plt.ylabel('f(x)') plt.legend() plt.subplot(2,1,2) plt.plot(ys, "-.o", label = 'f(x)', color="red") xticks(np.linspace(0,19,20,endpoint=True)) plt.xlabel('epoch') plt.ylabel('accuracy') plt.legend() plt.show() 

fig = plt.figure(figsize = ((8,6))) ax = fig.gca(projection='3d') ax.plot(epoches ,xs , ys,"-.o",) xticks(np.linspace(0,19,20,endpoint=True)) ax.set_xlabel('epoch') # Установить метку оси ax.set_ylabel('x') ax.set_zlabel(' f(x) ') plt.show() 

Источник

Метод наискорейшего спуска . Метод золотого сечения

Оптимальный градиентный метод (метод наискорейшего спуска)
Просьба помочь разобраться с простым алгоритмом. Не понимаю, почему ищет неверное значение.

Метод градиентного спуска
Имеется СЛАУ, но не знаю, как запрограммировать, сам алгоритм есть, надо решить методом.

Метод градиентного спуска для функции
Пытался написать метод градиентного спуска для функции x^2+y^2,вроде код более менее верно.

Метод градиентного спуска, для ряда Тейлора
помогите нужен код на Python.Формула градиентного спуска

Не правильно работает метод покоординатного спуска с использованием метода золотого сечения
подскажите пожалуйста. реализую метод покоординатного спуска с использованием метода золотого.

Методом золотого сечения ты находишь экстремум функции, а методом скорейшего спуска минимизируя функцию, ты пытаешься сравнить результаты? Я правильно понял?

Методом скорейшего спуска я ищу минимум функции. Метод золотого сечения использую для нахождение L(шага) на каждой итерации. Вот ссылка на метод https://lektsia.com/7x96f6.html

Градиентный метод с дроблением шага и Метод наискорейшего спуска
Ребята!Помогите пожалуйста реализовать Градиентный метод с дроблением шага,Метод наискорейшего.

Метод наискорейшего спуска или градиентный метод
Помогите пожалуйста с заданием. Дали отчет и там нужно сделать 4 задания, 3 сделал осталось.

Метод золотого сечения или Метод дихотомии
Подскажите пожалуйста. Нужно реализовать алгоритм поиска интервала, содержащего минимум функции. .

Метод половинного деления и метод золотого сечения
Используя метод половинного деления(бисекции) и золотого сечения найти минимум функции y=x^3 — x +.

Метод наискорейшего спуска
function Fnormal(x1,x2:real):real; begin Result:=2*x1*x1+x2*x2-x1*x2+x1; end; function.

Источник

Python-сообщество

[RSS Feed]

  • Начало
  • » Python для новичков
  • » метод одномерной нелинейной оптимизации — метод золотого сечения

#1 Окт. 15, 2017 13:35:17

метод одномерной нелинейной оптимизации — метод золотого сечения

Здравствуйте. Помогите на основе блок — схемы написать код.

from math import pow, abs def f(x): x = (a + b) / 2 R = f(x) = pow(x, 2) + 2*x # ввод значений a = float(input('Введите начало отрезка: ')) b = float(input('Введите конец отрезка: ')) eps = float(input('Введите точность: ')) # Вычисляем значения функций f(x1), f(x2) x1 = a + 0.382 * (b - a) x2 = b - 0.382 * (b - a) f(x1) = pow(x1, 2) + 2*x1 f(x2) = pow(x2, 2) + 2*x2 while (True): if (f(x1)  f(x2)): b = x2 else: a = x1 if (math.abs(b - a)  eps): return x return R print (x, R) else: if b = x2: x2 = x1 f(x2) = f(x1) x1 = a + 0.382 * (b - a) f(x1) = pow(x1, 2) + 2*x1 if a = x1: x1 = x2 f(x1) = f(x2) x2 = b - 0.382 * (b - a) f(x2) = pow(x2, 2) + 2*x2 

Отредактировано Psevg98 (Окт. 15, 2017 18:17:25)

attachment

Прикреплённый файлы:
бс.PNG (315,0 KБ)

Источник

Оцените статью