I am trying to minimize a 2d function using scipy.optimize. Specifically I want to plot the minimum value of the function fun as a function of the parameter wjk. The problem is that I cannot pass wjk as a function argument as I am not optimizing over it. How to obtain the optimized value as a function of a parameter in the objective function?
import numpy as np
import matplotlib.pyplot as mp
from scipy.stats import lognorm
from scipy.optimize import minimize
from numdifftools import Jacobian, Hessian
def fun(y):
li = 1e4
wj = 0.1
wk = 0.4
wjk = 0.2
pji = 1 - lognorm.cdf(y[0], 10)
pki = 1 - lognorm.cdf(y[1], 10)
return (li*(wj * pji + wk * pki - wjk * pji * pki ) + y[0] + y[1])
def fun_der(x):
return Jacobian(lambda x: fun(x))(x).ravel()
def fun_hess(x):
return Hessian(lambda x: fun(x))(x)
def main():
y0 = [100.0, 100.0]
b = (0, np.inf)
bounds = (b, b)
y=minimize(fun, y0, bounds=bounds, method='SLSQP', jac=fun_der, hess=fun_hess).__getitem__('x')
print(y, fun(y))
main()```