From f8b6a22da7cd69eb86f57b968dedcd9dfd8db4d9 Mon Sep 17 00:00:00 2001 From: Dimitri Alston <123396563+DimitriAlston@users.noreply.github.com> Date: Wed, 22 Apr 2026 09:18:51 -0400 Subject: [PATCH 1/3] Update package for `ModelingToolkit` v11 --- Project.toml | 8 +++++++- src/EOptInterface.jl | 4 ++++ src/basefuncs.jl | 4 ++-- src/userfuncs.jl | 10 ++++++---- test/runtests.jl | 1 + 5 files changed, 20 insertions(+), 7 deletions(-) diff --git a/Project.toml b/Project.toml index ff31e22..a5d9428 100644 --- a/Project.toml +++ b/Project.toml @@ -6,12 +6,18 @@ version = "0.1.0" [deps] JuMP = "4076af6c-e467-56ae-b986-b466b2749572" ModelingToolkit = "961ee093-0014-501f-94e3-6117800e7a78" +Reexport = "189a3867-3050-52da-a836-e630ba90ab69" +SciCompDSL = "91a8cdf1-4ca6-467b-a780-87fda3fff15e" Symbolics = "0c5d862f-8b57-4792-8d23-62f2024744c7" SymbolicUtils = "d1185830-fcd6-423d-90d6-eec64667417b" [compat] JuMP = "1" -ModelingToolkit = "10" +ModelingToolkit = "11" +Reexport = "1" +SciCompDSL = "1" +Symbolics = "7" +SymbolicUtils = "4" julia = "1.10" [extras] diff --git a/src/EOptInterface.jl b/src/EOptInterface.jl index b6d60bf..3669e88 100644 --- a/src/EOptInterface.jl +++ b/src/EOptInterface.jl @@ -16,9 +16,13 @@ module EOptInterface import JuMP import ModelingToolkit import ModelingToolkit: t_nounits as t, D_nounits as D + import Reexport import Symbolics import SymbolicUtils + # Reexports + Reexport.@reexport using SciCompDSL + # Include base functions include("basefuncs.jl") diff --git a/src/basefuncs.jl b/src/basefuncs.jl index 93aad10..8865532 100644 --- a/src/basefuncs.jl +++ b/src/basefuncs.jl @@ -12,7 +12,7 @@ ################################################################################ function mtk_generate_model_equations(sys::ModelingToolkit.System) - param_dict = copy(ModelingToolkit.defaults(sys)) + param_dict = copy(ModelingToolkit.initial_conditions(sys)) h = [] for i in eachindex(ModelingToolkit.unknowns(sys)) expr = (ModelingToolkit.full_equations(ModelingToolkit.expand_connections(sys))[i].rhs @@ -31,7 +31,7 @@ function mtk_generate_model_equations(sys::ModelingToolkit.System) end function mtk_generate_reduced_expression(expr::Symbolics.Num, sys::ModelingToolkit.System) - sub_dict = ModelingToolkit.defaults(sys) + sub_dict = ModelingToolkit.initial_conditions(sys) for eqn in ModelingToolkit.observed(sys) sub_dict[eqn.lhs] = eqn.rhs end diff --git a/src/userfuncs.jl b/src/userfuncs.jl index 9213779..26497ae 100644 --- a/src/userfuncs.jl +++ b/src/userfuncs.jl @@ -20,7 +20,7 @@ Returns the decision variables for an optimization problem formulated from a Mod function decision_vars(sys::ModelingToolkit.System) return [ ModelingToolkit.unknowns(sys); - setdiff(ModelingToolkit.parameters(sys), keys(ModelingToolkit.defaults(sys))) + setdiff(ModelingToolkit.parameters(sys), keys(ModelingToolkit.initial_conditions(sys))) ] end @@ -70,13 +70,15 @@ function register_odesystem(model::JuMP.Model, odesys::ModelingToolkit.System, t N = Int(floor((tspan[2] - tspan[1])/tstep)) + 1 # Number of ODE variables V = length(ModelingToolkit.unknowns(odesys)) - param_dict = copy(ModelingToolkit.defaults(odesys)) + param_dict = copy(ModelingToolkit.initial_conditions(odesys).dict) for var in ModelingToolkit.unknowns(odesys) pop!(param_dict, var) end dx = [] for j in 1:V dxj_expr = ModelingToolkit.full_equations(odesys)[j].rhs + dxj_expr = SymbolicUtils.substitute(dxj_expr, ModelingToolkit.bindings(odesys)) + dxj_expr = SymbolicUtils.substitute(dxj_expr, ModelingToolkit.bindings(odesys)) # Fully substitute parameters with default values while ~isempty(intersect(Symbolics.get_variables(dxj_expr), keys(param_dict))) dxj_expr = SymbolicUtils.substitute(dxj_expr, param_dict) @@ -91,7 +93,7 @@ function register_odesystem(model::JuMP.Model, odesys::ModelingToolkit.System, t ps = JuMP.all_variables(model)[end-length(setdiff(EOptInterface.decision_vars(odesys), ModelingToolkit.unknowns(odesys)))+1:end] xs = reshape(setdiff(JuMP.all_variables(model), ps), V, N) # Extract initial conditions from the ModelingToolkit system and fix them in the JuMP model for x[1:V,1] - JuMP.fix.(xs[:,1], [ModelingToolkit.defaults(odesys)[ModelingToolkit.unknowns(odesys)[i]] for i in eachindex(ModelingToolkit.unknowns(odesys))], force=true) + JuMP.fix.(xs[:,1], [ModelingToolkit.initial_conditions(odesys)[ModelingToolkit.unknowns(odesys)[i]].val for i in eachindex(ModelingToolkit.unknowns(odesys))], force=true) # Formulate JuMP constraints based on chosen ODE discretization method if integrator == "EE" JuMP.@constraint(model, [j in 1:V, i in 1:(N-1)], xs[j,i+1] == xs[j,i] + tstep*dx[j](xs[:,i]..., ps...)) @@ -108,7 +110,7 @@ Returns a dictionary of optimal solution values for the observed variables of an """ function full_solution(model::JuMP.Model, sys::ModelingToolkit.System) vars = EOptInterface.decision_vars(sys) - sub_dict = ModelingToolkit.defaults(sys) + sub_dict = ModelingToolkit.initial_conditions(sys) for i in eachindex(vars) sub_dict[vars[i]] = JuMP.value.(JuMP.all_variables(model)[i]) end diff --git a/test/runtests.jl b/test/runtests.jl index db46732..fef9a09 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -3,6 +3,7 @@ using Ipopt using JuMP using ModelingToolkit using ModelingToolkit: t_nounits as t, D_nounits as D +using SciCompDSL using Test @testset "Algebraic Model" begin From b0ea05b8dd1db17aee38d81b1f9bf853e9be7200 Mon Sep 17 00:00:00 2001 From: Dimitri Alston <123396563+DimitriAlston@users.noreply.github.com> Date: Fri, 19 Jun 2026 17:37:57 -0400 Subject: [PATCH 2/3] Update Project.toml --- Project.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Project.toml b/Project.toml index a5d9428..0eccd3e 100644 --- a/Project.toml +++ b/Project.toml @@ -8,16 +8,16 @@ JuMP = "4076af6c-e467-56ae-b986-b466b2749572" ModelingToolkit = "961ee093-0014-501f-94e3-6117800e7a78" Reexport = "189a3867-3050-52da-a836-e630ba90ab69" SciCompDSL = "91a8cdf1-4ca6-467b-a780-87fda3fff15e" -Symbolics = "0c5d862f-8b57-4792-8d23-62f2024744c7" SymbolicUtils = "d1185830-fcd6-423d-90d6-eec64667417b" +Symbolics = "0c5d862f-8b57-4792-8d23-62f2024744c7" [compat] JuMP = "1" ModelingToolkit = "11" Reexport = "1" SciCompDSL = "1" -Symbolics = "7" SymbolicUtils = "4" +Symbolics = "7" julia = "1.10" [extras] From f27f2d523b0748b273b594a315b0a6ea12d6a86e Mon Sep 17 00:00:00 2001 From: Dimitri Alston <123396563+DimitriAlston@users.noreply.github.com> Date: Fri, 19 Jun 2026 17:49:37 -0400 Subject: [PATCH 3/3] v0.2.0 --- Project.toml | 2 +- docs/src/news.md | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 0eccd3e..6ff0a08 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "EOptInterface" uuid = "96d9f51d-8c41-4e2d-b1a3-7b48dea3ddd1" authors = ["Joseph Choi ", "Dimitri Alston ", "Pengfei Xu ", "Matthew Stuber "] -version = "0.1.0" +version = "0.2.0" [deps] JuMP = "4076af6c-e467-56ae-b986-b466b2749572" diff --git a/docs/src/news.md b/docs/src/news.md index 85ccb11..cb4961a 100644 --- a/docs/src/news.md +++ b/docs/src/news.md @@ -1,5 +1,16 @@ # News for EOptInterface Releases +## [v0.2.0](https://github.com/PSORLab/EOptInterface.jl/releases/tag/v0.2.0) (June 19, 2026) + +- Bumped ModelingToolkit.jl compatibility to v11. + +## [v0.1.1](https://github.com/PSORLab/EOptInterface.jl/releases/tag/v0.1.1) (April 22, 2026) + +- Added notebook examples. +- Renamed `full_solutions` to `full_solution`. +- Separated tests. +- Added documentation website. + ## [v0.1.0](https://github.com/PSORLab/EOptInterface.jl/releases/tag/v0.1.0) (Jan 20, 2026) - Initial release.