Papers
Topics
Authors
Recent
Search
2000 character limit reached

TaxSolver: Optimal Tax Reform Engine

Updated 7 July 2026
  • TaxSolver is an open-source optimization engine for tax reform that represents the tax code as a piecewise-linear mapping from tax inputs to liabilities.
  • The framework treats tax reform as a constrained optimization problem, integrating income protections, revenue neutrality, and complexity reduction constraints.
  • It leverages linear, mixed-integer, and quadratic programming techniques to generate optimal, legislatively feasible tax reform parameters validated on synthetic microdata.

TaxSolver is an open-source optimization engine for tax reform built on the framework developed in “Implementing Optimal Taxation: A Constrained Optimization Framework for Tax Reform” (Verhagen et al., 21 Jul 2025). It represents an entire statutory income tax system—brackets, benefits, deductions, credits—as a finite-dimensional, piecewise-linear mapping from tax-relevant inputs to tax liabilities and marginal tax rates; treats tax reform as a constrained optimization problem over that representation; and solves for the best feasible reform—or proves that none exists—given microdata for taxpayers and the chosen objective and constraints. Unlike standard microsimulation tools such as EUROMOD and TAXSIM, which are designed for ex-post “what-if” analysis of hand-coded reforms, TaxSolver is designed for ex-ante generation of optimal reforms under explicit constraints that reflect both optimal tax theory and real-world political and administrative limits (Verhagen et al., 21 Jul 2025).

1. Formal representation of the tax code

The starting point is the concept of a tax rule. A tax rule is a mapping from a single tax-relevant input to both an absolute tax pressure and a marginal tax pressure,

yi,r=fr(xi,ϕr(ci)),y_{i,r} = f_r(x_i,\phi_r(c_i)),

where ii indexes taxpayers, rr indexes tax rules, xix_i is the rule’s input, cic_i are taxpayer characteristics, ϕr(ci)\phi_r(c_i) are rule parameters, and yi,ry_{i,r} is the absolute tax pressure from rule rr for taxpayer ii. The framework assumes four properties: additivity, single input, piecewise linearity, and heterogeneity via characteristics. These conditions are stated to be satisfied by most real-world income-tax rules.

Three archetype rules organize the representation. Tax brackets generate progressive schedules through bracket-specific marginal rates. Benefits generalize brackets by allowing group-specific lump sums and phased-out patterns. Deductibles and credits are represented as input-reducing or tax-crediting deductions. For bracket rules, the schedule takes the form

f(xi)=b=1Bαbgb(xi),f(x_i) = \sum_{b=1}^B \alpha_b\, g_b(x_i),

where ii0 is the number of brackets, ii1 is the marginal tax rate in bracket ii2, and ii3 extracts the portion of ii4 in bracket ii5.

A tax group is defined as a set of taxpayers who, conditional on the same vector of inputs ii6, face the same tax rules and parameters. Within tax group ii7, the total tax code is

ii8

where ii9, rr0, and rr1 are group-specific cutoffs, marginal rates, and lump-sum components. Because each component rule is piecewise linear and rules are additive, the total tax function is again piecewise linear. The “brackets” of the total tax function are the union of all rule-specific cutoffs.

This representation is fully characterized by two parameter sets: the support rr2, consisting of all cutoffs that define brackets for all inputs, and the rates rr3, consisting of marginal rates on each interval together with group-specific lump sums. A reform is therefore either a change in rates with fixed support, rr4, or a joint change in support and rates, rr5. TaxSolver treats the relevant entries in rr6, and optionally in rr7, as solver variables.

2. Reform as a constrained optimization problem

TaxSolver’s core modeling primitives are solver variables, constraints, and an objective function. Given microdata with inputs rr8 and observed tax liabilities rr9 under the status quo, the current system can be recovered as a feasibility problem: xix_i0 This is a system of linear equations in xix_i1; if the design matrix has full rank, the unique solution is the status-quo schedule. The same formalization then permits systematic modification of the code.

Distributional protection is implemented through income constraints. A simple proportional upper bound on tax payments is

xix_i2

Variants include household-level constraints and asymmetric protections. One example requires households with income below €70,000 to gain at least 5% net income, while others cannot lose more than 10%. Marginal tax constraints are imposed directly on bracket rates, for example

xix_i3

with analogous lower bounds. Budget constraints can be written as bounds on aggregate revenue change,

xix_i4

or as near-revenue-neutral bands such as

xix_i5

Objectives are likewise flexible. TaxSolver can minimize revenue loss subject to distributional and marginal-rate constraints, simplify the tax system by minimizing the number of active rules or brackets through a complexity heuristic, or implement multi-objective reform. In the Dutch example, the authors use a two-stage optimization: first, minimize revenue loss subject to constraints; second, with an extra 1% of baseline revenue slack, re-optimize by minimizing complexity. The paper does not implement an explicit social welfare function such as xix_i6, but it states that such an objective could be embedded in the same framework.

3. Behavioral responses and welfare interpretation

The framework can incorporate behavioral responses by allowing taxable income to depend on tax rates. In Example 3, the authors use a common elasticity of taxable income xix_i7 with respect to changes in the marginal tax rate in the top active bracket. In general form, taxable income is updated as

xix_i8

where xix_i9 and cic_i0 are the old and new marginal rates in the taxpayer’s top bracket. The updated inputs then enter the constraints and revenue calculations.

Because this introduces products of solver variables, the optimization becomes nonlinear, specifically quadratic in the example given. The computational treatment is a step-wise iterative approach: solve the problem without behavioral responses; compute behavioral responses given the solved schedule; update income constraints and revenue; re-solve; and repeat until convergence. The paper notes that Gurobi supports such iterative schemes, and that purely linear implementations can approximate behavioral responses by taxing the difference in taxable income at the old marginal rate.

Welfare evaluation remains implicit rather than structural. The framework’s welfare content is encoded in shape constraints on marginal rates, caps on income losses, revenue constraints, and possible complexity penalties. This suggests that TaxSolver is principally an implementation device for constrained reform design rather than a welfare-weight estimation framework. A plausible implication is that the package is especially suited to settings in which policymakers already know the admissible reform set and want optimized, legislatable parameters inside that set.

4. Computational implementation

TaxSolver is implemented as a mathematical programming system. Most problems are linear programs when both the objective and the constraints are linear in cic_i1; mixed-integer linear programs when complexity penalties or rule activation require on/off decisions; and quadratic or mixed-integer quadratic programs when behavioral responses create products of solver variables. The implementation described in the paper uses Gurobi, while the open-source toolkit is designed to support other solvers as well (Verhagen et al., 21 Jul 2025).

Tractability follows from the finite-dimensional representation of the tax system: a finite number of inputs, brackets, rules, and tax groups. When objectives and constraints are linear, LPs deliver a guaranteed global optimum and MILPs provide bounds together with infeasibility certificates. The framework emphasizes two practical outputs of optimization software: optimality certificates and feasibility diagnostics. If no tax schedule satisfies all specified requirements, the solver can certify infeasibility, indicating that the political and technical demands are mutually inconsistent.

The package is described as transparent, tractable for realistic codes, and capable of producing legislatable parameters. The paper does not provide runtime benchmarks, but it states that the Dutch example demonstrates feasibility at national-scale complexity using synthetic microdata for 13,500 taxpayers, weighted to 13.5 million. The modular structure separates simulation, optimization, and evaluation as distinct conceptual steps.

5. Dutch reconstruction and reform family

The paper illustrates the framework through a detailed reconstruction of the Dutch income tax system, circa proposed 2028 reforms. The modeled rules include income tax brackets; healthcare allowance (cic_i2); rental allowance (cic_i3); multiple child-related benefits (cic_i4, cic_i5-toeslag, cic_i6 budget); labor tax credits; self-employment deductions; employee pension deductions; elderly credits and single-elderly credits; home-owner imputed income (cic_i7); and the young handicapped credit. The simulated dataset contains 13,500 taxpayers and 8,500 households, with weights scaling to 13.5 million taxpayers and 8.5 million households. It matches Dutch population aggregates on simple statistics but is not fully representative, especially at the very top of the income distribution (Verhagen et al., 21 Jul 2025).

The baseline system exhibits large spikes in marginal tax pressure, often exceeding 80% for low- and middle-income households because of overlapping benefit tapering. The reform problem encodes three goals: reduce spikes in marginal tax pressure, simplify the tax system, and protect low- and middle-income households from large income losses. These are translated into a household-level income constraint under which no household can lose more than 5% of net income, a marginal-rate cap cic_i8 taking values such as cic_i9, ϕr(ci)\phi_r(c_i)0, ϕr(ci)\phi_r(c_i)1, ϕr(ci)\phi_r(c_i)2, ϕr(ci)\phi_r(c_i)3, and ϕr(ci)\phi_r(c_i)4, and a revenue constraint keeping total revenue within ϕr(ci)\phi_r(c_i)5 of baseline.

For the reform support, the authors do not retain the status-quo brackets. Instead, they use a common support for income before tax,

ϕr(ci)\phi_r(c_i)6

plus group-specific supports

ϕr(ci)\phi_r(c_i)7

for groups such as the self-employed, the lowest earner in a couple, young handicapped individuals, retirees, and standard employees. The solver can also reuse existing complex rules by including each rule’s current absolute and marginal tax pressures as additional inputs with a continuous scaling factor between 0.8 and 1.1 and a binary activation variable.

Simplification is operationalized through a weighted rule-count heuristic. A universal rule receives weight 1 per rate; a group-specific rule has doubled weight if it applies only to a specific group or requires multiple conditions; and complex multi-condition rules such as child benefits, healthcare allowance, and rental allowance receive weight 10.

Scenario Total rule weight Rules
Baseline system 101 17 rules (13 income-dependent)
Reform with cap at 75% 32 8 rules (4 income-dependent)
Reform with cap at 65% 39 9 rules (6 income-dependent)

The reported reform family smooths marginal-rate spikes to the chosen cap, reduces the number of rules, and preserves the 5% household income-loss guarantee while remaining near revenue-neutral. With ϕr(ci)\phi_r(c_i)8, marginal rates are smoother and stay below 65%; with ϕr(ci)\phi_r(c_i)9, the system retains more flexibility but still shows a drastic reduction in extreme spikes relative to the status quo. Figure 1 is described as showing revenue cost versus complexity for different caps, with the result that many combinations of lower caps and simplification are feasible within the yi,ry_{i,r}0 revenue band, while beyond yi,ry_{i,r}1, tighter caps require more complexity to satisfy the income constraints.

6. Workflow, limitations, and significance

The package workflow begins by specifying tax rules and tax groups, including inputs such as income before tax, household income, number of children by age, and home value. Users then provide microdata yi,ry_{i,r}2 containing inputs yi,ry_{i,r}3, characteristics yi,ry_{i,r}4, observed taxes yi,ry_{i,r}5, and optionally marginal tax pressures. Next, they choose solver variables, deciding which rates yi,ry_{i,r}6, lump sums yi,ry_{i,r}7, and optionally cutoffs yi,ry_{i,r}8 may change. They declare constraints, including income-loss protections, rate caps, revenue bounds, simplicity constraints, and protected rules fixed at baseline values; define single or multi-objective targets; run the optimization; and translate the resulting parameters into statutory rules. The package returns optimal parameters yi,ry_{i,r}9 together with derived outcomes such as taxes, marginal rates, and rule usage.

The framework has several explicit limitations. It requires representative microdata covering all tax-relevant inputs, characteristics, and current absolute and marginal tax pressures. In the Dutch case, the data are synthetic and illustrative rather than precise, with incomplete representation of the top income tail and imperfect correlations across characteristics. Behavioral responses are modeled in reduced-form fashion through a common elasticity rr0 applied to the top active bracket only. The framework is partial-equilibrium: it does not simulate general equilibrium effects such as wages, prices, or employment, and political constraints are encoded as hard constraints rather than derived from a political economy model. Adding integer variables or nonlinearities increases computational complexity, and difficult non-convex problems may require approximate solutions or step-wise reform design.

The paper identifies several extensions: dynamic bracketing, in which bracket placement itself becomes endogenous; richer multi-objective optimization using Pareto-frontier methods or explicit weighted sums; better complexity measures based on administrative burden; integration with structural optimal tax models; and broader country coverage, including low- and middle-income countries. In significance terms, TaxSolver is presented as bridging the implementation gap between optimal taxation theory and actual tax codes. Optimal tax theory offers analytic prescriptions for marginal tax schedules, while statutory codes combine brackets, benefits, credits, and deductions under political and administrative constraints. TaxSolver makes those constraints explicit, jointly redesigns the full code within a specified piecewise-linear class, and either produces a feasible, legislatable reform or proves that the requested package is infeasible (Verhagen et al., 21 Jul 2025).

Definition Search Book Streamline Icon: https://streamlinehq.com
References (1)

Topic to Video (Beta)

No one has generated a video about this topic yet.

Whiteboard

No one has generated a whiteboard explanation for this topic yet.

Follow Topic

Get notified by email when new papers are published related to TaxSolver.