From 6577b1c3c4bd51598a5ba4aeaea0e982500e7e9c Mon Sep 17 00:00:00 2001 From: navaxel <104438099+navaxel@users.noreply.github.com> Date: Fri, 7 Jul 2023 14:22:39 -0400 Subject: [PATCH] Fix XCSP3 output for undefined variables (#423) --- src/output.jl | 4 ++-- src/parser/variables.jl | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/output.jl b/src/output.jl index 14155924a..5d245c5dd 100644 --- a/src/output.jl +++ b/src/output.jl @@ -9,7 +9,7 @@ using CSV, DataFrames - `memory_limit::Union{Nothing, Int}`: the reversible representation of the table. """ -function solve_XCSP3_instance(file_path::AbstractString, strategy::SearchStrategy=DFSearch(), time_limit::Union{Nothing, Int}=nothing, memory_limit::Union{Nothing, Int}=nothing, save_performance::Bool=false, save_path::AbstractString="", include_time::Float64=0.0) +function solve_XCSP3_instance(file_path::AbstractString; strategy::SearchStrategy=DFSearch(), time_limit::Union{Nothing, Int}=nothing, memory_limit::Union{Nothing, Int}=nothing, save_performance::Bool=false, save_path::AbstractString="", include_time::Float64=0.0) solving_time = @elapsed begin @@ -126,7 +126,7 @@ function print_solutions(model::SeaPearl.CPModel, dict_variables::Dict{String,An print("v ") values = Int[] for (id, var) in dict_variables - if isa(var, Vector) || isa(var, Matrix) + if isa(var, Vector) || isa(var, Matrix) || isa(var, Array) print(id*"[]"^length(size(var)), " ") for array_var in var diff --git a/src/parser/variables.jl b/src/parser/variables.jl index aa820ba81..b42c9c9b0 100644 --- a/src/parser/variables.jl +++ b/src/parser/variables.jl @@ -102,6 +102,16 @@ function parse_array_variable(array_variable::Node, model::SeaPearl.CPModel, tra end end + # For variables not declared + for idx in CartesianIndices(seapearl_array_var) + if seapearl_array_var[idx].id == "default" + str_idx = "[" * join([string(idx[i] - 1) for i in 1:length(idx)], "][") * "]" + var = SeaPearl.IntVar(0, 0, id * str_idx, trailer) + SeaPearl.addVariable!(model, var) + seapearl_array_var[idx] = var + end + end + #Same domain for all variables else domain = parse_variable_domain(raw_domain)