我正在嘗試運行下面的代碼,但NameError在運行代碼時我得到了一個。問題是q似乎沒有定義,但這不應該是真的。
class SimpleNamespace():
pass
#Question 1
#i)
#Defining the parameters using SimpleNameSpace. par = Parameters
par = SimpleNamespace()
par.y = 1 #assets
par.p = 0.2 #probability
par.theta = -2 #elasticity
#Defining utility function for agent
def utility(z,par):
return (z**(1 par.theta))/(1 par.theta)
#Defining premium
def premium(q,par):
return par.p*q
#Defining expected value
#Note that z_1, z_2 represents first and second part of the objective function - just in a compressed version
def exp_value (i,q,par):
z_1 = par.y-i q-premium(q,par)
z_2 = par.y-premium(q,par)
return par.p*utility(z_1,par) (1-par.p)*utility(z_2,par)
def opt_q(i,q,par):
obj = lambda q: -exp_value(i,q,par) #defining the objective function
solution = optimize.minimize_scalar(obj, bounds=(0,0.9), method="bounded") #bounded solution within [0.01, 0.9]
q = solution.x
return q
for i in np.linspace(0.01,0.9,num=100):
res = opt_q(i,q,par)
print(res)
uj5u.com熱心網友回復:
你得到了,NameError因為你沒有在最后一個 for 回圈中傳遞qto 。opt_q由于它已經在內部定義,opt_q只需從其引數中洗掉q,不要在 for 回圈中傳遞它,如下所示:
def opt_q(i,par):
obj = lambda q: -exp_value(i,q,par) #defining the objective function
solution = minimize_scalar(obj, bounds=(0,0.9), method="bounded") #bounded solution within [0.01, 0.9]
q = solution.x
return q
for i in np.linspace(0.01,0.9,num=100):
res = opt_q(i,par)
print(res)
這解決了您的問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/448673.html
