Università di Pisa · Dipartimento di Informatica

Donato Meoli

I work on how a problem is written down. Restate a model in another formalism, or split it along structure it already has, and it stops being the thing no method could touch. That translation, symbolic and numerical alike, is my subject.

polymath · neuroqueer · 2e ADHDer

Donato Meoli

Research

I came to optimization from symbolic AI, and I work between the two. What holds them together is a single idea: the difficulty of a problem lies in how it is written, so the useful move is to rewrite it — as a set of smaller problems, or in a different formalism altogether.

Symbolic AI. Knowledge representation and reasoning, which is where I started: rule-based expert systems for domains whose knowledge is codified and whose reasoning has to stay inspectable, from the diagnostic criteria of the DSM-5-TR encoded in Prolog to fuzzy rules in CLIPS, and lexical semantics over WordNet. Above all, translation between formalisms: a planning problem can be stated as a constraint satisfaction problem and, from there, as a propositional formula, at which point a CDCL solver applies to it. I implemented that chain of translators, and the CDCL solver itself, in aima-python.

Numerical optimization. The same move with a different alphabet. Lagrangian relaxation and Benders decomposition, the bundle methods that solve the nondifferentiable duals they give rise to, and the parallel solution of the subproblems, which a decomposition produces by the hundred and which are independent by construction. This is the premise of SMS++, where a model is declared as a tree of Blocks: the same instance can then be solved monolithically, dualized along its coupling constraints, or split by scenario, and which of the three happens is a matter of configuration rather than of rewriting the model. Reformulation returns here as recognising, inside a subproblem, a structure that already has an efficient algorithm: the subproblems of a capacitated facility location are binary knapsacks, a single-unit commitment is a shortest path on a run-length graph, a dispatch is a min-cost flow.

Connecting the two. The reason I keep a foot on each side. Heuristics learned from data, placed exactly where an exact method makes a choice — the branching of a SAT solver in NeuroSAT, the step size of a bundle method — so that the learned part chooses and the exact part still guarantees. And symmetrically, learning problems written as structured optimization models: a support vector machine is a Block like any other, and the same decomposition machinery applies to it.

Publications

P1

Dynamic programming for the single-unit commitment problem with spinning reserves and reactive power

A. Frangioni, C. Gentile, D. Meoli

Submitted, 2026

Spinning reserves and reactive power are shown to be absorbable into the polynomial dynamic programming algorithms for 1UC at essentially no algorithmic cost, by a per-period partial minimisation that folds them into an effective convex piecewise-quadratic production cost. The two resulting SMS++ solvers beat a state-of-the-art MILP solver by roughly two orders of magnitude.

C1

Enhancing energy system modelling with advanced mathematical decomposition techniques: feasibility of coupling SMS++ and PyPSA

D. Fioriti, A. Pampado, C. Scarpelli, G. Pasini, G. Lutzemberger, S. Barsali, D. Poli, D. Meoli, L. Mencarelli, A. Frangioni

2025 IEEE International Conference on Environment and Electrical Engineering / Industrial and Commercial Power Systems Europe (EEEIC / I&CPS Europe), pp. 1–6, 2025

doi:10.1109/EEEIC/ICPSEurope64998.2025.11169291 · preprint

Software

Most of the above exists as code, and most of that code is in SMS++, of which I am one of the two main maintainers with Antonio Frangioni; the work runs across the whole tree, core, solvers and modules, rather than sitting in one corner of it. Some of it is mine end to end:

written end to end
  SVMBlock                   support vector machines, primal and dual, as a Block
  TwoStageStochasticBlock    here-and-now design over wait-and-see recourse
  MultiStageStochasticBlock  scenario trees built out of two-stage stages
  BendersDecompositionSolver generic Benders over any partition of a Block
  BranchAndXSolver           relaxation-agnostic branch-and-X

major contributions
  UCBlock                    unit commitment, large parts of it, including the two
                             exact DP solvers for the single-unit problem with
                             reserves and reactive power
  ScenarioReductionSolver    scenario reduction as a Solver
  BundleSolver               master problems, cuts, vertical linearizations
  MILPSolver                 CPLEX, Gurobi, SCIP, HiGHS, PIPS-IPM++
  core                       Block, Solver, Function, Configuration, netCDF
                             serialization, and the module template every new
                             component is generated from

And the way in and out of it: the Python bindings (pySMSpp) and the converter that brings models written elsewhere into the framework (pypsa2smspp).

Open source, elsewhere

  • aima-python ★8.8k

    Reference code for Russell & Norvig’s Artificial Intelligence: A Modern Approach. Fourth-most-active contributor: the CDCL SAT solver and its heuristics, AC3b/AC4/GAC constraint propagation, the planning-as-search translators (CSPlan, SATPlan, ForwardPlan, BackwardPlan), SVMs and the linear learners, the missing fourth-edition algorithms (game theory, EM, Kalman, DBN, DDN, SARSA), a GraphPlan mutex fix, and the restructuring of the repository into a proper package.

  • optiml ★11

    Optimizers, from line search and Newton-type methods to proximal bundle and interior point, wired to scikit-learn-compatible models that are trained with them.

  • NeuroSAT ★8

    Neuro-symbolic approaches to SAT: graph networks and reinforcement learning driving the branching heuristic of a real solver.

  • WS4J ★24

    WordNet-based semantic relatedness and similarity measures, as a Java API.

  • PESAD ★8

    A Prolog expert system for anxiety, obsessive-compulsive and trauma-related disorders, following DSM-5-TR criteria.

  • upstream patches

    Bound-constraint support in qpsolvers, fixes in SciPy, HiGHS, MCFClass and FastFlow, and the Windows MKL linkage of the COIN-OR conda-forge feedstocks (CoinUtils, Osi, Clp, Cgl, Cbc).

Experience

2021–

Research fellow

Dipartimento di Informatica · DESTeC, Università di Pisa

Decomposition methods and solvers for large-scale optimization, and core development on SMS++, within the AUTENS, RESILIENT and PowerMax research projects. Applied so far to planning and scheduling under uncertainty, on models with tens of thousands of variables per scenario.

2018–2019

Data scientist

Exprivia S.p.A., Molfetta (BA)

Predictive maintenance on multivariate time series, a waste classifier for smart bins, and a real-time people-counting model shipped for Mobile World Congress 2019, all served from containers.

Education

2020–

MSc in Computer Science, Artificial Intelligence

Università di Pisa

2014–2018

BSc in Computer Science

Università degli Studi di Bari “Aldo Moro” — 110/110 cum laude