Misc

Side projects built outside of research and work.

Mixed-integer program selecting a salary-cap-optimal eight-player lineup

LineupIQ

Salary-cap-optimal daily NBA lineups for DraftKings, solved as a binary integer program that maximizes projected fantasy points under the $50,000 cap. Runs automatically every day on GitHub Actions and tracks projected versus actual performance. For entertainment only. Source on GitHub.

View project

MulVAL attack graph nodes mapped to PDDL init state, actions, and goal

MulVAL to PDDL

Converts MulVAL logical attack graphs into PDDL for automated planners: leaf facts become the initial state, interaction rules become STRIPS actions, and derived privileges become predicates and the goal. Runs entirely in the browser from MulVAL’s VERTICES.CSV and ARCS.CSV, and produces domain.pddl and problem.pddl. Used in our ACC 2023 paper on proactive sensor placement in probabilistic attack graphs. Source on GitHub.

View project

PDDL domain and problem expanded into a graph of reachable states and grounded actions

PDDL Parser

A small, dependency-free Python tool that reads a STRIPS-style PDDL domain and problem (with typing and negative preconditions), grounds every lifted action over the declared objects, and explores the reachable state space by breadth-first search from the initial state. The result is a labelled, deterministic transition system ready for classical planning, MDP solving, or attack-graph analysis. Ships as a Python library, a CLI, and an in-browser demo. Source on GitHub.

View project