Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
Vaibhavdixit02 committed Dec 2, 2023
1 parent 4c2f43c commit 1106aa0
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 18 deletions.
34 changes: 17 additions & 17 deletions lib/OptimizationMOI/src/OptimizationMOI.jl
Original file line number Diff line number Diff line change
Expand Up @@ -116,25 +116,25 @@ function __moi_status_to_ReturnCode(status::MOI.TerminationStatusCode)
end
end

function get_expr_map(prob, f)
pairs_arr = if prob.p isa SciMLBase.NullParameters
[Meta.parse(string(_s)) => Expr(:ref, :x, i) for (i, _s) in enumerate(f.syms)]
else
vcat([Symbol(_s) => Expr(:ref, :x, i) for (i, _s) in enumerate(f.syms)],
[Symbol(_s) => Expr(:ref, p, i) for (i, _p) in enumerate(f.paramsyms)])
end
return pairs_arr
end
# function get_expr_map(prob, f)
# pairs_arr = if prob.p isa SciMLBase.NullParameters
# [Meta.parse(string(_s)) => Expr(:ref, :x, i) for (i, _s) in enumerate(f.syms)]
# else
# vcat([Symbol(_s) => Expr(:ref, :x, i) for (i, _s) in enumerate(f.syms)],
# [Symbol(_s) => Expr(:ref, p, i) for (i, _p) in enumerate(f.paramsyms)])
# end
# return pairs_arr
# end

"""
Substitute variables and parameters with canonical names x and p respectively.
"""
function rep_pars_vals!(e::Expr, p)
rep_pars_vals!.(e.args, Ref(p))
replace!(e.args, p...)
end
# """
# Substitute variables and parameters with canonical names x and p respectively.
# """
# function rep_pars_vals!(e::Expr, p)
# rep_pars_vals!.(e.args, Ref(p))
# replace!(e.args, p...)
# end

function rep_pars_vals!(e, p) end
# function rep_pars_vals!(e, p) end

"""
Replaces every expression `:x[i]` with `:x[MOI.VariableIndex(i)]`
Expand Down
12 changes: 11 additions & 1 deletion lib/OptimizationMOI/src/moi.jl
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,9 @@ function MOIOptimizationCache(prob::OptimizationProblem, opt; kwargs...)
throw(ArgumentError("Expected an `OptimizationProblem` that was setup via an `OptimizationSystem`, or AutoModelingToolkit ad choice"))
end
end

# TODO: check if the problem is at most bilinear, i.e. affine and or quadratic terms in two variables
expr_map = get_expr_map(prob, f)
expr_map = get_expr_map(prob.f.sys)
expr = repl_getindex!(convert_to_expr(f.expr, expr_map; expand_expr = false))

cons = MTK.constraints(f.sys)
Expand Down Expand Up @@ -448,3 +449,12 @@ function convert_to_expr(eq, expr_map; expand_expr = false)
expr = symbolify!(expr)
return expr
end

function get_expr_map(sys)
dvs = ModelingToolkit.states(sys)
ps = ModelingToolkit.parameters(sys)
return vcat([ModelingToolkit.toexpr(_s) => Expr(:ref, :x, i)
for (i, _s) in enumerate(dvs)],
[ModelingToolkit.toexpr(_p) => Expr(:ref, :p, i)
for (i, _p) in enumerate(ps)])
end

0 comments on commit 1106aa0

Please sign in to comment.