Cómo podemos generar un vector aleatorio $E =[e_1, e_2,e_3.\dots, e_N] \in R^N$ tal que $\sum_i^N e_i = T \;$ y $ 0 \le e_ i \le d_i$ $\forall i \in 1,2,3,\dots,N$ donde $d_i$ especifica el límite superior de cada elemento del vector. En caso afirmativo, ¿hay alguna orientación para la relajación?
Respuesta
¿Demasiados anuncios?Una condición necesaria obvia es tener $\sum_{i=1}^N d_i \ge T$ .
Si no te importa elegir uniformemente, lo más sencillo es generar $N$ números aleatorios $0 \le r_i \le d_i$ y calcular $R = \sum_{i=1}^N r_i$ .
En el caso $R<T$ Aumentar la $e_i$ uno a uno hasta su máximo hasta que el $\sum_{i=1}^N e_i = T$ según sea necesario. El procedimiento está garantizado si $\sum_{i=1}^N d_i \ge T$ .
En caso contrario (si $R > T$ ), a continuación, establezca $e_i = T r_i/R$ . Entonces, por construcción, $$ \sum_{i=1}^n e_i = \sum_{i=1}^n \frac{T r_i}{R} = \frac{T}{R} \sum_{i=1}^n r_i = T. $$