1. A method of interpreting an image comprising: finding a configuration of multiple variables which optimizes an objective function with a factorizable upper bound, wherein factorizable means that the upper bound is, or can be manipulated into the form of a sum of non-interacting parts or a product of non-negative interacting parts by: applying an iterative algorithm that relies on efficient dynamic ordering of elements known as candidates, in a priority queue, in a descending order of an upper bound score, wherein the iterative algorithm includes: a. establishing a priority queue, wherein priority of a candidate increases with an UpperBound(candidate); b. establishing a current candidate value and set the current candidate value to (0,0. .. , 0); c. establishing a bestCandidate value and set the bestCandidate value to (0,0. .. , 0); d. inserting in the priority queue all elements of a successors(current), wherein a successors function is defined such that applying the successors function to an initial element value (0,0,. .. ,0), to obtain its successors, then applying the successors function again to the successors of this element, then to successors of those successors, for a plurality of repetitions, will produce all relevant tuples; e. making an inquiry as to whether the bestCandidate value represents a satisfactory solution, if step e returns “true” then return the bestCandidate value; if step e returns “false” then (i) assign the candidate at the head of the priority queue to the current candidate value, and remove the candidate at the head of the priority queue from the priority queue, (ii) insert in the priority queue all elements of successors(current), and thereafter (iii) determine if TrueScore(bestCandidate>TrueScore(current), wherein TrueScore is an actual value of the objective function, then if step e (iii) returns “true” return to start of step e; and if step e (iii) returns “not true” update the bestCandidate value to contain the value in the current candidate value, and return to the start of step e, wherein the method is performed by a system using at least one processor.