If you look up “computational economics” on wikipedia, you’ll find out all about software models that economists use to study game theory, recessions, scarcity, and so forth.
Tweak your search terms a bit, and google takes you to discussions about the economics of the computer industry–how Moore’s Law plays out in changing prices for compute power, why cloud computing and cheap GPUs are changing how much we expect to pay, how the mobile revolution is killing traditional PCs, what the job market looks like for us software geeks.
That’s all well and good.
But there is a third half of the computer+economics interaction that I don’t hear anybody talking about.
Why don’t we use economic principles to model scarcity and tradeoffs within our applications and ecosystems?
I suspect that most of us have written an application that is a bit too cavalier with its use of resources. We want to allocate 9 GB of RAM to store a monster bitmap, so we call malloc. It might fail, but if it doesn’t, we have no sense at all of how much burden we’ve placed on a scarce resource. We don’t “pay” for the allocation in any way. There’s no pain.
This same scenario plays out in how applications bottleneck a network pipe, how disks fill up, how threads contend, how jobs are scheduled and pre-empted in a supercomputer, how data is moved back and forth in HSM, and how heads move across a spinning platter to satisfy I/O requests…
The general approach in industry is to introduce some kind of prioritization algorithm that arbitrates between competing consumers. We talk about “fair share” and “starvation.”
This feels a bit like the centralized planning of communist regimes. History tells us that despite the theoretical attractiveness of such models, in practice they are much less efficient than Adam Smith’s invisible hand.
So why not apply the free market in software?
- Give independent entities in software (applications, threads, users, etc) a certain amount of capital with which to purchase resources.
- Also give them a goal to maximize “profit”. Profit would be defined differently for each entity, but would probably involve getting their work done while maximizing speed or other metrics.
- Allow resource providers to “sell” their wares as they see fit, and give them the goal of maximizing “profit” as well.
I don’t think a system like this would be worth building in all cases, and it might have some unpleasant side effects like starvation of a humble process that can’t adequately compete for resources. It would require measurement and tuning. It might require some variant of genetic algorithms so initial profit formulas would evolve. But I can imagine this approach having nice benefits for a certain class of thorny problems. I wonder if I could build this concept into a better programming language…
What complications do you foresee in such an approach? And how would you enhance it?
- IBM Developing Computer System That Thinks Like a Human (mashable.com)
- The Economics of Sustainability – A Comparison of Economic Models (theoverthinker.org)