JuMP optimization

I can’t reproduce your code because I don’t know what solve_lmcp and find_local_solution_set are.

But try:

    else
        global x = 2.5.*[w, z] - 1.2*[w, z]
    end

The global is a hint that you should restructure your code. The simplest way is to wrap everything in a function:

using JuMP
using HiGHS

function main()
    Q = [1 0;
        0 1.0]
    A = zeros(0,2)
    l1 = u1 = zeros(0)

    M = ones(1,1)
    N = -ones(1,1)
    o = zeros(1)
    l2 = zeros(1)
    u2 = fill(Inf, 1)

    x_init = [9.0, 8]
    q = -[1.0; -2]

    x = x_init
    x_opt = []
    n = length(x_init)
    (zdim, wdim) = size(N)

    items = 1:n

    for k in 1:20  
        w = x[1:wdim] 
        z = solve_lmcp(M, N, o, l2, u2, w) 
        local_sols = find_local_solution_set(M,N,o,l2,u2,w,z)
        for sol in local_sols
            model = Model(HiGHS.Optimizer)
            @variable(model, f[1:n] >= 0)
            @objective(model, Min, 0.5*f'*Q*f+f'*q)
            @constraint(model,  l1 .<= A * f .<= u1)
            optimize!(model)
            x_opt = value.(f)
        end
        adf = []
        adf = [Vector{Float64}(vec(w)),Vector{Float64}(vec(z))]
        if all(isapprox(only(x), y; atol=1e-5) for (x,y) in zip(adf,x_opt))
            return (x_opt)
            break
        else
            x = 2.5.*[w, z] - 1.2*[w, z]  #issue is with this line, if i comment this line the code works, but if not then it says "x" not defined, however "x" is in the loop above and is defined
        end
    end
    return x
end

See also: Performance tips · JuMP

2 Likes