【问题标题】:Julia MethodError: no method matching parseNLExpr_runtime(Julia MethodError:没有方法匹配 parseNLExpr_runtime(
【发布时间】:2018-06-13 14:36:14
【问题描述】:

我正在尝试编写here 描述的方法来估计金属制造商的生产功能。我已经在 Python 和 Matlab 中完成了这项工作,但我正在尝试学习 Julia。

spain_clean.csv 是我正在加载的日志资本 (lnk)、日志劳动 (lnl)、日志输出 (lnva) 和日志材料 (lnm) 的数据集。滞后变量在它们之前用“l”表示。

代码在底部。我收到一个错误:

ERROR: LoadError: MethodError: no method matching parseNLExpr_runtime(::JuMP.Model, ::JuMP.GenericQuadExpr{Float64,JuMP.Variable}, ::Array{ReverseDiffSparse.NodeData,1}, ::Int32, ::Array{Float64,1})

我认为这与使用向量和和数组进入非线性目标有关,但我对 Julia 的了解不足以对此进行调试。

using JuMP  # Need to say it whenever we use JuMP

using Clp, Ipopt # Loading the GLPK module for using its solver

using CSV # csv reader


# read data
df = CSV.read("spain_clean.csv")


#MODEL CONSTRUCTION
#--------------------

acf = Model(solver=IpoptSolver())



@variable(acf, -10<= b0  <= 10) # 

@variable(acf, -5 <= bk <= 5 ) # 

@variable(acf, -5 <= bl <= 5 ) #

@variable(acf, -10<= g1 <= 10) # 


const g = sum(df[:phihat]-b0-bk* df[:lnk]-bl* df[:lnl]-g1* (df[:lphihat]-b0-bk* df[:llnk]-bl* df[:llnl]))

const gllnk = sum((df[:phihat]-b0-bk* df[:lnk]-bl* df[:lnl]-g1* (df[:lphihat]-b0-bk* df[:llnk]-bl* df[:llnl])).*df[:llnk])

const gllnl = sum((df[:phihat]-b0-bk* df[:lnk]-bl* df[:lnl]-g1* (df[:lphihat]-b0-bk* df[:llnk]-bl* df[:llnl])).*df[:llnl])

const glphihat = sum((df[:phihat]-b0-bk* df[:lnk]-bl* df[:lnl]-g1* (df[:lphihat]-b0-bk* df[:llnk]-bl* df[:llnl])).*df[:lphihat])



#OBJECTIVE  

@NLobjective(acf, Min, g* g + gllnk* gllnk + gllnl* gllnk + glphihat* glphihat)



#SOLVE IT 
status = solve(acf) # solves the model

println("Objective value: ", getobjectivevalue(acf)) #     getObjectiveValue(model_name) gives the optimum objective value

println("b0 = ", getvalue(b0)) 

println("bk = ", getvalue(bk))

println("bl = ", getvalue(bl))

println("g1 = ", getvalue(g1))

【问题讨论】:

    标签: julia nonlinear-optimization economics julia-jump


    【解决方案1】:

    不是 Julia 方面的专家,但我认为您的代码有一些问题。 首先,常量在迭代过程中不应该改变,你正在使它们成为控制变量的函数。其次,您要使用的是非线性表达式而不是常数。所以你要写的不是常量,而是

    N = size(df, 1)
    
    @NLexpression(acf, g, sum(df[i, :phihat]-b0-bk* df[i, :lnk]-bl* df[i, :lnl]-g1* (df[i, :lphihat]-b0-bk* df[i, :llnk]-bl* df[i, :llnl]) for i=1:N))
    
    @NLexpression(acf, gllnk, sum((df[i,:phihat]-b0-bk* df[i,:lnk]-bl* df[i,:lnl]-g1* (df[i,:lphihat]-b0-bk* df[i,:llnk]-bl* df[i,:llnl]))*df[i,:llnk] for i=1:N))
    
    @NLexpression(acf,gllnl,sum((df[i,:phihat]-b0-bk* df[i,:lnk]-bl* df[i,:lnl]-g1* (df[i,:lphihat]-b0-bk* df[i,:llnk]-bl* df[i,:llnl]))*df[i,:llnl] for i=1:N))
    
    @NLexpression(acf,glphihat,sum((df[i,:phihat]-b0-bk* df[i,:lnk]-bl* df[i,:lnl]-g1* (df[i,:lphihat]-b0-bk* df[i,:llnk]-bl* df[i,:llnl]))*df[i,:lphihat] for i=1:N))
    

    我对此进行了测试,它似乎有效。

    【讨论】:

      猜你喜欢
      • 2023-03-27
      • 2016-06-04
      • 2017-06-16
      • 1970-01-01
      • 2020-07-05
      • 1970-01-01
      • 1970-01-01
      • 2019-09-29
      • 1970-01-01
      相关资源
      最近更新 更多