首页 > 解决方案 > MethodError:没有方法匹配 parseNExpr_runtime

问题描述

我在 Julia 中用于解决 NLP 问题的以下代码有错误。

using JuMP
using Ipopt
using DataFrames,ConditionalJuMP
m = Model(solver=IpoptSolver())

#importing data 

 xi=[-1.016713795   0.804447648 0.932137661 1.064136698  -0.963217531
     -1.048396778   1.076371484 1.099027177 1.061556926  -0.95185481
     -0.980261302   0.271253807 0.184946729 1.062838197  -0.958794505
     -0.980703191   0.278820569 0.231132677 1.062967459  -0.959302488
     -0.953074503   -0.00768112 0.128808175 1.067743779  -0.978524489
     -1.014866259   0.815325963 1.065956208 1.067059122  -0.974682291
     -0.995088119   0.550359991 0.845087207 1.066556784 -0.973154887]
 xj=xi
 pii=[-300
     -259.6530828
     -284.3708955
     -291.3387625
     -342.4479859
     -356.5031603
     -351.0154738]

 sample_size=7
 bus_num=5
 tempsum=0
 #define variables
 @variable(m,aij[1:2*bus_num,1:2*bus_num]) # define  matrix by 
                                             2bus_num*2bus_num

 for n=1:sample_size
    for i=1:bus_num
       for j=1:bus_num
        tempsum=(aij[i,j]*xi[n,i]*xj[n,j]-pii[n,2])^2+tempsum
       end
    end
 end

 #define constraints
 @constraint(m, [i=1:2*bus_num,j=2*bus_num],aij[i,j]==aij[j,i])
 @constraint(m, [i=1:2*bus_num,j=2*bus_num],aij[i,j]*aij[i,j]<=aij   
 [i,i]*aij[j,j])
 @constraint(m, [i=1:2*bus_num,j=2*bus_num],aij[i,i]*aij[j,j]<=0.25*
 (aij[i,i]+aij[j,j])*(aij[i,i]+aij[j,j]))

 #define NLP objective function

 @NLobjective(m, Min, tempsum)

 solve(m)
 println("m = ",getobjectivevalue(m))
 println("Aij = ", getvalue(aij))

但运行后,出现如下错误。

MethodError: 没有方法匹配 parseNLExpr_runtime(::JuMP.Model, ::JuMP.GenericQuadExpr{Float64,JuMP.Variable}, ::Array{ReverseDiffSparse.NodeData,1}, ::Int64, ::Array{Float64,1})

错误发生在 上@NLobjective(m, Min, tempsum),但我不知道如何修改代码。你可以请任何人帮助我吗?

此外,我还对如何在此处为解矩阵 aij 添加正定约束感到困惑,因为我想得到一个正定矩阵 aij。

标签: matrixnlpsumjulia

解决方案


@NLobjective(m, Min, tempsum) 此代码中的 tempsum 必须是由 Jump.register(***) 注册的函数。


推荐阅读