Wednesday, 14 October 2009

Experiment description

Hypothesis: Using profitability as a fitness function will allow a majority of the population to reach their intended level of QA without any centralized control

Starting condition:
  1. A population of applications that have differing levels of QAs, they'd like to achieve.
  2. Each application has multiple sub-components that do not know the higher/parent component's QA level (to model global/higher level info, that is not percolated down to lower levels)
  3. Markets exist for the sale of following types of components: A, B, C, D, E, F, G, H
  4. Each application has/needs a subset of the components available
The basic flow is as follows:

  • Application gets a relative weight amongst QA attributes
For each iteration:
  • Application gets a budget to spend
  • Application distributes budget amongst each of its components' trading agent
  • From the buyers perspective:
  1. Each agent creates a bid consisting of: limit price, QA attribute-levels. Each QA attribute is modelled as a value on a likert scale (0 - 10)
  2. The Expected Value of the agent is the summation of the QA attribute-values in the bid
  3. The Actual Value of the agent is the summation of the QA attribute-values after the trade
  4. If no trade happens (due to a very low limit price or too high QA value), actual value is zero (hence, incentive to trade)
  • From the seller's perspective:
  1. Each agent trades in one market (Agents that trade in multiple markets are not considered yet)
  2. Each agent creates an 'Ask' consisting of: asking price, QA attribute-levels. Modelling of values is same as above.
  3. Each agent has a privately known cost function. It's asking price will never be lower than the the cost function.
  • From the market's perspective:
  1. A set of buyers and sellers submit 'bids' and 'asks'.
  2. All those that can be matched are considered 'trades'
  3. The price at which trade is made is called 'trade_price'. For closest matching QA, trade_price = (limit_price + ask_price / 2)
  4. Market clears after making all possible 'trades'
  • Calculation of profits is as follows:
  1. Real_Value + (normalized) savings
  2. Real_Value = Actual_Value - Expected_Value
  3. savings = budget - trade_price
  4. Savings and Value can be negative, hence profits can be negative.
  • How profits constitute feedback:
  1. Sub-components with an Actual Value closer to the parent's Expected Value are given a proportionally higher share of the next budget
  2. Sub-components with positive savings are given a proportionally higher share of next budget
  3. Once sub-components get their budget for the next iteration, they can deduce whether their Actual_Value was closer to desired outcome or Savings or both.
  4. They adjust their next bid appropriately
Rinse, repeat for 'x' iterations.

No comments:

Post a Comment