Abstract:
A solver for a constraint satisfaction problem includes a plurality of variables and a plurality of constraints. A floating point variable has a domain and is assigned a value by first determining if a predetermined value can be assigned to the floating point variable if the predetermined value is in the domain. If not, the solver determines if a bound of the domain can be assigned to the floating point variable. If the predetermined value can not be assigned to the floating point variable and the bound of the domain can not be assigned to the floating point variable, the solver assigns a value to the floating point variable using domain splitting.

Description:
FIELD OF THE INVENTION 
     One embodiment is directed generally to a computer system, and in particular to a constraint based computer system that solves constraint satisfaction problems. 
     BACKGROUND INFORMATION 
     Many of the tasks that are addressed by decision-making systems and artificial intelligence systems can be represented as constraint satisfaction problems (“CSP”s). In this representation, the task is specified in terms of a set of variables, each of which can assume values in a given domain, and a set of constraints that the variables must simultaneously satisfy. The set of variables, domains and constraints is referred to as a CSP. Each constraint may be expressed as a relation, defined over some subset of the variables, denoting valid combinations of their values. A solution to a CSP is an assignment of a value to all the variables from their respective domains that satisfies all of the constraints. 
     A constraint based system includes a constraint solver that attempts to find one or more solutions to a given CSP, or prove that no solution exists. Constraint based systems are used for many artificial intelligence related applications and a variety of other applications, including: (1) Product configurators; (2) Robotic control; (3) Temporal reasoning; (4) Natural language processing; (5) Spatial reasoning; (6) Test-case generation for software and hardware systems; (7) Machine vision; (8) Medical diagnosis; (9) Resource allocation; and (10) Frequency allocation. 
     The network of constraints in a CSP can be viewed as a graph, having a node for each variable and an edge or “arc” for each constraint. The members of each arc are the variables that appear in the constraint to which the arc corresponds. An arc is said to be consistent if for any variable of the arc, and any value in the domain of the variable, there is a valid assignment of values to the other variables on the arc that satisfies the constraint represented by the arc. 
     SUMMARY OF THE INVENTION 
     One embodiment is a solver for a constraint satisfaction problem that includes a plurality of variables and a plurality of constraints. A floating point variable has a domain and is assigned a value by first determining if a predetermined value can be assigned to the floating point variable if the predetermined value is in the domain. If not, the solver determines if a bound of the domain can be assigned to the floating point variable. If the predetermined value can not be assigned to the floating point variable and the bound of the domain can not be assigned to the floating point variable, the solver assigns a value to the floating point variable using domain splitting. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         FIG. 1  is a block diagram of a constraint based system that can implement an embodiment of the present invention. 
         FIG. 2  illustrates one known method of domain splitting, referred to as “decreaseMax”. 
         FIG. 3  is a flow diagram of the functionality of a constraint solver module when assigning a value to a variable having a floating point domain in a CSP in accordance with one embodiment. 
         FIG. 4  is a flow diagram of the functionality of the constraint solver module when assigning a value to a variable having a floating point domain in a CSP in accordance with one embodiment. 
     
    
    
     DETAILED DESCRIPTION 
     One embodiment is a constraint based system that determines a value for a floating point variable by assigning a value of 0 or by assigning a domain boundary value before performing domain splitting. Therefore, the value for the variable may be arrived at in a faster and more efficient manner. 
       FIG. 1  is a block diagram of a constraint based system  10  that can implement an embodiment of the present invention. System  10  includes a bus  12  or other communication mechanism for communicating information, and a processor  22  coupled to bus  12  for processing information. Processor  22  may be any type of general or specific purpose processor. System  10  further includes a memory  14  for storing information and instructions to be executed by processor  22 . Memory  14  can be comprised of any combination of random access memory (“RAM”), read only memory (“ROM”), static storage such as a magnetic or optical disk, or any other type of computer readable media. System  10  further includes a communication device  20 , such as a network interface card, to provide access to a network. Therefore, a user may interface with system  10  directly, or remotely through a network or any other method. 
     Computer readable media may be any available media that can be accessed by processor  22  and includes both volatile and nonvolatile media, removable and non-removable media, and communication media. Communication media may include computer readable instructions, data structures, program modules or other data in a modulated data signal such as a carrier wave or other transport mechanism and includes any information delivery media. 
     Processor  22  is further coupled via bus  12  to a display  24 , such as a Liquid Crystal Display (“LCD”), for displaying information to a user. A keyboard  26  and a cursor control device  28 , such as a computer mouse, is further coupled to bus  12  to enable a user to interface with system  10 . 
     In one embodiment, memory  14  stores software modules that provide functionality when executed by processor  22 . The modules include an operating system  15  that provides operating system functionality for system  10 . The modules further include a constraint solver module  16  that performs constraint solving with domain splitting as disclosed in more detail below. System  10  can be part of a larger system that includes a constraint solver such as a product configurator or artificial intelligence system. Therefore, system  10  will typically include one or more additional functional modules  18  to include the additional functionality. 
     In one embodiment, constraint solver  16  models problems as a network of a set of variables that each have a domain of possible values, and constraints that limit the value that the variables may take. Constraint solver  16  then solves the constraint problem. A solution to the problem is a state in which each variable has had its domain limited to a single value and no constraint has been violated. Constraint solver  16  acts to find one, or more, solutions to a given problem, or to prove that no solution exists. 
     Table 1 below provides examples of variables and domains, and Table 2 below provides examples of constraints. 
     
       
         
               
               
               
             
           
               
                 TABLE 1 
               
               
                   
               
               
                 Variable Name 
                 Type 
                 Domain 
               
               
                   
               
             
             
               
                 A 
                 Integer (enumerated) 
                 {1, 2, 4, 5, 6} 
               
               
                 B 
                 Integer (interval) 
                 [1 . . . 5] 
               
               
                 Weight 
                 Float 
                 [1.25 . . . 10.50] 
               
               
                 Choice 
                 Boolean 
                 {false, true} 
               
               
                 Color 
                 Set 
                 {Black, Red, Silver, Blue} 
               
               
                   
               
             
          
         
       
     
     
       
         
               
               
             
           
               
                   
                 TABLE 2 
               
               
                   
                   
               
             
             
               
                   
                 A = B 
               
               
                   
                 Weight = Sum (contents.weight) 
               
               
                   
                 Choice Requires (Not (Color contains Black)) 
               
               
                   
                   
               
             
          
         
       
     
     Constraint programming is a discipline that deals with the representation of a problem in a manner that allows for solutions to be formulated. A constraint problem is modeled as a set of variables that each has a domain of possible values. The relations and limitations between the variables are expressed as constraints. The constraints act to limit the value that a variable may take. 
     A search for a solution in a CSP involves value assignments to variables based on some heuristic ordering of its domain values. The efficiency of the search is therefore limited by the effectiveness of the domain value ordering. For floating point variables, a known method for domain value ordering is “domain splitting”. Domain splitting, in general, involves dichotomic enumeration interleaved with filtering. The filtering is applied on the numeric CSP, the domain of a variable is split in two, and the two resulting numeric CSPs are explored separately by chronological backtracking. However, for floating point variables that include extremely large domains, domain splitting results in a large number of splits before the variable is assigned a single value. 
       FIG. 2  illustrates one known method of domain splitting, referred to as “decreaseMax”. DecreaseMax performs a dichotomic split towards the minimum value of the domain. As shown in the example of  FIG. 2  at  52 , a variable “A” initially has a floating point domain of [0 . . . 10.00]. The domain is split to [0 . . . 5.00] at  53  and [5.00 . . . 10.00] at  54 . The split is an attempt to reduce the domain to a target range and then determine if it is consistent with the rest of the problem. If the target range is inconsistent, another range will be attempted. Otherwise, another split will be attempted over the current range. Therefore, if the decreased domain at  53  is consistent, it will be decreased again to [0 . . . 2.50] at  55 , and so on, until the domain converges to 0 at  56 . Another known method, referred to as “increaseMin” performs similar to decreaseMax except the dichotomic split is towards the maximum/increased value of the domain. 
     For float variables that are loosely constrained in the CSP, known domain splitting often ultimately causes a convergence to a boundary value. However, for float variables with large domains, converging to a fix point can be slow due to the number of splits required. 
     One embodiment optimizes the convergence at a domain boundary during domain splitting by attempting to assign the boundary value before performing the dichotomic splitting. Embodiments further optimize the convergence by assigning a specific predetermined value which through knowledge of the problem domain is known to be a desirable and likely successful assignment. For instance, in a configuration CSP problem, the weight or volume of a component can be represented as a float variable. For such a variable, the value 0.0 may mean that no quantity of the component appears in the configuration, which in a particular configuration problem may be known to be both desirable and usually feasible. 
       FIG. 3  is a flow diagram of the functionality of constraint solver module  16  when assigning a value to a variable having a floating point domain in a CSP in accordance with one embodiment. In one embodiment, the functionality of the flow diagram of  FIG. 3 , and  FIG. 4  below, is implemented by software stored in memory or other computer readable or tangible medium, and executed by a processor. In other embodiments, the functionality may be performed by hardware (e.g., through the use of an application specific integrated circuit (“ASIC”), a programmable gate array (“PGA”), a field programmable gate array (“FPGA”), etc.), or any combination of hardware and software. 
     At  302 , it is determined if 0 (or another predetermined value) is within the current floating point domain of the variable. One example where a predetermined value other than 0 is used at  302  is a chemistry problem where the variable is a pH value. In that problem, a neutral pH value of 7.0 may be the best predetermined value when solving the problem. In general, the predetermined value is a value that is known to be preferred by users. 
     If yes at  302 , at  304  it is determined if 0 can be assigned to the variable. If yes at  304 , the functionality ends. A determination if a value can be assigned to a variable for  304 , and for other functional blocks disclosed below, includes assigning the value to the variable and determining if it is consistent with the constraints that involve the variable. If it is consistent, the variable can be assigned the value. 
     If no at  302 , at  306  it is determined if the minimum bound of the domain can be assigned to the variable. If yes at  306 , the functionality ends. 
     If no at  304  or  306 , a decreaseMax domain splitting, as disclosed in  FIG. 2 , is performed at  308  in order to find the next value in the domain to assign. However, because it has already been determined that 0 or the minimum bound are the most likely values for the variable, based on prior knowledge of user&#39;s preferred values, in many instances the functionality of  308  can be avoided. 
       FIG. 4  is a flow diagram of the functionality of constraint solver module  16  when assigning a value to a variable having a floating point domain in a CSP in accordance with one embodiment. 
     At  402 , it is determined if 0 (or another predetermined value) is within the current floating point domain of the variable. 
     If yes at  402 , at  404  it is determined if 0 can be assigned to the variable. If yes at  404 , the functionality ends. 
     If no at  402 , at  406  it is determined if the maximum bound of the domain can be assigned to the variable. If yes at  406 , the functionality ends. 
     If no at  404  or  406 , an increaseMin domain splitting is performed at  408  in order to find the next value in the domain to assign. However, because it has been determined that 0 or the maximum bound are the most likely values for the variable, based on prior knowledge of user&#39;s preferred values, in many instances the functionality of  408  can be avoided. 
     As disclosed, for CSP models that meet the criteria for applying such heuristic, solver  16  reaches a solution with a considerable reduction in the occurrences of domain splitting. This can result in faster performance in finding solutions. Embodiments provide optimized assignment of floating point variables in CSP models for which the numeric value 0.0, or some other preferred value, has an implicit meaning, or in models for which the float variables are loosely constrained. 
     Several embodiments are specifically illustrated and/or described herein. However, it will be appreciated that modifications and variations of the disclosed embodiments are covered by the above teachings and within the purview of the appended claims without departing from the spirit and intended scope of the invention.