Page 89 - 4495
P. 89

відповідні глобальні обмеження є однією з основних ідей логічного
            програмування з обмеженнями з точки зору обчислювальної ефекти-
            вності.
                  Опис  концепції  глобальних  обмежень  можна  розглядати  на  різ-

            них рівнях складності технології їх поширення.
                  Обмеження виду element (N, List, Value) означає, що N -
            ий елемент списку List повинен мати значення Value. Елементи спис-

            ку List, Value, і N є або змінними деякого доменну або цілими числа-
            ми.
                  Обмеження                виду            count              (Value,               List,

            RelationalOperator, Count) є істинним, якщо N є число елемен-
            тів списку List, що дорівнюють значенню Value (тільки цілих) і твер-
            дження  N  RelationalOperator  Count  набуває  одного  із  значень

            RelationalOperator - >  #             #\       #       #       #     |   #      .
                  Це  означення  узагальнює  множину  простих  обмежень:  ex-

            actly/atmost/atleast(Value, List, Count), які вказують кі-
            лькість  Count  exactly/atmost/atleast  змінних  з  списку  List,  що  мають
            значення  Value  відповідно.  Порівнюючи  з  обмеженням  count  смисл

            параметрів Value, List та Count залишається тим самим і значення Re-
            lationalOperator  описує  їх  семантику.  Комбінаторні  обмеження
            exactly, atmost та atleast відповідають # ,#              , та #  відповідно.

                  Множина among-обмежень представлена в проекті CHIP [link] в
            основному для розв’язання проблеми впорядкування, а саме:

                                                                                V1,...,Vm .
                                                   X1,...,Xs ,
                              among      Low, Up ,              C1,...,Cs ,               
                  Обмеження  має  цілі  параметри  Low  та  Up,  список  доменних
            змінних [X1,...,Xs] і список цілих чисел [C1,...,Cs]  та [V1,...,Vm] з зрос-
            таючими  значеннями  в  [V1,...,Vm].  Обмеження  among  істинне,  коли

            задовольняють такі умови: найменший Low та найкращий UP знахо-
            дяться в межах  X1 C1,...,Xs Cs              і набувають своїх значень зі списку
            значень [V1,...,Vm].

                  Обмеження  among  –  це  інше  розширення  раніше  згадуваних
            atmost, atleast та еxactly обмежень.
                  atmost(Value,List,Count)                                                                 =

            among([0,Count],List,Zeros,[Value])
                  atleast(Value,List,Count)                                                                =
            among([Count,0],List,Zeros,[Value])

                  exactly(Value,List,Count)                                                                =
            among([Count,Count],List,Zeros, [Value])




                                                           89
   84   85   86   87   88   89   90   91   92   93   94