2015-12-26 12 views
0

Мне нужно оптимально выложить изображения с помощью Javascript на странице сайта, чтобы количество пробелов было минимизировано.Оптимизация макета изображения с помощью Javascript

Задача оптимизации заключается в основном свести к минимуму следующее:

(rightmost x-coordinate of an image - leftmost x-coordinate of an image) + 
(bottommost y-coordinate of an image - topmost y-coordinate of an image) 

Однако изображения не могут перекрываться, так что для каждого изображения ограничения являются:

for i in images 
    for j in each other image 
     (topmost coordinate of i > bottommost coordinate of j) || 
     (bottommost coordinate of i < topmost coordinate of j) || 
     (leftmost coordinate of i > rightmost coordinate of j) || 
     (rightmost coordinate of i < leftmost coordinate of j) 

Кроме того, существует ограничение что самая правая координата любого изображения не может быть больше ширины страницы, а самая левая координата любого изображения должна быть> 0.

Firs Я думал о том, чтобы сформулировать его как проблему линейного программирования, но все библиотеки линейного программирования, которые я видел для Javascript, не допускают таких сложных ограничений, поэтому я думаю, что это может быть не линейная проблема.

Тогда я начал думать об этом как о проблеме динамического программирования, но я не уверен, как его решить, не пытаясь использовать каждую комбинацию макетов, которая была бы безумно медленной.

Кто-нибудь есть идеи, как эффективно решить эту проблему?

ответ

0

Я думаю, вы столкнулись с cutting stock problem, который NP трудно. Я уверен, что на странице Википедии есть ссылки на некоторые эвристические под оптимальные решения, которые могут быть лучше подходят для вас.

0

Действительно, это невозможно, используя чистолинейное программирование. Однако ограничения без перекрытия могут быть сформулированы с использованием дополнительных двоичных переменных (это будет проблемой MIP - смешанного целочисленного программирования) или с использованием методов программирования ограничений. Here - пример этих ограничений. Эта презентация Constraint programming in the browser также интересна.