2017-08-17 26 views
1

試圖運行下面,這是爲了求解方程的約束NL系統:沒有解決到最優錯誤,使用Ipopt

using JuMP 
using Ipopt 
m=Model(solver=IpoptSolver()) 
@variable(m,k,start=0.1) 
@variable(m,c,start=1.2) 
@variable(m,l,start=0.3) 
@NLparameter(m,α==0.21) 
@NLparameter(m,β==0.99) 
@NLparameter(m,γ==0.4) 
@NLparameter(m,μ==0.2) 
@NLparameter(m,δ==0.14) 
@NLparameter(m,θ==0.25) 
@NLconstraint(m,c-c*β*(1-δ+((α/μ)*(k^(α-1))*l^(1-α)))==0) 
@NLconstraint(m,θ*c*l^(1/γ)-((1-α)/μ)*k^α*l^-α ==0) 
@NLconstraint(m,c+δ*k-k^α*l^(1-α)==0) 
@NLconstraint(m,l==0.33) 
@NLconstraint(m,(1-δ+((α/μ)*(k^(α-1))*l^(1-α)))-(1.05)^(1/4)==0) 
@NLobjective(m,Max,1.0) 
solve(m) 
println("k=", getvalue(k),"c=", getvalue(c),"l=", getvalue(l)) 
status=solve(m) 

但是,我收到以下錯誤消息:

警告:Ipopt與狀態Not_Enough_Degrees_Of_Freedom完成 警告:不解決到最優,狀態:錯誤 警告:Ipopt完成了狀態Not_Enough_Degrees_Of_Freedom 警告:不解決到最優,狀態:錯誤

這是一個經濟模型的平衡條件,有2個約束條件(Const。 4和5) 請問,代碼有什麼問題嗎?或者有另一種方法(一種不同的解算器,包,...)來解決這個受限制的問題。

+0

'@variable(m,l,start = 0.3)'和'@NLconstraint(m,l == 0.33)'都在模型中。如果'l'將是'0.33',爲什麼優化呢?在任何情況下,有3個變量有5個約束 - 警告可能是說的正確 –

+0

刪除@variable(m,l,start = 0.3)並將l == 0.33設置爲參數不能解決問題。更多信息:前3個約束條件構成了我想要解決的(NL,k,l)三個NL方程的核心繫統。但是,我想約束l = 0.33,也是系統第一個方程的一部分(1-δ+((α/μ)*(k ^(α-1))* 1 ^(1-α)) )爲=(1.05)^(1/4)。會有另一種解決方法嗎? – ludo

+0

還有4個約束和2個變量。也許沒有解決辦法(想想:飛機上的4條線不必對它們都有重要意義)。在任何情況下,你都可以在一個約束(或兩個)上添加*鬆弛變量*,然後嘗試最小化鬆弛變量(即最小化其絕對值或平方和)。 –

回答

0

您正在嘗試解決具有比變量(未知)更多約束(方程)的NL方程組的系統。此外,方程(5)是在理論(經濟學)基礎上對方程(1)的一部分施加的約束。 (c,l,k)滿足5個約束(沒有足夠的自由度)是沒有可行的解決方案。考慮到模型的兩個參數(θ和β)作爲變量,導致找到最優解的可行性問題。

相關問題