Используйте CLINGO для упаковки заданного набора квадратов в заданную прямоугольную область без перекрытий. Например, мы хотим упаковать квадраты:Упаковка квадратов в прямоугольник с использованием ограничений (CLINGO)
А размера 4, В от размера 3, С & D размера 2, Е размера 1
в зону 5 х 8.
#const x = 8.
#const y = 5.
square(a,4; b,3; c,2; d,2; e,1).
%generate a grid:
1 { pos(X,Y) } 1 :- x(X), y(Y).
%generate placement of the squares
1 { placement(P, SQ) } 1 :- square(SQ), pos(P).
%throw out overlaps
Я не уверен, что ограничение на выброс перекрывающихся квадратов было бы, или если я сделаю это правильно.