Julia MethodError: нет подходящего метода parseNLExpr_runtime ( - PullRequest
0 голосов
/ 13 июня 2018

Я пытаюсь закодировать описанный метод здесь , чтобы оценить производственные функции производителей металла.Я сделал это в Python и Matlab, но я пытаюсь выучить Джулию.

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})

Я думаю, что это связано с использованием векторных сумм и массивов, идущих в нелинейную цель, но я недостаточно понимаю Юлию, чтобы отладить это.

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))

1 Ответ

0 голосов
/ 13 июня 2018

Нет эксперта в Юлии, но я думаю, что в вашем коде есть пара ошибок.Во-первых, константы не должны изменяться во время итерации, и вы делаете их функциями управляющих переменных.Во-вторых, вы хотите использовать нелинейные выражения вместо констант.поэтому вместо констант вы хотите написать

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))

Я проверил это, и похоже, что оно работает.

...