簡體   English   中英

/(::VariableRef,::QuadExpr) 未定義

[英]/(::VariableRef,::QuadExpr) is not defined

我正在嘗試用 JuMp 解決一個問題,這是一個非線性問題。 所以我有以下錯誤:

/(::VariableRef,::QuadExpr) is not defined. Are you trying to build a nonlinear problem? Make sure you use @NLconstraint/@NLobjective.

我正在使用@NLobjective@NLconstraint

當我在我的函數bvpsolve中調用它時,我在這個函數的第二行遇到了問題:

function hamiltonien(z,eps)
    u = z[:,8]./(2*eps*Cd2*z[:,6].*z[:,2])
    h = z[:,5] .* z[:,1] .* [sin(z[i,4]) for i in size(z[:,4])] + z[:,6] .* (T(z[:,1])./z[:,3] - phi(z[:,1]) * S * z[:,2].^2 /(2*z[:,3])* (Cd1+Cd2*u^2) - g *sin(z[:,4])) - z[:,7] *Cs(z[:,2])*T(z[:,1]) + 1/eps * z[:,8] *(phi(z[:,1])*S*z[:,2] *u /(2*z[:,3]) - g/z[:,2] *cos(z[:,4]))
    return 1
end

function bvpsolve(eps,N)
    sys = Model(optimizer_with_attributes(Ipopt.Optimizer, "print_level" => 5))
    set_optimizer_attribute(sys,"tol",1e-8)
    set_optimizer_attribute(sys,"constr_viol_tol",1e-6)

    @variables(sys, begin
                   tf       
                   x[1:N+1 , 1:n]
                   y[1:N+1 , 1:n]
                   0. ≤ h[1:N] ≤ 10
               end)

    Δt = (tf-t0)/N

    # Objective
    @NLobjective(sys, Min, sum(sum((x[i,j]-y[i,j])^2 for i in 1:N+1) for j in 1:n )/N + α*sum((h[i]-Δt)^2 for i in 1:N))

    hx = hamiltonien(x,eps)
    hy = hamiltonien(y,eps)
    xpoint , ppointx = hvfun(hx,x)
    ypoint , ppointy = hvfun(hy,y)

    @NLconstraints(sys, begin
                       con_h0, x[1,1]   - 3480. == 0     
                       con_hf, x[N+1,1] - 9144. == 0  
                       con_v0, x[1,2]   - 151.67 == 0     
                       con_vf, x[N+1,2] - 191. == 0
                       con_m0, x[1,3]   - 69000. == 0
                       con_mf, x[N+1,3] - 68100. == 0
                       con_g0, x[1,4]   - 69000. == 0
                       con_gf, x[N+1,4] - 68100. == 0                
                   end)
    ...

end)

您不能在宏之外構造非線性表達式。

請參閱文檔: https ://jump.dev/JuMP.jl/stable/manual/nlp/

您可以使用用戶定義的函數,但我不明白您的示例。 它硬編碼return 1 ,所以我不知道uh是干什么用的。

您的示例也是不可重現的,因為我不知道hvfun是什么。

ps,如果您想進行更長時間的討論,請在社區論壇發帖: https ://discourse.julialang.org/c/domain/opt/13。 前后來回比堆棧溢出要容易一些。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM