diff --git a/CHANGELOG.md b/CHANGELOG.md index 715df35d..707b2117 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [develop] +## [2.1] + +### General +- Fixed bug with strings in PETSc allocated strctures (#61) +- Update dependencies to PETSc >=3.25 and ROCm >= 6.4 (#70) + +### User Interface +- Add AgentiGrid experimental agentic AI user interface (#65) +- Refactored visualizer (#69) + +### TCOPFLOW +- Fix ramp parsing and GENRAMP indexing in TCOPFLOW (#62) +- Improve preallocation of sparse matrices in TCOPFLOW (#71) + + ## [2.0] ### General diff --git a/CMakeLists.txt b/CMakeLists.txt index 5d014994..8bfaa588 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,7 +6,7 @@ Preamble cmake_minimum_required(VERSION 3.18) -project(ExaGO VERSION "2.0.0") +project(ExaGO VERSION "2.1.0") set(CMAKE_CXX_STANDARD 17) set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") diff --git a/README.md b/README.md index 63b20513..81025455 100644 --- a/README.md +++ b/README.md @@ -32,11 +32,8 @@ Additionally, note that SCOPFLOW and SOPFLOW with HiOp solver use Ipopt to solve Detailed installation instructions are given at [INSTALL.md](./INSTALL.md) for information on acquiring, building and installing ExaGO. -If you are a developer with access to the project, we also provide public binaries that are generated through our GitHub actions workflows documented in [README.md](.github/workflows/README.md), and with documentation about usage in the packages section of our repository. Check out a short (< 60s) demo of pulling down a version of ExaGO: +If you are a developer with access to the project, we also provide public binaries that are generated through our GitHub actions workflows documented in [README.md](.github/workflows/README.md), and with documentation about usage in the packages section of our repository. -[![asciicast]( -https://asciinema.org/a/KCi5TmUXc6zWDj7JYHzfSFxmw.png)]( -https://asciinema.org/a/KCi5TmUXc6zWDj7JYHzfSFxmw) ## Developer Guide @@ -111,8 +108,8 @@ the guidelines are ambiguous or you have a particular question. ## Authors ExaGOTM was designed and implemented by Shrirang Abhyankar and has received significant contributions from Slaven Peles, Nicholson Koukpaizan, -Maksudul Alam, Asher Mancinelli, Cameron Rutherford, Joshua Hambrick, Philip -Fackler, Eve Tsybina, Bruce Palmer, Jaelyn Litzinger, William Perkins, Sayef +Samim Konjicija, Maksudul Alam, Asher Mancinelli, Cameron Rutherford, Joshua Hambrick, Philip +Fackler, Eve Tsybina, Shaked Regev, Bruce Palmer, Jaelyn Litzinger, William Perkins, Sayef Azad Sakin, Joseph Macam, and Ryan Danehy. ## Acknowledgement diff --git a/agentigrid/agentigrid/engine/agent_loop.py b/agentigrid/agentigrid/engine/agent_loop.py index 23dae310..f32bb69b 100644 --- a/agentigrid/agentigrid/engine/agent_loop.py +++ b/agentigrid/agentigrid/engine/agent_loop.py @@ -916,7 +916,7 @@ def _build_extra_args(self) -> list[str] | None: return args if args else None def _normalize_sopflow_wind_base(self) -> None: - """REVIEW (Slaven sign-off): model base-case wind as curtailable for SOPFLOW. + """REVIEW: model base-case wind as curtailable for SOPFLOW. case_ACTIVSg200 ships wind generators as must-run (Pmin = Pmax = nameplate), so any scenario whose wind availability is below nameplate is infeasible in @@ -1000,7 +1000,7 @@ def run(self, base_case: Path, goal: str) -> SearchSession: logger.info("Parsing base case: %s", base_case) self._base_network = parse_matpower(base_case) self._current_network = self._base_network - # REVIEW (Slaven sign-off): model base-case wind as curtailable for SOPFLOW + # REVIEW: model base-case wind as curtailable for SOPFLOW # so scenarios with sub-nameplate wind are feasible (see the method + the # search.sopflow_curtailable_wind_base flag). No-op for non-SOPFLOW / disabled. self._normalize_sopflow_wind_base() diff --git a/agentigrid/agentigrid_architecture.md b/agentigrid/agentigrid_architecture.md index 17af9f60..f12138ac 100644 --- a/agentigrid/agentigrid_architecture.md +++ b/agentigrid/agentigrid_architecture.md @@ -7,8 +7,7 @@ | Project | AgentiGrid (in process of integration into ExaGO) | | Version | 0.3 — PFLOW Direct Optimization | | Date | May 2026 | -| Author | Samim K., University of Sarajevo | -| Supervisor | Slaven P., Oak Ridge National Laboratory | +| Author | Samim Konjicija, University of Sarajevo | | Target Platform | Linux (OpenSUSE Leap 15.6), Python 3.10+ | --- diff --git a/agentigrid/claude_code_changes.md b/agentigrid/claude_code_changes.md index 5c83fa3a..83a815a8 100644 --- a/agentigrid/claude_code_changes.md +++ b/agentigrid/claude_code_changes.md @@ -32,7 +32,7 @@ Confirmed `_augment_generator_mutation` already pins `Qmin == Qmax` (forced, not Prompt 13 re-ran an identical sweep 3× (50,504 tokens), prompt 17 2×. - `agentigrid/prompts/system_prompt.py`: explicit rule "DO NOT RE-RUN AN IDENTICAL SWEEP". -- `agentigrid/engine/agent_loop.py` (deterministic backstop): session-level `_sweep_signature_cache` keyed by `_sweep_cache_key(data)` (mode + entity + mutation + candidate_set + feasibility + metric + predicate + dispatchable/cost params; excludes description/reasoning). An identical re-request is served via `_serve_cached_sweep` (journaled "cached — not re-solved", no re-solve); changed parameters → different signature → still executes. Soft guard, never blocks a changed sweep. **Decision flagged for Slaven:** nudge-only vs. nudge + cache (both implemented here). +- `agentigrid/engine/agent_loop.py` (deterministic backstop): session-level `_sweep_signature_cache` keyed by `_sweep_cache_key(data)` (mode + entity + mutation + candidate_set + feasibility + metric + predicate + dispatchable/cost params; excludes description/reasoning). An identical re-request is served via `_serve_cached_sweep` (journaled "cached — not re-solved", no re-solve); changed parameters → different signature → still executes. Soft guard, never blocks a changed sweep. **Decision flagged for further discussion:** nudge-only vs. nudge + cache (both implemented here). ### Tests — `tests/test_sweep_corrections.py` (15) @@ -123,7 +123,7 @@ A **named registry of verified primitives** (Phase 1; not free-form LLM code), e C2 generator primitive (dispatchable bounds + non-zero cost, fixed-injection regression, explicit coeffs, median mid-merit, fallback); registry (defaults, needs-base, direction, unknown-name raises, extensibility); `max_delta_v` (true max abs diff, max bus ≠ candidate bus, None without base); `reactive_adequacy` (adequate, inadequate-with-reason, non-convergence); standard predicate unchanged; `_augment_generator_mutation` (dispatchable resolution, explicit-strategy error, Q-pin, non-generator untouched); sweep-handler integration (unknown metric/predicate clean error, metric recorded, **default payload unchanged**, dispatched-Pg recorded). Full suite: **868 passed, 3 skipped**. -### Decisions flagged for Slaven (non-blocking) +### Decisions flagged for further discussion (non-blocking) 1. Added-generator cost curve: case-median (default) vs an explicit typical mid-merit curve — drives the prompt-13 ranking entirely. 2. Prompt-15 switched-in load size (`switched_load_mw`) — the voltage step scales with it. @@ -173,7 +173,7 @@ For each candidate bus, a bisection on injection magnitude finds the largest inj System PF + PF-spec; candidate mutation on real ACTIVSg200 (PF ray, generator fixed injection, base untouched); binding identification (thermal/voltage with element, type-only fallback); bisection algorithm via synthetic oracle (boundary within tol, probe bound, cap-not-reached, first-probe-infeasible, convergence-as-infeasible); token-bounded boundary view (full vs summary, top-N bound, descending rank, 2000-bus size bound, grouped undetermined, threshold 0); `map_callables` (index order, exception capture, progress count); `_handle_boundary_sweep` orchestration (journals `max_feasible_mw`, one-LLM-turn invariant, base-infeasible abort, invalid-entity reject). Full suite: 836 passed, 3 skipped. -### Decisions flagged for Slaven (non-blocking) +### Decisions flagged for further discussion (non-blocking) 1. Generator reactive handling: `Qg` free within `±0.4·ΔP` (current default) vs fixed at 0 — affects voltage-limited hosting numbers. 2. PF source for the load prompt: system-average (default) vs each bus's own PF vs a stated PF. diff --git a/agentigrid/launcher/ARCHITECTURE.md b/agentigrid/launcher/ARCHITECTURE.md index f8fa76d3..6d4456c7 100644 --- a/agentigrid/launcher/ARCHITECTURE.md +++ b/agentigrid/launcher/ARCHITECTURE.md @@ -2,7 +2,7 @@ **Version:** 1.0 **Date:** 2026-03-27 -**Authors:** Samim / Claude (collaborative design) +**Authors:** Samim Konjicija / Claude (collaborative design) --- diff --git a/agentigrid/setup.py b/agentigrid/setup.py index 3e935fa4..2e74dccc 100644 --- a/agentigrid/setup.py +++ b/agentigrid/setup.py @@ -13,7 +13,7 @@ description="LLM-driven iterative simulation and analysis tool for ExaGO", long_description=long_description, long_description_content_type="text/markdown", - author="Slaven Peles", + author="Samim Konjicija", python_requires=">=3.10", packages=find_packages(exclude=["tests"]), install_requires=[ diff --git a/docs/AgentiGrid_modification_plan.md b/docs/AgentiGrid_modification_plan.md index cfb61f5e..b5e19b18 100644 --- a/docs/AgentiGrid_modification_plan.md +++ b/docs/AgentiGrid_modification_plan.md @@ -163,7 +163,7 @@ Slice 1 (✅ done): add-entity primitives + binary-feasibility sweep + sweep rep --- -## Open decisions for you / Slaven +## Open decisions 1. Confirm slice ordering — in particular whether B.1 (token view) jumps ahead of C1, given it gates the scaling half of the paper. 2. Prompt 18 (min hot reserve under N-1) is the heaviest single item (SCOPFLOW + custom minimization) — is it in-scope for this paper, or deferred? diff --git a/docs/manual/ExaGO_Manual.pdf b/docs/manual/ExaGO_Manual.pdf index fe249df0..80365093 100644 Binary files a/docs/manual/ExaGO_Manual.pdf and b/docs/manual/ExaGO_Manual.pdf differ diff --git a/docs/manual/main.tex b/docs/manual/main.tex index 3e61a9ac..5e34ff3d 100644 --- a/docs/manual/main.tex +++ b/docs/manual/main.tex @@ -89,7 +89,7 @@ %\renewcommand{\Re}{\R} %\newcommand{\Comment}[1]{} -\newcommand{\exagoversion}{2.0.0} +\newcommand{\exagoversion}{2.1.0} % Sets and accessors \newcommand{\Jgen}{J^\mathrm{gen}} diff --git a/ipopt_ref.opt b/ipopt_ref.opt deleted file mode 100644 index 035cdf18..00000000 --- a/ipopt_ref.opt +++ /dev/null @@ -1,36 +0,0 @@ -print_level 5 - -max_iter 5000 -#max_cpu_time 1200 -tol 1e-6 - -mu_strategy monotone -#mu_strategy adaptive - -#linear_solver ma57 -#ma57_pivtol 1e-4 -#ma57_automatic_scaling yes - -fixed_variable_treatment relax_bounds -#hessian_approximation_space all-variables -#hessian_approximation limited-memory -#limited_memory_max_history 12 -#limited_memory_max_skipping 1 - -nlp_scaling_method none -#nlp_scaling_max_gradient 1000000 -#nlp_scaling_min_value 1e-16 - -#recalc_y yes -#recalc_y_feas_tol 1e-6 - -inf_pr_output internal -constr_mult_init_max 0 -residual_ratio_max 1e3 -residual_ratio_singular 1e4 - -#obj_scaling_factor 0.9 - -#derivative_test second-order -#derivative_test_perturbation 1e-8 -derivative_test_tol 1e-2