【问题标题】:Error thrown when adding vectorised constraints to JuMP向 JuMP 添加矢量化约束时引发错误
【发布时间】:2020-12-27 04:13:49
【问题描述】:

我正在尝试重现 this 模型 - 教程中的代码适用于旧版本的 JuMP/Julia,并且无法运行。

但是,当我尝试添加约束时:

@constraint(model, con, c[i = 1:N] .== ( ((1 - τ) * (1 - l[i]) .* w[i]) + e[i]))

我收到错误Unexpected assignment in expression 'c[i = 1:N]'

这里是代表:

using Random
using Distributions
using JuMP
using Ipopt

Random.seed!(123)
N = 1000
γ = 0.5
τ = 0.2

ϵ = rand(Normal(0, 1), N)
wage = rand(Normal(10, 1), N)
consumption = (γ * (1 - τ) * wage) + (γ * ϵ)
leisure = (1 - γ) .+ (( 1 - γ) * ϵ) ./ (( 1 - τ ) * wage)


model = Model(Ipopt.Optimizer)
@variable(model, c[i = 1:N] >= 0)
@variable(model, 0 <= l[i = 1:N] <= 1)
@constraint(model, con, c[i = 1:N] .== ( ((1 - τ) * (1 - l[i]) .* w[i]) + e[i]))
@NLobjective(model, Max, sum(γ *log(c[i]) + (1-γ)*log(l[i]) for i in 1:N ) )

有谁知道为什么会抛出这个问题以及如何解决它?

任何和所有帮助表示赞赏!

运行 Julia 1.5.1

【问题讨论】:

    标签: julia economics julia-jump


    【解决方案1】:

    在 JuMP 中使用c[i = 1:N] 只能定义变量。

    使用约束,您可以做的一种方法是:

    w = wage # not in your code
    e = ϵ  # not in your code
    @constraint(model, con[i = 1:N], c[i] == ( ((1 - τ) * (1 - l[i]) .* w[i]) + e[i]))
    

    【讨论】:

      【解决方案2】:

      Przemyslaw 的回答很好。如果你想坚持使用矢量化语法,你可以去

      N = 1_000
      e = rand(N)
      w = rand(N)
      τ = 0.2
      model = Model()
      @variable(model, c[i = 1:N] >= 0)
      @variable(model, 0 <= l[i = 1:N] <= 1)
      @constraint(model, c .== (1 - τ) .* (1 .- l) .* w .+ e)
      

      这里是约束 https://jump.dev/JuMP.jl/stable/constraints 的 JuMP 文档

      【讨论】:

      • 虽然这也是一个很好的答案,但我使用我的风格,因为它看起来更类似于我研究论文中的方程式;-)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-11
      • 1970-01-01
      • 1970-01-01
      • 2017-04-26
      相关资源
      最近更新 更多