Recipe/Example/Rillets de Mans
Product
Nutritional values:
(40.5, 15.2, 0.4, 0.2, 16.2, 1.13) no fiber listed
Ingredients
Viande de porc (96%), gras de porc, sel, poivre
Ciqual
Viande de porc / Pork, jowl, rindless, raw (28471) (47.4, 16, 0.14, 0.14, 11.6, 0.17)
Gras de porc / Pork fat, raw (16530) (88.7, 32.2, 0, 0, 2.92, 0.028)
Sel / Salt, white (sea, igneous or rock), no enrichment (11017) (0,0,0,0,0,97.8)
Poivre / Black pepper, powder (11015) (7.5, 2.9, 39.5, 0.64, 13.3, 0.036) fiber=25.7
Results
NNLS with forced order
Deviance: 38.9 (very large) Mainly due to the proteins mismatch (residual of 5.9). As this product is mainly one ingredient, there seems to be an ingredient variability.
John fit
In this case the estimator assumes a higher level of pork fat (second ingredient) is needed to meet the nutrient targets. It would appear that the default Ciqual pork used (28205) has a lower fat content than the pork used by the producer. A similar recipe is estimated if "Pork, jowl, rindless, raw" (28471) is used. This shows the variability of some ingredients. A side-effect of this is that we could potentially help identify the variant / quality of an ingredient based on the stated percentage. Note that for this estimate the last ingredient (pepper) is higher than the previous one (salt) and the optimiser reports "Inequality constraints incompatible" which requires further investigation. Switching from LinearConstraint to a function based constraint seems to resolve this although the optimisation takes about 3 times longer (from 0.1s to 0.27s)