As described here, implicit variables are useful when the same expression is needed in several places and you don't want to increase the number of explicit variables and constraints. For your code, if you wanted to replace the first implicit variable, for example, it would look like this:
*impvar AmountUsed {r in RESOURCES} =
sum {p in PRODUCTS} NumProd[p] * required[p,r];
var AmountUsed {RESOURCES};
con AmountUsedCon {r in RESOURCES}: AmountUsed[r] =
sum {p in PRODUCTS} NumProd[p] * required[p,r];
... View more