<aside> 💡 These weights should not be confused with Field iWeights (which have a different function).
</aside>
Since version 1.2, Assembler makes use of weights to give more nuance to its decisional process in cases of multiple sender candidates with same computed values.
Handles, AssemblyObjects and Rules all have weights, which by default are set to 1. Rule weights are integer, while Handles and AO are floating point values.
Weights are used during sender candidate selection: while building an Assemblage with non-random Heuristics, weights are included in the computation only to decide the most suitable sender candidate among those with same computed value. For each candidate sender AO, a Candidate Factor $C_f$ is computed as follows:
$$ C_f = R_w + AO_w + H_w $$
Where:
If two or more sender candidates have the same computed values (i.e. Field scalar value), the one with larger $C_f$ prevails. In case of more than one winner, the first found prevails. For more detailed information, see Why do the order of an AssemblyObject in the Set and the order of rules in the Heuristic Set matter?
To understand more in depth decision and dimensionality, see The logic of choice.
When multiple sender candidates satisfy the initial criteria, weights affect the choice of AOs in an assemblage as follows:
As you might have already surmised, weights work in a relative way: if all other weights are 1, a single weight value of 1.001 will have the same effect of a value of 1000.
Suppose you have 3 rules (rule A, rule B and rule C), and you want rule A to prevail over B and C and rule B to prevail on C but not on A. In this case: weight A > weight B > weight C, and all these value combinations satisfy the condition and lead to the same result:
weight A | 3 | 102 | 3000 | 30000 |
---|---|---|---|---|
weight B | 2 | 101 | 2000 | 200 |
weight C | 1 | 100 | 1000 | 1 |
Increasing the largest weight only, while leaving all the others untouched, won’t affect the result.