Solving a linear optimization problem on incentive allocation
eng.lyft.com
eng.lyft.com
——
[0] https://en.m.wikipedia.org/wiki/Dual_linear_program
[1] http://www.seas.ucla.edu/~vandenbe/236C/lectures/conj.pdf slide 23 on down.
——
[0] http://web.stanford.edu/~boyd/cvxbook/bv_cvxbook.pdf#page229
* L7 (Intro): http://timroughgarden.org/w16/l/l7.pdf
* L8 (Duality I): http://timroughgarden.org/w16/l/l8.pdf
* L9 (Duality II: http://timroughgarden.org/w16/l/l9.pdf
I also doubt that it's optimal. An implementation using Hierarchical Risk Parity for instance would be more interesting. I assume you can model risk/uncertainty here.
By the way, Google has an OR tools framework that implements these kind of solvers for you:
This is a basic LP problem that you'll come across in a textbook.
By contrast, you effectively said, "Heh, I've seen fancier models. BTW, you can just plug your stuff into Google."
Well, yeah, for something so rudimentary. Use a library. Nothing to see here.
Yep. You'll end up with a lopsided allocation, with one or two allocations holding a very large percentage of the total allocation.
Distributing the allocation weights could help, e.g. with ensembling, regularization or some other kind of penalty.
Convex optimization is also useful if you care about optimizing convex functions. Which I bet you do.
When i compared them a year or so ago, my conclusion that OR-Tools had more focus on engineering, making the whole thing easy to integrate etc, whilst COIN-OR had more sophisticated solvers, and gave you lots and lots of knobs to tweak.
1. You're right, a counter example for greedy (with 2 appox) looks something like: c1=.5+eps, v1=1, c2=.5, v2=.5+eps, B=2.
Type A: coupon a1 has cost 1, value 2. coupon a2 has cost 2, value 3.99.
Type B: coupon b1 has cost 1, value 1.
We have 100 people of Type A and 100 people of Type B. The total budget is 200.
The optimal solution is to pick all Type A people, coupon a2, for a value of 399.
Greedy picks all Type A people, coupon a1, and then all Type B people, coupon b1, for a value of 300.