Из учебника scipy я действительно не понимаю, как работает optimize.minimize. Я хочу, чтобы свести к минимуму c3 в следующий набор уравнений:Какая переменная сведена к минимуму с помощью scipy.optimize.minimize/Как это работает?
0 = cos(b1)+ cos(b2)- 0.0166
0 = sin(b1)+ sin(b2)+ 0.3077*c3 - 0.6278
0 = cos(b1)- cos(b2)+ 5.4155*c3 - 4.3547
в интервалах:
c3[0,1]
b1,b2[0,2*pi]
Вот мой код:
def fun(x):
return 4.9992-5.7233*x[0]-2*np.cos(x[2])-np.sin(x[2])-np.sin(x[1])
bnds = ((0,1),(0,2*np.pi),(0,2*np.pi))
i = optimize.minimize(fun, (0.05,np.pi*0.5,np.pi), method='SLSQP', bounds=bnds)
Выход является
status: 0
success: True
njev: 6
nfev: 30
fun: -3.9601679766628886
x: array([ 1. , 1.57079633, 0.46367497])
message: 'Optimization terminated successfully.'
jac: array([ -5.72330004e+00, 0.00000000e+00, 6.11841679e-05,
0.00000000e+00])
nit: 6
Результат: то же самое в L-BFGS-B
Я понимаю, что здесь c3 стал 1, который все еще в порядке, но я хотел, чтобы он был ниже. Если я применил fsolve
к функции, она найдет корень для c3 = 0.46. Кстати, зачем мне писать x [0], x [1] и x [2] вместо c3, b1, b2 в коде? Есть ли более умный способ использования ограничений, например?
'Из скудного учебника Я действительно не понимаю, как оптимизировать. Minimize works' Вы можете рассказать нам, что именно вы не понимаете? Есть ли какой-то конкретный пункт? – cel
Во-первых, я не понимаю, как сказать, чтобы свести к минимуму c3, во-вторых, я не получаю разницу между ограничениями и границами. Математически говоря, граница - это ограничение неравенства, не так ли? – Fips