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