0-1 integer programming function for funding indivisible health programmes within a fixed budget
p(c_i, q_i, B) = (x_i, H_star)
Takes the QALY gain q_i and the budget cost c_i of each of n candidate programmes or medicines, each funded in full or not at all, and a fixed budget B, and returns the package of funding decisions x_i, each 0 or 1, that gives the most QALYs with the cost of the package at most B, together with the QALYs H_star it buys. The league-table rule for whole programmes, HE-FM-CELT-003, funds in ascending order of ICER and passes over a programme that no longer fits, so it returns a package that fits the budget but not always the best one, and the divisible fill of HE-FM-CELT-001, filled for a whole table by HE-CF-CELT-001, part-funds the marginal programme and so gives health that whole programmes may not be able to deliver. Neither record searches the packages, and HE-FM-CELT-003 leaves the best choice of whole programmes to this article. HE-FM-IPH-001 gives H_star for four programmes by checking every package, with its gap to the health of a funding rule and its distance below the divisible fill, and HE-CF-IPH-001 enumerates the packages for any number of programmes and adds programmes that a rule requires to be funded. The critical ratio of a league table is HE-FM-CELT-002 and the budget implied by a threshold is HE-FM-CELT-004; shadow prices and Lagrangian conditions belong to the Constrained Optimisation article. The article's set-up cost form, a fixed cost switched on by a binary set-up variable plus a cost per person covered, is a model-building device for mixed-integer programmes and is not drafted here. Notation follows the Integer Programming article.
Integer optimum of the 0-1 funding problem for four indivisible programmes with its gaps to a funding rule and to the divisible fill
H_star = max(max(max(max(max(max(max(max(max(max(max(max(max(max((c_1 <= B) * q_1, (c_2 <= B) * q_2), (c_3 <= B) * q_3), (c_4 <= B) * q_4), (c_1 + c_2 <= B) * (q_1 + q_2)), (c_1 + c_3 <= B) * (q_1 + q_3)), (c_1 + c_4 <= B) * (q_1 + q_4)), (c_2 + c_3 <= B) * (q_2 + q_3)), (c_2 + c_4 <= B) * (q_2 + q_4)), (c_3 + c_4 <= B) * (q_3 + q_4)), (c_1 + c_2 + c_3 <= B) * (q_1 + q_2 + q_3)), (c_1 + c_2 + c_4 <= B) * (q_1 + q_2 + q_4)), (c_1 + c_3 + c_4 <= B) * (q_1 + q_3 + q_4)), (c_2 + c_3 + c_4 <= B) * (q_2 + q_3 + q_4)), (c_1 + c_2 + c_3 + c_4 <= B) * (q_1 + q_2 + q_3 + q_4)); G_rule = H_star - H_rule; L_ind = H_div - H_star
