user3469181
user3469181

Reputation: 23

How can I normalize a vector to sum to a certain value?

I have been trying to search for a solution but have not found anything helpful. I want to understand :

How to normalize a vector such that it sums to a certain value?

I am trying to reproduce the results of the paper: Designing human agents that act like human agents: A Behavioural approach to bounded rationality by W.Brian Arthur (1991).

On page 354 of this paper four points are mentioned, my doubt is limited to the 4th point. I can not understand how to calculate the 4th point.

For the sake of convenience I will write the entire 4th point preceded by the previous 3 points.

PROBLEM DESCRIPTION:

Set of N actions exist, from 1 to N. A vector of strength S_t is associated with every action at every time 't'. The current sum of these strength is C_t (the component sum of S_t) and the initial vector S_0 is strictly positive. The probability p_t represents the agent's probablities of taking actions 1 through N at time t.

At each time t, the agent: 1. Calculates the probablity vector as the relative strengths associated with each action. It sets, p_t = (S_t/C_t)

  1. Chooses one action from the set according to the probablities p_t and trigger that action.

  2. Observes the payoff received and updates strengths by adding the chosen action j's payoffs to action j's strength. That is, where action j is chosen, it sets the strength to S_t + beta. Where, beta = payoff(j)*e_j (e_j is the jth unit vector)

  3. Renormalizes the strengths to sum to a value from a prechosen time sequence. In this case, it renormalizes strength to sum to C_t = C*t. (Where t could also be raised to a value v)

QUESTION: I dont understand how to renormalize the strength to a sum ?

Furthermore, I have read this discussion:

Upvotes: 0

Views: 874

Answers (1)

Sami Kuhmonen
Sami Kuhmonen

Reputation: 31153

So you really only need to make sure the component sum of the vector is X. It is simple.

If we have a vector V = [a, b, c, d], it's component sum S is of course S = a+b+c+d. If this has to add up to value X, then we can simply multiply both sides with X to get S*X = (a+b+c+d)*X, move S to the other side to get X = (a+b+c+d)*X/S.

So now we know how to get X: every part of the vector has to be multiplied with X and divided by the current sum of the components:

a' = a*X/S
b' = a*X/S
c' = a*X/S
d' = a*X/S

Then we get the new vector V' = [a', b', c', d'] and its component sum will be X and the relative weights will be unchanged.

Upvotes: 1

Related Questions