Initializing help system before first use

Generic binary and n-ary constraints


Type: Programming
Rating: 3 (intermediate)
Description: Implementation of a user-defined constraints:
  • ac2001.mos: Generic binary constraint
  • gac2001.mos: Generic n-ary constraints
File(s): ac2001.mos, gac2001.mos


ac2001.mos
(!****************************************************************
   CP example problems
   ===================
   
   file ac2001.mos
   ```````````````
   Generic binary constraints.

   (c) 2008 Artelys S.A. and Fair Isaac Corporation
       Creation: 2005
*****************************************************************!)
model "generic_binary_constraint example"
 uses "kalis"

 forward function truth_value(v1:integer, v2:integer): boolean

 declarations 
  V1 : cpvar 
  V2 : cpvar          
  c  : integer
 end-declarations

 c := 4
 0 <= V1 ; V1 <= 10
 0 <= V2 ; V2 <= 5

! Define and post the user constraint
 generic_binary_constraint(V1, V2, "truth_value")

! Search for all solutions and print them out
 while (cp_find_next_sol)
  writeln("A solution has been found with V1 = ",
          getsol(V1), " and V2 = ", getsol(V2) )

! Implementation of the user constraint
 function truth_value(v1:integer, v2:integer): boolean 
  returned := (v1 = v2 mod c)
 end-function

end-model


gac2001.mos
(!****************************************************************
   CP example problems
   ===================
   
   file gac2001.mos
   ````````````````
   Generic n-ary constraints.

   (c) 2009 Artelys S.A. and Fair Isaac Corporation
       Creation: Nov. 2009, rev. July 2010
*****************************************************************!)
model "generic_n_ary_constraint example"
 uses "kalis"
 
 parameters
  N = 6
 end-parameters

 forward function greater_than_previous(tuple: cptuple, flag:integer): boolean
  
 declarations
  R = 1..N 
  vars : array(R) of cpvar 
 end-declarations
 
 forall(i in R) setdomain(vars(i),0,N)

! Define and post the user constraint
 generic_nary_constraint(vars, "greater_than_previous", 1)

 cp_show_prob

! Search for all solutions and print them out
 while (cp_find_next_sol)
  cp_show_sol

!**** Implementation of the user constraint: the value of each
!**** tuple element must be strictly larger than its predecessor
 function greater_than_previous(tuple: cptuple, flag:integer): boolean 
  returned := true
  first := true
  lastv := 0
  forall (indexv in 1..getsize(tuple)) do
   v := getelt(tuple,indexv)
   if (first) then
    lastv := v
    first := false
   else
    if (v < lastv + 1 ) then         
     returned:= false
     break
    end-if
    lastv := v
   end-if
  end-do   
 end-function

end-model


© 2001-2019 Fair Isaac Corporation. All rights reserved. This documentation is the property of Fair Isaac Corporation (“FICO”). Receipt or possession of this documentation does not convey rights to disclose, reproduce, make derivative works, use, or allow others to use it except solely for internal evaluation purposes to determine whether to purchase a license to the software described in this documentation, or as otherwise set forth in a written software license agreement between you and FICO (or a FICO affiliate). Use of this documentation and the software described in it must conform strictly to the foregoing permitted uses, and no other use is permitted.